aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml13
-rw-r--r--CMakeLists.txt1
-rw-r--r--CONTRIBUTING.md11
-rw-r--r--README.md16
-rw-r--r--cmake/compiler/msvc/settings.cmake21
-rw-r--r--cmake/macros/ConfigureBoost.cmake15
-rw-r--r--contrib/check_updates.sh44
-rw-r--r--dep/CMakeLists.txt2
-rw-r--r--dep/PackageList.txt2
-rw-r--r--dep/SFMT/SFMT-hotfix1.diff14
-rw-r--r--dep/SFMT/SFMT.h3
-rw-r--r--dep/cppformat/ChangeLog.rst358
-rw-r--r--dep/cppformat/README.rst9
-rw-r--r--dep/cppformat/format.cc562
-rw-r--r--dep/cppformat/format.h1332
-rw-r--r--dep/cppformat/posix.cc5
-rw-r--r--dep/cppformat/posix.h6
-rw-r--r--dep/g3dlite/G3D-v9.0 hotfix5.diff28
-rw-r--r--dep/g3dlite/G3D-v9.0 hotfix6.diff32
-rw-r--r--dep/g3dlite/Readme.txt2
-rw-r--r--dep/g3dlite/include/G3D/Quat.h10
-rw-r--r--dep/g3dlite/include/G3D/platform.h8
-rw-r--r--doc/UnixInstall.txt59
-rw-r--r--revision_data.h.in.cmake2
-rw-r--r--sql/base/auth_database.sql8
-rw-r--r--sql/base/characters_database.sql46
-rw-r--r--sql/base/dev/world_database.sql288
-rw-r--r--sql/old/3.3.5a/auth/59_2015_11_07/2015_08_21_00_auth.sql (renamed from sql/updates/auth/2015_08_21_00_auth.sql)0
-rw-r--r--sql/old/3.3.5a/characters/59_2015_11_07/2015_08_26_00_characters_335.sql16
-rw-r--r--sql/old/3.3.5a/characters/59_2015_11_07/2015_09_28_00_characters_335.sql5
-rw-r--r--sql/old/3.3.5a/characters/59_2015_11_07/2015_10_06_00_characters.sql2
-rw-r--r--sql/old/3.3.5a/characters/59_2015_11_07/2015_10_07_00_characters.sql3
-rw-r--r--sql/old/3.3.5a/characters/59_2015_11_07/2015_10_12_00_characters.sql17
-rw-r--r--sql/old/3.3.5a/characters/59_2015_11_07/2015_10_28_00_characters.sql6
-rw-r--r--sql/old/3.3.5a/characters/59_2015_11_07/2015_10_29_00_characters_335.sql7
-rw-r--r--sql/old/3.3.5a/characters/59_2015_11_07/2015_11_03_00_characters.sql10
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_00_world.sql (renamed from sql/updates/world/2015_07_14_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_01_world_335.sql (renamed from sql/updates/world/2015_07_14_01_world_335.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_02_world.sql (renamed from sql/updates/world/2015_07_14_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_03_world.sql (renamed from sql/updates/world/2015_07_14_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_04_world.sql (renamed from sql/updates/world/2015_07_14_04_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_05_world.sql (renamed from sql/updates/world/2015_07_14_05_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_00_world.sql (renamed from sql/updates/world/2015_07_15_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_01_world.sql (renamed from sql/updates/world/2015_07_15_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_02_world.sql (renamed from sql/updates/world/2015_07_15_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_16_00_world.sql (renamed from sql/updates/world/2015_07_16_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_00_world.sql (renamed from sql/updates/world/2015_07_17_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_01_world.sql (renamed from sql/updates/world/2015_07_17_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_02_world.sql (renamed from sql/updates/world/2015_07_17_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_03_world.sql (renamed from sql/updates/world/2015_07_17_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_04_world.sql (renamed from sql/updates/world/2015_07_17_04_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_18_00_world.sql (renamed from sql/updates/world/2015_07_18_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_18_01_world.sql (renamed from sql/updates/world/2015_07_18_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_00_world_2015_07_18_04.sql (renamed from sql/updates/world/2015_07_19_00_world_2015_07_18_04.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_01_world.sql (renamed from sql/updates/world/2015_07_19_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_02_world.sql (renamed from sql/updates/world/2015_07_19_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_03_world.sql (renamed from sql/updates/world/2015_07_19_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_04_world.sql (renamed from sql/updates/world/2015_07_19_04_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_05_world.sql (renamed from sql/updates/world/2015_07_19_05_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_20_02_world_2015_07_19_35.sql (renamed from sql/updates/world/2015_07_20_02_world_2015_07_19_35.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_21_00_world.sql (renamed from sql/updates/world/2015_07_21_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_00_world.sql (renamed from sql/updates/world/2015_07_24_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_01_world.sql (renamed from sql/updates/world/2015_07_24_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_02_world.sql (renamed from sql/updates/world/2015_07_24_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_03_world.sql (renamed from sql/updates/world/2015_07_24_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_04_world.sql (renamed from sql/updates/world/2015_07_24_04_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_05_world.sql (renamed from sql/updates/world/2015_07_24_05_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_06_world.sql (renamed from sql/updates/world/2015_07_24_06_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_07_world.sql (renamed from sql/updates/world/2015_07_24_07_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_00_world.sql (renamed from sql/updates/world/2015_07_25_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_01_world.sql (renamed from sql/updates/world/2015_07_25_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_02_world.sql (renamed from sql/updates/world/2015_07_25_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_03_world.sql (renamed from sql/updates/world/2015_07_25_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_04_world.sql (renamed from sql/updates/world/2015_07_25_04_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_00_world.sql (renamed from sql/updates/world/2015_07_26_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_04_world.sql (renamed from sql/updates/world/2015_07_26_04_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_05_world.sql (renamed from sql/updates/world/2015_07_26_05_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_06_world.sql (renamed from sql/updates/world/2015_07_26_06_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_27_00_world.sql (renamed from sql/updates/world/2015_07_27_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_27_01_world.sql (renamed from sql/updates/world/2015_07_27_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_29_00_world.sql (renamed from sql/updates/world/2015_07_29_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_07_29_01_world.sql (renamed from sql/updates/world/2015_07_29_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_01_00_world.sql (renamed from sql/updates/world/2015_08_01_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_02_00_world_335.sql (renamed from sql/updates/world/2015_08_02_00_world_335.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_02_01_world_335.sql (renamed from sql/updates/world/2015_08_02_01_world_335.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_03_00_world_335.sql (renamed from sql/updates/world/2015_08_03_00_world_335.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_00_world_335.sql (renamed from sql/updates/world/2015_08_08_00_world_335.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_01_world.sql (renamed from sql/updates/world/2015_08_08_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_02_world_335.sql (renamed from sql/updates/world/2015_08_08_02_world_335.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_03_world.sql (renamed from sql/updates/world/2015_08_08_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_04_world_335.sql (renamed from sql/updates/world/2015_08_08_04_world_335.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_09_00_world_335.sql (renamed from sql/updates/world/2015_08_09_00_world_335.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_00_world.sql (renamed from sql/updates/world/2015_08_13_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_01_world.sql (renamed from sql/updates/world/2015_08_13_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_02_world.sql (renamed from sql/updates/world/2015_08_13_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_03_world.sql (renamed from sql/updates/world/2015_08_13_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_04_world.sql (renamed from sql/updates/world/2015_08_13_04_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_00_world.sql (renamed from sql/updates/world/2015_08_21_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_01_world.sql (renamed from sql/updates/world/2015_08_21_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_02_world.sql (renamed from sql/updates/world/2015_08_21_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_23_00_world.sql (renamed from sql/updates/world/2015_08_23_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_25_00_world.sql (renamed from sql/updates/world/2015_08_25_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_25_01_world.sql (renamed from sql/updates/world/2015_08_25_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_26_00_world.sql (renamed from sql/updates/world/2015_08_26_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_26_01_world.sql (renamed from sql/updates/world/2015_08_26_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_27_00_world.sql (renamed from sql/updates/world/2015_08_27_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_00_world.sql (renamed from sql/updates/world/2015_08_29_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_01_world.sql (renamed from sql/updates/world/2015_08_29_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_02_world.sql (renamed from sql/updates/world/2015_08_29_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_03_world.sql (renamed from sql/updates/world/2015_08_29_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_04_world.sql (renamed from sql/updates/world/2015_08_29_04_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_30_00_world.sql (renamed from sql/updates/world/2015_08_30_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_08_31_01_world.sql (renamed from sql/updates/world/2015_08_31_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_01_00_world_335.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_00_world.sql7
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_01_world.sql7
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_02_world_335.sql80
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_03_world_335.sql28
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_04_world.sql5
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_00_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_01_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_02_world.sql7
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_03_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_04_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_05_world_335.sql3
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_06_world.sql5
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_07_world.sql6
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_08_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_09_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_10_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_11_world.sql10
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_00_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_01_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_02_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_03_world.sql3
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_00_world.sql335
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_01_world.sql6
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_02_world_335.sql110
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_06_00_world.sql73
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_00_world.sql10
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_01_world.sql7
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_02_world.sql5
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_03_world.sql163
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_04_world.sql8
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_05_world.sql5
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_00_world.sql15
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_01_world.sql39
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_02_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_09_00_world.sql8
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_10_00_world_335.sql21
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_10_01_world_335.sql10
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_11_99_world_335.sql3
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_12_00_world.sql5
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_00_world_335.sql32
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_01_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_02_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_03_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_16_00_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_17_00_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_20_00_world.sql3
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_00_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_01_world.sql4
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_02_world.sql32
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_03_world.sql3
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_04_world.sql246
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_05_world.sql41
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_06_world.sql18
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_07_world.sql6
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_08_world.sql10
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_09_world.sql95
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_10_world.sql14
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_22_00_world.sql10
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_22_01_world.sql648
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_00_world.sql612
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_01_world.sql155
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_02_world.sql176
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_03_world.sql80
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_04_world.sql1
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_05_world.sql9
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_00_world.sql209
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_01_world.sql24
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_02_world.sql19
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_03_world.sql24
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_00_world.sql11
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_01_world.sql40
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_02_world.sql6
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_03_world.sql5
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_04_world.sql13
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_05_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_00_world.sql6
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_01_world.sql36
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_02_world.sql15
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_03_world.sql18
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_09_30_00_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_00_world.sql112
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_01_world.sql247
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_02_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_02_00_world.sql30
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_02_01_world.sql3
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_00_world.sql21
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_01_world.sql16
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_02_world.sql26
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_00_world.sql11
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_01_world.sql21
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_02_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_03_world.sql7
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_04_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_05_world.sql204
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_05_00_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_05_01_world.sql9
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_06_00_world.sql31
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_06_01_world.sql31
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_08_00_world.sql21
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_08_01_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_00_world.sql9
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_01_world.sql7
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_02_world.sql12
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_03_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_04_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_05_world.sql4
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_00_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_01_world.sql96
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_02_world.sql20
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_03_world.sql786
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_04_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_12_00_world.sql16
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_13_00_world_335.sql12
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_00_world.sql990
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_01_world.sql34
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_02_world.sql5
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_03_world.sql7
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_04_world.sql778
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_05_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_06_world.sql8
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_07_world.sql1839
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_00_world.sql24
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_01_world.sql21
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_02_world.sql119
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_00_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_01_world.sql1
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_02_world.sql15
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_00_world.sql12
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_01_world.sql5
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_02_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_03_world.sql6
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_21_00_world.sql265
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_21_01_world.sql11
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_22_00_world.sql14
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_22_01_world.sql1006
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_00_world.sql28
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_01_world.sql32
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_02_world.sql394
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_03_world.sql859
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_00_world335.sql31
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_01_world.sql25
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_02_world.sql648
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_28_00_world.sql29
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_29_00_world.sql10
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_00_world.sql16
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_01_world_335.sql3
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_02_world.sql8
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_03_world.sql3
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_00_world.sql7
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_01_world.sql8
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_02_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_03_world_2015_08_01_01.sql43
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_00_world.sql127
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_01_world.sql779
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_02_world.sql94
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_03_world.sql34
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_04_world.sql27
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_11_02_00_world.sql26
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_11_02_01_world.sql432
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_00_world.sql3
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_01_world.sql41
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_02_world.sql2
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_11_06_00_world_335.sql4
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_11_07_00_world.sql9
-rw-r--r--sql/old/3.3.5a/world/59_2015_11_07/2015_11_07_01_world.sql47
-rw-r--r--sql/updates/auth/2015_11_07_00_auth.sql1
-rw-r--r--sql/updates/characters/2015_11_07_00_characters.sql1
-rw-r--r--sql/updates/world/2015_11_07_02_world.sql3
-rw-r--r--sql/updates/world/2015_11_08_00_world.sql1550
-rw-r--r--sql/updates/world/2015_11_08_01_world.sql154
-rw-r--r--sql/updates/world/2015_11_09_00_world.sql6
-rw-r--r--sql/updates/world/2015_11_09_01_world.sql5
-rw-r--r--sql/updates/world/2015_11_09_02_world335.sql7
-rw-r--r--sql/updates/world/2015_11_10_00_world.sql24
-rw-r--r--sql/updates/world/2015_11_10_01_world.sql2
-rw-r--r--sql/updates/world/2015_11_10_02_world.sql2
-rw-r--r--sql/updates/world/2015_11_11_00_world.sql6
-rw-r--r--sql/updates/world/2015_11_11_01_world.sql2479
-rw-r--r--sql/updates/world/2015_11_12_00_world.sql1739
-rw-r--r--sql/updates/world/2015_11_12_01_world.sql93
-rw-r--r--sql/updates/world/2015_11_20_00_world.sql35
-rw-r--r--sql/updates/world/2015_11_22_00_world.sql2
-rw-r--r--sql/updates/world/2015_11_22_01_world.sql2
-rw-r--r--sql/updates/world/2015_11_22_02_world.sql22
-rw-r--r--sql/updates/world/2015_11_22_03_world_355.sql17
-rw-r--r--sql/updates/world/2015_11_23_00_world_335.sql74
-rw-r--r--sql/updates/world/2015_11_23_01_world_335.sql3
-rw-r--r--sql/updates/world/2015_11_23_02_world_335.sql134
-rw-r--r--sql/updates/world/2015_11_23_03_world_335.sql13
-rw-r--r--sql/updates/world/2015_11_23_04_world_335.sql29
-rw-r--r--sql/updates/world/2015_11_23_05_world.sql6
-rw-r--r--sql/updates/world/2015_11_24_00_world_355.sql2
-rw-r--r--sql/updates/world/2015_11_27_00_world.sql15
-rw-r--r--sql/updates/world/2015_11_28_00_world.sql16
-rw-r--r--sql/updates/world/2015_11_28_01_world_335.sql3
-rw-r--r--sql/updates/world/2015_11_29_00_world.sql41
-rw-r--r--sql/updates/world/2015_11_29_01_world.sql15
-rw-r--r--sql/updates/world/2015_12_01_00_world.sql12
-rw-r--r--sql/updates/world/2015_12_04_00_world.sql34
-rw-r--r--sql/updates/world/2015_12_05_00_world.sql8
-rw-r--r--sql/updates/world/2015_12_06_00_world.sql35
-rw-r--r--sql/updates/world/2015_12_08_00_world_335.sql15
-rw-r--r--sql/updates/world/2015_12_08_01_world.sql2
-rw-r--r--sql/updates/world/2015_12_08_02_world.sql6
-rw-r--r--sql/updates/world/2015_12_09_00_world.sql3
-rw-r--r--sql/updates/world/2015_12_09_01_world.sql13
-rw-r--r--src/common/CMakeLists.txt2
-rw-r--r--src/common/Collision/Management/MMapManager.cpp2
-rw-r--r--src/common/Collision/Management/VMapManager2.cpp5
-rw-r--r--src/common/Collision/Management/VMapManager2.h2
-rw-r--r--src/common/Collision/Maps/MapTree.cpp6
-rw-r--r--src/common/Collision/Models/ModelInstance.h3
-rw-r--r--src/common/Collision/Models/WorldModel.cpp19
-rw-r--r--src/common/Collision/Models/WorldModel.h10
-rw-r--r--src/common/Common.h27
-rw-r--r--src/common/Debugging/Errors.cpp30
-rw-r--r--src/common/Debugging/Errors.h8
-rw-r--r--src/common/Debugging/WheatyExceptionReport.cpp72
-rw-r--r--src/common/Debugging/WheatyExceptionReport.h4
-rw-r--r--src/common/Define.h2
-rw-r--r--src/common/Utilities/Util.cpp7
-rw-r--r--src/common/Utilities/Util.h5
-rw-r--r--src/server/authserver/Realms/RealmList.cpp2
-rw-r--r--src/server/authserver/authserver.conf.dist3
-rw-r--r--src/server/database/CMakeLists.txt4
-rw-r--r--src/server/database/Database/DatabaseLoader.cpp12
-rw-r--r--src/server/database/Database/DatabaseWorkerPool.h8
-rw-r--r--src/server/database/Database/Field.cpp13
-rw-r--r--src/server/database/Database/Field.h114
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp37
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.h36
-rw-r--r--src/server/database/Database/Implementation/LoginDatabase.cpp11
-rw-r--r--src/server/database/Database/Implementation/LoginDatabase.h31
-rw-r--r--src/server/database/Database/Implementation/WorldDatabase.h28
-rw-r--r--src/server/database/Database/QueryResult.cpp117
-rw-r--r--src/server/database/Database/QueryResult.h11
-rw-r--r--src/server/database/Updater/DBUpdater.cpp125
-rw-r--r--src/server/database/Updater/DBUpdater.h14
-rw-r--r--src/server/game/AI/CoreAI/CombatAI.cpp12
-rw-r--r--src/server/game/AI/CoreAI/CombatAI.h2
-rw-r--r--src/server/game/AI/CoreAI/PetAI.cpp10
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.cpp8
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.h4
-rw-r--r--src/server/game/AI/CreatureAIFactory.h5
-rw-r--r--src/server/game/AI/CreatureAIImpl.h290
-rw-r--r--src/server/game/AI/CreatureAISelector.cpp34
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp5
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.h3
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp48
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h4
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp153
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.h75
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp1
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h6
-rw-r--r--src/server/game/Accounts/AccountMgr.cpp2
-rw-r--r--src/server/game/Accounts/RBAC.cpp23
-rw-r--r--src/server/game/Accounts/RBAC.h4
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp16
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.cpp118
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.h30
-rw-r--r--src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp12
-rw-r--r--src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp14
-rw-r--r--src/server/game/Battlefield/Battlefield.cpp8
-rw-r--r--src/server/game/Battlefield/Battlefield.h4
-rw-r--r--src/server/game/Battlefield/BattlefieldMgr.cpp4
-rw-r--r--src/server/game/Battlegrounds/Arena.cpp4
-rw-r--r--src/server/game/Battlegrounds/ArenaTeam.cpp14
-rw-r--r--src/server/game/Battlegrounds/ArenaTeamMgr.cpp2
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp109
-rw-r--r--src/server/game/Battlegrounds/Battleground.h9
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.cpp2
-rw-r--r--src/server/game/Battlegrounds/BattlegroundQueue.cpp49
-rw-r--r--src/server/game/Battlegrounds/BattlegroundQueue.h7
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp4
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp16
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp11
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp2
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp6
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp2
-rw-r--r--src/server/game/Calendar/CalendarMgr.cpp12
-rw-r--r--src/server/game/Calendar/CalendarMgr.h10
-rw-r--r--src/server/game/Chat/Chat.cpp138
-rw-r--r--src/server/game/Chat/Chat.h33
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp306
-rw-r--r--src/server/game/Conditions/ConditionMgr.h89
-rw-r--r--src/server/game/DataStores/DBCStores.cpp64
-rw-r--r--src/server/game/DataStores/DBCStores.h4
-rw-r--r--src/server/game/DataStores/DBCStructure.h38
-rw-r--r--src/server/game/DataStores/DBCfmt.h4
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp6
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.h2
-rw-r--r--src/server/game/DungeonFinding/LFGQueue.cpp48
-rw-r--r--src/server/game/DungeonFinding/LFGQueue.h2
-rw-r--r--src/server/game/DungeonFinding/LFGScripts.cpp4
-rw-r--r--src/server/game/Entities/Corpse/Corpse.cpp76
-rw-r--r--src/server/game/Entities/Corpse/Corpse.h14
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp163
-rw-r--r--src/server/game/Entities/Creature/Creature.h33
-rw-r--r--src/server/game/Entities/Creature/CreatureGroups.cpp43
-rw-r--r--src/server/game/Entities/Creature/CreatureGroups.h4
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp32
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.cpp2
-rw-r--r--src/server/game/Entities/DynamicObject/DynamicObject.cpp9
-rw-r--r--src/server/game/Entities/DynamicObject/DynamicObject.h2
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp83
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h25
-rw-r--r--src/server/game/Entities/Item/Container/Bag.cpp6
-rw-r--r--src/server/game/Entities/Item/Container/Bag.h4
-rw-r--r--src/server/game/Entities/Item/Item.cpp77
-rw-r--r--src/server/game/Entities/Item/Item.h17
-rw-r--r--src/server/game/Entities/Object/Object.cpp143
-rw-r--r--src/server/game/Entities/Object/Object.h15
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.cpp55
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.h192
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp55
-rw-r--r--src/server/game/Entities/Pet/Pet.h10
-rw-r--r--src/server/game/Entities/Player/KillRewarder.cpp274
-rw-r--r--src/server/game/Entities/Player/KillRewarder.h59
-rw-r--r--src/server/game/Entities/Player/Player.cpp1177
-rw-r--r--src/server/game/Entities/Player/Player.h165
-rw-r--r--src/server/game/Entities/Player/SocialMgr.cpp26
-rw-r--r--src/server/game/Entities/Player/SocialMgr.h31
-rw-r--r--src/server/game/Entities/Player/TradeData.cpp139
-rw-r--r--src/server/game/Entities/Player/TradeData.h81
-rw-r--r--src/server/game/Entities/Transport/Transport.cpp16
-rw-r--r--src/server/game/Entities/Transport/Transport.h8
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp139
-rw-r--r--src/server/game/Entities/Unit/Unit.h10
-rwxr-xr-xsrc/server/game/Entities/Vehicle/Vehicle.cpp32
-rw-r--r--src/server/game/Entities/Vehicle/VehicleDefines.h3
-rw-r--r--src/server/game/Events/GameEventMgr.cpp180
-rw-r--r--src/server/game/Events/GameEventMgr.h11
-rw-r--r--src/server/game/Globals/ObjectAccessor.cpp370
-rw-r--r--src/server/game/Globals/ObjectAccessor.h202
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp664
-rw-r--r--src/server/game/Globals/ObjectMgr.h100
-rw-r--r--src/server/game/Grids/GridDefines.h3
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiers.h24
-rw-r--r--src/server/game/Grids/ObjectGridLoader.cpp65
-rw-r--r--src/server/game/Grids/ObjectGridLoader.h1
-rw-r--r--src/server/game/Groups/Group.cpp34
-rw-r--r--src/server/game/Groups/Group.h4
-rw-r--r--src/server/game/Groups/GroupMgr.cpp4
-rw-r--r--src/server/game/Groups/GroupMgr.h8
-rw-r--r--src/server/game/Guilds/Guild.cpp54
-rw-r--r--src/server/game/Guilds/Guild.h46
-rw-r--r--src/server/game/Guilds/GuildMgr.cpp8
-rw-r--r--src/server/game/Guilds/GuildMgr.h14
-rw-r--r--src/server/game/Handlers/ArenaTeamHandler.cpp2
-rw-r--r--src/server/game/Handlers/AuctionHouseHandler.cpp62
-rw-r--r--src/server/game/Handlers/BattleGroundHandler.cpp30
-rw-r--r--src/server/game/Handlers/CalendarHandler.cpp2
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp85
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp4
-rw-r--r--src/server/game/Handlers/CombatHandler.cpp2
-rw-r--r--src/server/game/Handlers/DuelHandler.cpp4
-rw-r--r--src/server/game/Handlers/GroupHandler.cpp10
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp5
-rw-r--r--src/server/game/Handlers/LootHandler.cpp10
-rw-r--r--src/server/game/Handlers/MailHandler.cpp22
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp35
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp8
-rw-r--r--src/server/game/Handlers/NPCHandler.cpp18
-rw-r--r--src/server/game/Handlers/PetHandler.cpp16
-rw-r--r--src/server/game/Handlers/PetitionsHandler.cpp46
-rw-r--r--src/server/game/Handlers/QueryHandler.cpp45
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp17
-rw-r--r--src/server/game/Handlers/ReferAFriendHandler.cpp5
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp12
-rw-r--r--src/server/game/Handlers/TaxiHandler.cpp64
-rw-r--r--src/server/game/Handlers/TicketHandler.cpp4
-rw-r--r--src/server/game/Handlers/TradeHandler.cpp27
-rw-r--r--src/server/game/Handlers/VehicleHandler.cpp6
-rw-r--r--src/server/game/Instances/InstanceSaveMgr.cpp3
-rw-r--r--src/server/game/Instances/InstanceScript.cpp22
-rw-r--r--src/server/game/Instances/InstanceScript.h5
-rw-r--r--src/server/game/Loot/LootMgr.cpp40
-rw-r--r--src/server/game/Loot/LootMgr.h8
-rw-r--r--src/server/game/Mails/Mail.cpp24
-rw-r--r--src/server/game/Mails/Mail.h31
-rw-r--r--src/server/game/Maps/Map.cpp385
-rw-r--r--src/server/game/Maps/Map.h113
-rw-r--r--src/server/game/Maps/MapInstanced.cpp7
-rw-r--r--src/server/game/Maps/MapManager.cpp10
-rw-r--r--src/server/game/Maps/MapManager.h47
-rw-r--r--src/server/game/Maps/TransportMgr.cpp17
-rw-r--r--src/server/game/Maps/TransportMgr.h5
-rw-r--r--src/server/game/Miscellaneous/Formulas.h6
-rw-r--r--src/server/game/Miscellaneous/Language.h4
-rw-r--r--src/server/game/Movement/MotionMaster.cpp67
-rw-r--r--src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp2
-rw-r--r--src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp4
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp111
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h38
-rw-r--r--src/server/game/Movement/PathGenerator.cpp10
-rw-r--r--src/server/game/Movement/Spline/MoveSpline.cpp2
-rw-r--r--src/server/game/Movement/Spline/Spline.h2
-rw-r--r--src/server/game/Movement/Waypoints/Path.h100
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvP.cpp140
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvP.h42
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp14
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvPMgr.h4
-rw-r--r--src/server/game/Pools/PoolMgr.cpp48
-rw-r--r--src/server/game/Pools/PoolMgr.h10
-rw-r--r--src/server/game/Quests/QuestDef.cpp147
-rw-r--r--src/server/game/Quests/QuestDef.h69
-rw-r--r--src/server/game/Reputation/ReputationMgr.cpp6
-rw-r--r--src/server/game/Scripting/MapScripts.cpp140
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp8
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp183
-rw-r--r--src/server/game/Scripting/ScriptMgr.h48
-rw-r--r--src/server/game/Server/WorldSession.cpp158
-rw-r--r--src/server/game/Server/WorldSession.h18
-rw-r--r--src/server/game/Server/WorldSocket.cpp343
-rw-r--r--src/server/game/Server/WorldSocket.h24
-rw-r--r--src/server/game/Skills/SkillExtraItems.cpp111
-rw-r--r--src/server/game/Skills/SkillExtraItems.h4
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp74
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp19
-rw-r--r--src/server/game/Spells/Spell.cpp71
-rw-r--r--src/server/game/Spells/Spell.h20
-rw-r--r--src/server/game/Spells/SpellEffects.cpp74
-rw-r--r--src/server/game/Spells/SpellHistory.cpp347
-rw-r--r--src/server/game/Spells/SpellHistory.h37
-rw-r--r--src/server/game/Spells/SpellInfo.cpp8
-rw-r--r--src/server/game/Spells/SpellInfo.h8
-rw-r--r--src/server/game/Spells/SpellMgr.cpp43
-rw-r--r--src/server/game/Texts/CreatureTextMgr.cpp6
-rw-r--r--src/server/game/Tickets/TicketMgr.cpp32
-rw-r--r--src/server/game/Tickets/TicketMgr.h17
-rw-r--r--src/server/game/Tools/PlayerDump.cpp288
-rw-r--r--src/server/game/Tools/PlayerDump.h26
-rw-r--r--src/server/game/Weather/WeatherMgr.cpp2
-rw-r--r--src/server/game/World/World.cpp136
-rw-r--r--src/server/game/World/World.h37
-rw-r--r--src/server/scripts/Commands/cs_account.cpp61
-rw-r--r--src/server/scripts/Commands/cs_achievement.cpp10
-rw-r--r--src/server/scripts/Commands/cs_ahbot.cpp44
-rw-r--r--src/server/scripts/Commands/cs_arena.cpp32
-rw-r--r--src/server/scripts/Commands/cs_ban.cpp49
-rw-r--r--src/server/scripts/Commands/cs_bf.cpp18
-rw-r--r--src/server/scripts/Commands/cs_cast.cpp111
-rw-r--r--src/server/scripts/Commands/cs_character.cpp66
-rw-r--r--src/server/scripts/Commands/cs_cheat.cpp25
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp151
-rw-r--r--src/server/scripts/Commands/cs_deserter.cpp22
-rw-r--r--src/server/scripts/Commands/cs_disable.cpp46
-rw-r--r--src/server/scripts/Commands/cs_event.cpp16
-rw-r--r--src/server/scripts/Commands/cs_gm.cpp20
-rw-r--r--src/server/scripts/Commands/cs_go.cpp42
-rw-r--r--src/server/scripts/Commands/cs_gobject.cpp118
-rw-r--r--src/server/scripts/Commands/cs_group.cpp22
-rw-r--r--src/server/scripts/Commands/cs_guild.cpp26
-rw-r--r--src/server/scripts/Commands/cs_honor.cpp17
-rw-r--r--src/server/scripts/Commands/cs_instance.cpp58
-rw-r--r--src/server/scripts/Commands/cs_learn.cpp36
-rw-r--r--src/server/scripts/Commands/cs_lfg.cpp22
-rw-r--r--src/server/scripts/Commands/cs_list.cpp30
-rw-r--r--src/server/scripts/Commands/cs_lookup.cpp52
-rw-r--r--src/server/scripts/Commands/cs_message.cpp27
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp149
-rw-r--r--src/server/scripts/Commands/cs_mmaps.cpp20
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp71
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp238
-rw-r--r--src/server/scripts/Commands/cs_pet.cpp14
-rw-r--r--src/server/scripts/Commands/cs_quest.cpp18
-rw-r--r--src/server/scripts/Commands/cs_rbac.cpp21
-rw-r--r--src/server/scripts/Commands/cs_reload.cpp226
-rw-r--r--src/server/scripts/Commands/cs_reset.cpp22
-rw-r--r--src/server/scripts/Commands/cs_send.cpp22
-rw-r--r--src/server/scripts/Commands/cs_server.cpp59
-rw-r--r--src/server/scripts/Commands/cs_tele.cpp18
-rw-r--r--src/server/scripts/Commands/cs_ticket.cpp77
-rw-r--r--src/server/scripts/Commands/cs_titles.cpp19
-rw-r--r--src/server/scripts/Commands/cs_wp.cpp68
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp116
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp93
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp110
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/CMakeLists.txt3
-rw-r--r--src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp28
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp77
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp28
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp73
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp3
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp140
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp4
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp4
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp12
-rw-r--r--src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp10
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp4
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp35
-rw-r--r--src/server/scripts/Kalimdor/zone_azshara.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp10
-rw-r--r--src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_moonglade.cpp59
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp6
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp4
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp58
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp6
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp8
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp6
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp65
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp18
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp30
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp18
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp12
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp18
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h1
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp6
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp207
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp130
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp66
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp145
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp84
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp150
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_noth.cpp284
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp74
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp80
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp1372
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp73
-rw-r--r--src/server/scripts/Northrend/Naxxramas/naxxramas.h12
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp5
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp164
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp52
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp14
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h23
-rw-r--r--src/server/scripts/Northrend/isle_of_conquest.cpp6
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp12
-rw-r--r--src/server/scripts/Northrend/zone_grizzly_hills.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_sholazar_basin.cpp70
-rw-r--r--src/server/scripts/Northrend/zone_storm_peaks.cpp8
-rw-r--r--src/server/scripts/Northrend/zone_zuldrak.cpp4
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp83
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp20
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp23
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPNA.h2
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp16
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp9
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp23
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPZM.h4
-rw-r--r--src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp3
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp5
-rw-r--r--src/server/scripts/Outland/BlackTemple/black_temple.cpp44
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_illidan.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp4
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp5
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp3
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp15
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp16
-rw-r--r--src/server/scripts/Outland/zone_hellfire_peninsula.cpp10
-rw-r--r--src/server/scripts/Spells/spell_dk.cpp10
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp44
-rw-r--r--src/server/scripts/Spells/spell_holiday.cpp81
-rw-r--r--src/server/scripts/Spells/spell_hunter.cpp2
-rw-r--r--src/server/scripts/Spells/spell_item.cpp2
-rw-r--r--src/server/scripts/Spells/spell_rogue.cpp2
-rw-r--r--src/server/scripts/World/action_ip_logger.cpp6
-rw-r--r--src/server/scripts/World/duel_reset.cpp120
-rw-r--r--src/server/scripts/World/npc_professions.cpp146
-rw-r--r--src/server/scripts/World/npcs_special.cpp67
-rw-r--r--src/server/shared/Containers.h14
-rw-r--r--src/server/shared/Dynamic/TypeContainer.h70
-rw-r--r--src/server/shared/Dynamic/TypeContainerFunctions.h137
-rw-r--r--src/server/shared/Dynamic/TypeContainerVisitor.h39
-rw-r--r--src/server/shared/Dynamic/TypeList.h1
-rw-r--r--src/server/shared/Networking/MessageBuffer.h4
-rw-r--r--src/server/shared/Networking/Socket.h2
-rw-r--r--src/server/worldserver/CommandLine/CliRunnable.cpp13
-rw-r--r--src/server/worldserver/Main.cpp5
-rw-r--r--src/server/worldserver/worldserver.conf.dist86
-rw-r--r--src/tools/map_extractor/CMakeLists.txt18
-rw-r--r--src/tools/map_extractor/System.cpp201
-rw-r--r--src/tools/map_extractor/loadlib.cpp8
-rw-r--r--src/tools/map_extractor/loadlib/loadlib.h30
-rw-r--r--src/tools/map_extractor/mpq_libmpq04.h6
-rw-r--r--src/tools/mmaps_generator/IntermediateValues.h1
-rw-r--r--src/tools/mmaps_generator/MapBuilder.cpp22
-rw-r--r--src/tools/mmaps_generator/MapBuilder.h16
-rw-r--r--src/tools/mmaps_generator/PathCommon.h5
-rw-r--r--src/tools/mmaps_generator/TerrainBuilder.cpp8
-rw-r--r--src/tools/mmaps_generator/TerrainBuilder.h11
-rw-r--r--src/tools/mmaps_generator/VMapExtensions.cpp70
-rw-r--r--src/tools/vmap4_extractor/adtfile.cpp10
-rw-r--r--src/tools/vmap4_extractor/mpq_libmpq04.h15
-rw-r--r--src/tools/vmap4_extractor/vmapexport.cpp50
-rw-r--r--src/tools/vmap4_extractor/wdtfile.cpp5
-rw-r--r--src/tools/vmap4_extractor/wdtfile.h13
-rw-r--r--src/tools/vmap4_extractor/wmo.cpp6
731 files changed, 33720 insertions, 10290 deletions
diff --git a/.travis.yml b/.travis.yml
index be3713b928b..23c378a1169 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,24 +9,31 @@ before_install:
- echo "yes" | sudo add-apt-repository ppa:kalakris/cmake
- echo "yes" | sudo add-apt-repository ppa:boost-latest/ppa
- echo "yes" | sudo add-apt-repository ppa:ubuntu-toolchain-r/test
+ - echo "yes" | sudo add-apt-repository 'deb http://llvm.org/apt/precise/ llvm-toolchain-precise-3.5 main'
+ - wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add -
- 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 build-essential libtool gcc-4.8 g++-4.8 make cmake openssl clang-3.5
- sudo apt-get -qq install libssl-dev libmysqlclient-dev libmysql++-dev libreadline6-dev zlib1g-dev libbz2-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
+ - export CC=clang-3.5 CXX=clang++-3.5
install:
- mysql -uroot -e 'create database test_mysql;'
- mkdir bin
- cd bin
- cmake ../ -DWITH_WARNINGS=1 -DWITH_COREDEBUG=0 -DUSE_COREPCH=1 -DUSE_SCRIPTPCH=1 -DTOOLS=1 -DSCRIPTS=1 -DSERVERS=1 -DNOJEM=1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror"
+ - cd ..
+ - sudo chmod +x contrib/check_updates.sh
script:
- - cd ..
+ - $CXX --version
- mysql -uroot < sql/create/create_mysql.sql
- mysql -utrinity -ptrinity auth < sql/base/auth_database.sql
+ - ./contrib/check_updates.sh auth auth
- mysql -utrinity -ptrinity characters < sql/base/characters_database.sql
+ - ./contrib/check_updates.sh characters characters
- mysql -utrinity -ptrinity world < sql/base/dev/world_database.sql
- cat sql/updates/world/*.sql | mysql -utrinity -ptrinity world
- mysql -uroot < sql/create/drop_mysql.sql
- cd bin
- - make -j 10
+ - make -j 10 -k
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 11444f93229..816eb4e9b98 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -58,6 +58,7 @@ set(OPENSSL_EXPECTED_VERSION 1.0.0)
find_package(PCHSupport)
find_package(OpenSSL REQUIRED)
find_package(Threads REQUIRED)
+find_package(MySQL)
include(ConfigureBoost)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 01e941cc465..4baa1197965 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -61,13 +61,8 @@ You are welcome to create an account and help us improve and extend the wiki.
Requirements
============
-Platform: Linux, Windows or Mac
-Processor with SSE2 support
-Boost ≥ 1.4.9
-MySQL ≥ 5.1.0
-CMake ≥ 2.8.11.2 / 2.8.9 (Windows / Linux)
-OpenSSL ≥ 1.0.0
-GCC ≥ 4.7.2 (Linux only)
-MS Visual Studio ≥ 12 (2013) Update 4 (Windows only)
+
+Software requirements are available in the [wiki](http://www.trinitycore.info/display/tc/Requirements) for
+Windows, Linux and Mac OSX.
If you choose Linux, we recommend to use Debian 8, since it's the Linux that we use to test compilations.
diff --git a/README.md b/README.md
index 2ef13384aca..066249f0628 100644
--- a/README.md
+++ b/README.md
@@ -28,19 +28,14 @@ website at [TrinityCore.org](http://www.trinitycore.org).
## Requirements
-+ Platform: Linux, Windows or Mac
-+ Processor with SSE2 support
-+ Boost ≥ 1.49
-+ MySQL ≥ 5.1.0
-+ CMake ≥ 2.8.11.2 / 2.8.9 (Windows / Linux)
-+ OpenSSL ≥ 1.0.0
-+ GCC ≥ 4.7.2 (Linux only)
-+ MS Visual Studio ≥ 12 (2013) (Windows only)
+
+Software requirements are available in the [wiki](http://www.trinitycore.info/display/tc/Requirements) for
+Windows, Linux and Mac OSX.
## Install
-Detailed installation guides are available in the [wiki](http://collab.kpsn.org/display/tc/Installation+Guide) for
+Detailed installation guides are available in the [wiki](http://www.trinitycore.info/display/tc/Installation+Guide) for
Windows, Linux and Mac OSX.
@@ -58,8 +53,9 @@ reports are wasteful and are subject to deletion.
## Submitting fixes
-Fixes are submitted as pull requests via Github. For more information on how to
+C++ fixes are submitted as pull requests via Github. For more information on how to
properly submit a pull request, read the [how-to: maintain a remote fork](http://www.trinitycore.org/f/topic/6037-howto-maintain-a-remote-fork-for-pull-requests-tortoisegit/).
+For SQL only fixes open a ticket or if a bug report exists for the bug post on existing ticket.
## Copyright
diff --git a/cmake/compiler/msvc/settings.cmake b/cmake/compiler/msvc/settings.cmake
index ae59a4758e2..be8028da024 100644
--- a/cmake/compiler/msvc/settings.cmake
+++ b/cmake/compiler/msvc/settings.cmake
@@ -18,9 +18,11 @@ if(PLATFORM EQUAL 64)
add_definitions("-D_WIN64")
message(STATUS "MSVC: 64-bit platform, enforced -D_WIN64 parameter")
- #Enable extended object support for debug compiles on X64 (not required on X86)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
- message(STATUS "MSVC: Enabled increased number of sections in object files")
+ if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.23026.0)
+ #Enable extended object support for debug compiles on X64 (not required on X86)
+ set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /bigobj")
+ message(STATUS "MSVC: Enabled increased number of sections in object files")
+ endif()
else()
# mark 32 bit executables large address aware so they can use > 2GB address space
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
@@ -39,6 +41,17 @@ add_definitions(-D_BUILD_DIRECTIVE=\\"$(ConfigurationName)\\")
# multithreaded compiling on VS
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
+# /Zc:throwingNew.
+# When you specify Zc:throwingNew on the command line, it instructs the compiler to assume
+# that the program will eventually be linked with a conforming operator new implementation,
+# and can omit all of these extra null checks from your program.
+# http://blogs.msdn.com/b/vcblog/archive/2015/08/06/new-in-vs-2015-zc-throwingnew.aspx
+if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.23026.0))
+ # also enable /bigobj for ALL builds under visual studio 2015, increased number of templates in standard library
+ # makes this flag a requirement to build TC at all
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:throwingNew /bigobj")
+endif()
+
# Define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES - eliminates the warning by changing the strcpy call to strcpy_s, which prevents buffer overruns
add_definitions(-D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES)
message(STATUS "MSVC: Overloaded standard names")
@@ -65,7 +78,7 @@ endif()
# Fixes a compiler-problem when using PCH - the /Ym flag is adjusted by the compiler in MSVC2012, hence we need to set an upper limit with /Zm to avoid discrepancies)
# (And yes, this is a verified , unresolved bug with MSVC... *sigh*)
string(REGEX REPLACE "/Zm[0-9]+ *" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zm500" CACHE STRING "" FORCE)
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zm500")
# Enable and treat as errors the following warnings to easily detect virtual function signature failures:
# 'function' : member function does not override any base class virtual member function
diff --git a/cmake/macros/ConfigureBoost.cmake b/cmake/macros/ConfigureBoost.cmake
index 98caa5eb227..b3a71b8a682 100644
--- a/cmake/macros/ConfigureBoost.cmake
+++ b/cmake/macros/ConfigureBoost.cmake
@@ -1,13 +1,3 @@
-macro(get_WIN32_WINNT version)
- if (WIN32 AND CMAKE_SYSTEM_VERSION)
- set(ver ${CMAKE_SYSTEM_VERSION})
- string(REPLACE "." "" ver ${ver})
- string(REGEX REPLACE "([0-9])" "0\\1" ver ${ver})
-
- set(${version} "0x${ver}")
- endif()
-endmacro()
-
if(WIN32)
set(BOOST_DEBUG ON)
if(DEFINED ENV{BOOST_ROOT})
@@ -25,11 +15,10 @@ if(WIN32)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
- get_WIN32_WINNT(ver)
- add_definitions(-D_WIN32_WINNT=${ver})
+ add_definitions(-D_WIN32_WINNT=0x0601)
endif()
-find_package(Boost 1.49 REQUIRED system filesystem thread program_options iostreams)
+find_package(Boost 1.49 REQUIRED system filesystem thread program_options iostreams regex)
add_definitions(-DBOOST_DATE_TIME_NO_LIB)
add_definitions(-DBOOST_REGEX_NO_LIB)
add_definitions(-DBOOST_CHRONO_NO_LIB)
diff --git a/contrib/check_updates.sh b/contrib/check_updates.sh
new file mode 100644
index 00000000000..017542eb807
--- /dev/null
+++ b/contrib/check_updates.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+name=$1
+database=$2
+
+echo "Database Updater check script:"
+echo " Checking database '${name}' for missing filenames in tables..."
+echo
+
+# Select all entries which are in the updates table
+entries=$(mysql -uroot ${database} -e "SELECT name FROM updates" | grep ".sql")
+
+cd sql/updates/${name}
+
+error=0
+updates=0
+
+for file in *.sql
+do
+ # Check if the given update is in the `updates` table.
+ if echo "${entries}" | grep -q "^${file}"; then
+ # File is ok
+ updates=$((updates+1))
+ else
+ # The update isn't listed in the updates table of the given database.
+ echo "- \"sql/updates/${name}/${file}\" is missing in the '${name}'.'updates' table."
+ error=1
+ fi
+done
+
+if [ ${error} -ne 0 ]
+ then
+ echo
+ echo "Fatal error:"
+ echo " The Database Updater is broken for the '${name}' database,"
+ echo " because the applied update is missing in the '${name}'.'updates' table."
+ echo
+ echo "How to fix:"
+ echo " Insert the missing names of the already applied sql updates"
+ echo " to the 'updates' table of the '${name}' base dump ('sql/base/${name}_database.sql')."
+ exit 1
+ else
+ echo " Everything is OK, finished checking ${updates} updates."
+ exit 0
+fi
diff --git a/dep/CMakeLists.txt b/dep/CMakeLists.txt
index 2b3796fb2fa..f829956b7bf 100644
--- a/dep/CMakeLists.txt
+++ b/dep/CMakeLists.txt
@@ -32,10 +32,10 @@ endif()
if(SERVERS OR TOOLS)
add_subdirectory(g3dlite)
add_subdirectory(recastnavigation)
+ add_subdirectory(cppformat)
endif()
if(SERVERS)
- add_subdirectory(cppformat)
add_subdirectory(gsoap)
endif()
diff --git a/dep/PackageList.txt b/dep/PackageList.txt
index 65533192da9..e84fef8d3b2 100644
--- a/dep/PackageList.txt
+++ b/dep/PackageList.txt
@@ -14,7 +14,7 @@ bzip2 (a freely available, patent free, high-quality data compressor)
cppformat (type safe format library)
https://github.com/cppformat/cppformat
- Version: 7859f8123311c1b8f69856d3c5e1b8501fbdae11
+ Version: 5c76d107cbaf5e851bd66b6c563e4fc7c90be7ad
G3D (a commercial-grade C++ 3D engine available as Open Source (BSD License)
http://g3d.sourceforge.net/
diff --git a/dep/SFMT/SFMT-hotfix1.diff b/dep/SFMT/SFMT-hotfix1.diff
new file mode 100644
index 00000000000..ba7810dc100
--- /dev/null
+++ b/dep/SFMT/SFMT-hotfix1.diff
@@ -0,0 +1,14 @@
+diff --git a/dep/SFMT/SFMT.h b/dep/SFMT/SFMT.h
+index 3d15d65..ccf21ce 100644
+--- a/dep/SFMT/SFMT.h
++++ b/dep/SFMT/SFMT.h
+@@ -173,7 +173,8 @@ public:
+ uint32_t statesize = SFMT_N*4; // Size of state vector
+
+ // Fill state vector with random numbers from seed
+- ((uint32_t*)state)[0] = y;
++ uint32_t* s = (uint32_t*)&state;
++ s[0] = y;
+ const uint32_t factor = 1812433253U;// Multiplication factor
+
+ for (i = 1; i < statesize; i++) {
diff --git a/dep/SFMT/SFMT.h b/dep/SFMT/SFMT.h
index 3d15d651e5b..ccf21cecd5f 100644
--- a/dep/SFMT/SFMT.h
+++ b/dep/SFMT/SFMT.h
@@ -173,7 +173,8 @@ public:
uint32_t statesize = SFMT_N*4; // Size of state vector
// Fill state vector with random numbers from seed
- ((uint32_t*)state)[0] = y;
+ uint32_t* s = (uint32_t*)&state;
+ s[0] = y;
const uint32_t factor = 1812433253U;// Multiplication factor
for (i = 1; i < statesize; i++) {
diff --git a/dep/cppformat/ChangeLog.rst b/dep/cppformat/ChangeLog.rst
index 89d5af8e9c7..d2a77f8712f 100644
--- a/dep/cppformat/ChangeLog.rst
+++ b/dep/cppformat/ChangeLog.rst
@@ -1,3 +1,356 @@
+2.0.0 - 2015-12-01
+------------------
+
+General
+~~~~~~~
+
+* [Breaking] Named arguments
+ (`#169 <https://github.com/cppformat/cppformat/pull/169>`_,
+ `#173 <https://github.com/cppformat/cppformat/pull/173>`_,
+ `#174 <https://github.com/cppformat/cppformat/pull/174>`_):
+
+ .. code:: c++
+
+ fmt::print("The answer is {answer}.", fmt::arg("answer", 42));
+
+ Thanks to `@jamboree <https://github.com/jamboree>`_.
+
+* [Experimental] User-defined literals for format and named arguments
+ (`#204 <https://github.com/cppformat/cppformat/pull/204>`_,
+ `#206 <https://github.com/cppformat/cppformat/pull/206>`_,
+ `#207 <https://github.com/cppformat/cppformat/pull/207>`_):
+
+ .. code:: c++
+
+ using namespace fmt::literals;
+ fmt::print("The answer is {answer}.", "answer"_a=42);
+
+ Thanks to `@dean0x7d (Dean Moldovan) <https://github.com/dean0x7d>`_.
+
+* [Breaking] Formatting of more than 16 arguments is now supported when using
+ variadic templates
+ (`#141 <https://github.com/cppformat/cppformat/issues/141>`_).
+ Thanks to `@Shauren <https://github.com/Shauren>`_.
+
+* Runtime width specification
+ (`#168 <https://github.com/cppformat/cppformat/pull/168>`_):
+
+ .. code:: c++
+
+ fmt::format("{0:{1}}", 42, 5); // gives " 42"
+
+ Thanks to `@jamboree <https://github.com/jamboree>`_.
+
+* [Breaking] Enums are now formatted with an overloaded ``std::ostream`` insertion
+ operator (``operator<<``) if available
+ (`#232 <https://github.com/cppformat/cppformat/issues/232>`_).
+
+* [Breaking] Changed default ``bool`` format to textual, "true" or "false"
+ (`#170 <https://github.com/cppformat/cppformat/issues/170>`_):
+
+ .. code:: c++
+
+ fmt::print("{}", true); // prints "true"
+
+ To print ``bool`` as a number use numeric format specifier such as ``d``:
+
+ .. code:: c++
+
+ fmt::print("{:d}", true); // prints "1"
+
+* ``fmt::printf`` and ``fmt::sprintf`` now support formatting of ``bool`` with the
+ ``%s`` specifier giving textual output, "true" or "false"
+ (`#223 <https://github.com/cppformat/cppformat/pull/223>`_):
+
+ .. code:: c++
+
+ fmt::printf("%s", true); // prints "true"
+
+ Thanks to `@LarsGullik <https://github.com/LarsGullik>`_.
+
+* [Breaking] ``signed char`` and ``unsigned char`` are now formatted as integers by default
+ (`#217 <https://github.com/cppformat/cppformat/pull/217>`_).
+
+* [Breaking] Pointers to C strings can now be formatted with the ``p`` specifier
+ (`#223 <https://github.com/cppformat/cppformat/pull/223>`_):
+
+ .. code:: c++
+
+ fmt::print("{:p}", "test"); // prints pointer value
+
+ Thanks to `@LarsGullik <https://github.com/LarsGullik>`_.
+
+* [Breaking] ``fmt::printf`` and ``fmt::sprintf`` now print null pointers as ``(nil)``
+ and null strings as ``(null)`` for consistency with glibc
+ (`#226 <https://github.com/cppformat/cppformat/pull/226>`_).
+ Thanks to `@LarsGullik <https://github.com/LarsGullik>`_.
+
+* [Breaking] ``fmt::(s)printf`` now supports formatting of objects of user-defined types
+ that provide an overloaded ``std::ostream`` insertion operator (``operator<<``)
+ (`#201 <https://github.com/cppformat/cppformat/issues/201>`_):
+
+ .. code:: c++
+
+ fmt::printf("The date is %s", Date(2012, 12, 9));
+
+* [Breaking] The ``Buffer`` template is now part of the public API and can be used
+ to implement custom memory buffers
+ (`#140 <https://github.com/cppformat/cppformat/issues/140>`_).
+ Thanks to `@polyvertex (Jean-Charles Lefebvre) <https://github.com/polyvertex>`_.
+
+* [Breaking] Improved compatibility between ``BasicStringRef`` and
+ `std::experimental::basic_string_view
+ <http://en.cppreference.com/w/cpp/experimental/basic_string_view>`_
+ (`#100 <https://github.com/cppformat/cppformat/issues/100>`_,
+ `#159 <https://github.com/cppformat/cppformat/issues/159>`_,
+ `#183 <https://github.com/cppformat/cppformat/issues/183>`_):
+
+ - Comparison operators now compare string content, not pointers
+ - ``BasicStringRef::c_str`` replaced by ``BasicStringRef::data``
+ - ``BasicStringRef`` is no longer assumed to be null-terminated
+
+ References to null-terminated strings are now represented by a new class,
+ ``BasicCStringRef``.
+
+* Dependency on pthreads introduced by Google Test is now optional
+ (`#185 <https://github.com/cppformat/cppformat/issues/185>`_).
+
+* New CMake options ``FMT_DOC``, ``FMT_INSTALL`` and ``FMT_TEST`` to control
+ generation of ``doc``, ``install`` and ``test`` targets respectively, on by default
+ (`#197 <https://github.com/cppformat/cppformat/issues/197>`_,
+ `#198 <https://github.com/cppformat/cppformat/issues/198>`_,
+ `#200 <https://github.com/cppformat/cppformat/issues/200>`_).
+ Thanks to `@maddinat0r (Alex Martin) <https://github.com/maddinat0r>`_.
+
+* ``noexcept`` is now used when compiling with MSVC2015
+ (`#215 <https://github.com/cppformat/cppformat/pull/215>`_).
+ Thanks to `@dmkrepo (Dmitriy) <https://github.com/dmkrepo>`_.
+
+* Added an option to disable use of ``windows.h`` when ``FMT_USE_WINDOWS_H``
+ is defined as 0 before including ``format.h``
+ (`#171 <https://github.com/cppformat/cppformat/issues/171>`_).
+ Thanks to `@alfps (Alf P. Steinbach) <https://github.com/alfps>`_.
+
+* [Breaking] ``windows.h`` is now included with ``NOMINMAX`` unless
+ ``FMT_WIN_MINMAX`` is defined. This is done to prevent breaking code using
+ ``std::min`` and ``std::max`` and only affects the header-only configuration
+ (`#152 <https://github.com/cppformat/cppformat/issues/152>`_,
+ `#153 <https://github.com/cppformat/cppformat/pull/153>`_,
+ `#154 <https://github.com/cppformat/cppformat/pull/154>`_).
+ Thanks to `@DevO2012 <https://github.com/DevO2012>`_.
+
+* Improved support for custom character types
+ (`#171 <https://github.com/cppformat/cppformat/issues/171>`_).
+ Thanks to `@alfps (Alf P. Steinbach) <https://github.com/alfps>`_.
+
+* Added an option to disable use of IOStreams when ``FMT_USE_IOSTREAMS``
+ is defined as 0 before including ``format.h``
+ (`#205 <https://github.com/cppformat/cppformat/issues/205>`_,
+ `#208 <https://github.com/cppformat/cppformat/pull/208>`_).
+ Thanks to `@JodiTheTigger <https://github.com/JodiTheTigger>`_.
+
+* Improved detection of ``isnan``, ``isinf`` and ``signbit``.
+
+Optimization
+~~~~~~~~~~~~
+
+* Made formatting of user-defined types more efficient with a custom stream buffer
+ (`#92 <https://github.com/cppformat/cppformat/issues/92>`_,
+ `#230 <https://github.com/cppformat/cppformat/pull/230>`_).
+ Thanks to `@NotImplemented <https://github.com/NotImplemented>`_.
+
+* Further improved performance of ``fmt::Writer`` on integer formatting
+ and fixed a minor regression. Now it is ~7% faster than ``karma::generate``
+ on Karma's benchmark
+ (`#186 <https://github.com/cppformat/cppformat/issues/186>`_).
+
+* [Breaking] Reduced `compiled code size
+ <https://github.com/cppformat/cppformat#compile-time-and-code-bloat>`_
+ (`#143 <https://github.com/cppformat/cppformat/issues/143>`_,
+ `#149 <https://github.com/cppformat/cppformat/pull/149>`_).
+
+Distribution
+~~~~~~~~~~~~
+
+* [Breaking] Headers are now installed in
+ ``${CMAKE_INSTALL_PREFIX}/include/cppformat``
+ (`#178 <https://github.com/cppformat/cppformat/issues/178>`_).
+ Thanks to `@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>`_.
+
+* [Breaking] Changed the library name from ``format`` to ``cppformat``
+ for consistency with the project name and to avoid potential conflicts
+ (`#178 <https://github.com/cppformat/cppformat/issues/178>`_).
+ Thanks to `@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>`_.
+
+* C++ Format is now available in `Debian <https://www.debian.org/>`_ GNU/Linux
+ (`stretch <https://packages.debian.org/source/stretch/cppformat>`_,
+ `sid <https://packages.debian.org/source/sid/cppformat>`_) and
+ derived distributions such as
+ `Ubuntu <https://launchpad.net/ubuntu/+source/cppformat>`_ 15.10 and later
+ (`#155 <https://github.com/cppformat/cppformat/issues/155>`_)::
+
+ $ sudo apt-get install libcppformat1-dev
+
+ Thanks to `@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>`_.
+
+* `Packages for Fedora and RHEL <https://admin.fedoraproject.org/pkgdb/package/cppformat/>`_
+ are now available. Thanks to Dave Johansen.
+
+* C++ Format can now be installed via `Homebrew <http://brew.sh/>`_ on OS X
+ (`#157 <https://github.com/cppformat/cppformat/issues/157>`_)::
+
+ $ brew install cppformat
+
+ Thanks to `@ortho <https://github.com/ortho>`_, Anatoliy Bulukin.
+
+Documentation
+~~~~~~~~~~~~~
+
+* Migrated from ReadTheDocs to GitHub Pages for better responsiveness
+ and reliability
+ (`#128 <https://github.com/cppformat/cppformat/issues/128>`_).
+ New documentation address is http://cppformat.github.io/.
+
+
+* Added `Building the documentation
+ <http://cppformat.github.io/dev/usage.html#building-the-documentation>`_
+ section to the documentation.
+
+* Documentation build script is now compatible with Python 3 and newer pip versions.
+ (`#189 <https://github.com/cppformat/cppformat/pull/189>`_,
+ `#209 <https://github.com/cppformat/cppformat/issues/209>`_).
+ Thanks to `@JodiTheTigger <https://github.com/JodiTheTigger>`_ and
+ `@xentec <https://github.com/xentec>`_.
+
+* Documentation fixes and improvements
+ (`#36 <https://github.com/cppformat/cppformat/issues/36>`_,
+ `#75 <https://github.com/cppformat/cppformat/issues/75>`_,
+ `#125 <https://github.com/cppformat/cppformat/issues/125>`_,
+ `#160 <https://github.com/cppformat/cppformat/pull/160>`_,
+ `#161 <https://github.com/cppformat/cppformat/pull/161>`_,
+ `#162 <https://github.com/cppformat/cppformat/issues/162>`_,
+ `#165 <https://github.com/cppformat/cppformat/issues/165>`_,
+ `#210 <https://github.com/cppformat/cppformat/issues/210>`_).
+ Thanks to `@syohex (Syohei YOSHIDA) <https://github.com/syohex>`_ and
+ bug reporters.
+
+* Fixed out-of-tree documentation build
+ (`#177 <https://github.com/cppformat/cppformat/issues/177>`_).
+ Thanks to `@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>`_.
+
+Fixes
+~~~~~
+
+* Fixed ``initializer_list`` detection
+ (`#136 <https://github.com/cppformat/cppformat/issues/136>`_).
+ Thanks to `@Gachapen (Magnus Bjerke Vik) <https://github.com/Gachapen>`_.
+
+* [Breaking] Fixed formatting of enums with numeric format specifiers in
+ ``fmt::(s)printf``
+ (`#131 <https://github.com/cppformat/cppformat/issues/131>`_,
+ `#139 <https://github.com/cppformat/cppformat/issues/139>`_):
+
+ .. code:: c++
+
+ enum { ANSWER = 42 };
+ fmt::printf("%d", ANSWER);
+
+ Thanks to `@Naios <https://github.com/Naios>`_.
+
+* Improved compatibility with old versions of MinGW
+ (`#129 <https://github.com/cppformat/cppformat/issues/129>`_,
+ `#130 <https://github.com/cppformat/cppformat/pull/130>`_,
+ `#132 <https://github.com/cppformat/cppformat/issues/132>`_).
+ Thanks to `@cstamford (Christopher Stamford) <https://github.com/cstamford>`_.
+
+* Fixed a compile error on MSVC with disabled exceptions
+ (`#144 <https://github.com/cppformat/cppformat/issues/144>`_).
+
+* Added a workaround for broken implementation of variadic templates in MSVC2012
+ (`#148 <https://github.com/cppformat/cppformat/issues/148>`_).
+
+* Placed the anonymous namespace within ``fmt`` namespace for the header-only
+ configuration
+ (`#171 <https://github.com/cppformat/cppformat/issues/171>`_).
+ Thanks to `@alfps (Alf P. Steinbach) <https://github.com/alfps>`_.
+
+* Fixed issues reported by Coverity Scan
+ (`#187 <https://github.com/cppformat/cppformat/issues/187>`_,
+ `#192 <https://github.com/cppformat/cppformat/issues/192>`_).
+
+* Implemented a workaround for a name lookup bug in MSVC2010
+ (`#188 <https://github.com/cppformat/cppformat/issues/188>`_).
+
+* Fixed compiler warnings
+ (`#95 <https://github.com/cppformat/cppformat/issues/95>`_,
+ `#96 <https://github.com/cppformat/cppformat/issues/96>`_,
+ `#114 <https://github.com/cppformat/cppformat/pull/114>`_,
+ `#135 <https://github.com/cppformat/cppformat/issues/135>`_,
+ `#142 <https://github.com/cppformat/cppformat/issues/142>`_,
+ `#145 <https://github.com/cppformat/cppformat/issues/145>`_,
+ `#146 <https://github.com/cppformat/cppformat/issues/146>`_,
+ `#158 <https://github.com/cppformat/cppformat/issues/158>`_,
+ `#163 <https://github.com/cppformat/cppformat/issues/163>`_,
+ `#175 <https://github.com/cppformat/cppformat/issues/175>`_,
+ `#190 <https://github.com/cppformat/cppformat/issues/190>`_,
+ `#191 <https://github.com/cppformat/cppformat/pull/191>`_,
+ `#194 <https://github.com/cppformat/cppformat/issues/194>`_,
+ `#196 <https://github.com/cppformat/cppformat/pull/196>`_,
+ `#216 <https://github.com/cppformat/cppformat/issues/216>`_,
+ `#218 <https://github.com/cppformat/cppformat/pull/218>`_,
+ `#220 <https://github.com/cppformat/cppformat/pull/220>`_,
+ `#229 <https://github.com/cppformat/cppformat/pull/229>`_,
+ `#233 <https://github.com/cppformat/cppformat/issues/233>`_,
+ `#234 <https://github.com/cppformat/cppformat/issues/234>`_,
+ `#236 <https://github.com/cppformat/cppformat/pull/236>`_).
+ Thanks to `@seanmiddleditch (Sean Middleditch) <https://github.com/seanmiddleditch>`_,
+ `@dixlorenz (Dix Lorenz) <https://github.com/dixlorenz>`_,
+ `@CarterLi (李通洲) <https://github.com/CarterLi>`_,
+ `@Naios <https://github.com/Naios>`_,
+ `@fmatthew5876 (Matthew Fioravante) <https://github.com/fmatthew5876>`_,
+ `@LevskiWeng (Levski Weng) <https://github.com/LevskiWeng>`_,
+ `@rpopescu <https://github.com/rpopescu>`_,
+ `@gabime (Gabi Melman) <https://github.com/gabime>`_,
+ `@cubicool (Jeremy Moles) <https://github.com/cubicool>`_,
+ `@jkflying (Julian Kent) <https://github.com/jkflying>`_,
+ `@LogicalKnight (Sean L) <https://github.com/LogicalKnight>`_,
+ `@inguin (Ingo van Lil) <https://github.com/inguin>`_ and
+ `@Jopie64 (Johan) <https://github.com/Jopie64>`_.
+
+* Fixed portability issues (mostly causing test failures) on ARM, ppc64, ppc64le,
+ s390x and SunOS 5.11 i386 (
+ `#138 <https://github.com/cppformat/cppformat/issues/138>`_,
+ `#179 <https://github.com/cppformat/cppformat/issues/179>`_,
+ `#180 <https://github.com/cppformat/cppformat/issues/180>`_,
+ `#202 <https://github.com/cppformat/cppformat/issues/202>`_,
+ `#225 <https://github.com/cppformat/cppformat/issues/225>`_,
+ `Red Hat Bugzilla Bug 1260297 <https://bugzilla.redhat.com/show_bug.cgi?id=1260297>`_).
+ Thanks to `@Naios <https://github.com/Naios>`_,
+ `@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>`_ and Dave Johansen.
+
+* Fixed a name conflict with macro ``free`` defined in
+ ``crtdbg.h`` when ``_CRTDBG_MAP_ALLOC`` is set
+ (`#211 <https://github.com/cppformat/cppformat/issues/211>`_).
+
+* Fixed shared library build on OS X
+ (`#212 <https://github.com/cppformat/cppformat/pull/212>`_).
+ Thanks to `@dean0x7d (Dean Moldovan) <https://github.com/dean0x7d>`_.
+
+* Fixed an overload conflict on MSVC when ``/Zc:wchar_t-`` option is specified
+ (`#214 <https://github.com/cppformat/cppformat/pull/214>`_).
+ Thanks to `@slavanap (Vyacheslav Napadovsky) <https://github.com/slavanap>`_.
+
+* Improved compatibility with MSVC 2008
+ (`#236 <https://github.com/cppformat/cppformat/pull/236>`_).
+ Thanks to `@Jopie64 (Johan) <https://github.com/Jopie64>`_.
+
+* Improved compatibility with bcc32
+ (`#227 <https://github.com/cppformat/cppformat/issues/227>`_).
+
+* Fixed ``static_assert`` detection on Clang
+ (`#228 <https://github.com/cppformat/cppformat/pull/228>`_).
+ Thanks to `@dean0x7d (Dean Moldovan) <https://github.com/dean0x7d>`_.
+
1.1.0 - 2015-03-06
------------------
@@ -66,11 +419,6 @@
* 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/blob/master/ChangeLog.rst>`_
(`#103 <https://github.com/cppformat/cppformat/issues/103>`_).
diff --git a/dep/cppformat/README.rst b/dep/cppformat/README.rst
index 29f433480f3..fb4399f0af4 100644
--- a/dep/cppformat/README.rst
+++ b/dep/cppformat/README.rst
@@ -7,9 +7,6 @@ C++ Format
.. image:: https://ci.appveyor.com/api/projects/status/qk0bhyhqp1ekpat8
:target: https://ci.appveyor.com/project/vitaut/cppformat
-.. image:: https://webapi.biicode.com/v1/badges/vitaut/vitaut/cppformat/master?dummy
- :target: https://www.biicode.com/vitaut/cppformat
-
.. image:: https://badges.gitter.im/Join%20Chat.svg
:alt: Join the chat at https://gitter.im/cppformat/cppformat
:target: https://gitter.im/cppformat/cppformat?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
@@ -149,6 +146,8 @@ Projects using this library
* `readpe <https://bitbucket.org/sys_dev/readpe>`_: Read Portable Executable
+* `redis-cerberus <https://github.com/HunanTV/redis-cerberus>`_: A Redis cluster proxy
+
* `Saddy <https://code.google.com/p/saddy/>`_:
Small crossplatform 2D graphic engine
@@ -157,6 +156,10 @@ Projects using this library
* `spdlog <https://github.com/gabime/spdlog>`_: Super fast C++ logging library
+* `Stellar <https://www.stellar.org/>`_: Financial platform
+
+* `Touch Surgery <https://www.touchsurgery.com/>`_: Surgery simulator
+
* `TrinityCore <https://github.com/TrinityCore/TrinityCore>`_: Open-source MMORPG framework
`More... <https://github.com/search?q=cppformat&type=Code>`_
diff --git a/dep/cppformat/format.cc b/dep/cppformat/format.cc
index 86b86c741b5..1970d53c500 100644
--- a/dep/cppformat/format.cc
+++ b/dep/cppformat/format.cc
@@ -34,6 +34,7 @@
#include <climits>
#include <cmath>
#include <cstdarg>
+#include <cstddef> // for std::ptrdiff_t
#if defined(_WIN32) && defined(__MINGW32__)
# include <cstring>
@@ -51,17 +52,6 @@
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)
@@ -70,21 +60,13 @@ using fmt::internal::Arg;
# define FMT_CATCH(x) if (false)
#endif
-#ifndef FMT_THROW
-# if FMT_EXCEPTIONS
-# define FMT_THROW(x) throw x
-# else
-# define FMT_THROW(x) assert(false)
-# endif
-#endif
-
#ifdef FMT_HEADER_ONLY
# define FMT_FUNC inline
#else
# define FMT_FUNC
#endif
-#if _MSC_VER
+#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4127) // conditional expression is constant
# pragma warning(disable: 4702) // unreachable code
@@ -95,11 +77,11 @@ using fmt::internal::Arg;
// 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::Null<> strerror_r(int, char *, ...) {
+ return fmt::internal::Null<>();
}
-static inline fmt::internal::None<> strerror_s(char *, std::size_t, ...) {
- return fmt::internal::None<>();
+static inline fmt::internal::Null<> strerror_s(char *, std::size_t, ...) {
+ return fmt::internal::Null<>();
}
namespace fmt {
@@ -133,6 +115,7 @@ struct IntChecker {
unsigned max = INT_MAX;
return value <= max;
}
+ static bool fits_in_int(bool) { return true; }
};
template <>
@@ -141,6 +124,7 @@ struct IntChecker<true> {
static bool fits_in_int(T value) {
return value >= INT_MIN && value <= INT_MAX;
}
+ static bool fits_in_int(int) { return true; }
};
const char RESET_COLOR[] = "\x1b[0m";
@@ -185,7 +169,7 @@ int safe_strerror(
}
// Handle the case when strerror_r is not available.
- int handle(fmt::internal::None<>) {
+ int handle(fmt::internal::Null<>) {
return fallback(strerror_s(buffer_, buffer_size_, error_code_));
}
@@ -197,15 +181,15 @@ int safe_strerror(
}
// Fallback to strerror if strerror_r and strerror_s are not available.
- int fallback(fmt::internal::None<>) {
+ int fallback(fmt::internal::Null<>) {
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) {}
+ StrError(int err_code, char *&buf, std::size_t buf_size)
+ : error_code_(err_code), buffer_(buf), buffer_size_(buf_size) {}
int run() {
strerror_r(0, 0, ""); // Suppress a warning about unused strerror_r.
@@ -250,50 +234,6 @@ class IsZeroInt : public fmt::internal::ArgVisitor<IsZeroInt, bool> {
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;
-}
-
-template <typename Char>
-inline bool is_name_start(Char c) {
- return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || '_' == c;
-}
-
-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> {
@@ -351,6 +291,11 @@ class ArgConverter : public fmt::internal::ArgVisitor<ArgConverter<T>, void> {
ArgConverter(fmt::internal::Arg &arg, wchar_t type)
: arg_(arg), type_(type) {}
+ void visit_bool(bool value) {
+ if (type_ != 's')
+ visit_any_int(value);
+ }
+
template <typename U>
void visit_any_int(U value) {
bool is_signed = type_ == 'd' || type_ == 'i';
@@ -399,128 +344,72 @@ class CharConverter : public fmt::internal::ArgVisitor<CharConverter, void> {
namespace internal {
-template <typename Impl, typename Char>
-class BasicArgFormatter : public ArgVisitor<Impl, void> {
- private:
- BasicWriter<Char> &writer_;
- FormatSpec &spec_;
+template <typename Char>
+class PrintfArgFormatter :
+ public ArgFormatterBase<PrintfArgFormatter<Char>, Char> {
- FMT_DISALLOW_COPY_AND_ASSIGN(BasicArgFormatter);
+ void write_null_pointer() {
+ this->spec().type_ = 0;
+ this->write("(nil)");
+ }
- protected:
- BasicWriter<Char> &writer() { return writer_; }
- const FormatSpec &spec() const { return spec_; }
+ typedef ArgFormatterBase<PrintfArgFormatter<Char>, Char> Base;
public:
- BasicArgFormatter(BasicWriter<Char> &w, FormatSpec &s)
- : writer_(w), spec_(s) {}
-
- 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_); }
+ PrintfArgFormatter(BasicWriter<Char> &w, FormatSpec &s)
+ : ArgFormatterBase<PrintfArgFormatter<Char>, Char>(w, s) {}
void visit_bool(bool value) {
- if (spec_.type_) {
- writer_.write_int(value, spec_);
- return;
- }
- const char *str_value = value ? "true" : "false";
- Arg::StringValue<char> str = { str_value, strlen(str_value) };
- writer_.write_str(str, spec_);
+ FormatSpec &fmt_spec = this->spec();
+ if (fmt_spec.type_ != 's')
+ return this->visit_any_int(value);
+ fmt_spec.type_ = 0;
+ this->write(value);
}
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"));
+ const FormatSpec &fmt_spec = this->spec();
+ BasicWriter<Char> &w = this->writer();
+ if (fmt_spec.type_ && fmt_spec.type_ != 'c')
+ w.write_int(value, fmt_spec);
typedef typename BasicWriter<Char>::CharPtr CharPtr;
- Char fill = internal::CharTraits<Char>::cast(spec_.fill());
CharPtr out = CharPtr();
- if (spec_.width_ > 1) {
- out = writer_.grow_buffer(spec_.width_);
- if (spec_.align_ == ALIGN_RIGHT) {
- std::fill_n(out, spec_.width_ - 1, fill);
- out += spec_.width_ - 1;
- } else if (spec_.align_ == ALIGN_CENTER) {
- out = writer_.fill_padding(out, spec_.width_, 1, fill);
+ if (fmt_spec.width_ > 1) {
+ Char fill = ' ';
+ out = w.grow_buffer(fmt_spec.width_);
+ if (fmt_spec.align_ != ALIGN_LEFT) {
+ std::fill_n(out, fmt_spec.width_ - 1, fill);
+ out += fmt_spec.width_ - 1;
} else {
- std::fill_n(out + 1, spec_.width_ - 1, fill);
+ std::fill_n(out + 1, fmt_spec.width_ - 1, fill);
}
} else {
- out = writer_.grow_buffer(1);
+ out = w.grow_buffer(1);
}
- *out = internal::CharTraits<Char>::cast(value);
- }
-
- void visit_string(Arg::StringValue<char> value) {
- writer_.write_str(value, spec_);
+ *out = static_cast<Char>(value);
}
- using ArgVisitor<Impl, void>::visit_wstring;
-
- void visit_wstring(Arg::StringValue<Char> value) {
- writer_.write_str(value, spec_);
+ void visit_cstring(const char *value) {
+ if (value)
+ Base::visit_cstring(value);
+ else if (this->spec().type_ == 'p')
+ write_null_pointer();
+ else
+ this->write("(null)");
}
void visit_pointer(const void *value) {
- if (spec_.type_ && spec_.type_ != 'p')
- report_unknown_type(spec_.type_, "pointer");
- spec_.flags_ = HASH_FLAG;
- spec_.type_ = 'x';
- writer_.write_int(reinterpret_cast<uintptr_t>(value), spec_);
+ if (value)
+ return Base::visit_pointer(value);
+ this->spec().type_ = 0;
+ write_null_pointer();
}
-};
-
-// An argument formatter.
-template <typename Char>
-class ArgFormatter : public BasicArgFormatter<ArgFormatter<Char>, Char> {
- private:
- BasicFormatter<Char> &formatter_;
- const Char *format_;
-
- public:
- ArgFormatter(BasicFormatter<Char> &f, FormatSpec &s, const Char *fmt)
- : BasicArgFormatter<ArgFormatter<Char>, Char>(f.writer(), s),
- formatter_(f), format_(fmt) {}
void visit_custom(Arg::CustomValue c) {
- c.format(&formatter_, c.value, &format_);
- }
-};
-
-template <typename Char>
-class PrintfArgFormatter :
- public BasicArgFormatter<PrintfArgFormatter<Char>, Char> {
- public:
- PrintfArgFormatter(BasicWriter<Char> &w, FormatSpec &s)
- : BasicArgFormatter<PrintfArgFormatter<Char>, Char>(w, s) {}
-
- void visit_char(int value) {
- const FormatSpec &spec = this->spec();
- BasicWriter<Char> &writer = this->writer();
- if (spec.type_ && spec.type_ != 'c')
- writer.write_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>(value);
+ BasicFormatter<Char> formatter(ArgList(), this->writer());
+ const Char format_str[] = {'}', 0};
+ const Char *format = format_str;
+ c.format(&formatter, c.value, &format);
}
};
} // namespace internal
@@ -611,14 +500,17 @@ FMT_FUNC void fmt::internal::report_unknown_type(char code, const char *type) {
#if FMT_USE_WINDOWS_H
FMT_FUNC fmt::internal::UTF8ToUTF16::UTF8ToUTF16(fmt::StringRef s) {
- int length = MultiByteToWideChar(
- CP_UTF8, MB_ERR_INVALID_CHARS, s.data(), s.size(), 0, 0);
static const char ERROR_MSG[] = "cannot convert string from UTF-8 to UTF-16";
+ if (s.size() > INT_MAX)
+ FMT_THROW(WindowsError(ERROR_INVALID_PARAMETER, ERROR_MSG));
+ int s_size = static_cast<int>(s.size());
+ int length = MultiByteToWideChar(
+ CP_UTF8, MB_ERR_INVALID_CHARS, s.data(), s_size, 0, 0);
if (length == 0)
FMT_THROW(WindowsError(GetLastError(), ERROR_MSG));
buffer_.resize(length + 1);
length = MultiByteToWideChar(
- CP_UTF8, MB_ERR_INVALID_CHARS, s.data(), s.size(), &buffer_[0], length);
+ CP_UTF8, MB_ERR_INVALID_CHARS, s.data(), s_size, &buffer_[0], length);
if (length == 0)
FMT_THROW(WindowsError(GetLastError(), ERROR_MSG));
buffer_[length] = 0;
@@ -632,12 +524,15 @@ FMT_FUNC fmt::internal::UTF16ToUTF8::UTF16ToUTF8(fmt::WStringRef s) {
}
FMT_FUNC int fmt::internal::UTF16ToUTF8::convert(fmt::WStringRef s) {
- int length = WideCharToMultiByte(CP_UTF8, 0, s.data(), s.size(), 0, 0, 0, 0);
+ if (s.size() > INT_MAX)
+ return ERROR_INVALID_PARAMETER;
+ int s_size = static_cast<int>(s.size());
+ int length = WideCharToMultiByte(CP_UTF8, 0, s.data(), s_size, 0, 0, 0, 0);
if (length == 0)
return GetLastError();
buffer_.resize(length + 1);
length = WideCharToMultiByte(
- CP_UTF8, 0, s.data(), s.size(), &buffer_[0], length, 0, 0);
+ CP_UTF8, 0, s.data(), s_size, &buffer_[0], length, 0, 0);
if (length == 0)
return GetLastError();
buffer_[length] = 0;
@@ -679,7 +574,7 @@ FMT_FUNC void fmt::internal::format_windows_error(
}
}
} FMT_CATCH(...) {}
- format_error_code(out, error_code, message);
+ fmt::format_error_code(out, error_code, message); // 'fmt::' is for bcc32.
}
#endif // FMT_USE_WINDOWS_H
@@ -702,7 +597,7 @@ FMT_FUNC void fmt::internal::format_system_error(
buffer.resize(buffer.size() * 2);
}
} FMT_CATCH(...) {}
- format_error_code(out, error_code, message);
+ fmt::format_error_code(out, error_code, message); // 'fmt::' is for bcc32.
}
template <typename Char>
@@ -755,68 +650,6 @@ 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>::get_arg(
- BasicStringRef<Char> arg_name, const char *&error) {
- if (check_no_auto_index(error)) {
- map_.init(args());
- const Arg *arg = map_.find(arg_name);
- if (arg)
- return *arg;
- error = "argument not found";
- }
- return Arg();
-}
-
-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;
-}
-
-template <typename Char>
-inline Arg fmt::BasicFormatter<Char>::parse_arg_name(const Char *&s) {
- assert(is_name_start(*s));
- const Char *start = s;
- Char c;
- do {
- c = *++s;
- } while (is_name_start(c) || ('0' <= c && c <= '9'));
- const char *error = 0;
- Arg arg = get_arg(fmt::BasicStringRef<Char>(start, s - start), error);
- if (error)
- FMT_THROW(fmt::FormatError(error));
- return arg;
-}
-
FMT_FUNC Arg fmt::internal::FormatterBase::do_get_arg(
unsigned arg_index, const char *&error) {
Arg arg = args_[arg_index];
@@ -832,28 +665,6 @@ FMT_FUNC Arg fmt::internal::FormatterBase::do_get_arg(
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 bool fmt::internal::FormatterBase::check_no_auto_index(
- const char *&error) {
- if (next_arg_index_ > 0) {
- error = "cannot switch from automatic to manual argument indexing";
- return false;
- }
- next_arg_index_ = -1;
- return true;
-}
-
-inline Arg fmt::internal::FormatterBase::get_arg(
- unsigned arg_index, const char *&error) {
- return check_no_auto_index(error) ? do_get_arg(arg_index, error) : Arg();
-}
-
template <typename Char>
void fmt::internal::PrintfFormatter<Char>::parse_flags(
FormatSpec &spec, const Char *&s) {
@@ -929,10 +740,8 @@ unsigned fmt::internal::PrintfFormatter<Char>::parse_header(
template <typename Char>
void fmt::internal::PrintfFormatter<Char>::format(
- BasicWriter<Char> &writer, BasicCStringRef<Char> format_str,
- const ArgList &args) {
+ BasicWriter<Char> &writer, BasicCStringRef<Char> format_str) {
const Char *start = format_str.c_str();
- set_args(args);
const Char *s = start;
while (*s) {
Char c = *s++;
@@ -989,10 +798,10 @@ void fmt::internal::PrintfFormatter<Char>::format(
ArgConverter<intmax_t>(arg, *s).visit(arg);
break;
case 'z':
- ArgConverter<size_t>(arg, *s).visit(arg);
+ ArgConverter<std::size_t>(arg, *s).visit(arg);
break;
case 't':
- ArgConverter<ptrdiff_t>(arg, *s).visit(arg);
+ ArgConverter<std::ptrdiff_t>(arg, *s).visit(arg);
break;
case 'L':
// printf produces garbage when 'L' is omitted for long double, no
@@ -1028,207 +837,17 @@ void fmt::internal::PrintfFormatter<Char>::format(
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 zero flag.
- if (*s == '0') {
- require_numeric_argument(arg, '0');
- spec.align_ = ALIGN_NUMERIC;
- spec.fill_ = '0';
- ++s;
- }
-
- // Parse width.
- if ('0' <= *s && *s <= '9') {
- spec.width_ = parse_nonnegative_int(s);
- } else if (*s == '{') {
- ++s;
- Arg width_arg = is_name_start(*s) ?
- parse_arg_name(s) : parse_arg_index(s);
- if (*s++ != '}')
- FMT_THROW(FormatError("invalid format string"));
- ULongLong value = 0;
- switch (width_arg.type) {
- case Arg::INT:
- if (width_arg.int_value < 0)
- FMT_THROW(FormatError("negative width"));
- value = width_arg.int_value;
- break;
- case Arg::UINT:
- value = width_arg.uint_value;
- break;
- case Arg::LONG_LONG:
- if (width_arg.long_long_value < 0)
- FMT_THROW(FormatError("negative width"));
- value = width_arg.long_long_value;
- break;
- case Arg::ULONG_LONG:
- value = width_arg.ulong_long_value;
- break;
- default:
- FMT_THROW(FormatError("width is not integer"));
- }
- if (value > INT_MAX)
- FMT_THROW(FormatError("number is too big"));
- spec.width_ = static_cast<int>(value);
- }
-
- // Parse precision.
- if (*s == '.') {
- ++s;
- spec.precision_ = 0;
- if ('0' <= *s && *s <= '9') {
- spec.precision_ = parse_nonnegative_int(s);
- } else if (*s == '{') {
- ++s;
- Arg precision_arg =
- is_name_start(*s) ? parse_arg_name(s) : 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(
- BasicCStringRef<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 = is_name_start(*s) ? parse_arg_name(s) : 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);
+ // 'fmt::' is for bcc32.
+ fmt::report_error(internal::format_system_error, error_code, message);
}
#if FMT_USE_WINDOWS_H
FMT_FUNC void fmt::report_windows_error(
int error_code, fmt::StringRef message) FMT_NOEXCEPT {
- report_error(internal::format_windows_error, error_code, message);
+ // 'fmt::' is for bcc32.
+ fmt::report_error(internal::format_windows_error, error_code, message);
}
#endif
@@ -1250,7 +869,7 @@ FMT_FUNC void fmt::print(std::ostream &os, CStringRef format_str, ArgList args)
FMT_FUNC void fmt::print_colored(Color c, CStringRef format, ArgList args) {
char escape[] = "\x1b[30m";
- escape[3] = '0' + static_cast<char>(c);
+ escape[3] = static_cast<char>('0' + c);
std::fputs(escape, stdout);
print(format, args);
std::fputs(RESET_COLOR, stdout);
@@ -1271,14 +890,10 @@ template struct fmt::internal::BasicData<void>;
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(
- CStringRef format, const ArgList &args);
+template void fmt::internal::ArgMap<char>::init(const fmt::ArgList &args);
template void fmt::internal::PrintfFormatter<char>::format(
- BasicWriter<char> &writer, CStringRef format, const ArgList &args);
+ BasicWriter<char> &writer, CStringRef format);
template int fmt::internal::CharTraits<char>::format_float(
char *buffer, std::size_t size, const char *format,
@@ -1292,15 +907,10 @@ template int fmt::internal::CharTraits<char>::format_float(
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(
- BasicCStringRef<wchar_t> format, const ArgList &args);
+template void fmt::internal::ArgMap<wchar_t>::init(const fmt::ArgList &args);
template void fmt::internal::PrintfFormatter<wchar_t>::format(
- BasicWriter<wchar_t> &writer, WCStringRef format,
- const ArgList &args);
+ BasicWriter<wchar_t> &writer, WCStringRef format);
template int fmt::internal::CharTraits<wchar_t>::format_float(
wchar_t *buffer, std::size_t size, const wchar_t *format,
@@ -1312,6 +922,6 @@ template int fmt::internal::CharTraits<wchar_t>::format_float(
#endif // FMT_HEADER_ONLY
-#if _MSC_VER
+#ifdef _MSC_VER
# pragma warning(pop)
#endif
diff --git a/dep/cppformat/format.h b/dep/cppformat/format.h
index dfe95a77931..a98a166091b 100644
--- a/dep/cppformat/format.h
+++ b/dep/cppformat/format.h
@@ -28,20 +28,39 @@
#ifndef FMT_FORMAT_H_
#define FMT_FORMAT_H_
+#if defined _MSC_VER && _MSC_VER <= 1500
+typedef unsigned int uint32_t;
+typedef unsigned long long uint64_t;
+typedef long long intmax_t;
+#else
#include <stdint.h>
+#endif
#include <cassert>
#include <cmath>
-#include <cstddef> // for std::ptrdiff_t
#include <cstdio>
-#include <algorithm>
+#include <cstring>
#include <limits>
+#include <memory>
#include <stdexcept>
#include <string>
-#include <sstream>
#include <map>
-#if _SECURE_SCL
+#ifndef FMT_USE_IOSTREAMS
+# define FMT_USE_IOSTREAMS 1
+#endif
+
+#if FMT_USE_IOSTREAMS
+# include <ostream>
+#endif
+
+#ifdef _SECURE_SCL
+# define FMT_SECURE_SCL _SECURE_SCL
+#else
+# define FMT_SECURE_SCL 0
+#endif
+
+#if FMT_SECURE_SCL
# include <iterator>
#endif
@@ -92,6 +111,9 @@ inline uint32_t clzll(uint64_t x) {
// Disable the warning about declaration shadowing because it affects too
// many valid cases.
# pragma GCC diagnostic ignored "-Wshadow"
+// Disable the warning about implicit conversions that may change the sign of
+// an integer; silencing it otherwise would require many explicit casts.
+# pragma GCC diagnostic ignored "-Wsign-conversion"
# endif
# if __cplusplus >= 201103L || defined __GXX_EXPERIMENTAL_CXX0X__
# define FMT_HAS_GXX_CXX11 1
@@ -100,7 +122,7 @@ inline uint32_t clzll(uint64_t x) {
# define FMT_GCC_EXTENSION
#endif
-#ifdef __clang__
+#if defined(__clang__) && !defined(__INTEL_COMPILER)
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdocumentation"
#endif
@@ -153,17 +175,45 @@ inline uint32_t clzll(uint64_t x) {
#endif
// Define FMT_USE_NOEXCEPT to make C++ Format use noexcept (C++11 feature).
+#ifndef FMT_USE_NOEXCEPT
+# define FMT_USE_NOEXCEPT 0
+#endif
+
#ifndef FMT_NOEXCEPT
# if FMT_USE_NOEXCEPT || FMT_HAS_FEATURE(cxx_noexcept) || \
- (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11)
+ (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || \
+ _MSC_VER >= 1900
# define FMT_NOEXCEPT noexcept
# else
# define FMT_NOEXCEPT throw()
# endif
#endif
+// Check if exceptions are disabled.
+#if defined(__GNUC__) && !defined(__EXCEPTIONS)
+# define FMT_EXCEPTIONS 0
+#endif
+#if defined(_MSC_VER) && !_HAS_EXCEPTIONS
+# define FMT_EXCEPTIONS 0
+#endif
+#ifndef FMT_EXCEPTIONS
+# define FMT_EXCEPTIONS 1
+#endif
+
+#ifndef FMT_THROW
+# if FMT_EXCEPTIONS
+# define FMT_THROW(x) throw x
+# else
+# define FMT_THROW(x) assert(false)
+# endif
+#endif
+
// A macro to disallow the copy constructor and operator= functions
// This should be used in the private: declarations for a class
+#ifndef FMT_USE_DELETED_FUNCTIONS
+# define FMT_USE_DELETED_FUNCTIONS 0
+#endif
+
#if FMT_USE_DELETED_FUNCTIONS || FMT_HAS_FEATURE(cxx_deleted_functions) || \
(FMT_GCC_VERSION >= 404 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1800
# define FMT_DELETED_OR_UNDEFINED = delete
@@ -177,11 +227,93 @@ inline uint32_t clzll(uint64_t x) {
TypeName& operator=(const TypeName&)
#endif
+#ifndef FMT_USE_USER_DEFINED_LITERALS
+// All compilers which support UDLs also support variadic templates. This
+// makes the fmt::literals implementation easier. However, an explicit check
+// for variadic templates is added here just in case.
+# define FMT_USE_USER_DEFINED_LITERALS \
+ FMT_USE_VARIADIC_TEMPLATES && FMT_USE_RVALUE_REFERENCES && \
+ (FMT_HAS_FEATURE(cxx_user_literals) || \
+ (FMT_GCC_VERSION >= 407 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1900)
+#endif
+
#ifndef FMT_ASSERT
# define FMT_ASSERT(condition, message) assert((condition) && message)
#endif
namespace fmt {
+namespace internal {
+struct DummyInt {
+ int data[2];
+ operator int() const { return 0; }
+};
+typedef std::numeric_limits<fmt::internal::DummyInt> FPUtil;
+
+// Dummy implementations of system functions such as signbit and ecvt called
+// if the latter are not available.
+inline DummyInt signbit(...) { return DummyInt(); }
+inline DummyInt _ecvt_s(...) { return DummyInt(); }
+inline DummyInt isinf(...) { return DummyInt(); }
+inline DummyInt _finite(...) { return DummyInt(); }
+inline DummyInt isnan(...) { return DummyInt(); }
+inline DummyInt _isnan(...) { return DummyInt(); }
+
+// A helper function to suppress bogus "conditional expression is constant"
+// warnings.
+template <typename T>
+inline T check(T value) { return value; }
+}
+} // namespace fmt
+
+namespace std {
+// Standard permits specialization of std::numeric_limits. This specialization
+// is used to resolve ambiguity between isinf and std::isinf in glibc:
+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48891
+// and the same for isnan and signbit.
+template <>
+class numeric_limits<fmt::internal::DummyInt> :
+ public std::numeric_limits<int> {
+ public:
+ // Portable version of isinf.
+ template <typename T>
+ static bool isinfinity(T x) {
+ using namespace fmt::internal;
+ // The resolution "priority" is:
+ // isinf macro > std::isinf > ::isinf > fmt::internal::isinf
+ if (check(sizeof(isinf(x)) == sizeof(bool) ||
+ sizeof(isinf(x)) == sizeof(int))) {
+ return isinf(x) != 0;
+ }
+ return !_finite(static_cast<double>(x));
+ }
+
+ // Portable version of isnan.
+ template <typename T>
+ static bool isnotanumber(T x) {
+ using namespace fmt::internal;
+ if (check(sizeof(isnan(x)) == sizeof(bool) ||
+ sizeof(isnan(x)) == sizeof(int))) {
+ return isnan(x) != 0;
+ }
+ return _isnan(static_cast<double>(x)) != 0;
+ }
+
+ // Portable version of signbit.
+ static bool isnegative(double x) {
+ using namespace fmt::internal;
+ if (check(sizeof(signbit(x)) == sizeof(int)))
+ return signbit(x) != 0;
+ if (x < 0) return true;
+ if (!isnotanumber(x)) return false;
+ int dec = 0, sign = 0;
+ char buffer[2]; // The buffer size must be >= 2 or _ecvt_s will fail.
+ _ecvt_s(buffer, sizeof(buffer), x, 0, &dec, &sign);
+ return sign != 0;
+ }
+};
+} // namespace std
+
+namespace fmt {
// Fix the warning about long long on older versions of GCC
// that don't support the diagnostic pragma.
@@ -207,7 +339,7 @@ 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:
+------------+-------------------------+
@@ -270,22 +402,38 @@ class BasicStringRef {
/** Returns the string size. */
std::size_t size() const { return size_; }
+ // Lexicographically compare this string reference to other.
+ int compare(BasicStringRef other) const {
+ std::size_t size = size_ < other.size_ ? size_ : other.size_;
+ int result = std::char_traits<Char>::compare(data_, other.data_, size);
+ if (result == 0)
+ result = size_ == other.size_ ? 0 : (size_ < other.size_ ? -1 : 1);
+ return result;
+ }
+
friend bool operator==(BasicStringRef lhs, BasicStringRef rhs) {
- return lhs.data_ == rhs.data_;
+ return lhs.compare(rhs) == 0;
}
friend bool operator!=(BasicStringRef lhs, BasicStringRef rhs) {
- return lhs.data_ != rhs.data_;
+ return lhs.compare(rhs) != 0;
}
friend bool operator<(BasicStringRef lhs, BasicStringRef rhs) {
- return std::lexicographical_compare(
- lhs.data_, lhs.data_ + lhs.size_, rhs.data_, rhs.data_ + rhs.size_);
+ return lhs.compare(rhs) < 0;
+ }
+ friend bool operator<=(BasicStringRef lhs, BasicStringRef rhs) {
+ return lhs.compare(rhs) <= 0;
+ }
+ friend bool operator>(BasicStringRef lhs, BasicStringRef rhs) {
+ return lhs.compare(rhs) > 0;
+ }
+ friend bool operator>=(BasicStringRef lhs, BasicStringRef rhs) {
+ return lhs.compare(rhs) >= 0;
}
};
typedef BasicStringRef<char> StringRef;
typedef BasicStringRef<wchar_t> WStringRef;
-
/**
\rst
A reference to a null terminated string. It can be constructed from a C
@@ -348,7 +496,7 @@ namespace internal {
// to avoid dynamic memory allocation.
enum { INLINE_BUFFER_SIZE = 500 };
-#if _SECURE_SCL
+#if FMT_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) {
@@ -433,11 +581,13 @@ class Buffer {
template <typename T>
template <typename U>
void Buffer<T>::append(const U *begin, const U *end) {
- std::ptrdiff_t num_elements = end - begin;
- if (size_ + num_elements > capacity_)
- grow(size_ + num_elements);
- std::copy(begin, end, internal::make_ptr(ptr_, capacity_) + size_);
- size_ += num_elements;
+ assert(begin <= end);
+ std::size_t new_size = size_ + (end - begin);
+ if (new_size > capacity_)
+ grow(new_size);
+ std::uninitialized_copy(begin, end,
+ internal::make_ptr(ptr_, capacity_) + size_);
+ size_ = new_size;
}
namespace internal {
@@ -449,9 +599,9 @@ 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_);
+ // Deallocate memory allocated by the buffer.
+ void deallocate() {
+ if (this->ptr_ != data_) Allocator::deallocate(this->ptr_, this->capacity_);
}
protected:
@@ -460,7 +610,7 @@ class MemoryBuffer : private Allocator, public Buffer<T> {
public:
explicit MemoryBuffer(const Allocator &alloc = Allocator())
: Allocator(alloc), Buffer<T>(data_, SIZE) {}
- ~MemoryBuffer() { free(); }
+ ~MemoryBuffer() { deallocate(); }
#if FMT_USE_RVALUE_REFERENCES
private:
@@ -472,12 +622,12 @@ class MemoryBuffer : private Allocator, public Buffer<T> {
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_));
+ std::uninitialized_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.
+ // when deallocating.
other.ptr_ = other.data_;
}
}
@@ -489,7 +639,7 @@ class MemoryBuffer : private Allocator, public Buffer<T> {
MemoryBuffer &operator=(MemoryBuffer &&other) {
assert(this != &other);
- free();
+ deallocate();
move(other);
return *this;
}
@@ -501,12 +651,13 @@ class MemoryBuffer : private Allocator, public Buffer<T> {
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);
+ std::size_t new_capacity = this->capacity_ + this->capacity_ / 2;
+ if (size > new_capacity)
+ new_capacity = size;
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::uninitialized_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;
@@ -515,7 +666,7 @@ void MemoryBuffer<T, SIZE, Allocator>::grow(std::size_t size) {
// 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);
+ Allocator::deallocate(old_ptr, old_capacity);
}
// A fixed-size buffer.
@@ -528,50 +679,15 @@ class FixedBuffer : public fmt::Buffer<Char> {
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
+#if FMT_SECURE_SCL
typedef stdext::checked_array_iterator<Char*> CharPtr;
#else
typedef Char *CharPtr;
#endif
- static Char cast(wchar_t value) { return static_cast<Char>(value); }
+ static Char cast(int value) { return static_cast<Char>(value); }
};
template <typename Char>
@@ -712,24 +828,23 @@ inline unsigned count_digits(uint32_t n) {
// 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;
+ buffer += 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;
+ unsigned index = static_cast<unsigned>((value % 100) * 2);
value /= 100;
- buffer[num_digits] = Data::DIGITS[index + 1];
- buffer[num_digits - 1] = Data::DIGITS[index];
- num_digits -= 2;
+ *--buffer = Data::DIGITS[index + 1];
+ *--buffer = Data::DIGITS[index];
}
if (value < 10) {
- *buffer = static_cast<char>('0' + value);
+ *--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];
+ *--buffer = Data::DIGITS[index + 1];
+ *--buffer = Data::DIGITS[index];
}
#ifndef _WIN32
@@ -833,48 +948,80 @@ template <typename Char>
struct NamedArg;
template <typename T = void>
-struct None {};
+struct Null {};
// 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 Null<T> Supported;
typedef T Unsupported;
};
template <typename T>
struct WCharHelper<T, wchar_t> {
typedef T Supported;
- typedef None<T> Unsupported;
+ typedef Null<T> Unsupported;
};
+typedef char Yes[1];
+typedef char No[2];
+
+// These are non-members to workaround an overload resolution bug in bcc32.
+Yes &convert(fmt::ULongLong);
+Yes &convert(std::ostream &);
+No &convert(...);
+
template <typename T>
-class IsConvertibleToInt {
- private:
- typedef char yes[1];
- typedef char no[2];
+T &get();
+
+struct DummyStream : std::ostream {
+ // Hide all operator<< overloads from std::ostream.
+ void operator<<(Null<>);
+};
- static const T &get();
+No &operator<<(std::ostream &, int);
- static yes &check(fmt::ULongLong);
- static no &check(...);
-
- public:
- enum { value = (sizeof(check(get())) == sizeof(yes)) };
+template<typename T, bool ENABLE_CONVERSION>
+struct ConvertToIntImpl {
+ enum { value = false };
+};
+
+template<typename T>
+struct ConvertToIntImpl<T, true> {
+ // Convert to int only if T doesn't have an overloaded operator<<.
+ enum {
+ value = sizeof(convert(get<DummyStream>() << get<T>())) == sizeof(No)
+ };
+};
+
+template<typename T, bool ENABLE_CONVERSION>
+struct ConvertToIntImpl2 {
+ enum { value = false };
};
-#define FMT_CONVERTIBLE_TO_INT(Type) \
+template<typename T>
+struct ConvertToIntImpl2<T, true> {
+ enum {
+ // Don't convert numeric types.
+ value = ConvertToIntImpl<T, !std::numeric_limits<T>::is_specialized>::value
+ };
+};
+
+template<typename T>
+struct ConvertToInt {
+ enum { enable_conversion = sizeof(convert(get<T>())) == sizeof(Yes) };
+ enum { value = ConvertToIntImpl2<T, enable_conversion>::value };
+};
+
+#define FMT_DISABLE_CONVERSION_TO_INT(Type) \
template <> \
- class IsConvertibleToInt<Type> { \
- public: \
- enum { value = 1 }; \
- }
+ struct ConvertToInt<Type> { enum { value = 0 }; }
// Silence warnings about convering float to int.
-FMT_CONVERTIBLE_TO_INT(float);
-FMT_CONVERTIBLE_TO_INT(double);
-FMT_CONVERTIBLE_TO_INT(long double);
+FMT_DISABLE_CONVERSION_TO_INT(float);
+FMT_DISABLE_CONVERSION_TO_INT(double);
+FMT_DISABLE_CONVERSION_TO_INT(long double);
template<bool B, class T = void>
struct EnableIf {};
@@ -888,13 +1035,19 @@ struct Conditional { typedef T type; };
template<class T, class F>
struct Conditional<false, T, F> { typedef F type; };
-// A helper function to suppress bogus "conditional expression is constant"
-// warnings.
-inline bool check(bool value) { return value; }
+// For bcc32 which doesn't understand ! in template arguments.
+template<bool>
+struct Not { enum { value = 0 }; };
+
+template<>
+struct Not<false> { enum { value = 1 }; };
// Makes an Arg object from any type.
-template <typename Char>
+template <typename Formatter>
class MakeValue : public Arg {
+ public:
+ typedef typename Formatter::Char Char;
+
private:
// The following two methods are private to disallow formatting of
// arbitrary pointers. If you want to output a pointer cast it to
@@ -910,7 +1063,9 @@ class MakeValue : public Arg {
// 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").
+#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED)
MakeValue(typename WCharHelper<wchar_t, Char>::Unsupported);
+#endif
MakeValue(typename WCharHelper<wchar_t *, Char>::Unsupported);
MakeValue(typename WCharHelper<const wchar_t *, Char>::Unsupported);
MakeValue(typename WCharHelper<const std::wstring &, Char>::Unsupported);
@@ -930,7 +1085,7 @@ class MakeValue : public Arg {
template <typename T>
static void format_custom_arg(
void *formatter, const void *arg, void *format_str_ptr) {
- format(*static_cast<BasicFormatter<Char>*>(formatter),
+ format(*static_cast<Formatter*>(formatter),
*static_cast<const Char**>(format_str_ptr),
*static_cast<const T*>(arg));
}
@@ -979,14 +1134,16 @@ class MakeValue : public Arg {
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(signed char, int_value, INT)
+ FMT_MAKE_VALUE(unsigned char, uint_value, UINT)
FMT_MAKE_VALUE(char, int_value, CHAR)
+#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED)
MakeValue(typename WCharHelper<wchar_t, Char>::Supported value) {
int_value = value;
}
static uint64_t type(wchar_t) { return Arg::CHAR; }
+#endif
#define FMT_MAKE_STR_VALUE(Type, TYPE) \
MakeValue(Type value) { set_string(value); } \
@@ -1016,24 +1173,25 @@ class MakeValue : public Arg {
template <typename T>
MakeValue(const T &value,
- typename EnableIf<!IsConvertibleToInt<T>::value, int>::type = 0) {
+ typename EnableIf<Not<
+ ConvertToInt<T>::value>::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) {
+ typename EnableIf<ConvertToInt<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;
+ return ConvertToInt<T>::value ? Arg::INT : Arg::CUSTOM;
}
// Additional template param `Char_` is needed here because make_type always
- // uses MakeValue<char>.
+ // uses char.
template <typename Char_>
MakeValue(const NamedArg<Char_> &value) { pointer = &value; }
@@ -1045,10 +1203,12 @@ template <typename Char>
struct NamedArg : Arg {
BasicStringRef<Char> name;
+ typedef internal::MakeValue< BasicFormatter<Char> > MakeValue;
+
template <typename T>
- NamedArg(BasicStringRef<Char> name, const T &value)
- : name(name), Arg(MakeValue<Char>(value)) {
- type = static_cast<internal::Arg::Type>(MakeValue<Char>::type(value));
+ NamedArg(BasicStringRef<Char> argname, const T &value)
+ : Arg(MakeValue(value)), name(argname) {
+ type = static_cast<Arg::Type>(MakeValue::type(value));
}
};
@@ -1118,6 +1278,9 @@ class ArgVisitor {
return FMT_DISPATCH(visit_unhandled_arg());
}
+ Result visit_cstring(const char *) {
+ return FMT_DISPATCH(visit_unhandled_arg());
+ }
Result visit_string(Arg::StringValue<char>) {
return FMT_DISPATCH(visit_unhandled_arg());
}
@@ -1145,18 +1308,15 @@ class ArgVisitor {
case Arg::ULONG_LONG:
return FMT_DISPATCH(visit_ulong_long(arg.ulong_long_value));
case Arg::BOOL:
- return FMT_DISPATCH(visit_bool(arg.int_value));
+ return FMT_DISPATCH(visit_bool(arg.int_value != 0));
case Arg::CHAR:
return FMT_DISPATCH(visit_char(arg.int_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::CSTRING: {
- Arg::StringValue<char> str = arg.string;
- str.size = 0;
- return FMT_DISPATCH(visit_string(str));
- }
+ case Arg::CSTRING:
+ return FMT_DISPATCH(visit_cstring(arg.string.value));
case Arg::STRING:
return FMT_DISPATCH(visit_string(arg.string));
case Arg::WSTRING:
@@ -1174,9 +1334,6 @@ class RuntimeError : public std::runtime_error {
RuntimeError() : std::runtime_error("") {}
};
-template <typename Impl, typename Char>
-class BasicArgFormatter;
-
template <typename Char>
class PrintfArgFormatter;
@@ -1248,111 +1405,6 @@ class ArgList {
}
};
-struct FormatSpec;
-
-namespace internal {
-
-template <typename Char>
-class ArgMap {
- private:
- typedef std::map<fmt::BasicStringRef<Char>, internal::Arg> MapType;
- typedef typename MapType::value_type Pair;
-
- MapType map_;
-
- public:
- void init(const ArgList &args);
-
- const internal::Arg* find(const fmt::BasicStringRef<Char> &name) const {
- typename MapType::const_iterator it = map_.find(name);
- return it != map_.end() ? &it->second : 0;
- }
-};
-
-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:
- const ArgList &args() const { return args_; }
-
- 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);
-
- bool check_no_auto_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,
- BasicCStringRef<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_;
- internal::ArgMap<Char> map_;
-
- FMT_DISALLOW_COPY_AND_ASSIGN(BasicFormatter);
-
- using FormatterBase::get_arg;
-
- // Checks if manual indexing is used and returns the argument with
- // specified name.
- internal::Arg get_arg(BasicStringRef<Char> arg_name, const char *&error);
-
- // Parses argument index and returns corresponding argument.
- internal::Arg parse_arg_index(const Char *&s);
-
- // Parses argument name and returns corresponding argument.
- internal::Arg parse_arg_name(const Char *&s);
-
- public:
- explicit BasicFormatter(BasicWriter<Char> &w) : writer_(w) {}
-
- BasicWriter<Char> &writer() { return writer_; }
-
- void format(BasicCStringRef<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
};
@@ -1574,6 +1626,242 @@ inline StrFormatSpec<wchar_t> pad(
return StrFormatSpec<wchar_t>(str, width, fill);
}
+namespace internal {
+
+template <typename Char>
+class ArgMap {
+ private:
+ typedef std::map<fmt::BasicStringRef<Char>, internal::Arg> MapType;
+ typedef typename MapType::value_type Pair;
+
+ MapType map_;
+
+ public:
+ void init(const ArgList &args);
+
+ const internal::Arg* find(const fmt::BasicStringRef<Char> &name) const {
+ typename MapType::const_iterator it = map_.find(name);
+ return it != map_.end() ? &it->second : 0;
+ }
+};
+
+template <typename Impl, typename Char>
+class ArgFormatterBase : public ArgVisitor<Impl, void> {
+ private:
+ BasicWriter<Char> &writer_;
+ FormatSpec &spec_;
+
+ FMT_DISALLOW_COPY_AND_ASSIGN(ArgFormatterBase);
+
+ void write_pointer(const void *p) {
+ spec_.flags_ = HASH_FLAG;
+ spec_.type_ = 'x';
+ writer_.write_int(reinterpret_cast<uintptr_t>(p), spec_);
+ }
+
+ protected:
+ BasicWriter<Char> &writer() { return writer_; }
+ FormatSpec &spec() { return spec_; }
+
+ void write(bool value) {
+ const char *str_value = value ? "true" : "false";
+ Arg::StringValue<char> str = { str_value, std::strlen(str_value) };
+ writer_.write_str(str, spec_);
+ }
+
+ void write(const char *value) {
+ Arg::StringValue<char> str = {value, value != 0 ? std::strlen(value) : 0};
+ writer_.write_str(str, spec_);
+ }
+
+ public:
+ ArgFormatterBase(BasicWriter<Char> &w, FormatSpec &s)
+ : writer_(w), spec_(s) {}
+
+ 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_bool(bool value) {
+ if (spec_.type_)
+ return visit_any_int(value);
+ write(value);
+ }
+
+ 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 BasicWriter<Char>::CharPtr CharPtr;
+ Char fill = internal::CharTraits<Char>::cast(spec_.fill());
+ CharPtr out = CharPtr();
+ const unsigned CHAR_WIDTH = 1;
+ if (spec_.width_ > CHAR_WIDTH) {
+ out = writer_.grow_buffer(spec_.width_);
+ if (spec_.align_ == ALIGN_RIGHT) {
+ std::uninitialized_fill_n(out, spec_.width_ - CHAR_WIDTH, fill);
+ out += spec_.width_ - CHAR_WIDTH;
+ } else if (spec_.align_ == ALIGN_CENTER) {
+ out = writer_.fill_padding(out, spec_.width_,
+ internal::check(CHAR_WIDTH), fill);
+ } else {
+ std::uninitialized_fill_n(out + CHAR_WIDTH,
+ spec_.width_ - CHAR_WIDTH, fill);
+ }
+ } else {
+ out = writer_.grow_buffer(CHAR_WIDTH);
+ }
+ *out = internal::CharTraits<Char>::cast(value);
+ }
+
+ void visit_cstring(const char *value) {
+ if (spec_.type_ == 'p')
+ return write_pointer(value);
+ write(value);
+ }
+
+ void visit_string(Arg::StringValue<char> value) {
+ writer_.write_str(value, spec_);
+ }
+
+ using ArgVisitor<Impl, void>::visit_wstring;
+
+ void visit_wstring(Arg::StringValue<Char> value) {
+ writer_.write_str(value, spec_);
+ }
+
+ void visit_pointer(const void *value) {
+ if (spec_.type_ && spec_.type_ != 'p')
+ report_unknown_type(spec_.type_, "pointer");
+ write_pointer(value);
+ }
+};
+
+// An argument formatter.
+template <typename Char>
+class BasicArgFormatter :
+ public ArgFormatterBase<BasicArgFormatter<Char>, Char> {
+ private:
+ BasicFormatter<Char> &formatter_;
+ const Char *format_;
+
+ public:
+ BasicArgFormatter(BasicFormatter<Char> &f, FormatSpec &s, const Char *fmt)
+ : ArgFormatterBase<BasicArgFormatter<Char>, Char>(f.writer(), s),
+ formatter_(f), format_(fmt) {}
+
+ void visit_custom(Arg::CustomValue c) {
+ c.format(&formatter_, c.value, &format_);
+ }
+};
+
+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:
+ const ArgList &args() const { return args_; }
+
+ explicit FormatterBase(const ArgList &args) {
+ args_ = args;
+ next_arg_index_ = 0;
+ }
+
+ // Returns the next argument.
+ Arg 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();
+ }
+
+ // Checks if manual indexing is used and returns the argument with
+ // specified index.
+ Arg get_arg(unsigned arg_index, const char *&error) {
+ return check_no_auto_index(error) ? do_get_arg(arg_index, error) : Arg();
+ }
+
+ bool check_no_auto_index(const char *&error) {
+ if (next_arg_index_ > 0) {
+ error = "cannot switch from automatic to manual argument indexing";
+ return false;
+ }
+ next_arg_index_ = -1;
+ return true;
+ }
+
+ 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:
+ explicit PrintfFormatter(const ArgList &args) : FormatterBase(args) {}
+ void format(BasicWriter<Char> &writer, BasicCStringRef<Char> format_str);
+};
+} // namespace internal
+
+// A formatter.
+template <typename CharType>
+class BasicFormatter : private internal::FormatterBase {
+ public:
+ typedef CharType Char;
+
+ private:
+ BasicWriter<Char> &writer_;
+ internal::ArgMap<Char> map_;
+
+ FMT_DISALLOW_COPY_AND_ASSIGN(BasicFormatter);
+
+ using internal::FormatterBase::get_arg;
+
+ // Checks if manual indexing is used and returns the argument with
+ // specified name.
+ internal::Arg get_arg(BasicStringRef<Char> arg_name, const char *&error);
+
+ // Parses argument index and returns corresponding argument.
+ internal::Arg parse_arg_index(const Char *&s);
+
+ // Parses argument name and returns corresponding argument.
+ internal::Arg parse_arg_name(const Char *&s);
+
+ public:
+ BasicFormatter(const ArgList &args, BasicWriter<Char> &w)
+ : internal::FormatterBase(args), writer_(w) {}
+
+ BasicWriter<Char> &writer() { return writer_; }
+
+ void format(BasicCStringRef<Char> format_str);
+
+ const Char *format(const Char *&format_str, const internal::Arg &arg);
+};
+
// Generates a comma-separated list with results of applying f to
// numbers 0..n-1.
# define FMT_GEN(n, f) FMT_GEN##n(f)
@@ -1597,7 +1885,9 @@ 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); }
+inline uint64_t make_type(const T &arg) {
+ return MakeValue< BasicFormatter<char> >::type(arg);
+}
template <unsigned N>
struct ArgArray {
@@ -1621,7 +1911,8 @@ inline void do_set_types(Arg *) {}
template <typename T, typename... Args>
inline void do_set_types(Arg *args, const T &arg, const Args & ... tail) {
- args->type = static_cast<Arg::Type>(MakeValue<T>::type(arg));
+ args->type = static_cast<Arg::Type>(
+ MakeValue< BasicFormatter<char> >::type(arg));
do_set_types(args + 1, tail...);
}
@@ -1637,24 +1928,24 @@ inline void set_types(Value *, const Args & ...) {
// Do nothing as types are passed separately from values.
}
-template <typename Char, typename Value>
+template <typename Formatter, typename Value>
inline void store_args(Value *) {}
-template <typename Char, typename Arg, typename T, typename... Args>
+template <typename Formatter, typename Arg, typename T, typename... Args>
inline void store_args(Arg *args, const T &arg, const Args & ... tail) {
// Assign only the Value subobject of Arg and don't overwrite type (if any)
// that is assigned by set_types.
Value &value = *args;
- value = MakeValue<Char>(arg);
- store_args<Char>(args + 1, tail...);
+ value = MakeValue<Formatter>(arg);
+ store_args<Formatter>(args + 1, tail...);
}
-template <typename Char, typename... Args>
+template <typename Formatter, typename... Args>
ArgList make_arg_list(typename ArgArray<sizeof...(Args)>::Type array,
const Args & ... args) {
if (check(sizeof...(Args) >= ArgList::MAX_PACKED_ARGS))
set_types(array, args...);
- store_args<Char>(array, args...);
+ store_args<Formatter>(array, args...);
return ArgList(make_type(args...), array);
}
#else
@@ -1677,13 +1968,47 @@ inline uint64_t make_type(FMT_GEN15(FMT_ARG_TYPE_DEFAULT)) {
(t12.type << 48) | (t13.type << 52) | (t14.type << 56);
}
#endif
+
+template <class Char>
+class FormatBuf : public std::basic_streambuf<Char> {
+ private:
+ typedef typename std::basic_streambuf<Char>::int_type int_type;
+ typedef typename std::basic_streambuf<Char>::traits_type traits_type;
+
+ Buffer<Char> &buffer_;
+ Char *start_;
+
+ public:
+ FormatBuf(Buffer<Char> &buffer) : buffer_(buffer), start_(&buffer[0]) {
+ this->setp(start_, start_ + buffer_.capacity());
+ }
+
+ int_type overflow(int_type ch = traits_type::eof()) {
+ if (!traits_type::eq_int_type(ch, traits_type::eof())) {
+ size_t size = this->pptr() - start_;
+ buffer_.resize(size);
+ buffer_.reserve(size * 2);
+
+ start_ = &buffer_[0];
+ start_[size] = traits_type::to_char_type(ch);
+ this->setp(start_+ size + 1, start_ + size * 2);
+ }
+ return ch;
+ }
+
+ size_t size() const {
+ return this->pptr() - start_;
+ }
+};
} // 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)
+# define FMT_ASSIGN_char(n) \
+ arr[n] = fmt::internal::MakeValue< fmt::BasicFormatter<char> >(v##n)
+# define FMT_ASSIGN_wchar_t(n) \
+ arr[n] = fmt::internal::MakeValue< fmt::BasicFormatter<wchar_t> >(v##n)
#if FMT_USE_VARIADIC_TEMPLATES
// Defines a variadic function returning void.
@@ -1691,7 +2016,8 @@ inline uint64_t make_type(FMT_GEN15(FMT_ARG_TYPE_DEFAULT)) {
template <typename... Args> \
void func(arg_type arg0, const Args & ... args) { \
typename fmt::internal::ArgArray<sizeof...(Args)>::Type array; \
- func(arg0, fmt::internal::make_arg_list<Char>(array, args...)); \
+ func(arg0, fmt::internal::make_arg_list< \
+ fmt::BasicFormatter<Char> >(array, args...)); \
}
// Defines a variadic constructor.
@@ -1699,12 +2025,14 @@ inline uint64_t make_type(FMT_GEN15(FMT_ARG_TYPE_DEFAULT)) {
template <typename... Args> \
ctor(arg0_type arg0, arg1_type arg1, const Args & ... args) { \
typename fmt::internal::ArgArray<sizeof...(Args)>::Type array; \
- func(arg0, arg1, fmt::internal::make_arg_list<Char>(array, args...)); \
+ func(arg0, arg1, fmt::internal::make_arg_list< \
+ fmt::BasicFormatter<Char> >(array, args...)); \
}
#else
-# define FMT_MAKE_REF(n) fmt::internal::MakeValue<Char>(v##n)
+# define FMT_MAKE_REF(n) \
+ fmt::internal::MakeValue< fmt::BasicFormatter<Char> >(v##n)
# define FMT_MAKE_REF2(n) v##n
// Defines a wrapper for a function taking one argument of type arg_type
@@ -1799,7 +2127,7 @@ class SystemError : public internal::RuntimeError {
*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
@@ -1847,7 +2175,7 @@ class BasicWriter {
typedef typename internal::CharTraits<Char>::CharPtr CharPtr;
-#if _SECURE_SCL
+#if FMT_SECURE_SCL
// Returns pointer value.
static Char *get(CharPtr p) { return p.base(); }
#else
@@ -1867,12 +2195,33 @@ class BasicWriter {
return internal::make_ptr(&buffer_[size], n);
}
+ // Writes an unsigned decimal integer.
+ template <typename UInt>
+ Char *write_unsigned_decimal(UInt value, unsigned prefix_size = 0) {
+ unsigned num_digits = internal::count_digits(value);
+ Char *ptr = get(grow_buffer(prefix_size + num_digits));
+ internal::format_decimal(ptr + prefix_size, value, num_digits);
+ return ptr;
+ }
+
+ // Writes a decimal integer.
+ template <typename Int>
+ void write_decimal(Int value) {
+ typename internal::IntTraits<Int>::MainType abs_value = value;
+ if (internal::is_negative(value)) {
+ abs_value = 0 - abs_value;
+ *write_unsigned_decimal(abs_value, 1) = '-';
+ } else {
+ write_unsigned_decimal(abs_value, 0);
+ }
+ }
+
// 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);
+ std::uninitialized_copy(prefix, prefix + prefix_size, p);
return p + size - 1;
}
@@ -1890,12 +2239,11 @@ class BasicWriter {
// Writes a formatted string.
template <typename StrChar>
- CharPtr write_str(
- const StrChar *s, std::size_t size, const AlignSpec &spec);
+ 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);
+ 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
@@ -1915,7 +2263,7 @@ class BasicWriter {
void append_float_length(Char *&, T) {}
template <typename Impl, typename Char_>
- friend class internal::BasicArgFormatter;
+ friend class internal::ArgFormatterBase;
friend class internal::PrintfArgFormatter<Char>;
@@ -1967,7 +2315,7 @@ class BasicWriter {
/**
\rst
Writes formatted data.
-
+
*args* is an argument list representing arbitrary arguments.
**Example**::
@@ -1990,24 +2338,27 @@ class BasicWriter {
\endrst
*/
void write(BasicCStringRef<Char> format, ArgList args) {
- BasicFormatter<Char>(*this).format(format, args);
+ BasicFormatter<Char>(args, *this).format(format);
}
FMT_VARIADIC_VOID(write, BasicCStringRef<Char>)
BasicWriter &operator<<(int value) {
- return *this << IntFormatSpec<int>(value);
+ write_decimal(value);
+ return *this;
}
BasicWriter &operator<<(unsigned value) {
return *this << IntFormatSpec<unsigned>(value);
}
BasicWriter &operator<<(long value) {
- return *this << IntFormatSpec<long>(value);
+ write_decimal(value);
+ return *this;
}
BasicWriter &operator<<(unsigned long value) {
return *this << IntFormatSpec<unsigned long>(value);
}
BasicWriter &operator<<(LongLong value) {
- return *this << IntFormatSpec<LongLong>(value);
+ write_decimal(value);
+ return *this;
}
/**
@@ -2093,21 +2444,43 @@ typename BasicWriter<Char>::CharPtr BasicWriter<Char>::write_str(
out = grow_buffer(spec.width());
Char fill = internal::CharTraits<Char>::cast(spec.fill());
if (spec.align() == ALIGN_RIGHT) {
- std::fill_n(out, spec.width() - size, fill);
+ std::uninitialized_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);
+ std::uninitialized_fill_n(out + size, spec.width() - size, fill);
}
} else {
out = grow_buffer(size);
}
- std::copy(s, s + size, out);
+ std::uninitialized_copy(s, s + size, out);
return out;
}
template <typename Char>
+template <typename StrChar>
+void BasicWriter<Char>::write_str(
+ const internal::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"));
+ return;
+ }
+ }
+ 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>
typename BasicWriter<Char>::CharPtr
BasicWriter<Char>::fill_padding(
CharPtr buffer, unsigned total_size,
@@ -2115,10 +2488,11 @@ typename BasicWriter<Char>::CharPtr
std::size_t padding = total_size - content_size;
std::size_t left_padding = padding / 2;
Char fill_char = internal::CharTraits<Char>::cast(fill);
- std::fill_n(buffer, left_padding, fill_char);
+ std::uninitialized_fill_n(buffer, left_padding, fill_char);
buffer += left_padding;
CharPtr content = buffer;
- std::fill_n(buffer + content_size, padding - left_padding, fill_char);
+ std::uninitialized_fill_n(buffer + content_size,
+ padding - left_padding, fill_char);
return content;
}
@@ -2144,42 +2518,42 @@ typename BasicWriter<Char>::CharPtr
unsigned fill_size = width - number_size;
if (align != ALIGN_LEFT) {
CharPtr p = grow_buffer(fill_size);
- std::fill(p, p + fill_size, fill);
+ std::uninitialized_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);
+ std::uninitialized_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);
+ std::uninitialized_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);
+ std::uninitialized_copy(prefix, prefix + prefix_size, p);
p += size;
- std::fill(p, end, fill);
+ std::uninitialized_fill(p, end, fill);
} else if (align == ALIGN_CENTER) {
p = fill_padding(p, width, size, fill);
- std::copy(prefix, prefix + prefix_size, p);
+ std::uninitialized_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);
+ p = std::uninitialized_copy(prefix, prefix + prefix_size, p);
size -= prefix_size;
}
} else {
- std::copy(prefix, prefix + prefix_size, end - size);
+ std::uninitialized_copy(prefix, prefix + prefix_size, end - size);
}
- std::fill(p, end - size, fill);
+ std::uninitialized_fill(p, end - size, fill);
p = end;
}
return p - 1;
@@ -2241,7 +2615,7 @@ void BasicWriter<Char>::write_int(T value, Spec spec) {
Char *p = get(prepare_int_buffer(num_digits, spec, prefix, prefix_size));
n = abs_value;
do {
- *p-- = '0' + (n & 1);
+ *p-- = static_cast<Char>('0' + (n & 1));
} while ((n >>= 1) != 0);
break;
}
@@ -2256,7 +2630,7 @@ void BasicWriter<Char>::write_int(T value, Spec spec) {
Char *p = get(prepare_int_buffer(num_digits, spec, prefix, prefix_size));
n = abs_value;
do {
- *p-- = '0' + (n & 7);
+ *p-- = static_cast<Char>('0' + (n & 7));
} while ((n >>= 3) != 0);
break;
}
@@ -2295,16 +2669,16 @@ void BasicWriter<Char>::write_double(
}
char sign = 0;
- // Use getsign instead of value < 0 because the latter is always
+ // Use isnegative instead of value < 0 because the latter is always
// false for NaN.
- if (internal::getsign(static_cast<double>(value))) {
+ if (internal::FPUtil::isnegative(static_cast<double>(value))) {
sign = '-';
value = -value;
} else if (spec.flag(SIGN_FLAG)) {
sign = spec.flag(PLUS_FLAG) ? '+' : ' ';
}
- if (value != value) {
+ if (internal::FPUtil::isnotanumber(value)) {
// Format NaN ourselves because sprintf's output is not consistent
// across platforms.
std::size_t nan_size = 4;
@@ -2319,7 +2693,7 @@ void BasicWriter<Char>::write_double(
return;
}
- if (internal::isinfinity(value)) {
+ if (internal::FPUtil::isinfinity(value)) {
// Format infinity ourselves because sprintf's output is not consistent
// across platforms.
std::size_t inf_size = 4;
@@ -2337,7 +2711,7 @@ void BasicWriter<Char>::write_double(
std::size_t offset = buffer_.size();
unsigned width = spec.width();
if (sign) {
- buffer_.reserve(buffer_.size() + (std::max)(width, 1u));
+ buffer_.reserve(buffer_.size() + (width > 1u ? width : 1u));
if (width > 0)
--width;
++offset;
@@ -2372,7 +2746,7 @@ void BasicWriter<Char>::write_double(
Char fill = internal::CharTraits<Char>::cast(spec.fill());
for (;;) {
std::size_t buffer_size = buffer_.capacity() - offset;
-#if _MSC_VER
+#ifdef _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.
@@ -2399,7 +2773,7 @@ void BasicWriter<Char>::write_double(
spec.width() > static_cast<unsigned>(n)) {
width = spec.width();
CharPtr p = grow_buffer(width);
- std::copy(p, p + n, p + (width - n) / 2);
+ std::memmove(get(p) + (width - n) / 2, get(p), n * sizeof(Char));
fill_padding(p, spec.width(), n, fill);
return;
}
@@ -2492,7 +2866,7 @@ typedef BasicMemoryWriter<wchar_t> WMemoryWriter;
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.
@@ -2539,12 +2913,16 @@ 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;
- std::basic_string<Char> str = os.str();
- internal::Arg arg = internal::MakeValue<Char>(str);
- arg.type = static_cast<internal::Arg::Type>(
- internal::MakeValue<Char>::type(str));
+ internal::MemoryBuffer<Char, internal::INLINE_BUFFER_SIZE> buffer;
+
+ internal::FormatBuf<Char> format_buf(buffer);
+ std::basic_ostream<Char> output(&format_buf);
+ output << value;
+
+ BasicStringRef<Char> str(&buffer[0], format_buf.size());
+ typedef internal::MakeValue< BasicFormatter<Char> > MakeValue;
+ internal::Arg arg = MakeValue(str);
+ arg.type = static_cast<internal::Arg::Type>(MakeValue::type(str));
format_str = f.format(format_str, arg);
}
@@ -2606,7 +2984,7 @@ 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;
+ print_colored(fmt::RED, "Elapsed time: {0:.2f} seconds", 1.23);
*/
void print_colored(Color c, CStringRef format, ArgList args);
@@ -2653,20 +3031,9 @@ void print(std::FILE *f, CStringRef format_str, ArgList args);
*/
void print(CStringRef format_str, ArgList args);
-/**
- \rst
- Prints formatted data to the stream *os*.
-
- **Example**::
-
- print(cerr, "Don't {}!", "panic");
- \endrst
- */
-void print(std::ostream &os, CStringRef format_str, ArgList args);
-
template <typename Char>
void printf(BasicWriter<Char> &w, BasicCStringRef<Char> format, ArgList args) {
- internal::PrintfFormatter<Char>().format(w, format, args);
+ internal::PrintfFormatter<Char>(args).format(w, format);
}
/**
@@ -2684,6 +3051,12 @@ inline std::string sprintf(CStringRef format, ArgList args) {
return w.str();
}
+inline std::wstring sprintf(WCStringRef format, ArgList args) {
+ WMemoryWriter w;
+ printf(w, format, args);
+ return w.str();
+}
+
/**
\rst
Prints formatted data to the file *f*.
@@ -2726,7 +3099,7 @@ class FormatInt {
// 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;
+ unsigned index = static_cast<unsigned>((value % 100) * 2);
value /= 100;
*--buffer_end = internal::Data::DIGITS[index + 1];
*--buffer_end = internal::Data::DIGITS[index];
@@ -2874,7 +3247,8 @@ void arg(WStringRef, const internal::NamedArg<Char>&) FMT_DELETED_OR_UNDEFINED;
const Args & ... args) { \
typename fmt::internal::ArgArray<sizeof...(Args)>::Type array; \
call(FMT_FOR_EACH(FMT_GET_ARG_NAME, __VA_ARGS__), \
- fmt::internal::make_arg_list<Char>(array, args...)); \
+ fmt::internal::make_arg_list< \
+ fmt::BasicFormatter<Char> >(array, args...)); \
}
#else
// Defines a wrapper for a function taking __VA_ARGS__ arguments
@@ -2883,7 +3257,8 @@ void arg(WStringRef, const internal::NamedArg<Char>&) FMT_DELETED_OR_UNDEFINED;
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)) { \
- fmt::internal::ArgArray<n>::Type arr = {FMT_GEN(n, FMT_MAKE_REF_##Char)}; \
+ fmt::internal::ArgArray<n>::Type arr; \
+ FMT_GEN(n, FMT_ASSIGN_##Char); \
call(FMT_FOR_EACH(FMT_GET_ARG_NAME, __VA_ARGS__), fmt::ArgList( \
fmt::internal::make_type(FMT_GEN(n, FMT_MAKE_REF2)), arr)); \
}
@@ -2969,19 +3344,378 @@ FMT_VARIADIC(std::string, format, CStringRef)
FMT_VARIADIC_W(std::wstring, format, WCStringRef)
FMT_VARIADIC(void, print, CStringRef)
FMT_VARIADIC(void, print, std::FILE *, CStringRef)
-FMT_VARIADIC(void, print, std::ostream &, CStringRef)
+
FMT_VARIADIC(void, print_colored, Color, CStringRef)
FMT_VARIADIC(std::string, sprintf, CStringRef)
+FMT_VARIADIC_W(std::wstring, sprintf, WCStringRef)
FMT_VARIADIC(int, printf, CStringRef)
FMT_VARIADIC(int, fprintf, std::FILE *, CStringRef)
+
+#if FMT_USE_IOSTREAMS
+/**
+ \rst
+ Prints formatted data to the stream *os*.
+
+ **Example**::
+
+ print(cerr, "Don't {}!", "panic");
+ \endrst
+ */
+void print(std::ostream &os, CStringRef format_str, ArgList args);
+FMT_VARIADIC(void, print, std::ostream &, CStringRef)
+#endif
+
+namespace internal {
+template <typename Char>
+inline bool is_name_start(Char c) {
+ return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || '_' == c;
+}
+
+// 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 = (std::numeric_limits<unsigned>::max)();
+ break;
+ }
+ value = new_value;
+ } while ('0' <= *s && *s <= '9');
+ // Convert to unsigned to prevent a warning.
+ unsigned max_int = (std::numeric_limits<int>::max)();
+ if (value > max_int)
+ FMT_THROW(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(FormatError(fmt::format(
+ "format specifier '{}' requires signed argument", sign)));
+ }
+ ++s;
+}
+} // namespace internal
+
+template <typename Char>
+inline internal::Arg BasicFormatter<Char>::get_arg(
+ BasicStringRef<Char> arg_name, const char *&error) {
+ if (check_no_auto_index(error)) {
+ map_.init(args());
+ const internal::Arg *arg = map_.find(arg_name);
+ if (arg)
+ return *arg;
+ error = "argument not found";
+ }
+ return internal::Arg();
+}
+
+template <typename Char>
+inline internal::Arg BasicFormatter<Char>::parse_arg_index(const Char *&s) {
+ const char *error = 0;
+ internal::Arg arg = *s < '0' || *s > '9' ?
+ next_arg(error) : get_arg(internal::parse_nonnegative_int(s), error);
+ if (error) {
+ FMT_THROW(FormatError(
+ *s != '}' && *s != ':' ? "invalid format string" : error));
+ }
+ return arg;
+}
+
+template <typename Char>
+inline internal::Arg BasicFormatter<Char>::parse_arg_name(const Char *&s) {
+ assert(internal::is_name_start(*s));
+ const Char *start = s;
+ Char c;
+ do {
+ c = *++s;
+ } while (internal::is_name_start(c) || ('0' <= c && c <= '9'));
+ const char *error = 0;
+ internal::Arg arg = get_arg(BasicStringRef<Char>(start, s - start), error);
+ if (error)
+ FMT_THROW(FormatError(error));
+ return arg;
+}
+
+// Should be after FormatSpec
+template <typename Char>
+const Char *BasicFormatter<Char>::format(
+ const Char *&format_str, const internal::Arg &arg) {
+ using internal::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 zero flag.
+ if (*s == '0') {
+ require_numeric_argument(arg, '0');
+ spec.align_ = ALIGN_NUMERIC;
+ spec.fill_ = '0';
+ ++s;
+ }
+
+ // Parse width.
+ if ('0' <= *s && *s <= '9') {
+ spec.width_ = internal::parse_nonnegative_int(s);
+ } else if (*s == '{') {
+ ++s;
+ Arg width_arg = internal::is_name_start(*s) ?
+ parse_arg_name(s) : parse_arg_index(s);
+ if (*s++ != '}')
+ FMT_THROW(FormatError("invalid format string"));
+ ULongLong value = 0;
+ switch (width_arg.type) {
+ case Arg::INT:
+ if (width_arg.int_value < 0)
+ FMT_THROW(FormatError("negative width"));
+ value = width_arg.int_value;
+ break;
+ case Arg::UINT:
+ value = width_arg.uint_value;
+ break;
+ case Arg::LONG_LONG:
+ if (width_arg.long_long_value < 0)
+ FMT_THROW(FormatError("negative width"));
+ value = width_arg.long_long_value;
+ break;
+ case Arg::ULONG_LONG:
+ value = width_arg.ulong_long_value;
+ break;
+ default:
+ FMT_THROW(FormatError("width is not integer"));
+ }
+ if (value > (std::numeric_limits<int>::max)())
+ FMT_THROW(FormatError("number is too big"));
+ spec.width_ = static_cast<int>(value);
+ }
+
+ // Parse precision.
+ if (*s == '.') {
+ ++s;
+ spec.precision_ = 0;
+ if ('0' <= *s && *s <= '9') {
+ spec.precision_ = internal::parse_nonnegative_int(s);
+ } else if (*s == '{') {
+ ++s;
+ Arg precision_arg = internal::is_name_start(*s) ?
+ parse_arg_name(s) : 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 > (std::numeric_limits<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"));
+
+ // Format argument.
+ internal::BasicArgFormatter<Char>(*this, spec, s - 1).visit(arg);
+ return s;
}
+template <typename Char>
+void BasicFormatter<Char>::format(BasicCStringRef<Char> format_str) {
+ const Char *s = format_str.c_str();
+ const Char *start = s;
+ 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);
+ internal::Arg arg = internal::is_name_start(*s) ?
+ parse_arg_name(s) : parse_arg_index(s);
+ start = s = format(s, arg);
+ }
+ write(writer_, start, s);
+}
+} // namespace fmt
+
+#if FMT_USE_USER_DEFINED_LITERALS
+namespace fmt {
+namespace internal {
+
+template <typename Char>
+struct UdlFormat {
+ const Char *str;
+
+ template <typename... Args>
+ auto operator()(Args && ... args) const
+ -> decltype(format(str, std::forward<Args>(args)...)) {
+ return format(str, std::forward<Args>(args)...);
+ }
+};
+
+template <typename Char>
+struct UdlArg {
+ const Char *str;
+
+ template <typename T>
+ NamedArg<Char> operator=(T &&value) const {
+ return {str, std::forward<T>(value)};
+ }
+};
+
+} // namespace internal
+
+inline namespace literals {
+
+/**
+ \rst
+ C++11 literal equivalent of :func:`fmt::format`.
+
+ **Example**::
+
+ using namespace fmt::literals;
+ std::string message = "The answer is {}"_format(42);
+ \endrst
+ */
+inline internal::UdlFormat<char>
+operator"" _format(const char *s, std::size_t) { return {s}; }
+inline internal::UdlFormat<wchar_t>
+operator"" _format(const wchar_t *s, std::size_t) { return {s}; }
+
+/**
+ \rst
+ C++11 literal equivalent of :func:`fmt::arg`.
+
+ **Example**::
+
+ using namespace fmt::literals;
+ print("Elapsed time: {s:.2f} seconds", "s"_a=1.23);
+ \endrst
+ */
+inline internal::UdlArg<char>
+operator"" _a(const char *s, std::size_t) { return {s}; }
+inline internal::UdlArg<wchar_t>
+operator"" _a(const wchar_t *s, std::size_t) { return {s}; }
+
+} // inline namespace literals
+} // namespace fmt
+#endif // FMT_USE_USER_DEFINED_LITERALS
+
// Restore warnings.
#if FMT_GCC_VERSION >= 406
# pragma GCC diagnostic pop
#endif
-#ifdef __clang__
+#if defined(__clang__) && !defined(__INTEL_COMPILER)
# pragma clang diagnostic pop
#endif
diff --git a/dep/cppformat/posix.cc b/dep/cppformat/posix.cc
index d36871f43a3..756281a0ebd 100644
--- a/dep/cppformat/posix.cc
+++ b/dep/cppformat/posix.cc
@@ -55,11 +55,14 @@
# ifdef __MINGW32__
# define _SH_DENYNO 0x40
-# undef fileno
# endif
#endif // _WIN32
+#ifdef fileno
+# undef fileno
+#endif
+
namespace {
#ifdef _WIN32
// Return type of read and write functions.
diff --git a/dep/cppformat/posix.h b/dep/cppformat/posix.h
index 722690a8b33..88bcb4f557b 100644
--- a/dep/cppformat/posix.h
+++ b/dep/cppformat/posix.h
@@ -69,7 +69,11 @@
# define FMT_UNUSED
#endif
-#if FMT_USE_STATIC_ASSERT || FMT_HAS_CPP_ATTRIBUTE(cxx_static_assert) || \
+#ifndef FMT_USE_STATIC_ASSERT
+# define FMT_USE_STATIC_ASSERT 0
+#endif
+
+#if FMT_USE_STATIC_ASSERT || FMT_HAS_FEATURE(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
diff --git a/dep/g3dlite/G3D-v9.0 hotfix5.diff b/dep/g3dlite/G3D-v9.0 hotfix5.diff
new file mode 100644
index 00000000000..7bc4073ef62
--- /dev/null
+++ b/dep/g3dlite/G3D-v9.0 hotfix5.diff
@@ -0,0 +1,28 @@
+diff --git a/dep/g3dlite/include/G3D/Quat.h b/dep/g3dlite/include/G3D/Quat.h
+index 04e11e0..b26708a 100644
+--- a/dep/g3dlite/include/G3D/Quat.h
++++ b/dep/g3dlite/include/G3D/Quat.h
+@@ -335,8 +335,8 @@ public:
+ Note that q.pow(a).pow(b) == q.pow(a + b)
+ @cite Dam98 pg 21
+ */
+- inline Quat pow(float x) const {
+- return (log() * x).exp();
++ inline Quat pow(float r) const {
++ return (log() * r).exp();
+ }
+
+ /** Make unit length in place */
+@@ -349,9 +349,9 @@ public:
+ the magnitude.
+ */
+ Quat toUnit() const {
+- Quat x = *this;
+- x.unitize();
+- return x;
++ Quat copyOfThis = *this;
++ copyOfThis.unitize();
++ return copyOfThis;
+ }
+
+ /**
diff --git a/dep/g3dlite/G3D-v9.0 hotfix6.diff b/dep/g3dlite/G3D-v9.0 hotfix6.diff
new file mode 100644
index 00000000000..3ff735c734e
--- /dev/null
+++ b/dep/g3dlite/G3D-v9.0 hotfix6.diff
@@ -0,0 +1,32 @@
+diff --git a/dep/g3dlite/include/G3D/platform.h b/dep/g3dlite/include/G3D/platform.h
+index 17e3bf2..439495a 100644
+--- a/dep/g3dlite/include/G3D/platform.h
++++ b/dep/g3dlite/include/G3D/platform.h
+@@ -364,13 +364,18 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) {\
+ #endif
+ #if (!defined(_LIBCPP_VERSION) && defined(__APPLE__)) || (!defined(_LIBCPP_VERSION) && defined(__linux__))
+ # include <tr1/memory>
++#else
++# include <memory>
++#endif
++
++namespace G3D {
++#if (!defined(_LIBCPP_VERSION) && defined(__APPLE__)) || (!defined(_LIBCPP_VERSION) && defined(__linux__))
+ using std::tr1::shared_ptr;
+ using std::tr1::weak_ptr;
+ using std::tr1::dynamic_pointer_cast;
+ using std::tr1::static_pointer_cast;
+ using std::tr1::enable_shared_from_this;
+ #else
+-# include <memory>
+ using std::shared_ptr;
+ using std::weak_ptr;
+ using std::dynamic_pointer_cast;
+@@ -378,7 +383,6 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) {\
+ using std::enable_shared_from_this;
+ #endif
+
+-namespace G3D {
+ /** Options for initG3D and initGLG3D. */
+ class G3DSpecification {
+ public:
diff --git a/dep/g3dlite/Readme.txt b/dep/g3dlite/Readme.txt
index 682a2404d96..d4e3fa5d06b 100644
--- a/dep/g3dlite/Readme.txt
+++ b/dep/g3dlite/Readme.txt
@@ -14,3 +14,5 @@ G3D-v9.0 hotfix1.diff - 2014-08-22 - updated to G3D9, reapplied previous patches
G3D-v9.0 hotfix2.diff - 2014-08-23 - fix some -Wconversion warnings
G3D-v9.0 hotfix3.diff - 2015-06-28 - fix some warnings
G3D-v9.0 hotfix4.diff - 2015-07-02 - backport G3D10 fix
+G3D-v9.0 hotfix5.diff - 2015-07-31 - fix MSVC 2015 warning: dep/g3dlite/include/G3D/Quat.h(352): warning C4458: declaration of 'x' hides class member
+G3D-v9.0 hotfix6.diff - 2015-11-04 - fix adding std::shared_ptr, std::weak_ptr, std::dynamic_pointer_cast, std::static_pointer_cast and std::enable_shared_from_this to global namespace
diff --git a/dep/g3dlite/include/G3D/Quat.h b/dep/g3dlite/include/G3D/Quat.h
index 04e11e084a0..73e661a4f48 100644
--- a/dep/g3dlite/include/G3D/Quat.h
+++ b/dep/g3dlite/include/G3D/Quat.h
@@ -335,8 +335,8 @@ public:
Note that q.pow(a).pow(b) == q.pow(a + b)
@cite Dam98 pg 21
*/
- inline Quat pow(float x) const {
- return (log() * x).exp();
+ inline Quat pow(float r) const {
+ return (log() * r).exp();
}
/** Make unit length in place */
@@ -349,9 +349,9 @@ public:
the magnitude.
*/
Quat toUnit() const {
- Quat x = *this;
- x.unitize();
- return x;
+ Quat copyOfThis = *this;
+ copyOfThis.unitize();
+ return copyOfThis;
}
/**
diff --git a/dep/g3dlite/include/G3D/platform.h b/dep/g3dlite/include/G3D/platform.h
index 17e3bf279eb..439495ab131 100644
--- a/dep/g3dlite/include/G3D/platform.h
+++ b/dep/g3dlite/include/G3D/platform.h
@@ -364,13 +364,18 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) {\
#endif
#if (!defined(_LIBCPP_VERSION) && defined(__APPLE__)) || (!defined(_LIBCPP_VERSION) && defined(__linux__))
# include <tr1/memory>
+#else
+# include <memory>
+#endif
+
+namespace G3D {
+#if (!defined(_LIBCPP_VERSION) && defined(__APPLE__)) || (!defined(_LIBCPP_VERSION) && defined(__linux__))
using std::tr1::shared_ptr;
using std::tr1::weak_ptr;
using std::tr1::dynamic_pointer_cast;
using std::tr1::static_pointer_cast;
using std::tr1::enable_shared_from_this;
#else
-# include <memory>
using std::shared_ptr;
using std::weak_ptr;
using std::dynamic_pointer_cast;
@@ -378,7 +383,6 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) {\
using std::enable_shared_from_this;
#endif
-namespace G3D {
/** Options for initG3D and initGLG3D. */
class G3DSpecification {
public:
diff --git a/doc/UnixInstall.txt b/doc/UnixInstall.txt
index d01ca041fe9..a97fdd2bd31 100644
--- a/doc/UnixInstall.txt
+++ b/doc/UnixInstall.txt
@@ -6,31 +6,16 @@ WARNING: THIS DOCUMENTATION IS NOT ALWAYS UP TO DATE.
FOR MORE UP-TO-DATE INFORMATION, CHECK THE TRINITY WIKI.
=========================================================
-CHECK http://www.trinitycore.info/How-to:Linux FOR FURTHER HELP
+CHECK http://www.trinitycore.info/ FOR FURTHER HELP
These are instructions for installation in a Linux environment, if you are
-using Windows refer to http://www.trinitycore.info/How-to:Win
+using Windows refer to http://www.trinitycore.info/
Installing TrinityCore is fairly simple on a Linux machine, assuming you
have all required applications
-The most important ones are:
+http://collab.kpsn.org/display/tc/Requirements
- g++
- gcc version 4.3.x or greater
- make
- cmake version 2.6.x or greater
- libmysql++-dev
- git (for checking out the core and database)
- openssl
- libssl-dev
- zlib1g-dev
- libtool
- libmysqlclient15-dev
- patch
- build-essential
- mysql-client
-
Most of these are included on common Linux distros, others you may have
to install by your self. Please check your distro's repos.
@@ -40,7 +25,7 @@ you created a dir named build ad want to have your finalcompiled product
installed in /home/trinity/server, an example sequence of commands can
be :
- cmake ../ -DPREFIX=/home/trinity/server -DTOOLS=1 -DWITH_WARNINGS=1
+ cmake ../ -DCMAKE_INSTALL_PREFIX=/home/trinity/server -DTOOLS=1 -DWITH_WARNINGS=1
make
make install
@@ -49,24 +34,24 @@ than where to install using flags built into our cmake files. Just open
up CMakeLists.txt in the main folder and take a look at some of the
flags like
- SERVERS Build worldserver and authserver
- SCRIPTS Build core with scripts included
- TOOLS Build map/vmap extraction/assembler tools
- USE_SCRIPTPCH Use precompiled headers when compiling scripts
- USE_COREPCH Use precompiled headers when compiling servers
- WITH_WARNINGS Show all warnings during compile
- WITH_COREDEBUG Include additional debug-code in core
- PREFIX Set installation directory
- NOJEM Do not build with jemalloc (advanced users only)
- CONF_DIR Set path as default configuration directory
- LIBSDIR Set path as default library directory
- CMAKE_C_FLAGS Set C_FLAGS for compile (advanced users only)
- CMAKE_CXX_FLAGS Set CXX_FLAGS for compile (advanced users only)
- CMAKE_BUILD_TYPE Set buildtype - the supported modes are :
- Release, MinSizeRel, RelWithDebInfo, Debug
-
-Of course, replace the paths in PREFIX, CONF_DIR and LIBSDIR with the
-directories you wish to install TrinityCore to. The datadir is where maps,
+ SERVERS Build worldserver and authserver
+ SCRIPTS Build core with scripts included
+ TOOLS Build map/mmaps/vmap extraction/assembler tools
+ USE_SCRIPTPCH Use precompiled headers when compiling scripts
+ USE_COREPCH Use precompiled headers when compiling servers
+ WITH_WARNINGS Show all warnings during compile
+ WITH_COREDEBUG Include additional debug-code in core
+ CMAKE_INSTALL_PREFIX Set installation directory
+ NOJEM Do not build with jemalloc (advanced users only)
+ CONF_DIR Set path as default configuration directory
+ LIBSDIR Set path as default library directory
+ CMAKE_C_FLAGS Set C_FLAGS for compile (advanced users only)
+ CMAKE_CXX_FLAGS Set CXX_FLAGS for compile (advanced users only)
+ CMAKE_BUILD_TYPE Set buildtype - the supported modes are :
+ Release, MinSizeRel, RelWithDebInfo, Debug
+
+Of course, replace the paths in CMAKE_INSTALL_PREFIX with the
+directory you wish to install TrinityCore to. The datadir is where maps,
DBCs, and SQLs are stored. The sysconfdir is where configuration files are stored.
Once TrinityCore is installed you will need to apply database updates
diff --git a/revision_data.h.in.cmake b/revision_data.h.in.cmake
index cd9d06c0e6d..f21c3d26bda 100644
--- a/revision_data.h.in.cmake
+++ b/revision_data.h.in.cmake
@@ -5,7 +5,7 @@
#define _BRANCH "@rev_branch@"
#define _SOURCE_DIRECTORY "@CMAKE_SOURCE_DIR@"
#define _MYSQL_EXECUTABLE "@MYSQL_EXECUTABLE@"
- #define _FULL_DATABASE "TDB_full_world_335.59_2015_07_14.sql"
+ #define _FULL_DATABASE "TDB_full_world_335.60_2015_11_07.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 9f461eccc71..b11f5002bc7 100644
--- a/sql/base/auth_database.sql
+++ b/sql/base/auth_database.sql
@@ -1,8 +1,8 @@
--- MySQL dump 10.13 Distrib 5.6.9-rc, for Win64 (x86_64)
+-- MySQL dump 10.13 Distrib 5.6.26, for Win64 (x86_64)
--
-- Host: localhost Database: auth335
-- ------------------------------------------------------
--- Server version 5.6.9-rc
+-- Server version 5.6.26-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
@@ -486,7 +486,7 @@ CREATE 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);
+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),('2015_08_21_00_auth.sql','C31A9E1D28E11B60BE8F8198637DD51F6D75123F','ARCHIVED','2015-10-05 23:16:19',0),('2015_11_07_00_auth.sql','BAF9F6B8F97A30D04BDBBA8127A62A1720F9B904','RELEASED','2015-11-07 15:40:47',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
@@ -549,4 +549,4 @@ UNLOCK TABLES;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2015-07-14 1:06:49
+-- Dump completed on 2015-11-07 14:42:34
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql
index 588ed0063db..69c6c990e1e 100644
--- a/sql/base/characters_database.sql
+++ b/sql/base/characters_database.sql
@@ -1,8 +1,8 @@
--- MySQL dump 10.13 Distrib 5.6.9-rc, for Win64 (x86_64)
+-- MySQL dump 10.13 Distrib 5.6.26, for Win64 (x86_64)
--
-- Host: localhost Database: characters335
-- ------------------------------------------------------
--- Server version 5.6.9-rc
+-- Server version 5.6.26-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
@@ -190,7 +190,7 @@ DROP TABLE IF EXISTS `auctionhouse`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `auctionhouse` (
`id` int(10) unsigned NOT NULL DEFAULT '0',
- `auctioneerguid` int(10) unsigned NOT NULL DEFAULT '0',
+ `houseid` tinyint(3) unsigned NOT NULL DEFAULT '7',
`itemguid` int(10) unsigned NOT NULL DEFAULT '0',
`itemowner` int(10) unsigned NOT NULL DEFAULT '0',
`buyoutprice` int(10) unsigned NOT NULL DEFAULT '0',
@@ -240,6 +240,29 @@ LOCK TABLES `banned_addons` WRITE;
UNLOCK TABLES;
--
+-- Table structure for table `battleground_deserters`
+--
+
+DROP TABLE IF EXISTS `battleground_deserters`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `battleground_deserters` (
+ `guid` int(10) unsigned NOT NULL COMMENT 'characters.guid',
+ `type` tinyint(3) unsigned NOT NULL COMMENT 'type of the desertion',
+ `datetime` datetime NOT NULL COMMENT 'datetime of the desertion'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `battleground_deserters`
+--
+
+LOCK TABLES `battleground_deserters` WRITE;
+/*!40000 ALTER TABLE `battleground_deserters` DISABLE KEYS */;
+/*!40000 ALTER TABLE `battleground_deserters` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
-- Table structure for table `bugreport`
--
@@ -1140,6 +1163,8 @@ CREATE TABLE `character_spell_cooldown` (
`spell` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'Spell Identifier',
`item` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Item Identifier',
`time` int(10) unsigned NOT NULL DEFAULT '0',
+ `categoryId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Spell category Id',
+ `categoryEnd` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`guid`,`spell`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -1332,7 +1357,6 @@ DROP TABLE IF EXISTS `corpse`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `corpse` (
- `corpseGuid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Global Unique Identifier',
`guid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Character Global Unique Identifier',
`posX` float NOT NULL DEFAULT '0',
`posY` float NOT NULL DEFAULT '0',
@@ -1350,10 +1374,9 @@ CREATE TABLE `corpse` (
`time` int(10) unsigned NOT NULL DEFAULT '0',
`corpseType` tinyint(3) unsigned NOT NULL DEFAULT '0',
`instanceId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Instance Identifier',
- PRIMARY KEY (`corpseGuid`),
+ PRIMARY KEY (`guid`),
KEY `idx_type` (`corpseType`),
KEY `idx_instance` (`instanceId`),
- KEY `idx_player` (`guid`),
KEY `idx_time` (`time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Death System';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -1527,6 +1550,7 @@ DROP TABLE IF EXISTS `gm_ticket`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `gm_ticket` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `type` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '0 open, 1 closed, 2 character deleted',
`playerGuid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Global Unique Identifier of ticket creator',
`name` varchar(12) NOT NULL COMMENT 'Name of ticket creator',
`description` text NOT NULL,
@@ -1544,6 +1568,7 @@ CREATE TABLE `gm_ticket` (
`escalated` tinyint(3) unsigned NOT NULL DEFAULT '0',
`viewed` tinyint(3) unsigned NOT NULL DEFAULT '0',
`needMoreHelp` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `resolvedBy` int(10) NOT NULL DEFAULT '0' COMMENT 'GUID of GM who resolved the ticket',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Player System';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -2240,7 +2265,7 @@ CREATE TABLE `pet_aura` (
`maxDuration` int(11) NOT NULL DEFAULT '0',
`remainTime` int(11) NOT NULL DEFAULT '0',
`remainCharges` tinyint(3) unsigned NOT NULL DEFAULT '0',
- PRIMARY KEY (`guid`,`spell`,`effectMask`)
+ PRIMARY KEY (`guid`,`casterGuid`,`spell`,`effectMask`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Pet System';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -2288,6 +2313,8 @@ CREATE TABLE `pet_spell_cooldown` (
`guid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Global Unique Identifier, Low part',
`spell` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'Spell Identifier',
`time` int(10) unsigned NOT NULL DEFAULT '0',
+ `categoryId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Spell category Id',
+ `categoryEnd` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`guid`,`spell`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -2414,6 +2441,7 @@ DROP TABLE IF EXISTS `pvpstats_players`;
CREATE TABLE `pvpstats_players` (
`battleground_id` bigint(20) unsigned NOT NULL,
`character_guid` int(10) unsigned NOT NULL,
+ `winner` bit(1) NOT NULL,
`score_killing_blows` mediumint(8) unsigned NOT NULL,
`score_deaths` mediumint(8) unsigned NOT NULL,
`score_honorable_kills` mediumint(8) unsigned NOT NULL,
@@ -2511,7 +2539,7 @@ CREATE 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),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0);
+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),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql','16842FDD7E8547F2260D3312F53EFF8761EFAB35','ARCHIVED','2015-10-06 16:06:38',0),('2015_10_07_00_characters.sql','E15AB463CEBE321001D7BFDEA4B662FF618728FD','ARCHIVED','2015-10-07 23:32:00',0),('2015_10_12_00_characters.sql','D6F9927BDED72AD0A81D6EC2C6500CBC34A39FA2','ARCHIVED','2015-10-12 15:35:47',0),('2015_10_28_00_characters.sql','622A9CA8FCE690429EBE23BA071A37C7A007BF8B','ARCHIVED','2015-10-19 14:32:22',0),('2015_10_29_00_characters_335.sql','4555A7F35C107E54C13D74D20F141039ED42943E','ARCHIVED','2015-10-29 17:05:43',0),('2015_11_03_00_characters.sql','CC045717B8FDD9733351E52A5302560CD08AAD57','ARCHIVED','2015-10-12 15:23:33',0),('2015_11_07_00_characters.sql','BAF9F6B8F97A30D04BDBBA8127A62A1720F9B904','RELEASED','2015-11-07 15:40:47',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
@@ -2596,4 +2624,4 @@ UNLOCK TABLES;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2015-07-14 1:06:50
+-- Dump completed on 2015-11-07 14:42:34
diff --git a/sql/base/dev/world_database.sql b/sql/base/dev/world_database.sql
index e2277d77a65..02318987448 100644
--- a/sql/base/dev/world_database.sql
+++ b/sql/base/dev/world_database.sql
@@ -1,8 +1,8 @@
--- MySQL dump 10.13 Distrib 5.6.9-rc, for Win64 (x86_64)
+-- MySQL dump 10.13 Distrib 5.6.26, for Win64 (x86_64)
--
-- Host: localhost Database: world335
-- ------------------------------------------------------
--- Server version 5.6.9-rc
+-- Server version 5.6.26-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
@@ -469,6 +469,7 @@ CREATE TABLE `creature_questitem` (
`CreatureEntry` int(10) unsigned NOT NULL DEFAULT '0',
`Idx` int(10) unsigned NOT NULL DEFAULT '0',
`ItemId` int(10) unsigned NOT NULL DEFAULT '0',
+ `VerifiedBuild` smallint(5) NOT NULL DEFAULT '0',
PRIMARY KEY (`CreatureEntry`,`Idx`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -617,6 +618,23 @@ CREATE TABLE `creature_template_addon` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
+-- Table structure for table `creature_template_locale`
+--
+
+DROP TABLE IF EXISTS `creature_template_locale`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `creature_template_locale` (
+ `entry` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `locale` varchar(4) NOT NULL,
+ `Name` text,
+ `Title` text,
+ `VerifiedBuild` smallint(5) DEFAULT '0',
+ PRIMARY KEY (`entry`,`locale`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
-- Table structure for table `creature_text`
--
@@ -1126,6 +1144,7 @@ CREATE TABLE `gameobject_questitem` (
`GameObjectEntry` int(10) unsigned NOT NULL DEFAULT '0',
`Idx` int(10) unsigned NOT NULL DEFAULT '0',
`ItemId` int(10) unsigned NOT NULL DEFAULT '0',
+ `VerifiedBuild` smallint(5) NOT NULL DEFAULT '0',
PRIMARY KEY (`GameObjectEntry`,`Idx`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -1195,6 +1214,23 @@ CREATE TABLE `gameobject_template` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
+-- Table structure for table `gameobject_template_locale`
+--
+
+DROP TABLE IF EXISTS `gameobject_template_locale`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `gameobject_template_locale` (
+ `entry` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `locale` varchar(4) NOT NULL,
+ `name` text,
+ `castBarCaption` text,
+ `VerifiedBuild` smallint(5) DEFAULT '0',
+ PRIMARY KEY (`entry`,`locale`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
-- Table structure for table `gossip_menu`
--
@@ -1582,36 +1618,6 @@ CREATE TABLE `locales_broadcast_text` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
--- Table structure for table `locales_creature`
---
-
-DROP TABLE IF EXISTS `locales_creature`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `locales_creature` (
- `entry` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `name_loc1` varchar(100) NOT NULL DEFAULT '',
- `name_loc2` varchar(100) NOT NULL DEFAULT '',
- `name_loc3` varchar(100) NOT NULL DEFAULT '',
- `name_loc4` varchar(100) NOT NULL DEFAULT '',
- `name_loc5` varchar(100) NOT NULL DEFAULT '',
- `name_loc6` varchar(100) NOT NULL DEFAULT '',
- `name_loc7` varchar(100) NOT NULL DEFAULT '',
- `name_loc8` varchar(100) NOT NULL DEFAULT '',
- `subname_loc1` varchar(100) DEFAULT NULL,
- `subname_loc2` varchar(100) DEFAULT NULL,
- `subname_loc3` varchar(100) DEFAULT NULL,
- `subname_loc4` varchar(100) DEFAULT NULL,
- `subname_loc5` varchar(100) DEFAULT NULL,
- `subname_loc6` varchar(100) DEFAULT NULL,
- `subname_loc7` varchar(100) DEFAULT NULL,
- `subname_loc8` varchar(100) DEFAULT NULL,
- `VerifiedBuild` smallint(5) DEFAULT '0',
- PRIMARY KEY (`entry`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
-- Table structure for table `locales_creature_text`
--
@@ -1635,36 +1641,6 @@ CREATE TABLE `locales_creature_text` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
--- Table structure for table `locales_gameobject`
---
-
-DROP TABLE IF EXISTS `locales_gameobject`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `locales_gameobject` (
- `entry` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `name_loc1` varchar(100) NOT NULL DEFAULT '',
- `name_loc2` varchar(100) NOT NULL DEFAULT '',
- `name_loc3` varchar(100) NOT NULL DEFAULT '',
- `name_loc4` varchar(100) NOT NULL DEFAULT '',
- `name_loc5` varchar(100) NOT NULL DEFAULT '',
- `name_loc6` varchar(100) NOT NULL DEFAULT '',
- `name_loc7` varchar(100) NOT NULL DEFAULT '',
- `name_loc8` varchar(100) NOT NULL DEFAULT '',
- `castbarcaption_loc1` varchar(100) NOT NULL DEFAULT '',
- `castbarcaption_loc2` varchar(100) NOT NULL DEFAULT '',
- `castbarcaption_loc3` varchar(100) NOT NULL DEFAULT '',
- `castbarcaption_loc4` varchar(100) NOT NULL DEFAULT '',
- `castbarcaption_loc5` varchar(100) NOT NULL DEFAULT '',
- `castbarcaption_loc6` varchar(100) NOT NULL DEFAULT '',
- `castbarcaption_loc7` varchar(100) NOT NULL DEFAULT '',
- `castbarcaption_loc8` varchar(100) NOT NULL DEFAULT '',
- `VerifiedBuild` smallint(5) DEFAULT '0',
- PRIMARY KEY (`entry`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
-- Table structure for table `locales_gossip_menu_option`
--
@@ -2690,6 +2666,51 @@ CREATE TABLE `prospecting_loot_template` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
+-- Table structure for table `quest_details`
+--
+
+DROP TABLE IF EXISTS `quest_details`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `quest_details` (
+ `ID` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `Emote1` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `Emote2` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `Emote3` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `Emote4` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `EmoteDelay1` int(10) unsigned NOT NULL DEFAULT '0',
+ `EmoteDelay2` int(10) unsigned NOT NULL DEFAULT '0',
+ `EmoteDelay3` int(10) unsigned NOT NULL DEFAULT '0',
+ `EmoteDelay4` int(10) unsigned NOT NULL DEFAULT '0',
+ `VerifiedBuild` smallint(5) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `quest_offer_reward`
+--
+
+DROP TABLE IF EXISTS `quest_offer_reward`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `quest_offer_reward` (
+ `ID` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `Emote1` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `Emote2` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `Emote3` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `Emote4` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `EmoteDelay1` int(10) unsigned NOT NULL DEFAULT '0',
+ `EmoteDelay2` int(10) unsigned NOT NULL DEFAULT '0',
+ `EmoteDelay3` int(10) unsigned NOT NULL DEFAULT '0',
+ `EmoteDelay4` int(10) unsigned NOT NULL DEFAULT '0',
+ `RewardText` text,
+ `VerifiedBuild` smallint(5) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
-- Table structure for table `quest_poi`
--
@@ -2731,6 +2752,23 @@ CREATE TABLE `quest_poi_points` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
+-- Table structure for table `quest_request_items`
+--
+
+DROP TABLE IF EXISTS `quest_request_items`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `quest_request_items` (
+ `ID` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `EmoteOnComplete` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `EmoteOnIncomplete` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `CompletionText` text,
+ `VerifiedBuild` smallint(5) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
-- Table structure for table `quest_template`
--
@@ -2739,77 +2777,83 @@ DROP TABLE IF EXISTS `quest_template`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `quest_template` (
`ID` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `Method` tinyint(3) unsigned NOT NULL DEFAULT '2',
+ `QuestType` tinyint(3) unsigned NOT NULL DEFAULT '2',
`QuestLevel` smallint(3) NOT NULL DEFAULT '1',
`MinLevel` tinyint(3) unsigned NOT NULL DEFAULT '0',
`QuestSortID` smallint(6) NOT NULL DEFAULT '0',
- `QuestType` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `QuestInfoID` smallint(5) unsigned NOT NULL DEFAULT '0',
`SuggestedGroupNum` tinyint(3) unsigned NOT NULL DEFAULT '0',
- `LimitTime` int(10) unsigned NOT NULL DEFAULT '0',
- `RequiredRaces` smallint(5) unsigned NOT NULL DEFAULT '0',
`RequiredFactionId1` smallint(5) unsigned NOT NULL DEFAULT '0',
`RequiredFactionId2` smallint(5) unsigned NOT NULL DEFAULT '0',
`RequiredFactionValue1` mediumint(8) NOT NULL DEFAULT '0',
`RequiredFactionValue2` mediumint(8) NOT NULL DEFAULT '0',
- `NextQuestIdChain` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `RewardXPId` tinyint(3) unsigned NOT NULL DEFAULT '0',
- `RewardOrRequiredMoney` int(11) NOT NULL DEFAULT '0',
- `RewardMoneyMaxLevel` int(10) unsigned NOT NULL DEFAULT '0',
- `RewardSpell` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `RewardSpellCast` int(11) NOT NULL DEFAULT '0',
+ `RewardNextQuest` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `RewardXPDifficulty` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `RewardMoney` int(11) NOT NULL DEFAULT '0',
+ `RewardBonusMoney` int(10) unsigned NOT NULL DEFAULT '0',
+ `RewardDisplaySpell` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `RewardSpell` int(11) NOT NULL DEFAULT '0',
`RewardHonor` int(11) NOT NULL DEFAULT '0',
- `RewardHonorMultiplier` float NOT NULL DEFAULT '0',
- `SourceItemId` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `RewardKillHonor` float NOT NULL DEFAULT '0',
+ `StartItem` mediumint(8) unsigned NOT NULL DEFAULT '0',
`Flags` int(10) unsigned NOT NULL DEFAULT '0',
- `RewardTitle` tinyint(3) unsigned NOT NULL DEFAULT '0',
`RequiredPlayerKills` tinyint(3) unsigned NOT NULL DEFAULT '0',
- `RewardTalents` tinyint(3) unsigned NOT NULL DEFAULT '0',
- `RewardArenaPoints` smallint(5) unsigned NOT NULL DEFAULT '0',
`RewardItem1` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `RewardItem2` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `RewardItem3` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `RewardItem4` mediumint(8) unsigned NOT NULL DEFAULT '0',
`RewardAmount1` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `RewardItem2` mediumint(8) unsigned NOT NULL DEFAULT '0',
`RewardAmount2` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `RewardItem3` mediumint(8) unsigned NOT NULL DEFAULT '0',
`RewardAmount3` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `RewardItem4` mediumint(8) unsigned NOT NULL DEFAULT '0',
`RewardAmount4` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `ItemDrop1` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `ItemDropQuantity1` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `ItemDrop2` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `ItemDropQuantity2` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `ItemDrop3` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `ItemDropQuantity3` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `ItemDrop4` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `ItemDropQuantity4` smallint(5) unsigned NOT NULL DEFAULT '0',
`RewardChoiceItemID1` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `RewardChoiceItemID2` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `RewardChoiceItemID3` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `RewardChoiceItemID4` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `RewardChoiceItemID5` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `RewardChoiceItemID6` mediumint(8) unsigned NOT NULL DEFAULT '0',
`RewardChoiceItemQuantity1` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `RewardChoiceItemID2` mediumint(8) unsigned NOT NULL DEFAULT '0',
`RewardChoiceItemQuantity2` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `RewardChoiceItemID3` mediumint(8) unsigned NOT NULL DEFAULT '0',
`RewardChoiceItemQuantity3` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `RewardChoiceItemID4` mediumint(8) unsigned NOT NULL DEFAULT '0',
`RewardChoiceItemQuantity4` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `RewardChoiceItemID5` mediumint(8) unsigned NOT NULL DEFAULT '0',
`RewardChoiceItemQuantity5` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `RewardChoiceItemID6` mediumint(8) unsigned NOT NULL DEFAULT '0',
`RewardChoiceItemQuantity6` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `POIContinent` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `POIx` float NOT NULL DEFAULT '0',
+ `POIy` float NOT NULL DEFAULT '0',
+ `POIPriority` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `RewardTitle` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `RewardTalents` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `RewardArenaPoints` smallint(5) unsigned NOT NULL DEFAULT '0',
`RewardFactionID1` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case',
- `RewardFactionID2` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case',
- `RewardFactionID3` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case',
- `RewardFactionID4` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case',
- `RewardFactionID5` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case',
`RewardFactionValue1` mediumint(8) NOT NULL DEFAULT '0',
- `RewardFactionValue2` mediumint(8) NOT NULL DEFAULT '0',
- `RewardFactionValue3` mediumint(8) NOT NULL DEFAULT '0',
- `RewardFactionValue4` mediumint(8) NOT NULL DEFAULT '0',
- `RewardFactionValue5` mediumint(8) NOT NULL DEFAULT '0',
`RewardFactionOverride1` mediumint(8) NOT NULL DEFAULT '0',
+ `RewardFactionID2` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case',
+ `RewardFactionValue2` mediumint(8) NOT NULL DEFAULT '0',
`RewardFactionOverride2` mediumint(8) NOT NULL DEFAULT '0',
+ `RewardFactionID3` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case',
+ `RewardFactionValue3` mediumint(8) NOT NULL DEFAULT '0',
`RewardFactionOverride3` mediumint(8) NOT NULL DEFAULT '0',
+ `RewardFactionID4` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case',
+ `RewardFactionValue4` mediumint(8) NOT NULL DEFAULT '0',
`RewardFactionOverride4` mediumint(8) NOT NULL DEFAULT '0',
+ `RewardFactionID5` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case',
+ `RewardFactionValue5` mediumint(8) NOT NULL DEFAULT '0',
`RewardFactionOverride5` mediumint(8) NOT NULL DEFAULT '0',
- `PointMapId` smallint(5) unsigned NOT NULL DEFAULT '0',
- `PointX` float NOT NULL DEFAULT '0',
- `PointY` float NOT NULL DEFAULT '0',
- `PointOption` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `TimeAllowed` int(10) unsigned NOT NULL DEFAULT '0',
+ `AllowableRaces` smallint(5) unsigned NOT NULL DEFAULT '0',
`LogTitle` text,
`LogDescription` text,
`QuestDescription` text,
- `EndText` text,
- `OfferRewardText` text,
- `RequestItemsText` text,
+ `AreaDescription` text,
`QuestCompletionLog` text,
`RequiredNpcOrGo1` mediumint(8) NOT NULL DEFAULT '0',
`RequiredNpcOrGo2` mediumint(8) NOT NULL DEFAULT '0',
@@ -2819,14 +2863,6 @@ CREATE TABLE `quest_template` (
`RequiredNpcOrGoCount2` smallint(5) unsigned NOT NULL DEFAULT '0',
`RequiredNpcOrGoCount3` smallint(5) unsigned NOT NULL DEFAULT '0',
`RequiredNpcOrGoCount4` smallint(5) unsigned NOT NULL DEFAULT '0',
- `RequiredSourceItemId1` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `RequiredSourceItemId2` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `RequiredSourceItemId3` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `RequiredSourceItemId4` mediumint(8) unsigned NOT NULL DEFAULT '0',
- `RequiredSourceItemCount1` smallint(5) unsigned NOT NULL DEFAULT '0',
- `RequiredSourceItemCount2` smallint(5) unsigned NOT NULL DEFAULT '0',
- `RequiredSourceItemCount3` smallint(5) unsigned NOT NULL DEFAULT '0',
- `RequiredSourceItemCount4` smallint(5) unsigned NOT NULL DEFAULT '0',
`RequiredItemId1` mediumint(8) unsigned NOT NULL DEFAULT '0',
`RequiredItemId2` mediumint(8) unsigned NOT NULL DEFAULT '0',
`RequiredItemId3` mediumint(8) unsigned NOT NULL DEFAULT '0',
@@ -2844,24 +2880,6 @@ CREATE TABLE `quest_template` (
`ObjectiveText2` text,
`ObjectiveText3` text,
`ObjectiveText4` text,
- `DetailsEmote1` smallint(5) unsigned NOT NULL DEFAULT '0',
- `DetailsEmote2` smallint(5) unsigned NOT NULL DEFAULT '0',
- `DetailsEmote3` smallint(5) unsigned NOT NULL DEFAULT '0',
- `DetailsEmote4` smallint(5) unsigned NOT NULL DEFAULT '0',
- `DetailsEmoteDelay1` int(10) unsigned NOT NULL DEFAULT '0',
- `DetailsEmoteDelay2` int(10) unsigned NOT NULL DEFAULT '0',
- `DetailsEmoteDelay3` int(10) unsigned NOT NULL DEFAULT '0',
- `DetailsEmoteDelay4` int(10) unsigned NOT NULL DEFAULT '0',
- `EmoteOnIncomplete` smallint(5) unsigned NOT NULL DEFAULT '0',
- `EmoteOnComplete` smallint(5) unsigned NOT NULL DEFAULT '0',
- `OfferRewardEmote1` smallint(5) unsigned NOT NULL DEFAULT '0',
- `OfferRewardEmote2` smallint(5) unsigned NOT NULL DEFAULT '0',
- `OfferRewardEmote3` smallint(5) unsigned NOT NULL DEFAULT '0',
- `OfferRewardEmote4` smallint(5) unsigned NOT NULL DEFAULT '0',
- `OfferRewardEmoteDelay1` int(10) unsigned NOT NULL DEFAULT '0',
- `OfferRewardEmoteDelay2` int(10) unsigned NOT NULL DEFAULT '0',
- `OfferRewardEmoteDelay3` int(10) unsigned NOT NULL DEFAULT '0',
- `OfferRewardEmoteDelay4` int(10) unsigned NOT NULL DEFAULT '0',
`VerifiedBuild` smallint(5) DEFAULT '0',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Quest System';
@@ -3029,6 +3047,22 @@ CREATE TABLE `skill_fishing_base_level` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
+-- Table structure for table `skill_perfect_item_template`
+--
+
+DROP TABLE IF EXISTS `skill_perfect_item_template`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `skill_perfect_item_template` (
+ `spellId` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'SpellId of the item creation spell',
+ `requiredSpecialization` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'Specialization spell id',
+ `perfectCreateChance` float NOT NULL DEFAULT '0' COMMENT 'chance to create the perfect item instead',
+ `perfectItemType` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'perfect item type to create instead',
+ PRIMARY KEY (`spellId`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Crafting Perfection System';
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
-- Table structure for table `skinning_loot_template`
--
@@ -3751,4 +3785,4 @@ CREATE TABLE `waypoints` (
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2015-07-14 1:06:51
+-- Dump completed on 2015-11-07 14:42:45
diff --git a/sql/updates/auth/2015_08_21_00_auth.sql b/sql/old/3.3.5a/auth/59_2015_11_07/2015_08_21_00_auth.sql
index f4396cc68c0..f4396cc68c0 100644
--- a/sql/updates/auth/2015_08_21_00_auth.sql
+++ b/sql/old/3.3.5a/auth/59_2015_11_07/2015_08_21_00_auth.sql
diff --git a/sql/old/3.3.5a/characters/59_2015_11_07/2015_08_26_00_characters_335.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_08_26_00_characters_335.sql
new file mode 100644
index 00000000000..1f46c5dd7f7
--- /dev/null
+++ b/sql/old/3.3.5a/characters/59_2015_11_07/2015_08_26_00_characters_335.sql
@@ -0,0 +1,16 @@
+-- Keep only the highest guid PvE or PvP (not bones) corpse per player guid
+DELETE c FROM `corpse` c LEFT JOIN
+(
+ SELECT MAX(`corpseGuid`) AS id
+ FROM `corpse`
+ WHERE `corpseType` IN (1,2)
+ GROUP BY `guid`
+) corpsetemp
+ON c.`corpseGuid` = corpsetemp.`id`
+WHERE corpsetemp.`id` IS NULL;
+
+-- Remove corpseGUID and set key to player guid
+ALTER TABLE `corpse`
+ DROP `corpseGuid`,
+ DROP INDEX `idx_player`,
+ ADD PRIMARY KEY (`guid`);
diff --git a/sql/old/3.3.5a/characters/59_2015_11_07/2015_09_28_00_characters_335.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_09_28_00_characters_335.sql
new file mode 100644
index 00000000000..f2ce50fd4c6
--- /dev/null
+++ b/sql/old/3.3.5a/characters/59_2015_11_07/2015_09_28_00_characters_335.sql
@@ -0,0 +1,5 @@
+UPDATE `auctionhouse`
+SET `time` = 0, `auctioneerguid` = 7;
+
+ALTER TABLE `auctionhouse`
+ CHANGE COLUMN `auctioneerguid` `houseid` TINYINT(3) UNSIGNED NOT NULL DEFAULT '7' AFTER `id`;
diff --git a/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_06_00_characters.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_06_00_characters.sql
new file mode 100644
index 00000000000..c8d8e3211f4
--- /dev/null
+++ b/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_06_00_characters.sql
@@ -0,0 +1,2 @@
+ALTER TABLE `gm_ticket`
+ ADD COLUMN `resolvedBy` INT(10) NOT NULL DEFAULT '0' COMMENT 'GUID of GM who resolved the ticket' AFTER `needMoreHelp`;
diff --git a/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_07_00_characters.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_07_00_characters.sql
new file mode 100644
index 00000000000..a03fffcd77a
--- /dev/null
+++ b/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_07_00_characters.sql
@@ -0,0 +1,3 @@
+ALTER TABLE `pet_aura`
+DROP PRIMARY KEY,
+ADD PRIMARY KEY (`guid`,`casterGuid`,`spell`,`effectMask`);
diff --git a/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_12_00_characters.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_12_00_characters.sql
new file mode 100644
index 00000000000..d7d4fb90f02
--- /dev/null
+++ b/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_12_00_characters.sql
@@ -0,0 +1,17 @@
+-- Add new winner field, bound to player
+ALTER TABLE `pvpstats_players`
+ ADD COLUMN `winner` BIT(1) NOT NULL AFTER `character_guid`;
+
+-- Resolve horde players victories
+UPDATE `pvpstats_players` SET `winner` = 1 WHERE `battleground_id` IN (
+ SELECT `id` FROM `pvpstats_battlegrounds` WHERE `winner_faction` = 0
+) AND `character_guid` IN (
+ SELECT `guid` FROM `characters` WHERE `race` IN (2, 5, 6, 8, 9, 10)
+);
+
+-- Resolve alliance players victories
+UPDATE `pvpstats_players` SET `winner` = 1 WHERE `battleground_id` IN (
+ SELECT `id` FROM `pvpstats_battlegrounds` WHERE `winner_faction` = 1
+) AND `character_guid` IN (
+ SELECT `guid` FROM `characters` WHERE `race` IN (1, 3, 4, 7, 11, 22)
+);
diff --git a/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_28_00_characters.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_28_00_characters.sql
new file mode 100644
index 00000000000..9d353773a33
--- /dev/null
+++ b/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_28_00_characters.sql
@@ -0,0 +1,6 @@
+DROP TABLE IF EXISTS `battleground_deserters`;
+CREATE TABLE `battleground_deserters` (
+ `guid` INT(10) UNSIGNED NOT NULL COMMENT 'characters.guid',
+ `type` TINYINT(3) UNSIGNED NOT NULL COMMENT 'type of the desertion',
+ `datetime` DATETIME NOT NULL COMMENT 'datetime of the desertion'
+);
diff --git a/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_29_00_characters_335.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_29_00_characters_335.sql
new file mode 100644
index 00000000000..94c9066c6ae
--- /dev/null
+++ b/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_29_00_characters_335.sql
@@ -0,0 +1,7 @@
+ALTER TABLE `character_spell_cooldown`
+ ADD `categoryId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Spell category Id' AFTER `time`,
+ ADD `categoryEnd` int(10) unsigned NOT NULL DEFAULT '0' AFTER `categoryId`;
+
+ALTER TABLE `pet_spell_cooldown`
+ ADD `categoryId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Spell category Id' AFTER `time`,
+ ADD `categoryEnd` int(10) unsigned NOT NULL DEFAULT '0' AFTER `categoryId`;
diff --git a/sql/old/3.3.5a/characters/59_2015_11_07/2015_11_03_00_characters.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_11_03_00_characters.sql
new file mode 100644
index 00000000000..b74824477be
--- /dev/null
+++ b/sql/old/3.3.5a/characters/59_2015_11_07/2015_11_03_00_characters.sql
@@ -0,0 +1,10 @@
+ALTER TABLE `gm_ticket`
+ ADD COLUMN `type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '0 open, 1 closed, 2 character deleted' AFTER `id`;
+
+UPDATE `gm_ticket` SET `type` = 1 WHERE `closedBy` != 0 OR `completed` != 0 OR `resolvedBy` != 0;
+UPDATE `gm_ticket` SET `closedBy` = 0 WHERE `closedBy` < 0;
+UPDATE `gm_ticket` SET `resolvedBy` = 0 WHERE `resolvedBy` < 0;
+
+ALTER TABLE `gm_ticket`
+ CHANGE COLUMN `closedBy` `closedBy` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `lastModifiedTime`,
+ CHANGE COLUMN `resolvedBy` `resolvedBy` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'GUID of GM who resolved the ticket' AFTER `needMoreHelp`;
diff --git a/sql/updates/world/2015_07_14_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_00_world.sql
index 8a4b9bed801..8a4b9bed801 100644
--- a/sql/updates/world/2015_07_14_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_00_world.sql
diff --git a/sql/updates/world/2015_07_14_01_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_01_world_335.sql
index 6e7ddfdc768..6e7ddfdc768 100644
--- a/sql/updates/world/2015_07_14_01_world_335.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_01_world_335.sql
diff --git a/sql/updates/world/2015_07_14_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_02_world.sql
index ba49c5cec27..ba49c5cec27 100644
--- a/sql/updates/world/2015_07_14_02_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_02_world.sql
diff --git a/sql/updates/world/2015_07_14_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_03_world.sql
index 31d3496a13b..31d3496a13b 100644
--- a/sql/updates/world/2015_07_14_03_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_03_world.sql
diff --git a/sql/updates/world/2015_07_14_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_04_world.sql
index 9bf0289cf70..9bf0289cf70 100644
--- a/sql/updates/world/2015_07_14_04_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_04_world.sql
diff --git a/sql/updates/world/2015_07_14_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_05_world.sql
index 7c2faf1c52d..7c2faf1c52d 100644
--- a/sql/updates/world/2015_07_14_05_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_05_world.sql
diff --git a/sql/updates/world/2015_07_15_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_00_world.sql
index fb7a0799f86..fb7a0799f86 100644
--- a/sql/updates/world/2015_07_15_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_00_world.sql
diff --git a/sql/updates/world/2015_07_15_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_01_world.sql
index b9b7d92072a..b9b7d92072a 100644
--- a/sql/updates/world/2015_07_15_01_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_01_world.sql
diff --git a/sql/updates/world/2015_07_15_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_02_world.sql
index 07c59a8190b..07c59a8190b 100644
--- a/sql/updates/world/2015_07_15_02_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_02_world.sql
diff --git a/sql/updates/world/2015_07_16_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_16_00_world.sql
index 9dac1b852ce..9dac1b852ce 100644
--- a/sql/updates/world/2015_07_16_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_16_00_world.sql
diff --git a/sql/updates/world/2015_07_17_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_00_world.sql
index 0a9d5209be4..0a9d5209be4 100644
--- a/sql/updates/world/2015_07_17_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_00_world.sql
diff --git a/sql/updates/world/2015_07_17_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_01_world.sql
index f3246227611..f3246227611 100644
--- a/sql/updates/world/2015_07_17_01_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_01_world.sql
diff --git a/sql/updates/world/2015_07_17_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_02_world.sql
index 44c860a45d9..44c860a45d9 100644
--- a/sql/updates/world/2015_07_17_02_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_02_world.sql
diff --git a/sql/updates/world/2015_07_17_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_03_world.sql
index 2ceb1be879f..2ceb1be879f 100644
--- a/sql/updates/world/2015_07_17_03_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_03_world.sql
diff --git a/sql/updates/world/2015_07_17_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_04_world.sql
index 4c28f811d27..4c28f811d27 100644
--- a/sql/updates/world/2015_07_17_04_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_04_world.sql
diff --git a/sql/updates/world/2015_07_18_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_18_00_world.sql
index 2781df3cba5..2781df3cba5 100644
--- a/sql/updates/world/2015_07_18_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_18_00_world.sql
diff --git a/sql/updates/world/2015_07_18_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_18_01_world.sql
index f099e37d962..f099e37d962 100644
--- a/sql/updates/world/2015_07_18_01_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_18_01_world.sql
diff --git a/sql/updates/world/2015_07_19_00_world_2015_07_18_04.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_00_world_2015_07_18_04.sql
index 852eae9ecf2..852eae9ecf2 100644
--- a/sql/updates/world/2015_07_19_00_world_2015_07_18_04.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_00_world_2015_07_18_04.sql
diff --git a/sql/updates/world/2015_07_19_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_01_world.sql
index fc14961d089..fc14961d089 100644
--- a/sql/updates/world/2015_07_19_01_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_01_world.sql
diff --git a/sql/updates/world/2015_07_19_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_02_world.sql
index 92aad97bccf..92aad97bccf 100644
--- a/sql/updates/world/2015_07_19_02_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_02_world.sql
diff --git a/sql/updates/world/2015_07_19_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_03_world.sql
index 2a7460a7fdb..2a7460a7fdb 100644
--- a/sql/updates/world/2015_07_19_03_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_03_world.sql
diff --git a/sql/updates/world/2015_07_19_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_04_world.sql
index 562515459ba..562515459ba 100644
--- a/sql/updates/world/2015_07_19_04_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_04_world.sql
diff --git a/sql/updates/world/2015_07_19_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_05_world.sql
index 2d174d02b4d..2d174d02b4d 100644
--- a/sql/updates/world/2015_07_19_05_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_05_world.sql
diff --git a/sql/updates/world/2015_07_20_02_world_2015_07_19_35.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_20_02_world_2015_07_19_35.sql
index 205aa716424..205aa716424 100644
--- a/sql/updates/world/2015_07_20_02_world_2015_07_19_35.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_20_02_world_2015_07_19_35.sql
diff --git a/sql/updates/world/2015_07_21_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_21_00_world.sql
index afa6ee1534c..afa6ee1534c 100644
--- a/sql/updates/world/2015_07_21_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_21_00_world.sql
diff --git a/sql/updates/world/2015_07_24_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_00_world.sql
index 7ef8fc884c0..7ef8fc884c0 100644
--- a/sql/updates/world/2015_07_24_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_00_world.sql
diff --git a/sql/updates/world/2015_07_24_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_01_world.sql
index 02374c13d57..02374c13d57 100644
--- a/sql/updates/world/2015_07_24_01_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_01_world.sql
diff --git a/sql/updates/world/2015_07_24_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_02_world.sql
index 7e217be61b9..7e217be61b9 100644
--- a/sql/updates/world/2015_07_24_02_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_02_world.sql
diff --git a/sql/updates/world/2015_07_24_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_03_world.sql
index 1c6f74b48b3..1c6f74b48b3 100644
--- a/sql/updates/world/2015_07_24_03_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_03_world.sql
diff --git a/sql/updates/world/2015_07_24_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_04_world.sql
index c3849e7b6c8..c3849e7b6c8 100644
--- a/sql/updates/world/2015_07_24_04_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_04_world.sql
diff --git a/sql/updates/world/2015_07_24_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_05_world.sql
index 21577ac8cf1..21577ac8cf1 100644
--- a/sql/updates/world/2015_07_24_05_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_05_world.sql
diff --git a/sql/updates/world/2015_07_24_06_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_06_world.sql
index bb20661bdb2..bb20661bdb2 100644
--- a/sql/updates/world/2015_07_24_06_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_06_world.sql
diff --git a/sql/updates/world/2015_07_24_07_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_07_world.sql
index eb5d08ea8f1..eb5d08ea8f1 100644
--- a/sql/updates/world/2015_07_24_07_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_07_world.sql
diff --git a/sql/updates/world/2015_07_25_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_00_world.sql
index 5bb31842507..5bb31842507 100644
--- a/sql/updates/world/2015_07_25_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_00_world.sql
diff --git a/sql/updates/world/2015_07_25_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_01_world.sql
index f2fea14343d..f2fea14343d 100644
--- a/sql/updates/world/2015_07_25_01_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_01_world.sql
diff --git a/sql/updates/world/2015_07_25_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_02_world.sql
index 0c81696a072..0c81696a072 100644
--- a/sql/updates/world/2015_07_25_02_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_02_world.sql
diff --git a/sql/updates/world/2015_07_25_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_03_world.sql
index ac69cc1898c..ac69cc1898c 100644
--- a/sql/updates/world/2015_07_25_03_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_03_world.sql
diff --git a/sql/updates/world/2015_07_25_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_04_world.sql
index 5762e9aeb66..5762e9aeb66 100644
--- a/sql/updates/world/2015_07_25_04_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_04_world.sql
diff --git a/sql/updates/world/2015_07_26_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_00_world.sql
index 3634dc21cd3..3634dc21cd3 100644
--- a/sql/updates/world/2015_07_26_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_00_world.sql
diff --git a/sql/updates/world/2015_07_26_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_04_world.sql
index 3bbc7c3c7f8..3bbc7c3c7f8 100644
--- a/sql/updates/world/2015_07_26_04_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_04_world.sql
diff --git a/sql/updates/world/2015_07_26_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_05_world.sql
index c7f4e3f4f39..c7f4e3f4f39 100644
--- a/sql/updates/world/2015_07_26_05_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_05_world.sql
diff --git a/sql/updates/world/2015_07_26_06_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_06_world.sql
index cb0b17c4634..cb0b17c4634 100644
--- a/sql/updates/world/2015_07_26_06_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_06_world.sql
diff --git a/sql/updates/world/2015_07_27_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_27_00_world.sql
index 96140cff8ef..96140cff8ef 100644
--- a/sql/updates/world/2015_07_27_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_27_00_world.sql
diff --git a/sql/updates/world/2015_07_27_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_27_01_world.sql
index 1c450b8b6ce..1c450b8b6ce 100644
--- a/sql/updates/world/2015_07_27_01_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_27_01_world.sql
diff --git a/sql/updates/world/2015_07_29_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_29_00_world.sql
index 8182441c534..8182441c534 100644
--- a/sql/updates/world/2015_07_29_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_29_00_world.sql
diff --git a/sql/updates/world/2015_07_29_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_29_01_world.sql
index 247922cdf9d..247922cdf9d 100644
--- a/sql/updates/world/2015_07_29_01_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_29_01_world.sql
diff --git a/sql/updates/world/2015_08_01_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_01_00_world.sql
index 30219803882..30219803882 100644
--- a/sql/updates/world/2015_08_01_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_01_00_world.sql
diff --git a/sql/updates/world/2015_08_02_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_02_00_world_335.sql
index db9ba7e389e..db9ba7e389e 100644
--- a/sql/updates/world/2015_08_02_00_world_335.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_02_00_world_335.sql
diff --git a/sql/updates/world/2015_08_02_01_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_02_01_world_335.sql
index c8c4a311a55..c8c4a311a55 100644
--- a/sql/updates/world/2015_08_02_01_world_335.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_02_01_world_335.sql
diff --git a/sql/updates/world/2015_08_03_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_03_00_world_335.sql
index 48c8e4713ce..48c8e4713ce 100644
--- a/sql/updates/world/2015_08_03_00_world_335.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_03_00_world_335.sql
diff --git a/sql/updates/world/2015_08_08_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_00_world_335.sql
index 5aa0f78c2d6..5aa0f78c2d6 100644
--- a/sql/updates/world/2015_08_08_00_world_335.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_00_world_335.sql
diff --git a/sql/updates/world/2015_08_08_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_01_world.sql
index 68d82c575e3..68d82c575e3 100644
--- a/sql/updates/world/2015_08_08_01_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_01_world.sql
diff --git a/sql/updates/world/2015_08_08_02_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_02_world_335.sql
index 3f8dbfa1741..3f8dbfa1741 100644
--- a/sql/updates/world/2015_08_08_02_world_335.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_02_world_335.sql
diff --git a/sql/updates/world/2015_08_08_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_03_world.sql
index 0f029f72721..0f029f72721 100644
--- a/sql/updates/world/2015_08_08_03_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_03_world.sql
diff --git a/sql/updates/world/2015_08_08_04_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_04_world_335.sql
index d342db35056..d342db35056 100644
--- a/sql/updates/world/2015_08_08_04_world_335.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_04_world_335.sql
diff --git a/sql/updates/world/2015_08_09_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_09_00_world_335.sql
index 1a243f6a7dd..1a243f6a7dd 100644
--- a/sql/updates/world/2015_08_09_00_world_335.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_09_00_world_335.sql
diff --git a/sql/updates/world/2015_08_13_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_00_world.sql
index 828a626851b..828a626851b 100644
--- a/sql/updates/world/2015_08_13_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_00_world.sql
diff --git a/sql/updates/world/2015_08_13_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_01_world.sql
index cdfc38b1202..cdfc38b1202 100644
--- a/sql/updates/world/2015_08_13_01_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_01_world.sql
diff --git a/sql/updates/world/2015_08_13_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_02_world.sql
index e2863aea0f7..e2863aea0f7 100644
--- a/sql/updates/world/2015_08_13_02_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_02_world.sql
diff --git a/sql/updates/world/2015_08_13_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_03_world.sql
index 364124850c8..364124850c8 100644
--- a/sql/updates/world/2015_08_13_03_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_03_world.sql
diff --git a/sql/updates/world/2015_08_13_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_04_world.sql
index abf0cb0ab27..abf0cb0ab27 100644
--- a/sql/updates/world/2015_08_13_04_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_04_world.sql
diff --git a/sql/updates/world/2015_08_21_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_00_world.sql
index 05192c5a98d..05192c5a98d 100644
--- a/sql/updates/world/2015_08_21_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_00_world.sql
diff --git a/sql/updates/world/2015_08_21_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_01_world.sql
index 794e03cd0d3..794e03cd0d3 100644
--- a/sql/updates/world/2015_08_21_01_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_01_world.sql
diff --git a/sql/updates/world/2015_08_21_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_02_world.sql
index 8ce0d658242..8ce0d658242 100644
--- a/sql/updates/world/2015_08_21_02_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_02_world.sql
diff --git a/sql/updates/world/2015_08_23_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_23_00_world.sql
index 1dbdab1278f..1dbdab1278f 100644
--- a/sql/updates/world/2015_08_23_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_23_00_world.sql
diff --git a/sql/updates/world/2015_08_25_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_25_00_world.sql
index 18619957efe..18619957efe 100644
--- a/sql/updates/world/2015_08_25_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_25_00_world.sql
diff --git a/sql/updates/world/2015_08_25_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_25_01_world.sql
index f261acf71e7..f261acf71e7 100644
--- a/sql/updates/world/2015_08_25_01_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_25_01_world.sql
diff --git a/sql/updates/world/2015_08_26_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_26_00_world.sql
index 2bb55b8bfc7..2bb55b8bfc7 100644
--- a/sql/updates/world/2015_08_26_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_26_00_world.sql
diff --git a/sql/updates/world/2015_08_26_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_26_01_world.sql
index ded18be8a7b..ded18be8a7b 100644
--- a/sql/updates/world/2015_08_26_01_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_26_01_world.sql
diff --git a/sql/updates/world/2015_08_27_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_27_00_world.sql
index a0519693f9e..a0519693f9e 100644
--- a/sql/updates/world/2015_08_27_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_27_00_world.sql
diff --git a/sql/updates/world/2015_08_29_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_00_world.sql
index 59bf0e2bfcf..59bf0e2bfcf 100644
--- a/sql/updates/world/2015_08_29_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_00_world.sql
diff --git a/sql/updates/world/2015_08_29_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_01_world.sql
index 05aa1774d18..05aa1774d18 100644
--- a/sql/updates/world/2015_08_29_01_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_01_world.sql
diff --git a/sql/updates/world/2015_08_29_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_02_world.sql
index 44ec964d97f..44ec964d97f 100644
--- a/sql/updates/world/2015_08_29_02_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_02_world.sql
diff --git a/sql/updates/world/2015_08_29_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_03_world.sql
index 7d520664422..7d520664422 100644
--- a/sql/updates/world/2015_08_29_03_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_03_world.sql
diff --git a/sql/updates/world/2015_08_29_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_04_world.sql
index b0ffc1fb0c5..b0ffc1fb0c5 100644
--- a/sql/updates/world/2015_08_29_04_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_04_world.sql
diff --git a/sql/updates/world/2015_08_30_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_30_00_world.sql
index 02a247bdd6d..02a247bdd6d 100644
--- a/sql/updates/world/2015_08_30_00_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_30_00_world.sql
diff --git a/sql/updates/world/2015_08_31_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_31_01_world.sql
index c3a5bc4cdfd..c3a5bc4cdfd 100644
--- a/sql/updates/world/2015_08_31_01_world.sql
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_31_01_world.sql
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_01_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_01_00_world_335.sql
new file mode 100644
index 00000000000..a14e8633c7a
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_01_00_world_335.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature` SET `phaseMask`=1 WHERE `phaseMask`=65535;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_00_world.sql
new file mode 100644
index 00000000000..c83de23b06a
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_00_world.sql
@@ -0,0 +1,7 @@
+-- Waypoint fix for quest "Escape from the Winterfin Caverns" (11570)
+UPDATE `script_waypoint` SET `location_x`=4279.54, `location_y`=6187.932, `location_z`=0.294670 WHERE `entry`=25208 AND `pointid`=41;
+
+-- Swap 1st and 2nd text
+UPDATE `creature_text` SET `groupid` = 99 WHERE `entry` = 25208 AND `groupid` = 0 AND `id` = 0;
+UPDATE `creature_text` SET `groupid` = 0 WHERE `entry` = 25208 AND `groupid` = 1 AND `id` = 0;
+UPDATE `creature_text` SET `groupid` = 1 WHERE `entry` = 25208 AND `groupid` = 99 AND `id` = 0;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_01_world.sql
new file mode 100644
index 00000000000..1b58aed1abc
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_01_world.sql
@@ -0,0 +1,7 @@
+--
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=47669;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `Comment`) VALUES
+(13, 1, 47669, 0, 1, 0, 48048, 0,0, "Awaken Subboss");
+
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 48048;
+INSERT INTO `spell_linked_spell` VALUES (48048, 47669, 0, 'Awaken Subboss');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_02_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_02_world_335.sql
new file mode 100644
index 00000000000..e211aea30e6
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_02_world_335.sql
@@ -0,0 +1,80 @@
+-- quest_details
+DROP TABLE IF EXISTS `quest_details`;
+CREATE TABLE `quest_details` (
+ `ID` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
+ `Emote1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
+ `Emote2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
+ `Emote3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
+ `Emote4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
+ `EmoteDelay1` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `EmoteDelay2` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `EmoteDelay3` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `EmoteDelay4` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `VerifiedBuild` SMALLINT(5) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`)
+SELECT `ID`, `DetailsEmote1`, `DetailsEmote2`, `DetailsEmote3`, `DetailsEmote4`, `DetailsEmoteDelay1`, `DetailsEmoteDelay2`, `DetailsEmoteDelay3`, `DetailsEmoteDelay4`, `VerifiedBuild` FROM `quest_template`
+WHERE `DetailsEmote1`!=0 OR `DetailsEmote2`!=0 OR `DetailsEmote3`!=0 OR `DetailsEmote4`!=0 OR `DetailsEmoteDelay1`!=0 OR `DetailsEmoteDelay2`!=0 OR `DetailsEmoteDelay3`!=0 OR `DetailsEmoteDelay4`!=0;
+
+
+-- quest_request_items
+DROP TABLE IF EXISTS `quest_request_items`;
+CREATE TABLE `quest_request_items` (
+ `ID` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
+ `EmoteOnComplete` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
+ `EmoteOnIncomplete` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
+ `CompletionText` TEXT,
+ `VerifiedBuild` SMALLINT(5) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+INSERT INTO `quest_request_items` (`ID`, `EmoteOnComplete`, `EmoteOnIncomplete`, `CompletionText`, `VerifiedBuild`)
+SELECT `ID`, `EmoteOnComplete`, `EmoteOnIncomplete`, `RequestItemsText`, `VerifiedBuild` FROM `quest_template`
+WHERE `EmoteOnComplete`!=0 OR `EmoteOnIncomplete`!=0 OR `RequestItemsText`!='';
+
+
+-- quest_offer_reward
+DROP TABLE IF EXISTS `quest_offer_reward`;
+CREATE TABLE `quest_offer_reward` (
+ `ID` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
+ `Emote1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
+ `Emote2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
+ `Emote3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
+ `Emote4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
+ `EmoteDelay1` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `EmoteDelay2` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `EmoteDelay3` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `EmoteDelay4` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `RewardText` TEXT,
+ `VerifiedBuild` SMALLINT(5) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+INSERT INTO `quest_offer_reward` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `RewardText`, `VerifiedBuild`)
+SELECT `ID`, `OfferRewardEmote1`, `OfferRewardEmote2`, `OfferRewardEmote3`, `OfferRewardEmote4`, `OfferRewardEmoteDelay1`, `OfferRewardEmoteDelay2`, `OfferRewardEmoteDelay3`, `OfferRewardEmoteDelay4`, `OfferRewardText`, `VerifiedBuild` FROM `quest_template`
+WHERE `OfferRewardEmote1`!=0 OR `OfferRewardEmote2`!=0 OR `OfferRewardEmote3`!=0 OR `OfferRewardEmote4`!=0 OR `OfferRewardEmoteDelay1`!=0 OR `OfferRewardEmoteDelay2`!=0 OR `OfferRewardEmoteDelay3`!=0 OR `OfferRewardEmoteDelay4`!=0 OR `OfferRewardText`!='';
+
+-- delete old fields
+ALTER TABLE `quest_template`
+ DROP `DetailsEmote1`,
+ DROP `DetailsEmote2`,
+ DROP `DetailsEmote3`,
+ DROP `DetailsEmote4`,
+ DROP `DetailsEmoteDelay1`,
+ DROP `DetailsEmoteDelay2`,
+ DROP `DetailsEmoteDelay3`,
+ DROP `DetailsEmoteDelay4`,
+ DROP `EmoteOnIncomplete`,
+ DROP `EmoteOnComplete`,
+ DROP `RequestItemsText`,
+ DROP `OfferRewardEmote1`,
+ DROP `OfferRewardEmote2`,
+ DROP `OfferRewardEmote3`,
+ DROP `OfferRewardEmote4`,
+ DROP `OfferRewardEmoteDelay1`,
+ DROP `OfferRewardEmoteDelay2`,
+ DROP `OfferRewardEmoteDelay3`,
+ DROP `OfferRewardEmoteDelay4`,
+ DROP `OfferRewardText`;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_03_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_03_world_335.sql
new file mode 100644
index 00000000000..c2454f69c0c
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_03_world_335.sql
@@ -0,0 +1,28 @@
+-- RewardItem(s) and RewardAmount(s) [4x2 fields]
+ALTER TABLE `quest_template`
+ CHANGE COLUMN `RewardAmount1` `RewardAmount1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItem1`,
+ CHANGE COLUMN `RewardAmount2` `RewardAmount2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItem2`,
+ CHANGE COLUMN `RewardAmount3` `RewardAmount3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItem3`,
+ CHANGE COLUMN `RewardAmount4` `RewardAmount4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItem4`;
+
+-- RewardChoiceItemID(s) and RewardChoiceItemQuantity(s) [6x2 fields]
+ALTER TABLE `quest_template`
+ CHANGE COLUMN `RewardChoiceItemQuantity1` `RewardChoiceItemQuantity1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardChoiceItemID1`,
+ CHANGE COLUMN `RewardChoiceItemQuantity2` `RewardChoiceItemQuantity2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardChoiceItemID2`,
+ CHANGE COLUMN `RewardChoiceItemQuantity3` `RewardChoiceItemQuantity3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardChoiceItemID3`,
+ CHANGE COLUMN `RewardChoiceItemQuantity4` `RewardChoiceItemQuantity4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardChoiceItemID4`,
+ CHANGE COLUMN `RewardChoiceItemQuantity5` `RewardChoiceItemQuantity5` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardChoiceItemID5`,
+ CHANGE COLUMN `RewardChoiceItemQuantity6` `RewardChoiceItemQuantity6` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardChoiceItemID6`;
+
+-- RewardFactionID(s), RewardFactionValue(s) and RewardFactionOverride(s) [5x3 fields]
+ALTER TABLE `quest_template`
+ CHANGE COLUMN `RewardFactionValue1` `RewardFactionValue1` MEDIUMINT(8) NOT NULL DEFAULT '0' AFTER `RewardFactionID1`,
+ CHANGE COLUMN `RewardFactionOverride1` `RewardFactionOverride1` MEDIUMINT(8) NOT NULL DEFAULT '0' AFTER `RewardFactionValue1`,
+ CHANGE COLUMN `RewardFactionValue2` `RewardFactionValue2` MEDIUMINT(8) NOT NULL DEFAULT '0' AFTER `RewardFactionID2`,
+ CHANGE COLUMN `RewardFactionOverride2` `RewardFactionOverride2` MEDIUMINT(8) NOT NULL DEFAULT '0' AFTER `RewardFactionValue2`,
+ CHANGE COLUMN `RewardFactionValue3` `RewardFactionValue3` MEDIUMINT(8) NOT NULL DEFAULT '0' AFTER `RewardFactionID3`,
+ CHANGE COLUMN `RewardFactionOverride3` `RewardFactionOverride3` MEDIUMINT(8) NOT NULL DEFAULT '0' AFTER `RewardFactionValue3`,
+ CHANGE COLUMN `RewardFactionValue4` `RewardFactionValue4` MEDIUMINT(8) NOT NULL DEFAULT '0' AFTER `RewardFactionID4`,
+ CHANGE COLUMN `RewardFactionOverride4` `RewardFactionOverride4` MEDIUMINT(8) NOT NULL DEFAULT '0' AFTER `RewardFactionValue4`,
+ CHANGE COLUMN `RewardFactionValue5` `RewardFactionValue5` MEDIUMINT(8) NOT NULL DEFAULT '0' AFTER `RewardFactionID5`,
+ CHANGE COLUMN `RewardFactionOverride5` `RewardFactionOverride5` MEDIUMINT(8) NOT NULL DEFAULT '0' AFTER `RewardFactionValue5`;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_04_world.sql
new file mode 100644
index 00000000000..2a66eb3390f
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_04_world.sql
@@ -0,0 +1,5 @@
+--
+DELETE FROM `creature` WHERE `guid`=118724 AND `id`=27122;
+UPDATE `creature` SET `equipment_id`=1 WHERE `guid`=52290;
+UPDATE `creature_template_addon` SET `emote`=0 WHERE `entry`=26942;
+UPDATE `smart_scripts` SET `action_type`=11, `action_param1`=45491, `target_type`=19, `target_param1`=27180, `target_param2`=10, `comment`="Decrepit Necromancer - Out of Combat - Cast Necrotic Purple Beam" WHERE `entryorguid`=26942 AND `source_type`=0 AND `id`=0;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_00_world.sql
new file mode 100644
index 00000000000..90eeee2e0ee
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_00_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `creature` WHERE `guid`=137997 AND `id`=10319;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_01_world.sql
new file mode 100644
index 00000000000..0f1a0348ef1
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_01_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `creature` WHERE `guid`=208775 AND `id`=25958;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_02_world.sql
new file mode 100644
index 00000000000..3baa80fbac1
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_02_world.sql
@@ -0,0 +1,7 @@
+--
+DELETE FROM `creature` WHERE `guid`=201508 AND `id`=37824;
+DELETE FROM `creature` WHERE `guid`=201460 AND `id`=38228;
+DELETE FROM `creature` WHERE `guid`=201661 AND `id`=38228;
+DELETE FROM `creature` WHERE `guid`=201442 AND `id`=38231;
+DELETE FROM `creature` WHERE `guid`=201490 AND `id`=38232;
+DELETE FROM `creature` WHERE `guid`=201539 AND `id`=38232;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_03_world.sql
new file mode 100644
index 00000000000..8e717422930
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_03_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `creature` WHERE `guid`=88282 AND `id`=18700;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_04_world.sql
new file mode 100644
index 00000000000..9c4d4d98828
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_04_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `creature` WHERE `guid`=28649 AND `id`=17148;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_05_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_05_world_335.sql
new file mode 100644
index 00000000000..eed2d862803
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_05_world_335.sql
@@ -0,0 +1,3 @@
+ALTER TABLE `quest_template`
+ CHANGE COLUMN `Method` `QuestType` TINYINT(3) UNSIGNED NOT NULL DEFAULT '2' AFTER `ID`,
+ CHANGE COLUMN `QuestType` `QuestInfoID` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `QuestSortID`;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_06_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_06_world.sql
new file mode 100644
index 00000000000..3444afe1d77
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_06_world.sql
@@ -0,0 +1,5 @@
+--
+DELETE FROM `smart_scripts` WHERE `entryorguid`=2546000 AND `source_type`=9 AND `id`=0 AND `action_type`=11;
+UPDATE `smart_scripts` SET `id`=0 WHERE `entryorguid`=2546000 AND `source_type`=9 AND `id`=1 AND `action_type`=53;
+
+DELETE FROM `creature_addon` WHERE `guid`=137997; -- fix a DB error
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_07_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_07_world.sql
new file mode 100644
index 00000000000..28736bdf787
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_07_world.sql
@@ -0,0 +1,6 @@
+--
+UPDATE `creature_template` SET `spell1`=49297 WHERE `entry` IN (27664,40281);
+DELETE FROM `creature_template_addon` WHERE `entry` IN (27664,40281);
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(27664,0,0,0,0,0,'49384'),
+(40281,0,0,0,0,0,'75110');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_08_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_08_world.sql
new file mode 100644
index 00000000000..9331944eb09
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_08_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `item_template` SET `socketcolor_1` = 4 WHERE `entry` = 44176;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_09_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_09_world.sql
new file mode 100644
index 00000000000..516d2245f3c
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_09_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_template_addon` SET `mount`=21158 WHERE `entry`=22980;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_10_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_10_world.sql
new file mode 100644
index 00000000000..5394299e737
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_10_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `spell_proc_event` SET `Cooldown`=45 WHERE `entry`=64786;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_11_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_11_world.sql
new file mode 100644
index 00000000000..c499b5a71c6
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_11_world.sql
@@ -0,0 +1,10 @@
+--
+SET @ENTRY := 3584;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`>=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
+(@ENTRY,0,5,7,61,0,100,0,945,0,0,0,2,250,0,0,0,0,0,1,0,0,0,0,0,0,0,"Therylune - On Quest 'Therylune's Escape' Taken - Set Faction 250"),
+(@ENTRY,0,6,8,11,0,100,0,0,0,0,0,2,124,0,0,0,0,0,1,0,0,0,0,0,0,0,"Therylune - On Respawn - Set Faction 124"),
+(@ENTRY,0,7,9,61,0,100,0,0,0,0,0,19,512,0,0,0,0,0,1,0,0,0,0,0,0,0,"Therylune - On Quest 'Therylune's Escape' Taken - Remove Flags Immune To NPC's"),
+(@ENTRY,0,8,0,61,0,100,0,0,0,0,0,18,512,0,0,0,0,0,1,0,0,0,0,0,0,0,"Therylune - On Respawn - Set Flags Immune To NPC's"),
+(@ENTRY,0,9,0,61,0,100,0,0,0,0,0,83,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Therylune - On Quest 'Therylune's Escape' Taken - Remove npc flag");
+UPDATE `smart_scripts` SET `link`=5 WHERE `entryorguid`=3584 AND `source_type`=0 AND `id`=1 AND `link`=0;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_00_world.sql
new file mode 100644
index 00000000000..2e67495733c
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_00_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `creature` WHERE `guid`=151994 AND `id`=32475;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_01_world.sql
new file mode 100644
index 00000000000..e9c3f9884ad
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_01_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `creature` WHERE `guid`=134518 AND `id`=23810;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_02_world.sql
new file mode 100644
index 00000000000..9b96e3a43fa
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_02_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `creature` WHERE `guid`=123124 AND `id`=32769;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_03_world.sql
new file mode 100644
index 00000000000..33509c700c6
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_03_world.sql
@@ -0,0 +1,3 @@
+--
+DELETE FROM `creature` WHERE `guid`=120833 AND `id`=32769;
+DELETE FROM `creature` WHERE `guid`=120831 AND `id`=32769;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_00_world.sql
new file mode 100644
index 00000000000..a259ae99f23
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_00_world.sql
@@ -0,0 +1,335 @@
+--
+SET @GUID := 52011; -- 11 FREE CGUID SET BY TC
+DELETE FROM `creature` WHERE `guid` BETWEEN @GUID AND @GUID + 10;
+INSERT INTO `creature` (`guid`, `id`, `map`, `modelid`, `position_x`, `position_y`, `position_z`, `orientation`, `curhealth`) VALUES
+(@GUID + 0, 24833, 584, 22659, 26.68381, 5.156456, 11.14973, 1.562181, 1474), -- Captain "Stash" Torgoley <The Lady Mehley> - 75958
+(@GUID + 1, 24834, 584, 22660, 17.73618, -7.963644, 6.181007, 1.658063, 1474), -- Galley Chief Grace <The Lady Mehley> - 75959
+(@GUID + 2, 24835, 584, 22661, 24.61499, 5.468628, 16.04766, 3.176499, 1358), -- First Mate Kowalski <The Lady Mehley> - 75960
+(@GUID + 3, 24836, 584, 262, -4.359131, 3.349854, 6.099176, 1.576669, 312), -- Abe the Cabin Boy <The Lady Mehley> - 75961
+(@GUID + 4, 24837, 584, 22662, 19.20459, -7.213135, 6.097228, 3.667171, 867), -- Navigator Mehran <The Lady Mehley> - 75962
+(@GUID + 5, 24838, 584, 22663, -27.50586, -3.588379, 21.17929, 2.405203, 804), -- Sailor Henders <The Lady Mehley> - 75963
+(@GUID + 6, 24839, 584, 22664, 6.123779, 10.77246, 11.47038, 1.539951, 804), -- Sailor Wicks <The Lady Mehley> - 75964
+(@GUID + 7, 24840, 584, 22665, 28.74146, 6.708008, 6.096051, 1.087228, 804), -- Sailor Vines <The Lady Mehley> - 75965
+(@GUID + 8, 24841, 584, 1858, -9.322998, -1.669921, 6.09808, 0.01745319, 10236), -- Marine Halters - 75966
+(@GUID + 9, 24842, 584, 22666, 14.44629, 0.1442871, 12.0214, 3.309605, 10236), -- Marine Anderson - 75967
+(@GUID + 10, 24843, 584, 22667, 6.350558, 8.718207, 6.180843, 5.427974, 928); -- Engineer Combs <The Lady Mehley> - 75968
+
+-- Pathing for Entry: 24833 'TDB FORMAT'
+SET @NPC := @GUID;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=37.03026,`position_y`=4.622362,`position_z`=6.176411, `orientation`=1.00 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,1,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,37.03026,4.622362,6.176411,1.00,35000,0,0,100,0),
+(@PATH,2,33.79711,3.379296,6.136233,0,0,0,0,100,0),
+(@PATH,3,30.11437,1.977602,6.346729,0,0,0,0,100,0),
+(@PATH,4,28.86437,2.977602,6.346729,0,0,0,0,100,0),
+(@PATH,5,26.34205,5.299405,6.347331,0,0,0,0,100,0),
+(@PATH,6,23.84205,5.299405,6.347331,0,0,0,0,100,0),
+(@PATH,7,17.09205,5.049405,6.347331,0,0,0,0,100,0),
+(@PATH,8,10.25663,4.995337,6.348217,0,0,0,0,100,0),
+(@PATH,9,7.917565,0.5690584,6.348763,0,0,0,0,100,0),
+(@PATH,10,8.917565,-0.9309416,6.348763,0,0,0,0,100,0),
+(@PATH,11,11.10869,-4.599314,6.348672,0,0,0,0,100,0),
+(@PATH,12,18.60869,-4.849314,6.348672,0,0,0,0,100,0),
+(@PATH,13,24.60869,-5.099314,6.348672,0,0,0,0,100,0),
+(@PATH,14,26.69126,-5.140297,6.623405,0,0,0,0,100,0),
+(@PATH,15,26.69126,-3.640297,6.623405,0,0,0,0,100,0),
+(@PATH,16,26.69126,3.859703,11.3734,0,0,0,0,100,0),
+(@PATH,17,26.56619,3.997062,11.49595,0,0,0,0,100,0),
+(@PATH,18,26.56619,5.497062,11.49595,0,0,0,0,100,0),
+(@PATH,19,24.06619,5.497062,11.49595,0,0,0,0,100,0),
+(@PATH,20,22.81619,5.497062,11.99595,0,0,0,0,100,0),
+(@PATH,21,21.56619,5.497062,12.24595,0,0,0,0,100,0),
+(@PATH,22,5.473877,5.844482,11.85669,0,25000,0,0,100,0),
+(@PATH,23,7.723877,-1.405518,11.85669,0,0,0,0,100,0),
+(@PATH,24,10.47388,-6.155518,11.85669,0,0,0,0,100,0),
+(@PATH,25,10.43553,-5.953337,11.88334,0,0,0,0,100,0),
+(@PATH,26,10.93553,-6.953337,11.88334,0,0,0,0,100,0),
+(@PATH,27,5.371088,-7.016384,11.77661,0,0,0,0,100,0),
+(@PATH,28,2.413238,-4.390701,11.56228,0,0,0,0,100,0),
+(@PATH,29,1.163238,-4.390701,11.31228,0,0,0,0,100,0),
+(@PATH,30,-3.086762,-5.140701,6.562281,0,0,0,0,100,0);
+-- 0x1C15A0002018404000004000006049B5 .go 37.03026 4.622362 6.176411
+
+-- Pathing for Entry: 24835 'TDB FORMAT'
+SET @NPC := @GUID + 2;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=24.61543,`position_y`=5.468647,`position_z`=16.12396 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,24.61543,5.468647,16.12396,3.246287,0,0,0,100,0),
+(@PATH,2,24.59153,3.553659,16.31282,0,0,0,0,100,0),
+(@PATH,3,24.59153,0.05365944,16.31282,0,0,0,0,100,0),
+(@PATH,4,24.59153,-3.446341,16.06282,0,0,0,0,100,0),
+(@PATH,5,24.57548,-5.133168,16.0891,0,0,0,0,100,0),
+(@PATH,6,23.32548,-5.383168,16.0891,0,0,0,0,100,0),
+(@PATH,7,20.07548,-5.883168,12.5891,0,0,0,0,100,0),
+(@PATH,8,19.97622,-5.8692,12.62369,0,0,0,0,100,0),
+(@PATH,9,19.22622,-5.8692,12.62369,0,0,0,0,100,0),
+(@PATH,10,18.97622,-4.6192,12.62369,0,0,0,0,100,0),
+(@PATH,11,17.54005,-0.2464206,12.32892,0,0,0,0,100,0),
+(@PATH,12,18.04005,3.753579,12.32892,0,0,0,0,100,0),
+(@PATH,13,18.07397,3.926754,12.37037,0,0,0,0,100,0),
+(@PATH,14,18.32397,5.676754,12.12037,0,0,0,0,100,0),
+(@PATH,15,20.28442,3.827637,12.37757,0,0,0,0,100,0),
+(@PATH,16,19.53442,-0.1723633,12.37757,0,0,0,0,100,0),
+(@PATH,17,19.03442,-4.672363,12.12757,0,0,0,0,100,0),
+(@PATH,18,18.88482,-4.669163,12.44052,0,0,0,0,100,0),
+(@PATH,19,18.88482,-5.669163,12.44052,0,0,0,0,100,0),
+(@PATH,20,20.13482,-5.669163,12.69052,0,0,0,0,100,0),
+(@PATH,21,23.13482,-5.169163,15.94052,0,0,0,0,100,0),
+(@PATH,22,25.75478,-4.782483,16.3373,0,0,0,0,100,0),
+(@PATH,23,25.75478,-3.282483,16.3373,0,0,0,0,100,0),
+(@PATH,24,26.00478,-0.03248262,16.5873,0,0,0,0,100,0),
+(@PATH,25,26.25478,3.467517,16.5873,0,0,0,0,100,0),
+(@PATH,26,24.61548,5.46875,16.04771,0,0,0,0,100,0),
+(@PATH,27,24.61548,5.46875,16.04771,3.176499,80000,0,0,100,0);
+-- 0x1C15A000201840C000004000006048CF .go 24.61543 5.468647 16.12396
+
+-- Pathing for Entry: 24836 'TDB FORMAT'
+SET @NPC := @GUID + 3;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2.233398,`position_y`=2.553833,`position_z`=6.099016 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,-2.233398,2.553833,6.099016,0,0,0,0,100,0),
+(@PATH,2,-2.233398,2.553833,6.099016,2.059489,0,0,0,100,0),
+(@PATH,3,1.698853,3.417053,6.348891,0,0,0,0,100,0),
+(@PATH,4,3.448853,4.167053,6.348891,0,0,0,0,100,0),
+(@PATH,5,7.448853,-0.5829468,6.348891,0,0,0,0,100,0),
+(@PATH,6,9.774704,-2.902952,6.349678,0,0,0,0,100,0),
+(@PATH,7,9.800768,-3.249776,6.348591,0,0,0,0,100,0),
+(@PATH,8,13.55077,-3.999776,6.348591,0,0,0,0,100,0),
+(@PATH,9,18.30077,-4.749776,6.348591,0,0,0,0,100,0),
+(@PATH,10,20.13506,-5.121357,6.347137,0,0,0,0,100,0),
+(@PATH,11,24.38506,-5.371357,6.347137,0,0,0,0,100,0),
+(@PATH,12,24.58777,-5.452598,6.623333,0,0,0,0,100,0),
+(@PATH,13,26.83777,-5.702598,6.623333,0,0,0,0,100,0),
+(@PATH,14,26.58777,-3.452598,6.623333,0,0,0,0,100,0),
+(@PATH,15,26.58777,3.797402,11.37333,0,0,0,0,100,0),
+(@PATH,16,26.85096,4.066658,11.19734,0,0,0,0,100,0),
+(@PATH,17,26.85096,5.566658,11.19734,0,0,0,0,100,0),
+(@PATH,18,26.86504,5.718296,11.3996,0,0,0,0,100,0),
+(@PATH,19,30.61504,5.718296,11.3996,0,0,0,0,100,0),
+(@PATH,20,30.61504,3.718296,11.3996,0,0,0,0,100,0),
+(@PATH,21,29.54675,3.707764,11.3996,0,0,0,0,100,0),
+(@PATH,22,28.29675,4.207764,11.3996,0,0,0,0,100,0),
+(@PATH,23,24.39871,5.605234,11.61975,0,0,0,0,100,0),
+(@PATH,24,23.39871,5.605234,11.61975,0,0,0,0,100,0),
+(@PATH,25,22.14871,5.605234,12.11975,0,0,0,0,100,0),
+(@PATH,26,21.82304,5.810547,12.27328,0,0,0,0,100,0),
+(@PATH,27,20.07304,5.810547,12.27328,0,0,0,0,100,0),
+(@PATH,28,17.32304,3.810547,12.27328,0,0,0,0,100,0),
+(@PATH,29,17.06653,3.683082,12.10866,0,0,0,0,100,0),
+(@PATH,30,14.56653,1.933082,12.10866,0,0,0,0,100,0),
+(@PATH,31,13.06653,-1.066918,12.10866,0,0,0,0,100,0),
+(@PATH,32,9.639757,-6.127687,11.82736,0,0,0,0,100,0),
+(@PATH,33,3.298409,-6.022044,11.54611,0,0,0,0,100,0),
+(@PATH,34,2.798409,-4.272044,11.54611,0,0,0,0,100,0),
+(@PATH,35,1.048409,-4.522044,11.29611,0,0,0,0,100,0),
+(@PATH,36,-2.951591,-5.022044,6.546112,0,0,0,0,100,0),
+(@PATH,37,-4.002031,-4.848095,6.186443,0,0,0,0,100,0),
+(@PATH,38,-4.002031,-0.0980947,6.186443,0,0,0,0,100,0),
+(@PATH,39,-2.233643,2.553955,6.099016,0,0,0,0,100,0);
+-- 0x1C15A0000018410000002F0000604858 .go -2.233398 2.553833 6.099016
+
+-- Pathing for Entry: 24837 'TDB FORMAT'
+SET @NPC := @GUID + 4;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=21.28821,`position_y`=-6.498474,`position_z`=6.346781 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,21.28821,-6.498474,6.346781,0,0,0,0,100,0),
+(@PATH,2,24.28821,-6.248474,6.346781,0,0,0,0,100,0),
+(@PATH,3,24.5675,-5.887867,6.623326,0,0,0,0,100,0),
+(@PATH,4,26.3175,-5.637867,6.623326,0,0,0,0,100,0),
+(@PATH,5,26.5675,-3.637867,6.623326,0,0,0,0,100,0),
+(@PATH,6,26.8175,3.862133,11.37333,0,0,0,0,100,0),
+(@PATH,7,27.0207,5.456285,11.61129,0,0,0,0,100,0),
+(@PATH,8,24.0207,5.456285,11.61129,0,0,0,0,100,0),
+(@PATH,9,22.7707,5.706285,11.86129,0,0,0,0,100,0),
+(@PATH,10,21.5207,5.706285,12.36129,0,0,0,0,100,0),
+(@PATH,11,21.19737,5.743245,12.28643,0,0,0,0,100,0),
+(@PATH,12,19.69737,5.743245,12.28643,0,0,0,0,100,0),
+(@PATH,13,18.44737,3.743245,12.28643,0,0,0,0,100,0),
+(@PATH,14,16.32088,0.3530575,12.37261,0,0,0,0,100,0),
+(@PATH,15,18.57088,-4.646943,12.37261,0,0,0,0,100,0),
+(@PATH,16,18.82599,-4.72204,12.55197,0,0,0,0,100,0),
+(@PATH,17,19.32599,-5.72204,12.55197,0,0,0,0,100,0),
+(@PATH,18,23.32599,-5.22204,16.05197,0,0,0,0,100,0),
+(@PATH,19,24.89713,-4.957284,16.51354,0,0,0,0,100,0),
+(@PATH,20,27.89713,-4.707284,17.01354,0,0,0,0,100,0),
+(@PATH,21,35.14713,-3.957284,18.26354,0,0,0,0,100,0),
+(@PATH,22,35.03859,-3.71197,18.26312,0,0,0,0,100,0),
+(@PATH,23,35.53859,-3.71197,18.51312,0,0,0,0,100,0),
+(@PATH,24,36.03859,-2.71197,18.51312,0,0,0,0,100,0),
+(@PATH,25,36.78859,-1.21197,18.51312,0,0,0,0,100,0),
+(@PATH,26,36.83167,-1.03315,18.61353,0,0,0,0,100,0),
+(@PATH,27,37.33167,-0.0331502,18.61353,0,0,0,0,100,0),
+(@PATH,28,35.83167,-0.0331502,18.36353,0,0,0,0,100,0),
+(@PATH,29,33.81982,0.05114746,18.28621,0,80000,0,0,100,0);
+-- 0x1C15A0000018414000002F0000604858 .go 21.28821 -6.498474 6.346781
+
+-- Pathing for Entry: 24838 'TDB FORMAT'
+SET @NPC := @GUID + 5;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-27.21704,`position_y`=-0.001220703,`position_z`=21.58302 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,-27.21704,-0.001220703,21.58302,3.141593,15000,0,0,100,0),
+(@PATH,2,-26.7854,3.492676,21.49658,0,0,0,0,100,0),
+(@PATH,3,-27.21509,0.02246094,21.582,0,0,0,0,100,0),
+(@PATH,4,-27.21509,0.02246094,21.582,3.141593,15000,0,0,100,0),
+(@PATH,5,-27.31982,-3.39917,21.29024,0,0,0,0,100,0),
+(@PATH,6,-23.06238,-6.165868,20.58522,0,0,0,0,100,0);
+-- 0x1C15A0000018418000002F0000604859 .go -27.21704 -0.001220703 21.58302
+
+-- Pathing for Entry: 24839 'TDB FORMAT'
+SET @NPC := @GUID + 6;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=9.595876,`position_y`=-1.214922,`position_z`=11.80095 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.595876,-1.214922,11.80095,0,10000,0,0,100,0),
+(@PATH,2,10.84588,3.285078,12.05095,0,0,0,0,100,0),
+(@PATH,3,10.78306,3.165822,11.99681,0,0,0,0,100,0),
+(@PATH,4,11.03306,4.415822,11.99681,0,0,0,0,100,0),
+(@PATH,5,9.130737,-1.28125,11.96241,0,0,0,0,100,0),
+(@PATH,6,9.877741,-6.322785,11.91132,0,0,0,0,100,0),
+(@PATH,7,6.444749,-7.275679,11.82178,0,0,0,0,100,0),
+(@PATH,8,6.444749,-9.525679,11.57178,0,0,0,0,100,0),
+(@PATH,9,7.006714,-9.58252,11.59527,0,0,0,0,100,0),
+(@PATH,10,8.256714,-8.08252,11.84527,0,10000,0,0,100,0),
+(@PATH,11,9.506714,-6.58252,11.84527,0,0,0,0,100,0),
+(@PATH,12,9.757862,-6.227444,12.01764,0,0,0,0,100,0),
+(@PATH,13,10.25786,-5.227444,11.76764,0,0,0,0,100,0),
+(@PATH,14,11.50786,-1.227444,12.01764,0,0,0,0,100,0),
+(@PATH,15,10.53357,-1.442627,12.06874,0,0,0,0,100,0),
+(@PATH,16,9.107422,-2.769531,11.71875,3.385939,10000,0,0,100,0),
+(@PATH,17,9.595581,-1.214111,11.99324,0,0,0,0,100,0),
+(@PATH,18,10.84558,3.285889,11.99324,0,0,0,0,100,0),
+(@PATH,19,10.78296,3.167067,11.99682,0,0,0,0,100,0),
+(@PATH,20,11.03296,4.417067,11.99682,0,10000,0,0,100,0);
+-- 0x1C15A000201841C000004000006049B5 .go 9.595876 -1.214922 11.80095
+
+-- Pathing for Entry: 24840 'TDB FORMAT'
+SET @NPC := @GUID + 7;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-12.18092,`position_y`=5.488965,`position_z`=6.140242 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,-12.18092,5.488965,6.140242,0,0,0,0,100,0),
+(@PATH,2,-11.93092,4.238965,6.140242,0,0,0,0,100,0),
+(@PATH,3,1.66333,3.382568,6.347836,0,0,0,0,100,0),
+(@PATH,4,3.41333,4.132568,6.347836,0,0,0,0,100,0),
+(@PATH,5,16.41333,5.132568,6.347836,0,0,0,0,100,0),
+(@PATH,6,23.91333,5.632568,6.347836,0,0,0,0,100,0),
+(@PATH,7,27.02629,5.782645,6.348631,0,0,0,0,100,0),
+(@PATH,8,28.7417,6.706543,6.096051,0,0,0,0,100,0),
+(@PATH,9,23.86475,6.410645,6.347143,0,0,0,0,100,0),
+(@PATH,10,18.36475,6.160645,6.347143,0,0,0,0,100,0),
+(@PATH,11,16.61475,5.910645,6.347143,0,0,0,0,100,0),
+(@PATH,12,15.36475,5.910645,6.347143,0,0,0,0,100,0),
+(@PATH,13,3.364746,5.410645,6.347143,0,0,0,0,100,0),
+(@PATH,14,3.131845,5.415648,6.349216,0,0,0,0,100,0),
+(@PATH,15,1.881845,5.415648,6.349216,0,0,0,0,100,0),
+(@PATH,16,-8.868155,6.665648,6.349216,0,0,0,0,100,0),
+(@PATH,17,-9.868155,6.915648,6.349216,0,0,0,0,100,0),
+(@PATH,18,-12.56714,7.07666,6.098746,0,0,0,0,100,0),
+(@PATH,19,-12.56714,7.07666,6.098746,3.525565,0,0,0,100,0),
+(@PATH,20,-12.18091,5.489014,6.348577,0,0,0,0,100,0),
+(@PATH,21,-11.93091,4.239014,6.348577,0,0,0,0,100,0),
+(@PATH,22,1.663208,3.382813,6.347836,0,0,0,0,100,0),
+(@PATH,23,3.413208,4.132813,6.347836,0,0,0,0,100,0),
+(@PATH,24,16.41321,5.132813,6.347836,0,0,0,0,100,0),
+(@PATH,25,23.91321,5.632813,6.347836,0,0,0,0,100,0);
+-- 0x1C15A0002018420000004000006049B5 .go -12.18092 5.488965 6.140242
+
+-- Pathing for Entry: 24842 'TDB FORMAT'
+SET @NPC := @GUID + 9;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=20.11769,`position_y`=-6.318613,`position_z`=6.388871 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,20.11769,-6.318613,6.388871,0,0,0,0,100,0),
+(@PATH,2,24.36769,-6.068613,6.138871,0,0,0,0,100,0),
+(@PATH,3,26.54725,-5.752126,6.622897,0,0,0,0,100,0),
+(@PATH,4,26.54725,-3.502126,6.622897,0,0,0,0,100,0),
+(@PATH,5,26.79725,3.747874,11.3729,0,0,0,0,100,0),
+(@PATH,6,26.79725,5.497874,11.3729,0,0,0,0,100,0),
+(@PATH,7,26.84597,3.878396,11.42881,0,0,0,0,100,0),
+(@PATH,8,26.84597,5.378396,11.42881,0,0,0,0,100,0),
+(@PATH,9,26.84597,6.128396,11.42881,0,0,0,0,100,0),
+(@PATH,10,24.09597,5.878396,11.42881,0,0,0,0,100,0),
+(@PATH,11,22.59597,5.878396,11.92881,0,0,0,0,100,0),
+(@PATH,12,21.59597,5.878396,12.42881,0,0,0,0,100,0),
+(@PATH,13,21.2122,5.86385,12.2945,0,0,0,0,100,0),
+(@PATH,14,18.7122,5.61385,12.2945,0,0,0,0,100,0),
+(@PATH,15,17.7122,3.61385,12.2945,0,0,0,0,100,0),
+(@PATH,16,14.01855,0.09912109,12.00374,0,0,0,0,100,0),
+(@PATH,17,15.29224,0.3544922,12.05542,0,0,0,0,100,0),
+(@PATH,18,14.146,0.02685547,12.00965,0,0,0,0,100,0),
+(@PATH,19,20.63428,3.088379,12.32969,0,0,0,0,100,0),
+(@PATH,20,21.63428,4.088379,12.07969,0,0,0,0,100,0),
+(@PATH,21,23.38428,4.838379,11.57969,0,0,0,0,100,0),
+(@PATH,22,26.57771,5.543217,11.23778,0,0,0,0,100,0),
+(@PATH,23,26.57771,3.793216,11.23778,0,0,0,0,100,0),
+(@PATH,24,26.32771,-3.456784,6.487778,0,0,0,0,100,0),
+(@PATH,25,26.43777,-3.82635,6.296148,0,0,0,0,100,0),
+(@PATH,26,26.43777,-5.32635,6.296148,0,0,0,0,100,0),
+(@PATH,27,24.43777,-5.32635,6.296148,0,0,0,0,100,0),
+(@PATH,28,19.93777,-5.57635,6.296148,0,0,0,0,100,0),
+(@PATH,29,6.767334,-6.272217,6.347435,0,0,0,0,100,0),
+(@PATH,30,6.116943,-6.608887,6.097135,2.286381,10000,0,0,100,0);
+-- 0x1C15A0002018428000004000006049B5 .go 20.11769 -6.318613 6.388871
+
+SET @Sailor := 24838;
+SET @Kowalski := 24835;
+SET @Mehran := 24837;
+SET @Stash := 24833;
+-- Add text
+DELETE FROM `creature_text` WHERE `entry` IN (@Sailor, @Kowalski, @Mehran, @Stash);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES
+(@Sailor, 0, 0, 'Land ho, Mr. Kowalski! Port is in sight, sir!', 12, 7, 100, 0, 0, 0, 'Sailor Henders', 23941),
+(@Kowalski, 0, 0, 'Thank you, Mr. Henders.', 12, 7, 100, 0, 0, 0, 'First Mate Kowalski', 23942),
+(@Kowalski, 1, 0, 'Bring us into port, please, Mr. Mehran.', 12, 7, 100, 0, 0, 0, 'First Mate Kowalski', 23943),
+(@Mehran, 0, 0, 'Aye aye, Mr. Kowalski.', 12, 0, 100, 0, 0, 0, 'Navigator Mehran', 23951),
+(@Kowalski, 2, 0, 'Captain Stash! We''ll be arriving shortly, sir!', 12, 7, 100, 0, 0, 0, 'First Mate Kowalski', 23944),
+(@Stash, 0, 0, 'Thank you, Mr. Kowalski! You may return to your post to oversee docking!', 12, 7, 100, 0, 0, 0, 'Captain "Stash" Torgoley', 23945),
+(@Stash, 1, 0, 'Well done, all. Please bring us safely to our next port. ', 12, 7, 100, 0, 0, 0, 'Captain "Stash" Torgoley', 23946);
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@Sailor, @Kowalski, @Mehran, @Stash);
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Sailor AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Stash AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Kowalski AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Stash*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Kowalski*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
+(@Sailor,0,0,0,25,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sailor - on reset - Say Line 0"),
+(@Stash,0,0,0,25,0,100,0,0,0,0,0,80,@Stash*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stash - on reset - action list"),
+(@Stash*100,9,0,0,0,0,100,0,36000,36000,0,0,91,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stash - action list - Stand up"),
+(@Stash*100,9,1,0,0,0,100,0,49000,49000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stash - action list - Say Line 1"),
+(@Stash*100,9,2,0,0,0,100,0,0,0,0,0,5,21,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stash - action list - Play emote applaud"),
+(@Kowalski,0,0,0,25,0,100,0,0,0,0,0,80,@Kowalski*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kowalski - On reset - Action list"),
+(@Kowalski*100,9,0,0,0,0,100,0,4000,4000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kowalski- ooc los - Say Line 0"),
+(@Kowalski*100,9,1,0,0,0,100,0,3000,3000,0,0,1,1,0,0,0,0,0,1,0,40,0,0,0,0,0,"Kowalski - ooc los - Say Line 1"),
+(@Kowalski*100,9,2,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,19,@Mehran,40,0,0,0,0,0,"Kowalski- ooc los - Say Line 0"),
+(@Kowalski*100,9,3,0,0,0,100,0,3000,3000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kowalski - ooc los - Say Line 2"),
+(@Kowalski*100,9,4,0,0,0,100,0,4000,4000,0,0,1,0,0,0,0,0,0,19,@Stash,40,0,0,0,0,0,"Kowalski - ooc los - Say Line 0");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_01_world.sql
new file mode 100644
index 00000000000..cabdd4b9057
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_01_world.sql
@@ -0,0 +1,6 @@
+--
+DELETE FROM `smart_scripts` WHERE `entryorguid`=21719 AND `source_type`=0 AND `id`=15;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=21720 AND `source_type`=0 AND `id`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=21717 AND `source_type`=0 AND `id`=3;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=21718 AND `source_type`=0 AND `id`=13;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=22331 AND `source_type`=0 AND `id`=20;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_02_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_02_world_335.sql
new file mode 100644
index 00000000000..20d2a79a63a
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_02_world_335.sql
@@ -0,0 +1,110 @@
+--
+UPDATE `creature` SET `spawntimesecs`=60 WHERE `guid`=50005;
+
+-- Kindal Moonweaver SAI
+SET @ENTRY := 7956;
+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`=795601 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,1,19,0,100,0,2969,0,0,0,29,4,0,0,0,0,0,7,0,0,0,0,0,0,0,"Kindal Moonweaver - On Quest 'Freedom for All Creatures' Taken - Start Follow Invoker"),
+(@ENTRY,0,1,2,61,0,100,0,0,0,0,0,90,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kindal Moonweaver - On Quest 'Freedom for All Creatures' Taken - Remove Flag Standstate Kneel"),
+(@ENTRY,0,2,3,61,0,100,0,0,0,0,0,2,774,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kindal Moonweaver - On Quest 'Freedom for All Creatures' Taken - Set Faction 774"),
+(@ENTRY,0,3,4,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Kindal Moonweaver - On Quest 'Freedom for All Creatures' Taken - Say Line 0"),
+(@ENTRY,0,4,5,61,0,100,0,0,0,0,0,19,512,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kindal Moonweaver - On Quest 'Freedom for All Creatures' Taken - Remove unit flag 512"),
+(@ENTRY,0,5,6,61,0,100,0,0,0,0,0,83,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kindal Moonweaver - On Quest 'Freedom for All Creatures' Taken - Remove npcflag 2"),
+(@ENTRY,0,6,7,61,0,100,0,0,0,0,0,8,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kindal Moonweaver - On Quest 'Freedom for All Creatures' Taken - React def"),
+(@ENTRY,0,7,8,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,"Kindal Moonweaver - On Quest 'Freedom for All Creatures' Taken - Store target"),
+(@ENTRY,0,8,0,61,0,100,0,0,0,0,0,41,360000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kindal Moonweaver - On Quest 'Freedom for All Creatures' Taken - Despawn In 360000 ms"),
+(@ENTRY,0,9,0,4,0,100,0,0,0,0,0,1,1,0,1,0,0,0,7,0,0,0,0,0,0,0,"Kindal Moonweaver - On Aggro - Say Line 1"),
+(@ENTRY,0,10,0,38,0,100,1,1,1,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Kindal Moonweaver - On Data Set 1 1 - Action list"),
+(@ENTRY,0,11,0,7,0,100,0,0,0,0,0,90,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kindal Moonweaver - On Evade - Set stand state"),
+(@ENTRY,0,12,0,77,0,100,0,1,5,0,0,80,795601,2,0,0,0,0,1,0,0,0,0,0,0,0,"Kindal Moonweaver - On counter=5 - Action ist"),
+(795601,9,0,0,0,0,100,0,1000,1000,0,0,1,3,0,0,0,0,0,12,1,0,0,0,0,0,0,"Kindal Moonweaver - On Script - Say Line 3"),
+(795601,9,1,0,0,0,100,0,0,0,0,0,6,2969,0,0,0,0,0,18,20,0,0,0,0,0,0,"Kindal Moonweaver - On Script - Quest fails"),
+(795601,9,2,0,0,0,100,0,3000,3000,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kindal Moonweaver - On Script - Despawn");
+
+-- Actionlist SAI
+SET @ENTRY := 795600;
+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,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kindal Moonweaver - On Script - Say Line 2"),
+(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,15,2969,0,0,0,0,0,18,20,0,0,0,0,0,0,"Kindal Moonweaver - On Script - Quest Credit 'Freedom for All Creatures'"),
+(@ENTRY,9,2,0,0,0,100,0,5000,5000,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kindal Moonweaver - On Script - Despawn In 3000 ms");
+
+/* Script for the Door, it will start the event for the creatures */
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=143979;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=143979;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(143979, 1, 0, 0, 70, 0, 100, 0, 2, 0, 0, 0, 80, 143979*100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'bambus door - On activate - start script');
+-- Actionlist SAI
+SET @ENTRY := 14397900;
+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,11,7997,20,0,0,0,0,0,"On Script - Set Data 1 1");
+
+-- Captured Sprite Darter SAI
+SET @ENTRY := 7997;
+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,2,0,0,0,0,1,0,0,0,0,0,0,0,"Captured Sprite Darter - On Data Set 1 1 - Run Script"),
+(@ENTRY,0,1,2,40,0,100,0,13,7997,0,0,45,1,1,0,0,0,0,19,7956,50,0,0,0,0,0,"Captured Sprite Darter - On Waypoint 13 Reached - Set Data 1 1"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,41,3000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captured Sprite Darter - On Waypoint 13 Reached - Despawn In 3s"),
+(@ENTRY,0,3,0,11,0,100,0,0,0,0,0,2,534,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captured Sprite Darter - On Respawn - Set Faction 534"),
+(@ENTRY,0,4,0,6,0,100,0,0,0,0,0,63,1,1,0,0,0,0,19,7956,50,0,0,0,0,0,"Captured Sprite Darter - On Death - set counter");
+
+/* Call script for waypoint-start */
+
+-- Actionlist SAI
+SET @ENTRY := 799700;
+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,53,0,7997,0,0,0,1,1,0,0,0,0,0,0,0,"On Script - Start Waypoint"),
+(@ENTRY,9,1,0,0,0,100,0,100,100,0,0,2,774,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captured Sprite Darter - On Script - Set Faction 774");
+
+/* Texts for Kindal Moonweaver */
+DELETE FROM `creature_text` WHERE `entry` in (7956);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextId`) VALUES
+(7956, 0, 0, 'I''m ready when you are, $n. Lead the way!', 12, 0, 100, 0, 0, 0, 'Kindal Moonweaver', 4079),
+(7956, 1, 0, 'Die, $n. Elune will not have you harm her creatures any longer!', 12, 0, 100, 0, 0, 0, 'Kindal Moonweaver', 4123),
+(7956, 1, 1, 'You dare touch me?!', 12, 0, 100, 0, 0, 0, 'Kindal Moonweaver', 4125),
+(7956, 1, 2, 'Death to you, $n. How dare you come within a bow''s shot of me!', 12, 0, 100, 0, 0, 0, 'Kindal Moonweaver', 4124),
+(7956, 1, 3, 'Quickly! $n attacks!', 12, 0, 100, 0, 0, 0, 'Kindal Moonweaver', 4122),
+(7956, 2, 0, 'We\'ve done it! Meet me back by Jer\'kai above the Grim Totem camp.', 12, 0, 100, 0, 0, 0, 'Kindal Moonweaver', 4080),
+(7956, 3, 0, 'No! The faerie dragons aren''t making it, $n! I must return to Jer''kai to make sure she hasn''t been found. Elune be with you.', 12, 0, 100, 0, 0, 0, 'Kindal Moonweaver', 4081);
+
+/* Waypoints for Captured Sprite Darter */
+DELETE FROM `waypoints` WHERE `entry`=7997;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(7997, 1, -4532.19, 807.833, 59.9749, 'Captured Sprite Darter'),
+(7997, 2, -4526.04, 799.328, 59.4271, 'Captured Sprite Darter'),
+(7997, 3, -4518.87, 786.24, 59.9261, 'Captured Sprite Darter'),
+(7997, 4, -4516.6, 766.617, 60.6654, 'Captured Sprite Darter'),
+(7997, 5, -4516.79, 749.124, 60.4805, 'Captured Sprite Darter'),
+(7997, 6, -4517.52, 731.643, 60.9822, 'Captured Sprite Darter'),
+(7997, 7, -4522.3, 710.707, 60.8061, 'Captured Sprite Darter'),
+(7997, 8, -4530.08, 695.036, 60.6917, 'Captured Sprite Darter'),
+(7997, 9, -4537.26, 679.979, 60.5726, 'Captured Sprite Darter'),
+(7997, 10, -4541.54, 655.429, 58.551, 'Captured Sprite Darter'),
+(7997, 11, -4539.33, 649.443, 57.9488, 'Captured Sprite Darter'),
+(7997, 12, -4526.54, 639.678, 56.2069, 'Captured Sprite Darter'),
+(7997, 13, -4507.92, 627.417, 55.6034, 'Captured Sprite Darter');
+
+UPDATE `creature_template_addon` SET `auras`= "" WHERE entry=7726;
+SET @ENTRY := 7726;
+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,"Grimtotem Naturalist - On Aggro - Set Event Phase 1 (No Repeat)"),
+(@ENTRY,0,1,0,4,1,100,1,0,0,0,0,11,9739,0,0,0,0,0,2,0,0,0,0,0,0,0,"Grimtotem Naturalist - On Aggro - Cast 'Wrath' (Phase 1) (No Repeat)"),
+(@ENTRY,0,2,0,9,1,100,0,0,40,3400,4700,11,9739,0,0,0,0,0,2,0,0,0,0,0,0,0,"Grimtotem Naturalist - Within 0-40 Range - Cast 'Wrath' (Phase 1)"),
+(@ENTRY,0,3,0,3,1,100,0,0,15,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grimtotem Naturalist - Between 0-15% Mana - Set Event Phase 2 (Phase 1)"),
+(@ENTRY,0,4,0,3,2,100,0,30,100,100,100,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grimtotem Naturalist - Between 30-100% Mana - Set Event Phase 1 (Phase 2)"),
+(@ENTRY,0,5,0,7,1,100,1,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grimtotem Naturalist - On Evade - Set Event Phase 0 (Phase 1) (No Repeat)"),
+(@ENTRY,0,6,7,2,0,100,1,0,50,0,0,22,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grimtotem Naturalist - Between 0-50% Health - Set Event Phase 3 (Phase 1) (No Repeat)"),
+(@ENTRY,0,7,0,61,0,100,1,0,50,0,0,11,19030,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grimtotem Naturalist - Between 0-50% Health - Cast 'Bear Form' (Phase 1) (No Repeat)"),
+(@ENTRY,0,8,0,0,4,100,0,3000,4500,12000,13000,11,12161,0,0,0,0,0,2,0,0,0,0,0,0,0,"Grimtotem Naturalist - In Combat - Cast 'Maul' (Phase 4)"),
+(@ENTRY,0,9,0,0,4,100,0,8000,9000,25000,26000,11,15727,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grimtotem Naturalist - In Combat - Cast 'Demoralizing Roar' (Phase 4)"),
+(@ENTRY,0,10,0,7,4,100,1,0,0,0,0,28,19030,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grimtotem Naturalist - On Evade - Remove Aura (Phase 4) (No Repeat)"),
+(@ENTRY,0,11,0,7,4,100,1,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grimtotem Naturalist - On Evade - Set Event Phase 0 (Phase 4) (No Repeat)");
+DELETE FROM `smart_scripts` WHERE `entryorguid`=22331 AND `source_type`=0 AND `id`=20;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_06_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_06_00_world.sql
new file mode 100644
index 00000000000..79f9ae687c0
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_06_00_world.sql
@@ -0,0 +1,73 @@
+SET @CGUID := 136178;
+
+DELETE FROM `creature` WHERE `id`=23311;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 23311, 530, 1, 1, -5076.106, 25.09657, 80.35052, 6.236346, 120, 10, 1), -- 23311 (Area: -1) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+1, 23311, 530, 1, 1, -5233.175, 64.53071, 64.41123, 0.7679449, 120, 10, 1), -- 23311 (Area: -1) (Auras: 40732 - 40732) (possible waypoints or random movement)
+(@CGUID+2, 23311, 530, 1, 1, -5185.78, 143.9119, 71.66191, 1.692969, 120, 0, 0), -- 23311 (Area: -1) (Auras: 40732 - 40732)
+(@CGUID+3, 23311, 530, 1, 1, -5275.489, 149.1322, 58.53136, 2.443461, 120, 0, 0), -- 23311 (Area: -1) (Auras: 40735 - 40735)
+(@CGUID+4, 23311, 530, 1, 1, -5091.079, -114.7144, 64.35689, 1.239184, 120, 0, 0), -- 23311 (Area: -1) (Auras: 40735 - 40735)
+(@CGUID+5, 23311, 530, 1, 1, -4979.629, -99.6888, 42.13466, 4.049164, 120, 10, 1), -- 23311 (Area: -1) (Auras: 40735 - 40735) (possible waypoints or random movement)
+(@CGUID+6, 23311, 530, 1, 1, -5214.68, 221.5429, 72.53944, 4.380776, 120, 10, 1), -- 23311 (Area: -1) (Auras: 40732 - 40732) (possible waypoints or random movement)
+(@CGUID+7, 23311, 530, 1, 1, -5227.612, 271.558, 70.12395, 0.3334433, 120, 10, 1), -- 23311 (Area: -1) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+8, 23311, 530, 1, 1, -5286.284, 241.2294, 67.83147, 4.598778, 120, 10, 1), -- 23311 (Area: -1) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+9, 23311, 530, 1, 1, -5269.888, 303.3626, 73.55891, 0.05235988, 120, 0, 0), -- 23311 (Area: -1) (Auras: 40735 - 40735)
+(@CGUID+10, 23311, 530, 1, 1, -5285.691, 388.9862, 54.89359, 5.131268, 120, 0, 0), -- 23311 (Area: -1) (Auras: 40732 - 40732)
+(@CGUID+11, 23311, 530, 1, 1, -5329.144, 192.1793, 52.40875, 0.5977584, 120, 0, 0), -- 23311 (Area: -1) (Auras: 40714 - 40714)
+(@CGUID+12, 23311, 530, 1, 1, -5313.125, 170.9132, 54.45731, 2.199115, 120, 0, 0), -- 23311 (Area: -1) (Auras: 40732 - 40732)
+(@CGUID+13, 23311, 530, 1, 1, -4988.237, 135.2316, 79.1295, 4.974188, 120, 10, 1), -- 23311 (Area: -1) (Auras: 40735 - 40735) (possible waypoints or random movement)
+(@CGUID+14, 23311, 530, 1, 1, -4926.947, 217.0098, 65.26778, 3.333579, 120, 10, 1), -- 23311 (Area: -1) (Auras: 40735 - 40735) (possible waypoints or random movement)
+(@CGUID+15, 23311, 530, 1, 1, -4922.614, 151.7855, 56.78815, 1.780236, 120, 0, 0), -- 23311 (Area: -1) (Auras: 40732 - 40732)
+(@CGUID+16, 23311, 530, 1, 1, -4993.667, 235.146, 80.8679, 5.72468, 120, 10, 1), -- 23311 (Area: -1) (Auras: 40732 - 40732) (possible waypoints or random movement)
+(@CGUID+17, 23311, 530, 1, 1, -4991.519, 300.2075, 82.21542, 4.956735, 120, 10, 1), -- 23311 (Area: -1) (Auras: 40732 - 40732) (possible waypoints or random movement)
+(@CGUID+18, 23311, 530, 1, 1, -4849.121, 450.1942, 60.71572, 1.780236, 120, 0, 0), -- 23311 (Area: -1) (Auras: 40735 - 40735)
+(@CGUID+19, 23311, 530, 1, 1, -4982.719, -33.12109, 69.65373, 2.86234, 120, 10, 1), -- 23311 (Area: -1) (Auras: 40735 - 40735) (possible waypoints or random movement)
+(@CGUID+20, 23311, 530, 1, 1, -5073.178, 478.2025, 84.05375, 0.4363323, 120, 10, 1), -- 23311 (Area: -1) (Auras: 40735 - 40735) (possible waypoints or random movement)
+(@CGUID+21, 23311, 530, 1, 1, -5037.911, 538.4877, 88.20789, 5.393067, 120, 0, 0), -- 23311 (Area: -1) (Auras: 40735 - 40735)
+(@CGUID+22, 23311, 530, 1, 1, -4993.51, 508.6491, 85.82965, 5.986479, 120, 0, 0), -- 23311 (Area: -1) (Auras: 40732 - 40732)
+(@CGUID+23, 23311, 530, 1, 1, -4962.048, 525.7373, 79.19551, 3.764333, 120, 10, 1), -- 23311 (Area: -1) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+24, 23311, 530, 1, 1, -5005.264, 532.8912, 87.46109, 4.386611, 120, 10, 1), -- 23311 (Area: -1) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+25, 23311, 530, 1, 1, -4892.17, 276.9066, 64.75311, 0.4014257, 120, 0, 0), -- 23311 (Area: -1) (Auras: 40732 - 40732)
+(@CGUID+26, 23311, 530, 1, 1, -5141.98, 473.9572, 78.60102, 0.4886922, 120, 0, 0), -- 23311 (Area: -1) (Auras: 40735 - 40735)
+(@CGUID+27, 23311, 530, 1, 1, -5200.688, 589.4948, 60.42498, 2.792527, 120, 0, 0), -- 23311 (Area: -1) (Auras: 40735 - 40735)
+(@CGUID+28, 23311, 530, 1, 1, -5281.205, 653.8297, 41.3046, 4.782202, 120, 0, 0), -- 23311 (Area: 3759) (Auras: 40735 - 40735)
+(@CGUID+29, 23311, 530, 1, 1, -5221.946, 685.913, 60.32657, 4.27563, 120, 10, 1), -- 23311 (Area: 3759) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+30, 23311, 530, 1, 1, -5148.24, 737.8401, 73.05395, 4.782202, 120, 0, 0), -- 23311 (Area: 3965) (Auras: 40732 - 40732)
+(@CGUID+31, 23311, 530, 1, 1, -5013.051, 702.1115, 82.42272, 3.435459, 120, 10, 1), -- 23311 (Area: 3965) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+32, 23311, 530, 1, 1, -4969.671, 576.4045, 77.05217, 0.5155401, 120, 10, 1), -- 23311 (Area: 3965) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+33, 23311, 530, 1, 1, -4876.813, 515.5291, 60.59084, 5.581461, 120, 10, 1), -- 23311 (Area: 3965) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+34, 23311, 530, 1, 1, -4943.457, 693.7371, 71.826, 1.425557, 120, 10, 1), -- 23311 (Area: 3965) (Auras: 40714 - 40714) (possible waypoints or random movement)
+-- Below are what existed in TC previously
+(@CGUID+35, 23311, 530, 1, 1, -5241.89, 110.241, 58.1161, 5.43882, 120, 10, 1), -- 23311 (Area: 3965) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+36, 23311, 530, 1, 1, -5231.88, 73.5107, 64.2172, 2.70563, 120, 10, 1), -- 23311 (Area: 3965) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+37, 23311, 530, 1, 1, -5223.67, 41.7543, 68.7341, 5.06183, 120, 10, 1), -- 23311 (Area: 3965) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+38, 23311, 530, 1, 1, -5315.02, 241.323, 59.5668, 4.75553, 120, 10, 1), -- 23311 (Area: 3965) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+39, 23311, 530, 1, 1, -5135.13, 472.366, 78.4078, 3.1219, 120, 10, 1), -- 23311 (Area: 3965) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+40, 23311, 530, 1, 1, -5172.18, 449.631, 76.6452, 4.06438, 120, 10, 1), -- 23311 (Area: 3965) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+41, 23311, 530, 1, 1, -5200.65, 414.947, 74.4594, 4.13114, 120, 10, 1), -- 23311 (Area: 3965) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+42, 23311, 530, 1, 1, -5248.11, 369.244, 68.7189, 3.43999, 120, 10, 1), -- 23311 (Area: 3965) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+43, 23311, 530, 1, 1, -5289.96, 304.915, 67.6901, 3.63634, 120, 10, 1), -- 23311 (Area: 3965) (Auras: 40714 - 40714) (possible waypoints or random movement)
+(@CGUID+44, 23311, 530, 1, 1, -5043.44, 498.824, 86.5357, 3.86411, 120, 10, 1); -- 23311 (Area: 3965) (Auras: 40714 - 40714) (possible waypoints or random movement)
+
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=23311;
+DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid` IN(2331100,2331101,2331102);
+
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(23311, 0, 0, 1, 8, 0, 100, 1, 40742, 0, 0, 0, 33, 23311, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - On Spell Hit (Booterang) - Give Kill Credit'),
+(23311, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 28, 40714, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Linked with Previous Event - Remove Aura Dazed and Confused'),
+(23311, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 28, 40732, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Linked with Previous Event - Remove Aura Lazy and Good for Nothing'),
+(23311, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 28, 40735, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Linked with Previous Event - Remove Aura Defiant and Enraged'),
+(23311, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Linked with Previous Event - Say'),
+(23311, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Linked with Previous Event - Set Run'),
+(23311, 0, 6, 7, 61, 0, 100, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 19, 23308, 200, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Linked with Previous Event - Move to closest Dragonmaw Peon Work Node'),
+(23311, 0, 7, 8, 61, 0, 100, 0, 0, 0, 0, 0, 11, 39160, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Linked with Previous Event - Cast Booterang'),
+(23311, 0, 8, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 30000, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Linked with Previous Event - Despawn After 30 seconds'),
+(23311, 0, 9, 10, 38, 0, 100, 0, 1, 1, 0, 0, 45, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - On Data Set - Set Data'),
+(23311, 0, 10, 0, 61, 0, 100, 0, 0, 0, 0, 0, 5, 233, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Linked with Previous Event - Play emote'),
+(23311, 0, 11, 0, 11, 0, 100, 0, 0, 0, 0, 0, 87, 2331100, 2331101, 2331102, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - On Spawn - Run Random Script'),
+(2331100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 75, 40714, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Script 1 - Add Aura Dazed and Confused'),
+(2331101, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 75, 40732, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Script 2 - Add Aura Lazy and Good for Nothing'),
+(2331102, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 75, 40735, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Script 3 - Add Aura Defiant and Enraged');
+
+
+
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_00_world.sql
new file mode 100644
index 00000000000..46c7c4a66bd
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_00_world.sql
@@ -0,0 +1,10 @@
+--
+UPDATE `smart_scripts` SET `action_param2`=2 WHERE `entryorguid` IN (2991401) AND `source_type`=9 AND `id`=0;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry` IN (30208);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (30208) AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (2991401, 2991400) AND `source_type`=9 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
+(2991400,9,2,0,0,0,100,0,0,0,0,0,11,56230,0,0,0,0,0,7,0,0,0,0,0,0,0,"Dead Iron Giant - On Script - Cast 'Create Fireforged Eyes'"),
+(2991401,9,2,0,0,0,100,0,0,0,0,0,11,56243,2,0,0,0,0,1,0,0,0,0,0,0,0,"Dead Iron Giant - On Script - Cast 'Summon Iron Dwarf'"),
+(2991401,9,3,0,0,0,100,0,0,0,0,0,11,56243,2,0,0,0,0,1,0,0,0,0,0,0,0,"Dead Iron Giant - On Script - Cast 'Summon Iron Dwarf'"),
+(30208,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,30,0,0,0,0,0,0,"Stormforged Ambusher - Just summoned - Start attack");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_01_world.sql
new file mode 100644
index 00000000000..ae43bc753ed
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_01_world.sql
@@ -0,0 +1,7 @@
+UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `id`=23311;
+DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid` IN(2331100,2331101,2331102) AND `id`>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
+(2331100, 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, 'Disobedient Dragonmaw Peon - Script 1 - Set Faction'),
+(2331100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 89, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Script 1 - Set Random Movement'),
+(2331101, 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, 'Disobedient Dragonmaw Peon - Script 2 - Set Faction');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_02_world.sql
new file mode 100644
index 00000000000..3edb064e696
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_02_world.sql
@@ -0,0 +1,5 @@
+--
+DELETE FROM `smart_scripts` WHERE `entryorguid`=22143 AND `source_type`=0 AND `id`=4;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=22144 AND `source_type`=0 AND `id`=4;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=22148 AND `source_type`=0 AND `id`=2;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=23022 AND `source_type`=0 AND `id`=12;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_03_world.sql
new file mode 100644
index 00000000000..495d42c3136
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_03_world.sql
@@ -0,0 +1,163 @@
+--
+-- DK Faction Endquest - Implement Reaction for Orgrimmar and Alliance Guards
+
+DELETE FROM `creature_text` WHERE `entry` IN (68,1756,1976,3296) AND `groupid`>1;
+DELETE FROM `creature_text` WHERE `entry` IN (14304);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `comment`) VALUES
+(68, 2, 0, '%s throws a rotten apple at $n.', 16, 0, 100, 0, 0, 0, 31671, 'Stormwind City Guard'),
+(68, 3, 0, '%s throws rotten banana on $n.', 16, 0, 100, 0, 0, 0, 31672, 'Stormwind City Guard'),
+(68, 4, 0, '%s spits on $n.', 16, 0, 100, 0, 0, 0, 31673, 'Stormwind City Guard'),
+(68, 5, 0, 'Monster!', 12, 0, 100, 0, 0, 0, 31662, 'Stormwind City Guard'),
+(68, 5, 1, 'Murderer!', 12, 0, 100, 0, 0, 0, 31679, 'Stormwind City Guard'),
+(68, 5, 2, 'GET A ROPE!', 12, 0, 100, 0, 0, 0, 31669, 'Stormwind City Guard'),
+(68, 5, 3, 'How dare you set foot in our city!', 12, 0, 100, 0, 0, 0, 31684, 'Stormwind City Guard'),
+(68, 5, 4, 'You disgust me.', 12, 0, 100, 0, 0, 0, 31680, 'Stormwind City Guard'),
+(68, 5, 5, 'Looks like we''re going to have ourselves an execution.', 12, 0, 100, 0, 0, 0, 31682, 'Stormwind City Guard'),
+(68, 5, 6, 'Traitorous dog.', 12, 0, 100, 0, 0, 0, 31665, 'Stormwind City Guard'),
+(68, 5, 7, 'My family was wiped out by the Scourge! MONSTER!', 12, 0, 100, 0, 0, 0, 31667, 'Stormwind City Guard'),
+(14304, 2, 0, '%s throws a rotten apple at $n.', 16, 0, 100, 0, 0, 0, 31671, 'Kor''kron Elite'),
+(14304, 3, 0, '%s throws rotten banana on $n.', 16, 0, 100, 0, 0, 0, 31672, 'Kor''kron Elite'),
+(14304, 4, 0, '%s spits on $n.', 16, 0, 100, 0, 0, 0, 31673, 'Kor''kron Elite'),
+(14304, 5, 0, 'Monster!', 12, 0, 100, 0, 0, 0, 31662, 'Kor''kron Elite'),
+(14304, 5, 1, 'Murderer!', 12, 0, 100, 0, 0, 0, 31679, 'Kor''kron Elite'),
+(14304, 5, 2, 'GET A ROPE!', 12, 0, 100, 0, 0, 0, 31669, 'Kor''kron Elite'),
+(14304, 5, 3, 'How dare you set foot in our city!', 12, 0, 100, 0, 0, 0, 31684, 'Kor''kron Elite'),
+(14304, 5, 4, 'You disgust me.', 12, 0, 100, 0, 0, 0, 31680, 'Kor''kron Elite'),
+(14304, 5, 5, 'Looks like we''re going to have ourselves an execution.', 12, 0, 100, 0, 0, 0, 31682, 'Kor''kron Elite'),
+(14304, 5, 6, 'Traitorous dog.', 12, 0, 100, 0, 0, 0, 31665, 'Kor''kron Elite'),
+(14304, 5, 7, 'My family was wiped out by the Scourge! MONSTER!', 12, 0, 100, 0, 0, 0, 31667, 'Kor''kron Elite'),
+(1756, 2, 0, '%s throws a rotten apple at $n.', 16, 0, 100, 0, 0, 0, 31671, 'Stormwind Royal Guard'),
+(1756, 3, 0, '%s throws rotten banana on $n.', 16, 0, 100, 0, 0, 0, 31672, 'Stormwind Royal Guard'),
+(1756, 4, 0, '%s spits on $n.', 16, 0, 100, 0, 0, 0, 31673, 'Stormwind Royal Guard'),
+(1756, 5, 0, 'Monster!', 12, 0, 100, 0, 0, 0, 31662, 'Stormwind Royal Guard'),
+(1756, 5, 1, 'Murderer!', 12, 0, 100, 0, 0, 0, 31679, 'Stormwind Royal Guard'),
+(1756, 5, 2, 'GET A ROPE!', 12, 0, 100, 0, 0, 0, 31669, 'Stormwind Royal Guard'),
+(1756, 5, 3, 'How dare you set foot in our city!', 12, 0, 100, 0, 0, 0, 31684, 'Stormwind Royal Guard'),
+(1756, 5, 4, 'You disgust me.', 12, 0, 100, 0, 0, 0, 31680, 'Stormwind Royal Guard'),
+(1756, 5, 5, 'Looks like we''re going to have ourselves an execution.', 12, 0, 100, 0, 0, 0, 31682, 'Stormwind Royal Guard'),
+(1756, 5, 6, 'Traitorous dog.', 12, 0, 100, 0, 0, 0, 31665, 'Stormwind Royal Guard'),
+(1756, 5, 7, 'My family was wiped out by the Scourge! MONSTER!', 12, 0, 100, 0, 0, 0, 31667, 'Stormwind Royal Guard'),
+(1976, 2, 0, '%s throws a rotten apple at $n.', 16, 0, 100, 0, 0, 0, 31671, 'Stormwind City Patroller'),
+(1976, 3, 0, '%s throws rotten banana on $n.', 16, 0, 100, 0, 0, 0, 31672, 'Stormwind City Patroller'),
+(1976, 4, 0, '%s spits on $n.', 16, 0, 100, 0, 0, 0, 31673, 'Stormwind City Patroller'),
+(1976, 5, 0, 'Monster!', 12, 0, 100, 0, 0, 0, 31662, 'Stormwind City Patroller'),
+(1976, 5, 1, 'Murderer!', 12, 0, 100, 0, 0, 0, 31679, 'Stormwind City Patroller'),
+(1976, 5, 2, 'GET A ROPE!', 12, 0, 100, 0, 0, 0, 31669, 'Stormwind City Patroller'),
+(1976, 5, 3, 'How dare you set foot in our city!', 12, 0, 100, 0, 0, 0, 31684, 'Stormwind City Patroller'),
+(1976, 5, 4, 'You disgust me.', 12, 0, 100, 0, 0, 0, 31680, 'Stormwind City Patroller'),
+(1976, 5, 5, 'Looks like we''re going to have ourselves an execution.', 12, 0, 100, 0, 0, 0, 31682, 'Stormwind City Patroller'),
+(1976, 5, 6, 'Traitorous dog.', 12, 0, 100, 0, 0, 0, 31665, 'Stormwind City Patroller'),
+(1976, 5, 7, 'My family was wiped out by the Scourge! MONSTER!', 12, 0, 100, 0, 0, 0, 31667, 'Stormwind City Patroller'),
+(3296, 2, 0, '%s throws a rotten apple at $n.', 16, 0, 100, 0, 0, 0, 31671, 'Orgrimmar Grunt'),
+(3296, 3, 0, '%s throws rotten banana on $n.', 16, 0, 100, 0, 0, 0, 31672, 'Orgrimmar Grunt'),
+(3296, 4, 0, '%s spits on $n.', 16, 0, 100, 0, 0, 0, 31673, 'Orgrimmar Grunt'),
+(3296, 5, 0, 'Monster!', 12, 0, 100, 0, 0, 0, 31662, 'Orgrimmar Grunt'),
+(3296, 5, 1, 'Murderer!', 12, 0, 100, 0, 0, 0, 31679, 'Orgrimmar Grunt'),
+(3296, 5, 2, 'GET A ROPE!', 12, 0, 100, 0, 0, 0, 31669, 'Orgrimmar Grunt'),
+(3296, 5, 3, 'How dare you set foot in our city!', 12, 0, 100, 0, 0, 0, 31684, 'Orgrimmar Grunt'),
+(3296, 5, 4, 'You disgust me.', 12, 0, 100, 0, 0, 0, 31680, 'Orgrimmar Grunt'),
+(3296, 5, 5, 'Looks like we''re going to have ourselves an execution.', 12, 0, 100, 0, 0, 0, 31682, 'Orgrimmar Grunt'),
+(3296, 5, 6, 'Traitorous dog.', 12, 0, 100, 0, 0, 0, 31665, 'Orgrimmar Grunt'),
+(3296, 5, 7, 'My family was wiped out by the Scourge! MONSTER!', 12, 0, 100, 0, 0, 0, 31667, 'Orgrimmar Grunt'),
+(14304, 0, 0, 'Taste blade, mongrel!', 12, 0, 100, 0, 0, 0, 10950, 'Kor''kron Elite - On Aggro'),
+(14304, 0, 1, 'Please tell me that you didn''t just do what I think you just did. Please tell me that I''m not going to have to hurt you... ', 12, 0, 100, 0, 0, 0, 10951, 'Kor''kron Elite - On Aggro'),
+(14304, 0, 2, 'As if we don''t have enough problems, you go and create more!', 12, 0, 100, 0, 0, 0, 10953, 'Kor''kron Elite - On Aggro'),
+(14304, 0, 3, 'You dare spill blood on neutral ground? OUT! OUT, I SAY!', 12, 0, 100, 0, 0, 0, 10948, 'Kor''kron Elite - On Aggro'),
+(14304, 0, 4, 'We don''t take kindly to miscreants, $r.', 12, 0, 100, 0, 0, 0, 10949, 'Kor''kron Elite - On Aggro'),
+(14304, 0, 5, 'Get a rope!',12, 0, 100, 0, 0, 0, 10952, 'Kor''kron Elite - On Aggro'),
+(14304, 0, 6, 'Believe me when I tell you this: You''re gonna wish you weren''t born, sissy!', 12, 0, 100, 0, 0, 0, 10954, 'Kor''kron Elite - On Aggro'),
+(14304, 0, 7, 'Your actions shame us all, $c. I hurt inside as I beat you senseless.', 12, 0, 100, 0, 0, 0, 10955, 'Kor''kron Elite - On Aggro');
+
+-- AIs
+-- Stormwind City Guard SAI
+SET @ENTRY := 68;
+UPDATE `creature_template` SET `AIName`="SmartAI", `ScriptName`='' 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,1,10,10000,10000,87,@ENTRY*100+00,@ENTRY*100+01,@ENTRY*100+02,@ENTRY*100+03,0,0,1,0,0,0,0,0,0,0,"Stormwind City Guard - Within 1-10 Range Out of Combat LoS - Run Random Script"),
+(@ENTRY,0,1,0,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Stormwind City Guard - On aggro - Say text1");
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=68;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(22,1,68,0,0,28,0,13188,0,0,0,"","Only Run script if quest is completed");
+
+-- Kor''kron Elite SAI
+SET @ENTRY := 14304;
+UPDATE `creature_template` SET `AIName`="SmartAI", `ScriptName`='' 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,1,10,10000,10000,87,68*100+00,68*100+01,68*100+02,68*100+03,0,0,1,0,0,0,0,0,0,0,"Kor''kron Elite - Within 1-10 Range Out of Combat LoS - Run Random Script"),
+(@ENTRY,0,1,0,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Kor''kron Elite - On aggro - Say text1");
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=14304;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(22,1,14304,0,0,28,0,13189,0,0,0,"","Only Run script if quest is completed");
+
+-- Stormwind City Patroller SAI
+SET @ENTRY := 1976;
+UPDATE `creature_template` SET `AIName`="SmartAI", `ScriptName`='' 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,1,10,10000,10000,87,68*100+00,68*100+01,68*100+02,68*100+03,0,0,1,0,0,0,0,0,0,0,"Stormwind City Patroller - Within 1-10 Range Out of Combat LoS - Run Random Script"),
+(@ENTRY,0,1,0,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Stormwind City Patroller - On aggro - Say text1");
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=1976;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(22,1,1976,0,0,28,0,13188,0,0,0,"","Only Run script if quest is completed");
+
+-- Stormwind Royal Guard SAI
+SET @ENTRY := 1756;
+UPDATE `creature_template` SET `AIName`="SmartAI", `ScriptName`='' 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,1,10,10000,10000,87,68*100+00,68*100+01,68*100+02,68*100+03,0,0,1,0,0,0,0,0,0,0,"Stormwind Royal Guard - Within 1-10 Range Out of Combat LoS - Run Random Script");
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=1756;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(22,1,1756,0,0,28,0,13188,0,0,0,"","Only Run script if quest is completed");
+
+-- Orgrimmar Grunt SAI
+SET @ENTRY := 3296;
+UPDATE `creature_template` SET `AIName`="SmartAI", `ScriptName`='' 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,1,10,10000,10000,87,68*100+00,68*100+01,68*100+02,68*100+03,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Grunt - Within 1-10 Range Out of Combat LoS - Run Random Script"),
+(@ENTRY,0,1,0,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Orgrimmar Grunt - On aggro - Say text1");
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=3296;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(22,1,3296,0,0,28,0,13189,0,0,0,"","Only Run script if quest is completed");
+
+-- Actionlist SAI
+SET @ENTRY := 6800;
+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,58509,0,0,0,0,0,7,0,0,0,0,0,0,0,"Stormwind City Guard - On Script - Cast ''Rotten Apple Toss'"),
+(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,1,2,0,0,0,0,0,7,0,0,0,0,0,0,0,"Stormwind City Guard - On Script - Say Line 2");
+
+-- Actionlist SAI
+SET @ENTRY := 6801;
+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,58513,0,0,0,0,0,7,0,0,0,0,0,0,0,"Stormwind City Guard - On Script - Cast 'Rotten Banana Toss'"),
+(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,1,3,0,0,0,0,0,7,0,0,0,0,0,0,0,"Stormwind City Guard - On Script - Say Line 3");
+
+-- Actionlist SAI
+SET @ENTRY := 6802;
+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,58520,0,0,0,0,0,7,0,0,0,0,0,0,0,"Stormwind City Guard - On Script - Cast 'Spit'"),
+(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,1,4,0,0,0,0,0,7,0,0,0,0,0,0,0,"Stormwind City Guard - On Script - Say Line 4");
+
+-- Actionlist SAI
+SET @ENTRY := 6803;
+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,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind City Guard - On Script - Say Line 5");
+
+
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (58509, 58513, 58520);
+INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES
+(58509, 58511, 0, 'Rotten Apple - Rotten Apple'),
+(58513, 58514, 0, 'Rotten Banana - Rotten Banana'),
+(58520, 58519, 0, 'Spit - Spit');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_04_world.sql
new file mode 100644
index 00000000000..bfae5b6eafd
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_04_world.sql
@@ -0,0 +1,8 @@
+DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid` IN(2331100,2331101,2331102) AND `id`>0;
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid` =23311 AND `id`=12;
+UPDATE `smart_scripts` SET `link`=12 WHERE `entryorguid`=23311 AND `source_type`=0 AND `id`=8 AND `link`=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
+(2331100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 89, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Script 1 - Set Random Movement'),
+(2331102, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 2, 14, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Script 3 - Set Faction'),
+(23311, 0, 12, 0, 61, 0, 100, 0, 0, 0, 0, 0, 2, 62, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Disobedient Dragonmaw Peon - Linked with Previous Event - Set Faction');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_05_world.sql
new file mode 100644
index 00000000000..6ddd137c60d
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_05_world.sql
@@ -0,0 +1,5 @@
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 57387;
+INSERT INTO `spell_linked_spell` VALUES (57387, 57608, 0, 'Argent Cannon - Powering Up The Core');
+UPDATE `creature` SET `curhealth`=126000 WHERE `id`=30236;
+UPDATE `creature_template` SET `unit_flags2`=0, `RegenHealth`=0 WHERE `entry`=30236;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_00_world.sql
new file mode 100644
index 00000000000..1b000429a1a
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_00_world.sql
@@ -0,0 +1,15 @@
+--
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry` IN (58203);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(17,0,58203,0,0,31,1,3,31075,0,0,0,'','Iron Chain');
+
+UPDATE `smart_scripts` SET `event_param1`=500, `event_param2`=500, `action_type`=51 WHERE `entryorguid` IN (3092000) AND `source_type`=9 AND `id`=5;
+UPDATE `smart_scripts` SET `event_param1`=2000, `event_param2`=2000, `action_param1`=52520 WHERE `entryorguid` IN (3092000) AND `source_type`=9 AND `id`=0;
+UPDATE `smart_scripts` SET `event_param1`=2000, `event_param2`=2000, `action_param1`=58231, `target_type`=1, `target_param1`=0 WHERE `entryorguid` IN (3107500) AND `source_type`=9 AND `id`=0;
+UPDATE `smart_scripts` SET `event_type`=38, `event_param1`=1, `event_param2`=1, `event_param3`=0, `event_param4`=0, `action_type`=103, `action_param1`=1, `comment`="Scourge Bomb - On Data Set 1 1 - Root" WHERE `entryorguid` IN (31075) AND `source_type`=0 AND `id`=3;
+UPDATE `smart_scripts` SET `event_param1`=1000, `event_param2`=1000, `action_param1`=0 WHERE `entryorguid` IN (3107500) AND `source_type`=9 AND `id`=1;
+UPDATE `smart_scripts` SET `event_param3`=3 WHERE `entryorguid` IN (30920) AND `source_type`=0 AND `id`=1;
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (58231);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13,2,58231,0,0,31,0,3,31075,0,1,0,'','Exploding Abomination');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_01_world.sql
new file mode 100644
index 00000000000..ac4c458096e
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_01_world.sql
@@ -0,0 +1,39 @@
+--
+-- Weapon Master Hanashi: add the missing linked IDs in `action_menu_id`
+UPDATE `gossip_menu_option` SET `action_menu_id`= 5262 WHERE `menu_id`= 5263 AND `OptionBroadcastTextID`= 8812;
+
+-- Hanashi is a troll, using Low Common "Troll" speech, so link the correct text lines for him:
+UPDATE `gossip_menu_option` SET `action_menu_id`= 8603 WHERE `menu_id`= 5262 AND `option_text`= 'Crossbow';
+UPDATE `gossip_menu_option` SET `action_menu_id`= 8604 WHERE `menu_id`= 5262 AND `option_text`= 'Dagger';
+UPDATE `gossip_menu_option` SET `action_menu_id`= 8605 WHERE `menu_id`= 5262 AND `option_text`= 'Fist Weapon';
+UPDATE `gossip_menu_option` SET `action_menu_id`= 8606 WHERE `menu_id`= 5262 AND `option_text`= 'Gun';
+UPDATE `gossip_menu_option` SET `action_menu_id`= 8607 WHERE `menu_id`= 5262 AND `option_text`= 'Mace';
+UPDATE `gossip_menu_option` SET `action_menu_id`= 8608 WHERE `menu_id`= 5262 AND `option_text`= 'Polearm';
+UPDATE `gossip_menu_option` SET `action_menu_id`= 8609 WHERE `menu_id`= 5262 AND `option_text`= 'Sword';
+
+-- Weapon Master Archibald: add missing linked IDs to `action_menu_id` (using default gossip from npc_text)
+UPDATE `gossip_menu_option` SET `action_menu_id`= 5268 WHERE `menu_id`= 5269 AND `OptionBroadcastTextID`= 8812;
+UPDATE `gossip_menu_option` SET `action_menu_id`= 8592 WHERE `menu_id`= 5268 AND `option_text`= 'Axe';
+UPDATE `gossip_menu_option` SET `action_menu_id`= 8593 WHERE `menu_id`= 5268 AND `option_text`= 'Bow';
+UPDATE `gossip_menu_option` SET `action_menu_id`= 8596 WHERE `menu_id`= 5268 AND `option_text`= 'Fist Weapon';
+UPDATE `gossip_menu_option` SET `action_menu_id`= 8597 WHERE `menu_id`= 5268 AND `option_text`= 'Gun';
+UPDATE `gossip_menu_option` SET `action_menu_id`= 8598 WHERE `menu_id`= 5268 AND `option_text`= 'Mace';
+UPDATE `gossip_menu_option` SET `action_menu_id`= 8600 WHERE `menu_id`= 5268 AND `option_text`= 'Staff';
+UPDATE `gossip_menu_option` SET `action_menu_id`= 8602 WHERE `menu_id`= 5268 AND `option_text`= 'Thrown';
+
+-- Weapon Master Sayoc: add the gossip link ID 5220 in `action_menu_id` and link it in `gossip_menu` too
+UPDATE `gossip_menu_option` SET `action_menu_id` = 5222 WHERE `menu_id` = 5221 AND `OptionBroadcastTextID`= 8812;
+-- Sayoc needs new lines in `gossip_menu_option` as well as the linked lines from npc_text :
+DELETE FROM `gossip_menu_option` WHERE `menu_id` = 5222 AND `OptionBroadcastTextID` IN (20582,20585,20586,20587,20588,20589);
+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
+(5222,0,0,'Crossbow',20582,1,1,8594,0,0,0,'',0),
+(5222,1,0,'Gun',20585,1,1,8597,0,0,0,'',0),
+(5222,2,0,'Mace',20586,1,1,8598,0,0,0,'',0),
+(5222,3,0,'Polearm',20587,1,1,8599,0,0,0,'',0),
+(5222,4,0,'Staff',20588,1,1,8610,0,0,0,'',0), --
+(5222,5,0,'Sword',20589,1,1,8601,0,0,0,'',0);
+
+UPDATE `creature_template` SET `type_flags`=134217728 WHERE `entry` IN (17005);
+DELETE FROM `gossip_menu_option` WHERE (`menu_id`=7337);
+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
+(7337,0,3,'Show me what you know, Larenis.',13168,5,16,0,0,0,0,'',0);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_02_world.sql
new file mode 100644
index 00000000000..5fbf0df3488
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_02_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_template` SET `type_flags`=`type_flags`|134217728 WHERE `npcflag`>16 AND `gossip_menu_id`!= 0;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_09_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_09_00_world.sql
new file mode 100644
index 00000000000..697123fefac
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_09_00_world.sql
@@ -0,0 +1,8 @@
+--
+DELETE FROM `creature` WHERE `guid` IN (120831,120833,123124);
+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`, `VerifiedBuild`) VALUES
+(120831, 32769, 571, 1, 1, 25753, 0, 7523.09, 1852.78, 491.641, 3.23212, 300, 0, 0, 12600, 3994, 0, 0, 0, 0, 0),
+(120833, 32769, 571, 1, 1, 25753, 0, 7703.2, 1822.89, 469.378, 3.94286, 300, 0, 0, 12600, 3994, 0, 0, 0, 0, 0),
+(123124, 32769, 571, 1, 1, 25753, 0, 7733.55, 1578.02, 469.378, 2.51066, 300, 0, 0, 12600, 3994, 0, 0, 0, 0, 0);
+
+DELETE FROM pool_creature WHERE guid = 151994;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_10_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_10_00_world_335.sql
new file mode 100644
index 00000000000..f3fb517d486
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_10_00_world_335.sql
@@ -0,0 +1,21 @@
+ALTER TABLE `quest_template`
+ CHANGE COLUMN `LimitTime` `TimeAllowed` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `PointOption`,
+ CHANGE COLUMN `RequiredRaces` `RequiredRaces` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `TimeAllowed`,
+ CHANGE COLUMN `NextQuestIdChain` `RewardNextQuest` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredFactionValue2`,
+ CHANGE COLUMN `RewardXPId` `RewardXPDifficulty` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardNextQuest`,
+ CHANGE COLUMN `RewardOrRequiredMoney` `RewardMoney` INT(11) NOT NULL DEFAULT '0' AFTER `RewardXPDifficulty`,
+ CHANGE COLUMN `RewardMoneyMaxLevel` `RewardBonusMoney` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardMoney`,
+ CHANGE COLUMN `RewardSpell` `RewardDisplaySpell` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardBonusMoney`,
+ CHANGE COLUMN `RewardSpellCast` `RewardSpell` INT(11) NOT NULL DEFAULT '0' AFTER `RewardDisplaySpell`,
+ CHANGE COLUMN `RewardHonorMultiplier` `RewardKillHonor` FLOAT NOT NULL DEFAULT '0' AFTER `RewardHonor`,
+ CHANGE COLUMN `SourceItemId` `StartItem` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardKillHonor`,
+ CHANGE COLUMN `RewardTitle` `RewardTitle` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardChoiceItemQuantity6`,
+ CHANGE COLUMN `RewardTalents` `RewardTalents` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardTitle`,
+ CHANGE COLUMN `RewardArenaPoints` `RewardArenaPoints` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardTalents`;
+-- split needed to avoid import errors
+ALTER TABLE `quest_template`
+ CHANGE COLUMN `PointMapId` `POIContinent` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardChoiceItemQuantity6`,
+ CHANGE COLUMN `PointX` `POIx` FLOAT NOT NULL DEFAULT '0' AFTER `POIContinent`,
+ CHANGE COLUMN `PointY` `POIy` FLOAT NOT NULL DEFAULT '0' AFTER `POIx`,
+ CHANGE COLUMN `PointOption` `POIPriority` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `POIy`,
+ CHANGE COLUMN `EndText` `AreaDescription` TEXT NULL AFTER `QuestDescription`;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_10_01_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_10_01_world_335.sql
new file mode 100644
index 00000000000..4a14da07ff8
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_10_01_world_335.sql
@@ -0,0 +1,10 @@
+ALTER TABLE `quest_template`
+ CHANGE COLUMN `RequiredRaces` `AllowableRaces` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `TimeAllowed`,
+ CHANGE COLUMN `RequiredSourceItemId1` `ItemDrop1` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardAmount4`,
+ CHANGE COLUMN `RequiredSourceItemCount1` `ItemDropQuantity1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `ItemDrop1`,
+ CHANGE COLUMN `RequiredSourceItemId2` `ItemDrop2` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `ItemDropQuantity1`,
+ CHANGE COLUMN `RequiredSourceItemCount2` `ItemDropQuantity2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `ItemDrop2`,
+ CHANGE COLUMN `RequiredSourceItemId3` `ItemDrop3` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `ItemDropQuantity2`,
+ CHANGE COLUMN `RequiredSourceItemCount3` `ItemDropQuantity3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `ItemDrop3`,
+ CHANGE COLUMN `RequiredSourceItemId4` `ItemDrop4` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `ItemDropQuantity3`,
+ CHANGE COLUMN `RequiredSourceItemCount4` `ItemDropQuantity4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `ItemDrop4`;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_11_99_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_11_99_world_335.sql
new file mode 100644
index 00000000000..2851d4172b7
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_11_99_world_335.sql
@@ -0,0 +1,3 @@
+UPDATE `trinity_string`
+SET `content_default` = 'Object GUID is: %s'
+WHERE `entry`=201;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_12_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_12_00_world.sql
new file mode 100644
index 00000000000..cfa8399c350
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_12_00_world.sql
@@ -0,0 +1,5 @@
+UPDATE `creature_template` SET `ScriptName`='npc_brann_bronzebeard_ulduar_intro' WHERE `entry`=33579;
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=48750 AND `spell_effect`=48770;
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_gen_burning_depths_necrolyte_image';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(48750, 'spell_gen_burning_depths_necrolyte_image');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_00_world_335.sql
new file mode 100644
index 00000000000..d76511a05f6
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_00_world_335.sql
@@ -0,0 +1,32 @@
+
+-- `creature_questitem`.`VerifiedBuild`
+
+ALTER TABLE `creature_questitem`
+ ADD COLUMN `VerifiedBuild` SMALLINT(5) NOT NULL DEFAULT '0';
+
+UPDATE `creature_questitem` SET `VerifiedBuild` = -12340 WHERE `CreatureEntry` = 38545;
+UPDATE `creature_questitem` SET `VerifiedBuild` = 11159 WHERE `CreatureEntry` = 138;
+UPDATE `creature_questitem` SET `VerifiedBuild` = 12340 WHERE `CreatureEntry` IN (3, 6, 30, 36, 38, 40, 43, 46, 48, 54, 60, 61, 66, 68, 69, 74, 78, 79, 80, 89, 92, 94, 95, 97, 98, 99, 100, 103, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 127, 128, 151, 152, 154, 157, 167, 171, 190, 193, 196, 197, 198, 199, 202, 203, 205, 206, 210, 212, 213, 215, 217, 218, 222, 223, 225, 226, 227, 228, 232, 233, 234, 235, 237, 238, 239, 240, 241, 244, 246, 247, 248, 250, 251, 252, 253, 255, 257, 258, 261, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 284, 285, 288, 289, 294, 295, 297, 299, 300, 302, 304, 305, 306, 307, 308, 311, 313, 314, 315, 325, 327, 328, 329, 330, 331, 332, 334, 335, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 352, 353, 356, 358, 359, 372, 374, 375, 376, 377, 379, 381, 382, 383, 384, 385, 390, 391, 392, 395, 397, 412, 415, 416, 417, 422, 423, 424, 426, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 440, 441, 442, 445, 446, 448, 449, 450, 452, 453, 454, 456, 458, 459, 460, 461, 462, 464, 465, 466, 467, 468, 469, 471, 472, 473, 474, 475, 476, 478, 480, 481, 482, 483, 485, 486, 487, 488, 489, 490, 491, 494, 495, 499, 500, 501, 502, 503, 504, 505, 506, 507, 510, 511, 513, 514, 515, 517, 518, 519, 520, 521, 522, 523, 524, 525, 531, 533, 534, 539, 541, 543, 544, 545, 547, 548, 550, 565, 568, 569, 570, 572, 573, 574, 575, 576, 578, 579, 580, 582, 583, 584, 587, 588, 589, 590, 594, 595, 596, 597, 598, 599, 603, 604, 615, 616, 619, 620, 622, 623, 624, 625, 626, 628, 633, 634, 636, 639, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 656, 657, 658, 659, 660, 661, 663, 664, 667, 669, 670, 671, 672, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 694, 696, 697, 698, 699, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 721, 723, 724, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 750, 751, 752, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 775, 777, 780, 781, 782, 783, 784, 785, 786, 787, 789, 790, 791, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 818, 819, 820, 821, 822, 823, 824, 826, 827, 828, 829, 830, 831, 832, 833, 834, 836, 837, 840, 842, 843, 844, 846, 847, 848, 849, 850, 851, 853, 854, 855, 856, 857, 858, 859, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 873, 874, 875, 876, 877, 878, 879, 880, 881, 883, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 898, 900, 903, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 920, 921, 922, 923, 925, 926, 927, 928, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 954, 955, 956, 957, 958, 959, 960, 963, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 999, 1000, 1001, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1057, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1081, 1082, 1083, 1084, 1085, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1103, 1104, 1105, 1106, 1108, 1109, 1110, 1111, 1112, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1137, 1138, 1139, 1140, 1141, 1142, 1144, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1169, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1222, 1224, 1225, 1226, 1228, 1229, 1231, 1232, 1233, 1234, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1289, 1291, 1292, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1358, 1360, 1362, 1364, 1365, 1366, 1367, 1368, 1370, 1371, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1385, 1386, 1387, 1388, 1393, 1395, 1397, 1398, 1399, 1400, 1402, 1404, 1405, 1407, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1504, 1505, 1506, 1507, 1508, 1509, 1511, 1512, 1513, 1514, 1515, 1516, 1518, 1519, 1520, 1521, 1522, 1523, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1543, 1544, 1545, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1632, 1642, 1645, 1646, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1706, 1707, 1708, 1711, 1713, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1723, 1724, 1725, 1726, 1727, 1729, 1731, 1732, 1733, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1763, 1765, 1766, 1767, 1768, 1769, 1770, 1772, 1773, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1787, 1788, 1789, 1791, 1793, 1794, 1795, 1796, 1797, 1800, 1801, 1802, 1804, 1805, 1806, 1808, 1809, 1812, 1813, 1815, 1816, 1817, 1821, 1822, 1824, 1826, 1827, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 631, 1851, 1852, 1853, 1854, 1855, 1860, 1863, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1880, 1883, 1884, 1885, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1901, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1931, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1963, 1964, 1965, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1981, 1983, 1984, 1985, 1986, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2017, 2018, 2019, 2020, 2021, 2022, 2025, 2027, 2029, 2030, 2031, 2032, 2033, 2034, 2038, 2039, 2041, 2042, 2043, 2044, 2045, 2046, 2050, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2086, 2089, 2090, 2091, 2092, 2093, 2094, 2096, 2097, 2098, 2099, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2134, 2135, 2136, 2137, 2140, 2142, 2149, 2150, 2151, 2152, 2153, 2155, 2156, 2157, 2158, 2159, 2160, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2198, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2214, 2215, 2216, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2260, 2261, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2274, 2275, 2276, 2277, 2278, 2283, 2284, 2285, 2287, 2299, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2326, 2327, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2354, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2425, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2442, 2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2464, 2465, 2466, 2468, 2469, 2470, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2577, 2578, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2614, 2615, 2616, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2630, 2634, 2635, 2636, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2662, 2663, 2664, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2691, 2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2703, 2704, 2705, 2706, 2707, 2708, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2723, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2742, 2743, 2744, 2745, 2748, 2749, 2751, 2752, 2753, 2754, 2755, 2757, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2773, 2774, 2775, 2776, 2778, 2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2798, 2799, 2801, 2802, 2803, 2804, 2805, 2806, 2808, 2810, 2812, 2814, 2816, 2817, 2818, 2819, 2820, 2821, 2829, 2830, 2831, 2832, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2870, 2876, 2878, 2879, 2880, 2881, 2887, 2888, 2892, 2893, 2894, 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2934, 2937, 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 2991, 2992, 2993, 2994, 2995, 2996, 2997, 2998, 2999, 3000, 3001, 3002, 3003, 3004, 3005, 3007, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3141, 3142, 3143, 3144, 3145, 3147, 3149, 3150, 3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, 3172, 3173, 3174, 3175, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, 3195, 3196, 3197, 3198, 3199, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3251, 3252, 3253, 3254, 3255, 3256, 3257, 3258, 3260, 3261, 3263, 3265, 3266, 3267, 3268, 3269, 3270, 3271, 3272, 3273, 3274, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3283, 3284, 3285, 3286, 3287, 3289, 3290, 3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3300, 3301, 3304, 3305, 3306, 3309, 3310, 3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3421, 3424, 3425, 3426, 3428, 3429, 3430, 3431, 3432, 3433, 3434, 3435, 3436, 3438, 3439, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458, 3459, 3461, 3463, 3464, 3465, 3466, 3467, 3468, 3469, 3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481, 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490, 3491, 3492, 3493, 3494, 3495, 3496, 3497, 3498, 3499, 3500, 3501, 3502, 3503, 3504, 3505, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3527, 3528, 3529, 3530, 3531, 3532, 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 3542, 3543, 3544, 3545, 3546, 3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3556, 3557, 3560, 3561, 3562, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3574, 3577, 3578, 3579, 3581, 3582, 3583, 3584, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3619, 3620, 3621, 3622, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3636, 3637, 3638, 3639, 3640, 3641, 3644, 3649, 3650, 3652, 3653, 3654, 3655, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3669, 3670, 3671, 3672, 3673, 3674, 3678, 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3688, 3689, 3690, 3691, 3692, 3693, 3694, 3695, 3696, 3698, 3700, 3701, 3702, 3703, 3704, 3705, 3706, 3707, 3708, 3711, 3712, 3713, 3715, 3717, 3721, 3722, 3725, 3727, 3728, 3730, 3732, 3733, 3734, 3735, 3736, 3737, 3739, 3740, 3742, 3743, 3745, 3746, 3748, 3749, 3750, 3752, 3754, 3755, 3757, 3758, 3759, 3762, 3763, 3765, 3767, 3770, 3771, 3772, 3773, 3774, 3779, 3780, 3781, 3782, 3783, 3784, 3789, 3791, 3792, 3794, 3795, 3797, 3799, 3801, 3802, 3803, 3804, 3806, 3807, 3808, 3809, 3810, 3811, 3812, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821, 3823, 3824, 3825, 3833, 3834, 3835, 3836, 3837, 3838, 3840, 3841, 3842, 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3853, 3854, 3855, 3857, 3859, 3861, 3862, 3863, 3864, 3865, 3866, 3868, 3872, 3873, 3875, 3877, 3879, 3880, 3881, 3882, 3883, 3884, 3885, 3886, 3887, 3888, 3890, 3891, 3892, 3893, 3894, 3895, 3896, 3897, 3898, 3899, 3900, 3901, 3902, 3903, 3904, 3906, 3907, 3908, 3909, 3911, 3912, 3913, 3914, 3915, 3916, 3917, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3931, 3932, 3933, 3934, 3935, 3936, 3937, 3939, 3940, 3941, 3942, 3943, 3944, 3945, 3946, 3947, 3948, 3950, 3951, 3952, 3953, 3954, 3955, 3956, 3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 3967, 3968, 3969, 3970, 3974, 3975, 3976, 3977, 3978, 3979, 3980, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 3992, 3993, 3994, 3995, 3996, 3998, 3999, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4040, 4041, 4042, 4043, 4044, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4056, 4057, 4059, 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 4096, 4097, 4098, 4099, 4100, 4101, 4104, 4107, 4109, 4110, 4111, 4112, 4113, 4114, 4116, 4117, 4118, 4119, 4120, 4124, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4138, 4139, 4140, 4142, 4143, 4144, 4146, 4147, 4150, 4151, 4154, 4155, 4156, 4158, 4159, 4160, 4161, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, 4172, 4173, 4175, 4177, 4180, 4181, 4182, 4183, 4184, 4185, 4186, 4187, 4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4200, 4201, 4202, 4203, 4204, 4205, 4207, 4208, 4209, 4210, 4211, 4212, 4213, 4214, 4215, 4216, 4217, 4218, 4219, 4220, 4221, 4222, 4223, 4225, 4226, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4240, 4241, 4242, 4243, 4244, 4248, 4249, 4250, 4251, 4252, 4254, 4255, 4256, 4257, 4258, 4259, 4260, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, 4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4305, 4306, 4307, 4308, 4309, 4310, 4311, 4312, 4314, 4316, 4317, 4319, 4320, 4321, 4323, 4324, 4328, 4329, 4331, 4334, 4339, 4341, 4342, 4343, 4344, 4345, 4351, 4352, 4355, 4356, 4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364, 4366, 4368, 4370, 4371, 4374, 4376, 4377, 4378, 4379, 4380, 4382, 4385, 4386, 4387, 4388, 4389, 4390, 4391, 4392, 4393, 4396, 4397, 4398, 4399, 4400, 4401, 4402, 4403, 4404, 4405, 4407, 4409, 4411, 4412, 4413, 4414, 4415, 4416, 4417, 4418, 4419, 4420, 4421, 4422, 4423, 4424, 4425, 4427, 4428, 4429, 4430, 4435, 4436, 4437, 4438, 4440, 4442, 4444, 4445, 4446, 4449, 23450, 4451, 4452, 4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468, 4469, 4472, 4474, 4475, 4476, 4479, 4480, 4481, 4483, 4484, 4485, 4486, 4488, 4489, 4490, 4493, 4494, 4495, 4496, 4497, 4498, 4499, 4500, 4501, 4502, 4503, 4504, 4505, 4506, 4507, 4508, 4509, 4510, 4511, 4512, 4514, 4515, 4516, 4517, 4518, 4519, 4520, 4521, 4522, 4523, 4525, 4526, 4528, 4530, 4531, 4532, 4534, 4535, 4538, 4539, 4540, 4541, 4542, 4543, 4544, 4545, 4546, 4547, 4548, 4549, 4550, 4551, 4552, 4553, 4554, 4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 4580, 4581, 4582, 4583, 4584, 4585, 4586, 4587, 4588, 4589, 4590, 4591, 4592, 4593, 4594, 4595, 4596, 4597, 4598, 4599, 4600, 4601, 4602, 4603, 4604, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4623, 4624, 4625, 4627, 4629, 4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642, 4643, 4644, 4645, 4646, 4647, 4648, 4649, 4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665, 4666, 4667, 4668, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678, 4679, 4680, 4681, 4682, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4692, 4693, 4694, 4695, 4696, 4697, 4699, 4700, 4701, 4702, 4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4716, 4718, 4719, 4720, 4721, 4722, 4723, 4724, 4726, 4727, 4728, 4729, 4730, 4731, 4732, 4752, 4753, 4772, 4773, 4775, 4777, 4778, 4779, 4780, 4781, 4782, 4783, 4784, 4785, 4786, 4787, 4788, 4789, 4791, 4792, 4794, 4795, 4798, 4799, 4802, 4803, 4805, 4807, 4809, 4810, 4811, 4812, 4813, 4814, 4815, 4818, 4819, 4820, 4821, 4822, 4823, 4824, 4825, 4827, 4829, 4830, 4831, 4832, 4834, 4841, 4842, 4844, 4845, 4846, 4847, 4848, 4849, 4850, 4851, 4852, 4853, 4854, 4855, 4856, 4857, 4860, 4861, 4863, 4872, 4875, 4876, 4877, 4878, 4879, 4880, 4883, 4884, 4885, 4886, 4887, 4888, 4889, 4890, 4891, 4892, 4893, 4894, 4895, 4896, 4897, 4898, 4899, 4900, 4901, 4902, 4921, 4922, 4923, 4924, 4926, 4941, 4943, 4944, 4945, 4946, 4947, 4948, 4949, 4950, 4951, 4952, 4953, 4954, 4958, 4959, 4960, 4961, 4962, 4963, 4964, 4965, 4966, 4967, 4968, 4969, 4971, 4972, 4973, 4974, 4977, 4978, 4979, 4980, 4981, 4982, 4983, 4984, 4995, 4996, 5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, 5052, 5053, 5054, 5055, 5056, 5057, 5058, 5081, 5082, 5083, 5085, 5086, 5087, 5088, 5089, 5090, 5091, 5092, 5093, 5094, 5095, 5096, 5097, 5099, 5100, 5101, 5102, 5103, 5106, 5107, 5108, 5109, 5110, 5111, 5112, 5113, 5114, 5115, 5116, 5117, 5118, 5119, 5120, 5121, 5122, 5123, 5124, 5125, 5126, 5127, 5128, 5129, 5130, 5132, 5133, 5134, 5135, 5137, 5138, 5139, 5140, 5141, 5142, 5143, 5144, 5145, 5146, 5147, 5148, 5149, 5150, 5151, 5152, 5153, 5154, 5155, 5156, 5157, 5158, 5159, 5160, 5161, 5162, 5163, 5164, 5165, 5166, 5167, 5169, 5170, 5171, 5172, 5173, 5174, 5175, 5177, 5178, 5184, 5185, 5186, 5188, 5189, 5190, 5191, 5193, 5194, 5195, 5196, 5197, 5198, 5199, 5200, 5202, 5204, 5224, 5225, 5226, 5228, 5229, 5232, 5234, 5235, 5236, 5237, 5238, 5239, 5240, 5241, 5243, 5244, 5245, 5246, 5247, 5249, 5251, 5253, 5254, 5255, 5256, 5258, 5259, 5260, 5261, 5262, 5263, 5267, 5268, 5269, 5270, 5271, 5272, 5273, 5274, 5276, 5277, 5278, 5280, 5283, 5286, 5287, 5288, 5291, 5292, 5293, 5295, 5296, 5297, 5299, 5300, 5304, 5305, 5306, 5307, 5308, 5312, 5314, 5317, 5319, 5320, 5327, 5328, 5331, 5332, 5333, 5334, 5335, 5336, 5337, 5343, 5345, 5346, 5347, 5349, 5350, 5352, 5353, 5354, 5355, 5356, 5357, 5358, 5359, 5360, 5361, 5362, 5363, 5364, 5366, 5384, 5385, 5386, 5387, 5388, 5389, 5390, 5391, 5392, 5393, 5394, 5395, 5396, 5397, 5398, 5399, 5400, 5401, 5402, 5403, 5404, 5405, 5406, 5409, 5411, 5412, 5413, 5414, 5416, 5418, 5419, 5420, 5421, 5422, 5423, 5424, 5425, 5426, 5427, 5428, 5429, 5430, 5431, 5432, 5433, 5434, 5435, 5436, 5437, 5438, 5439, 5440, 5441, 5444, 5446, 5448, 5449, 5450, 5451, 5452, 5453, 5454, 5455, 5456, 5457, 5458, 5459, 5460, 5461, 5462, 5464, 5465, 5466, 5467, 5469, 5470, 5471, 5472, 5473, 5474, 5475, 5476, 5477, 5479, 5480, 5481, 5482, 5483, 5484, 5485, 5489, 5490, 5491, 5492, 5493, 5494, 5495, 5496, 5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, 5505, 5506, 5508, 5509, 5510, 5511, 5512, 5513, 5514, 5515, 5516, 5517, 5518, 5519, 5520, 5523, 5543, 5546, 5547, 5564, 5565, 5566, 5567, 5568, 5569, 5570, 5591, 5592, 5593, 5594, 5595, 5597, 5598, 5599, 5600, 5601, 5602, 5603, 5605, 5606, 5607, 5608, 5609, 5610, 5611, 5612, 5613, 5614, 5615, 5616, 5617, 5618, 5620, 5622, 5623, 5624, 5634, 5635, 5636, 5637, 5638, 5639, 5640, 5641, 5642, 5643, 5644, 5645, 5646, 5647, 5648, 5649, 5650, 5651, 5652, 5653, 5654, 5655, 5656, 5657, 5658, 5659, 5660, 5661, 5662, 5663, 5664, 5665, 5666, 5667, 5668, 5669, 5670, 5671, 5672, 5674, 5675, 5676, 5677, 5679, 5680, 5681, 5682, 5683, 5685, 5686, 5687, 5688, 5689, 5690, 5691, 5692, 5693, 5694, 5695, 5696, 5697, 5698, 5699, 5700, 5701, 5702, 5703, 5704, 5705, 5706, 5707, 5708, 5709, 5710, 5711, 5712, 5713, 5714, 5715, 5716, 5717, 5718, 5719, 5720, 5721, 5722, 5723, 5724, 5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5733, 5734, 5735, 5736, 5738, 5739, 5741, 5742, 5743, 5744, 5745, 5747, 5748, 5749, 5750, 5752, 5753, 5754, 5755, 5756, 5757, 5758, 5759, 5760, 5761, 5762, 5763, 5764, 5765, 5766, 5767, 5768, 5769, 5770, 5771, 5774, 5775, 5780, 5781, 5782, 5783, 5784, 5785, 5786, 5787, 5792, 5797, 5798, 5799, 5800, 5806, 5807, 5808, 5809, 5810, 5811, 5812, 5814, 5815, 5816, 5817, 5819, 5820, 5821, 5822, 5823, 5824, 5826, 5827, 5828, 5829, 5830, 5831, 5832, 5833, 5834, 5835, 5836, 5837, 5838, 5839, 5840, 5841, 5842, 5843, 5844, 5846, 5847, 5848, 5849, 5850, 5851, 5852, 5853, 5854, 5855, 5856, 5857, 5858, 5859, 5860, 5861, 5862, 5863, 5864, 5865, 5870, 5871, 5873, 5874, 5875, 5878, 5879, 5880, 5881, 5882, 5883, 5884, 5885, 5886, 5887, 5888, 5889, 5890, 5891, 5892, 5893, 5894, 5895, 5896, 5897, 5898, 5899, 5900, 5901, 5902, 5905, 5906, 5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 5927, 5929, 5930, 5931, 5932, 5933, 5934, 5935, 5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5950, 5951, 5952, 5953, 5955, 5957, 5958, 5974, 5975, 5976, 5977, 5978, 5979, 5981, 5982, 5984, 5985, 5988, 5990, 5991, 5992, 5993, 5994, 5996, 5997, 5998, 5999, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6026, 6027, 6028, 6030, 6031, 6033, 6034, 6035, 6047, 6066, 6068, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6086, 6087, 6089, 6090, 6091, 6093, 6094, 6109, 6110, 6111, 6112, 6113, 6114, 6115, 6116, 6117, 6118, 6119, 6120, 6121, 6122, 6123, 6124, 6125, 6126, 6127, 6128, 6129, 6130, 6131, 6132, 6133, 6134, 6135, 6136, 6137, 6138, 6139, 6140, 6141, 6142, 6143, 6144, 6145, 6146, 6147, 6148, 6166, 6167, 6168, 6169, 6170, 6171, 6172, 6173, 6174, 6175, 6176, 6177, 6178, 6179, 6180, 6181, 6182, 6184, 6185, 6186, 6187, 6188, 6189, 6190, 6193, 6194, 6195, 6196, 6198, 6199, 6200, 6201, 6202, 6206, 6207, 6208, 6209, 6210, 6211, 6212, 6213, 6215, 6218, 6219, 6220, 6221, 6222, 6223, 6224, 6225, 6226, 6227, 6228, 6229, 6230, 6231, 6232, 6233, 6234, 6235, 6236, 6237, 6238, 6239, 6240, 6241, 6243, 6244, 6245, 6246, 6247, 6248, 6249, 6250, 6251, 6252, 6253, 6254, 6266, 6267, 6268, 6271, 6272, 6286, 6287, 6288, 6289, 6290, 6291, 6292, 6293, 6294, 6295, 6297, 6298, 6299, 6300, 6301, 6306, 6328, 6329, 6347, 6348, 6349, 6350, 6351, 6352, 6366, 6367, 6368, 6369, 6370, 6371, 6372, 6373, 6374, 6375, 6376, 6377, 6378, 6379, 6380, 6382, 6386, 6387, 6388, 6389, 6390, 6391, 6392, 6393, 6394, 6395, 6407, 6408, 6410, 6411, 6412, 6426, 6427, 6446, 6466, 6467, 6486, 6487, 6488, 6489, 6490, 6491, 6492, 6493, 6494, 6495, 6496, 6497, 6498, 6499, 6500, 6501, 6502, 6503, 6504, 6505, 6506, 6507, 6508, 6509, 6510, 6511, 6512, 6513, 6514, 6516, 6517, 6518, 6519, 6520, 6521, 6522, 6523, 6527, 6546, 6547, 6548, 6549, 6550, 6551, 6552, 6553, 6554, 6555, 6556, 6557, 6559, 6560, 6566, 6567, 6568, 6569, 6570, 6574, 6575, 6576, 6577, 6578, 6579, 6581, 6582, 6583, 6584, 6585, 6586, 6606, 6607, 6626, 6646, 6647, 6648, 6649, 6650, 6651, 6652, 6653, 6667, 6668, 6669, 6670, 6706, 6707, 6726, 6727, 6728, 6729, 6730, 6731, 6732, 6733, 6734, 6735, 6736, 6737, 6738, 6739, 6740, 6741, 6746, 6747, 6748, 6749, 6766, 6768, 6771, 6774, 6775, 6776, 6777, 6778, 6779, 6780, 6781, 6782, 6784, 6785, 6786, 6787, 6788, 6789, 6790, 6791, 6806, 6807, 6826, 6827, 6846, 6866, 6867, 6868, 6886, 6887, 6906, 6907, 6908, 6909, 6910, 6911, 6912, 6913, 6927, 6928, 6929, 6930, 6932, 6946, 6966, 6986, 6987, 7007, 7009, 7010, 7011, 7012, 7015, 7016, 7017, 7022, 7023, 7024, 7025, 7026, 7027, 7028, 7029, 7030, 7031, 7032, 7033, 7034, 7035, 7036, 7037, 7038, 7039, 7040, 7041, 7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049, 7050, 7051, 7052, 7053, 7055, 7056, 7057, 7067, 7068, 7069, 7070, 7071, 7072, 7073, 7074, 7075, 7076, 7077, 7078, 7079, 7086, 7087, 7088, 7089, 7091, 7092, 7093, 7097, 7098, 7099, 7100, 7101, 7104, 7105, 7106, 7107, 7108, 7109, 7110, 7111, 7112, 7113, 7114, 7115, 7118, 7120, 7125, 7126, 7132, 7135, 7136, 7137, 7138, 7139, 7149, 7153, 7154, 7155, 7156, 7157, 7158, 7161, 7166, 7167, 7168, 7170, 7172, 7175, 7206, 7207, 7208, 7209, 7226, 7228, 7229, 7230, 7231, 7232, 7233, 7234, 7235, 7246, 7247, 7266, 7267, 7268, 7269, 7271, 7272, 7273, 7274, 7275, 7276, 7286, 7287, 7288, 7290, 7291, 7292, 7293, 7294, 7295, 7296, 7297, 7298, 7307, 7308, 7309, 7310, 7311, 7312, 7313, 7315, 7316, 7317, 7318, 7319, 7320, 7321, 7322, 7323, 7324, 7325, 7327, 7328, 7329, 7332, 7333, 7334, 7335, 7337, 7340, 7341, 7342, 7343, 7344, 7345, 7346, 7347, 7348, 7349, 7351, 7352, 7353, 7354, 7355, 7356, 7357, 7358, 7360, 7361, 7363, 7364, 7365, 7366, 7367, 7368, 7369, 7370, 7371, 7372, 7376, 7379, 7380, 7381, 7382, 7383, 7384, 7385, 7386, 7387, 7389, 7390, 7391, 7392, 7394, 7395, 7396, 7397, 7398, 7399, 7400, 7401, 7402, 7403, 7404, 7405, 7406, 7407, 7408, 7409, 7410, 7411, 7412, 7413, 7414, 7415, 7416, 7423, 7424, 7425, 7427, 7428, 7429, 7430, 7431, 7432, 7433, 7434, 7435, 7436, 7437, 7438, 7439, 7440, 7441, 7442, 7443, 7444, 7445, 7446, 7447, 7448, 7449, 7450, 7451, 7452, 7453, 7454, 7455, 7456, 7457, 7458, 7459, 7460, 7461, 7462, 7463, 7464, 7465, 7466, 7467, 7468, 7469, 7483, 7484, 7485, 7486, 7487, 7489, 7505, 7506, 7523, 7524, 7527, 7543, 7544, 7545, 7549, 7550, 7553, 7555, 7560, 7562, 7564, 7565, 7566, 7567, 7568, 7569, 7572, 7583, 7584, 7603, 7604, 7605, 7606, 7607, 7608, 7623, 7643, 7664, 7665, 7666, 7667, 7668, 7669, 7670, 7671, 7683, 7684, 7686, 7687, 7690, 7704, 7706, 7707, 7708, 7714, 7724, 7725, 7726, 7727, 7728, 7729, 7730, 7731, 7732, 7733, 7734, 7735, 7736, 7737, 7738, 7739, 7740, 7744, 7749, 7750, 7763, 7764, 7765, 7766, 7767, 7768, 7769, 7770, 7771, 7772, 7773, 7774, 7775, 7776, 7777, 7778, 7779, 7780, 7783, 7784, 7785, 7786, 7787, 7788, 7789, 7790, 7792, 7793, 7794, 7795, 7796, 7797, 7798, 7799, 7800, 7801, 7802, 7803, 7804, 7805, 7806, 7807, 7808, 7809, 7823, 7824, 7825, 7826, 7843, 7844, 7845, 7846, 7847, 7848, 7849, 7850, 7851, 7852, 7853, 7854, 7855, 7856, 7857, 7858, 7863, 7864, 7865, 7866, 7867, 7868, 7869, 7870, 7871, 7872, 7873, 7874, 7875, 7876, 7877, 7878, 7879, 7880, 7881, 7882, 7883, 7884, 7885, 7886, 7895, 7897, 7899, 7900, 7901, 7902, 7903, 7904, 7907, 7915, 7916, 7917, 7918, 7936, 7937, 7939, 7940, 7941, 7942, 7943, 7944, 7945, 7946, 7947, 7948, 7949, 7950, 7951, 7952, 7953, 7954, 7955, 7956, 7957, 7975, 7976, 7977, 7978, 7980, 7995, 7996, 7997, 7998, 7999, 8015, 8016, 8017, 8018, 8019, 8020, 8021, 8022, 8023, 8024, 8025, 8026, 8035, 8055, 8075, 8095, 8096, 8115, 8116, 8117, 8118, 8119, 8120, 8121, 8122, 8123, 8124, 8125, 8126, 8127, 8128, 8129, 8130, 8131, 8136, 8137, 8138, 8139, 8140, 8141, 8142, 8143, 8144, 8145, 8146, 8147, 8149, 8150, 8151, 8152, 8153, 8154, 8155, 8156, 8157, 8158, 8159, 8160, 8161, 8176, 8177, 8178, 8179, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8203, 8204, 8205, 8207, 8208, 8210, 8211, 8212, 8213, 8214, 8215, 8216, 8217, 8218, 8219, 8236, 8256, 8257, 8276, 8277, 8278, 8279, 8280, 8281, 8282, 8283, 8284, 8296, 8297, 8298, 8299, 8300, 8301, 8302, 8303, 8304, 8305, 8306, 8307, 8308, 8309, 8310, 8311, 8317, 8318, 8319, 8320, 8324, 8336, 8337, 8338, 8356, 8357, 8358, 8359, 8360, 8361, 8362, 8363, 8364, 8376, 8378, 8379, 8380, 8381, 8382, 8383, 8384, 8385, 8386, 8387, 8388, 8389, 8390, 8391, 8392, 8393, 8394, 8395, 8396, 8397, 8398, 8399, 8400, 8401, 8402, 8403, 8404, 8405, 8408, 8409, 8416, 8417, 8418, 8419, 8420, 8421, 8436, 8437, 8438, 8439, 8440, 8441, 8442, 8443, 8444, 8446, 8447, 8477, 8478, 8479, 8480, 8496, 8497, 8503, 8504, 8506, 8507, 8508, 8509, 8510, 8516, 8517, 8518, 8519, 8520, 8521, 8522, 8523, 8524, 8525, 8526, 8527, 8528, 8529, 8530, 8531, 8532, 8534, 8535, 8538, 8539, 8540, 8541, 8542, 8543, 8544, 8545, 8546, 8547, 8548, 8550, 8551, 8553, 8554, 8555, 8556, 8557, 8558, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8576, 8578, 8579, 8580, 8581, 8582, 8583, 8584, 8585, 8586, 8587, 8588, 8596, 8597, 8598, 8600, 8601, 8602, 8603, 8605, 8606, 8607, 8608, 8609, 8610, 8611, 8612, 8615, 8616, 8617, 8636, 8637, 8656, 8657, 8658, 8659, 8660, 8661, 8662, 8664, 8665, 8666, 8667, 8668, 8669, 8670, 8671, 8672, 8673, 8674, 8675, 8678, 8679, 8680, 8681, 8696, 8716, 8717, 8718, 8719, 8720, 8721, 8722, 8723, 8724, 8736, 8737, 8738, 8756, 8757, 8758, 8759, 8760, 8761, 8762, 8763, 8764, 8766, 8767, 8776, 8816, 8836, 8837, 8856, 8876, 8877, 8878, 8879, 8881, 8882, 8883, 8884, 8885, 8886, 8888, 8889, 8890, 8891, 8892, 8893, 8894, 8895, 8896, 8897, 8898, 8899, 8900, 8901, 8902, 8903, 8904, 8905, 8906, 8907, 8908, 8909, 8910, 8911, 8912, 8913, 8914, 8915, 8916, 8917, 8920, 8921, 8922, 8923, 8924, 8925, 8926, 8927, 8928, 8929, 8931, 8932, 8933, 8934, 8937, 8956, 8957, 8958, 8959, 8960, 8961, 8962, 8963, 8964, 8965, 8976, 8977, 8978, 8979, 8980, 8981, 8982, 8983, 8996, 8997, 9016, 9017, 9018, 9019, 9020, 9021, 9022, 9023, 9024, 9025, 9026, 9027, 9028, 9029, 9030, 9031, 9032, 9033, 9034, 9035, 9036, 9037, 9038, 9039, 9040, 9041, 9042, 9043, 9044, 9045, 9046, 9047, 9056, 9076, 9077, 9078, 9079, 9080, 9081, 9082, 9083, 9084, 9085, 9086, 9087, 9096, 9097, 9098, 9099, 9116, 9117, 9118, 9119, 9136, 9156, 9157, 9158, 9162, 9163, 9164, 9165, 9166, 9167, 9176, 9177, 9178, 9179, 9196, 9197, 9198, 9199, 9200, 9201, 9216, 9217, 9218, 9219, 9236, 9237, 9238, 9239, 9240, 9241, 9256, 9257, 9258, 9259, 9260, 9261, 9262, 9263, 9264, 9265, 9266, 9267, 9268, 9269, 9270, 9271, 9272, 9273, 9274, 9296, 9297, 9298, 9299, 9316, 9317, 9318, 9319, 9336, 9356, 9376, 9377, 9396, 9397, 9398, 9416, 9436, 9437, 9438, 9439, 9441, 9442, 9443, 9445, 9447, 9448, 9449, 9450, 9451, 9452, 9453, 9454, 9456, 9457, 9458, 9459, 9460, 9461, 9462, 9464, 9465, 9467, 9476, 9477, 9496, 9498, 9499, 9500, 9501, 9502, 9503, 9516, 9517, 9518, 9520, 9521, 9522, 9523, 9524, 9525, 9526, 9527, 9528, 9529, 9536, 9537, 9538, 9539, 9540, 9541, 9543, 9544, 9545, 9546, 9547, 9548, 9549, 9550, 9551, 9552, 9553, 9554, 9555, 9556, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9568, 9580, 9583, 9584, 9596, 9598, 9600, 9601, 9602, 9604, 9605, 9616, 9618, 9619, 9620, 9621, 9622, 9623, 9636, 9637, 9656, 9657, 9660, 9662, 9676, 9677, 9678, 9679, 9680, 9681, 9682, 9683, 9684, 9687, 9688, 9689, 9690, 9691, 9692, 9693, 9694, 9695, 9696, 9697, 9698, 9699, 9700, 9701, 9706, 9707, 9708, 9716, 9717, 9718, 9736, 9776, 9777, 9778, 9779, 9796, 9816, 9817, 9818, 9819, 9836, 9856, 9857, 9858, 9859, 9860, 9861, 9862, 9876, 9877, 9878, 9879, 9916, 9937, 9938, 9956, 9976, 9977, 9978, 9979, 9980, 9981, 9982, 9983, 9984, 9985, 9986, 9987, 9988, 9989, 9990, 9996, 9997, 9998, 9999, 10000, 10016, 10017, 10036, 10037, 10038, 10040, 10041, 10042, 10043, 10045, 10046, 10047, 10048, 10049, 10050, 10051, 10052, 10053, 10054, 10055, 10056, 10057, 10058, 10059, 10060, 10061, 10062, 10063, 10076, 10077, 10078, 10079, 10082, 10083, 10085, 10086, 10088, 10089, 10090, 10096, 10116, 10117, 10118, 10119, 10120, 10136, 10157, 10158, 10159, 10160, 10161, 10162, 10176, 10177, 10179, 10180, 10181, 10182, 10183, 10184, 10196, 10197, 10198, 10199, 10200, 10201, 10202, 10204, 10216, 10217, 10218, 10219, 10220, 10221, 10257, 10258, 10259, 10260, 10261, 10262, 10263, 10264, 10266, 10267, 10268, 10276, 10277, 10278, 10290, 10293, 10296, 10299, 10300, 10301, 10302, 10303, 10304, 10305, 10306, 10307, 10316, 10317, 10318, 10319, 10321, 10322, 10323, 10336, 10337, 10338, 10339, 10340, 10356, 10357, 10358, 10359, 10360, 10361, 10363, 10364, 10366, 10367, 10369, 10370, 10371, 10372, 10373, 10374, 10375, 10376, 10377, 10378, 10379, 10380, 10381, 10382, 10383, 10384, 10385, 10387, 10388, 10389, 10390, 10391, 10393, 10394, 10398, 10399, 10400, 10405, 10406, 10407, 10408, 10409, 10411, 10412, 10413, 10414, 10415, 10416, 10417, 10418, 10419, 10420, 10421, 10422, 10423, 10424, 10425, 10426, 10427, 10428, 10429, 10430, 10431, 10432, 10433, 10435, 10436, 10437, 10438, 10439, 10440, 10441, 10442, 10445, 10447, 10455, 10456, 10460, 10461, 10463, 10464, 10467, 10468, 10469, 10470, 10471, 10472, 10473, 10475, 10476, 10477, 10478, 10479, 10480, 10481, 10482, 10485, 10486, 10487, 10488, 10489, 10491, 10495, 10497, 10498, 10499, 10500, 10502, 10503, 10504, 10505, 10506, 10507, 10508, 10509, 10510, 10516, 10536, 10537, 10538, 10539, 10540, 10541, 10556, 10557, 10558, 10559, 10577, 10578, 10580, 10581, 10582, 10583, 10584, 10596, 10598, 10599, 10600, 10601, 10602, 10603, 10604, 10605, 10606, 10608, 10610, 10611, 10612, 10616, 10617, 10618, 10619, 10636, 10637, 10638, 10639, 10640, 10641, 10642, 10643, 10644, 10645, 10646, 10647, 10648, 10656, 10657, 10658, 10659, 10660, 10661, 10662, 10663, 10664, 10665, 10666, 10667, 10668, 10676, 10678, 10680, 10681, 10682, 10683, 10684, 10685, 10696, 10697, 10698, 10699, 10716, 10717, 10718, 10719, 10720, 10721, 10737, 10738, 10739, 10740, 10741, 10742, 10756, 10757, 10758, 10759, 10760, 10761, 10762, 10776, 10778, 10779, 10780, 10781, 10782, 10799, 10800, 10801, 10802, 10803, 10804, 10805, 10806, 10807, 10808, 10809, 10811, 10812, 10813, 10814, 10816, 10817, 10821, 10822, 10823, 10824, 10825, 10826, 10827, 10828, 10836, 10837, 10838, 10839, 10840, 10856, 10857, 10876, 10877, 10878, 10879, 10880, 10881, 10882, 10896, 10897, 10899, 10901, 10902, 10903, 10904, 10905, 10916, 10917, 10918, 10919, 10920, 10921, 10922, 10923, 10924, 10925, 10926, 10927, 10928, 10929, 10930, 10936, 10937, 10938, 10939, 10940, 10941, 10942, 10943, 10944, 10945, 10946, 10947, 10948, 10949, 10950, 10951, 10952, 10953, 10954, 10955, 10956, 10976, 10977, 10978, 10979, 10980, 10981, 10982, 10983, 10984, 10986, 10987, 10988, 10990, 10991, 10992, 10993, 10996, 10997, 11016, 11017, 11018, 11019, 11020, 11021, 11022, 11023, 11024, 11025, 11026, 11027, 11028, 11029, 11030, 11031, 11032, 11033, 11034, 11035, 11036, 11037, 11038, 11039, 11040, 11041, 11042, 11043, 11044, 11046, 11047, 11048, 11049, 11050, 11051, 11052, 11053, 11054, 11055, 11056, 11057, 11058, 11063, 11064, 11065, 11066, 11067, 11068, 11069, 11070, 11071, 11072, 11073, 11074, 11075, 11076, 11077, 11078, 11079, 11081, 11082, 11083, 11084, 11096, 11097, 11098, 11099, 11100, 11101, 11102, 11103, 11104, 11105, 11106, 11116, 11117, 11118, 11119, 11120, 11121, 11122, 11136, 11137, 11138, 11139, 11140, 11141, 11142, 11143, 11145, 11146, 11147, 11150, 11152, 11153, 11154, 11155, 11156, 11176, 11177, 11178, 11180, 11181, 11182, 11183, 11184, 11185, 11186, 11187, 11188, 11189, 11190, 11191, 11192, 11193, 11194, 11195, 11196, 11197, 11198, 11199, 11200, 11216, 11217, 11218, 11219, 11236, 11256, 11257, 11258, 11259, 11260, 11261, 11262, 11263, 11276, 11277, 11278, 11279, 11280, 11281, 11282, 11283, 11284, 11285, 11286, 11287, 11288, 11289, 11290, 11291, 11296, 11316, 11317, 11318, 11319, 11320, 11321, 11322, 11323, 11324, 11325, 11326, 11327, 11328, 11338, 11339, 11340, 11346, 11347, 11348, 11350, 11351, 11352, 11353, 11355, 11356, 11357, 11359, 11360, 11361, 11365, 11368, 11370, 11371, 11372, 11373, 11374, 11378, 11380, 11382, 11383, 11387, 11388, 11389, 11390, 11391, 11397, 11401, 11406, 11407, 11438, 11439, 11440, 11441, 11442, 11443, 11444, 11445, 11446, 11447, 11448, 11450, 11451, 11452, 11453, 11454, 11455, 11456, 11457, 11458, 11459, 11460, 11461, 11462, 11464, 11465, 11466, 11467, 11469, 11470, 11471, 11472, 11473, 11475, 11476, 11477, 11480, 11483, 11484, 11486, 11487, 11488, 11489, 11490, 11491, 11492, 11496, 11497, 11498, 11501, 11502, 11516, 11517, 11518, 11519, 11520, 11521, 11536, 11546, 11548, 11551, 11552, 11553, 11554, 11555, 11556, 11557, 11558, 11559, 11560, 11561, 11562, 11563, 11564, 11576, 11577, 11578, 11582, 11583, 11596, 11598, 11600, 11602, 11603, 11604, 11605, 11608, 11609, 11610, 11611, 11613, 11614, 11615, 11616, 11620, 11621, 11622, 24368, 11624, 11625, 11626, 11627, 11629, 11636, 11637, 11656, 11657, 11658, 11659, 11661, 11662, 11663, 11664, 11665, 11666, 11667, 11668, 11669, 11671, 11672, 11673, 11675, 11677, 11678, 11679, 11680, 11681, 11682, 11683, 11684, 11685, 11686, 11687, 11688, 11689, 11690, 11696, 11697, 11698, 11699, 11700, 11701, 11702, 11703, 11704, 11705, 11706, 11707, 11708, 11709, 11710, 11711, 11712, 11713, 11714, 11715, 11716, 11717, 11718, 11720, 11721, 11722, 11723, 11724, 11725, 11726, 11727, 11728, 11729, 11730, 11731, 11732, 11733, 11734, 11735, 11736, 11737, 11738, 11739, 11740, 11741, 11744, 11745, 11746, 11747, 11748, 11749, 11750, 11751, 11752, 11753, 11754, 11755, 11756, 11757, 11758, 11776, 11777, 11778, 11781, 11782, 11783, 11784, 11785, 11786, 11787, 11788, 11789, 11790, 11791, 11792, 11793, 11794, 11795, 11796, 11797, 11798, 11799, 11800, 11801, 11802, 11803, 11804, 11805, 11806, 11807, 11808, 11810, 11811, 11812, 11813, 11814, 11815, 11817, 11818, 11819, 11820, 11821, 11822, 11823, 11824, 11825, 11826, 11827, 11828, 11829, 11830, 11831, 11832, 11833, 11834, 11835, 11836, 11837, 11838, 11839, 11840, 11856, 11857, 11858, 11859, 11860, 11861, 11862, 11863, 11864, 11865, 11866, 11867, 11868, 11869, 11870, 11871, 11872, 11873, 11874, 11875, 11876, 11877, 11878, 11880, 11881, 11882, 11883, 11884, 11885, 11886, 11887, 11896, 11897, 11898, 11899, 11900, 11901, 11910, 11911, 11912, 11913, 11914, 11915, 11916, 11917, 11918, 11920, 11921, 11936, 11937, 11939, 11940, 11941, 11942, 11943, 11944, 11945, 11946, 11947, 11948, 11949, 11956, 11957, 11979, 11980, 11981, 11982, 11983, 11988, 11994, 11996, 11997, 11998, 12017, 12018, 12019, 12021, 12022, 12023, 12024, 12025, 12026, 12027, 12028, 12029, 12030, 12031, 12032, 12033, 12034, 12037, 12042, 12043, 12045, 12046, 12047, 12048, 12050, 12051, 12052, 12053, 12056, 12057, 12076, 12096, 12097, 12098, 12099, 12100, 12101, 12116, 12118, 12119, 12120, 12121, 12122, 12123, 12124, 12125, 12126, 12127, 12128, 12129, 12136, 12137, 12138, 12140, 12141, 12143, 12144, 12148, 12149, 12150, 12151, 12152, 12156, 12157, 12158, 12159, 12160, 12178, 12179, 12180, 12196, 12197, 12198, 12199, 12201, 12202, 12203, 12204, 12205, 12206, 12207, 12208, 12216, 12217, 12218, 12219, 12220, 12221, 12222, 12223, 12224, 12225, 12236, 12237, 12238, 12239, 12240, 12241, 12242, 12243, 12244, 12245, 12246, 12247, 12248, 12249, 12250, 12251, 12252, 12253, 12254, 12255, 12256, 12257, 12258, 12259, 12261, 12262, 12263, 12264, 12265, 12276, 12277, 12296, 12297, 12298, 12299, 12319, 12320, 12321, 12322, 12336, 12337, 12338, 12339, 12340, 12341, 12342, 12343, 12344, 12345, 12346, 12347, 12348, 12349, 12350, 12351, 12352, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12387, 12396, 12397, 12416, 12418, 12419, 12420, 12422, 12423, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12435, 12457, 12458, 12459, 12460, 12461, 12463, 12464, 12465, 12467, 12468, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12496, 12497, 12498, 12557, 12576, 12577, 12578, 12579, 12580, 12581, 12596, 12616, 12617, 12636, 12656, 12657, 12658, 12676, 12677, 12678, 12696, 12716, 12717, 12718, 12719, 12720, 12721, 12722, 12723, 12724, 12736, 12737, 12738, 12739, 12740, 12756, 12757, 12759, 12776, 12777, 12778, 12779, 12780, 12781, 12782, 12783, 12784, 12785, 12786, 12787, 12788, 12789, 12790, 12791, 12792, 12793, 12794, 12795, 12796, 12797, 12798, 12799, 12800, 12801, 12802, 12803, 12805, 12806, 12807, 12816, 12818, 12836, 12837, 12856, 12858, 12859, 12860, 12861, 12862, 12863, 12864, 12865, 12866, 12867, 12876, 12877, 12896, 12897, 12899, 12900, 12902, 12903, 12904, 12918, 12919, 12920, 12921, 12922, 12923, 12924, 12925, 12936, 12937, 12938, 12939, 12940, 12941, 12942, 12943, 12944, 12956, 12957, 12958, 12959, 12960, 12961, 12962, 12976, 12977, 12996, 12997, 12998, 12999, 13000, 13016, 13017, 13018, 13019, 13020, 13021, 13022, 13036, 13076, 13078, 13079, 13080, 13081, 13082, 13084, 13085, 13086, 13087, 13088, 13089, 13096, 13097, 13098, 13099, 13116, 13117, 13118, 13136, 13137, 13138, 13139, 13140, 13141, 13142, 13143, 13144, 13145, 13146, 13147, 13149, 13150, 13151, 13152, 13153, 13154, 13155, 13156, 13157, 13158, 13159, 13160, 13161, 13176, 13177, 13178, 13179, 13180, 13181, 13196, 13197, 13216, 13217, 13218, 13219, 13220, 13221, 13236, 13256, 13257, 13276, 13277, 13278, 13279, 13280, 13282, 13283, 13284, 13285, 13296, 13297, 13298, 13299, 13300, 13301, 13316, 13317, 13318, 13319, 13320, 13321, 13322, 13323, 13324, 13325, 13326, 13327, 13328, 13329, 13330, 13331, 13332, 13333, 13334, 13335, 13336, 13337, 13338, 13356, 13357, 13358, 13359, 13377, 13378, 13396, 13397, 13416, 13417, 13418, 13419, 13420, 13421, 13422, 13424, 13425, 13426, 13427, 13428, 13429, 13430, 13431, 13432, 13433, 13434, 13435, 13436, 13437, 13438, 13439, 13440, 13441, 13442, 13443, 13444, 13445, 13446, 13447, 13448, 13449, 13456, 13476, 13524, 13525, 13526, 13527, 13528, 13529, 13530, 13531, 13533, 13534, 13535, 13536, 13537, 13538, 13539, 13540, 13541, 13542, 13543, 13544, 13545, 13546, 13547, 13548, 13549, 13550, 13551, 13552, 13553, 13554, 13555, 13556, 13557, 13576, 13577, 13596, 13597, 13598, 13599, 13601, 13602, 13616, 13617, 13618, 13636, 13656, 13676, 13696, 13697, 13698, 13699, 13716, 13717, 13718, 13736, 13737, 13738, 13739, 13740, 13741, 13742, 13743, 13756, 13776, 13777, 13778, 13796, 13797, 13798, 13816, 13817, 13836, 13837, 13839, 13840, 13841, 13842, 13843, 13876, 13896, 13916, 13917, 13936, 13956, 13957, 13958, 13959, 13976, 13996, 14020, 14021, 14022, 14023, 14024, 14025, 14026, 14027, 14028, 14029, 14030, 14031, 14041, 14081, 14121, 14122, 14123, 14182, 14183, 14185, 14186, 14187, 14188, 14221, 14222, 14223, 14224, 14225, 14226, 14227, 14228, 14229, 14230, 14231, 14232, 14233, 14234, 14235, 14236, 14237, 14241, 14242, 14262, 14263, 14264, 14266, 14267, 14268, 14269, 14270, 14271, 14272, 14273, 14275, 14276, 14277, 14278, 14279, 14280, 14281, 14282, 14283, 14284, 14285, 14301, 14303, 14304, 14305, 14308, 14321, 14322, 14323, 14324, 14325, 14326, 14327, 14329, 14330, 14331, 14332, 14333, 14334, 14335, 14336, 14337, 14338, 14339, 14340, 14342, 14343, 14344, 14345, 14347, 14348, 14349, 14350, 14351, 14353, 14354, 14355, 14356, 14357, 14358, 14361, 14362, 14363, 14364, 14365, 14366, 14367, 14368, 14369, 14370, 14371, 14372, 14373, 14374, 14375, 14376, 14377, 14378, 14379, 14380, 14381, 14382, 14383, 14385, 14386, 14387, 14388, 14389, 14390, 14392, 14393, 14394, 14395, 14396, 14397, 14398, 14399, 14400, 14401, 14402, 14403, 14404, 14421, 14423, 14424, 14425, 14426, 14427, 14428, 14429, 14430, 14431, 14432, 14433, 14434, 14435, 14436, 14437, 14438, 14439, 14440, 14441, 14442, 14444, 14445, 14446, 14447, 14448, 14449, 14450, 14451, 14452, 14453, 14454, 14455, 14456, 14457, 14458, 14459, 14460, 14461, 14462, 14463, 14464, 14465, 14466, 14467, 14469, 14470, 14471, 14472, 14473, 14474, 14475, 14476, 14477, 14478, 14479, 14480, 14481, 14482, 14483, 14484, 14485, 14486, 14487, 14488, 14489, 14490, 14491, 14492, 14494, 14495, 14496, 14497, 14498, 14499, 14500, 14502, 14503, 14504, 14505, 14506, 14507, 14508, 14509, 14510, 14511, 14512, 14513, 14514, 14515, 14516, 14517, 14518, 14519, 14520, 14521, 14522, 14523, 14524, 14525, 14526, 14527, 14528, 14529, 14530, 14531, 14532, 14533, 14534, 14535, 14536, 14538, 14539, 14540, 14541, 14542, 14543, 14544, 14545, 14546, 14547, 14548, 14549, 14550, 14551, 14552, 14553, 14555, 14556, 14557, 14558, 14559, 14560, 14561, 14564, 14565, 14566, 14567, 14568, 14581, 14601, 14602, 14603, 14604, 14621, 14622, 14624, 14625, 14626, 14627, 14628, 14634, 14637, 14638, 14639, 14640, 14645, 14646, 14661, 14662, 14663, 14664, 14666, 14667, 14668, 14686, 14693, 14715, 14717, 14718, 14720, 14721, 14722, 14723, 14724, 14725, 14726, 14727, 14728, 14729, 14730, 14731, 14732, 14733, 14734, 14736, 14737, 14738, 14739, 14740, 14741, 14742, 14743, 14744, 14745, 14748, 14750, 14751, 14752, 14753, 14754, 14757, 14758, 14762, 14763, 14764, 14765, 14766, 14767, 14768, 14769, 14770, 14771, 14772, 14773, 14774, 14775, 14776, 14777, 14781, 14821, 14822, 14823, 14825, 14826, 14827, 14828, 14829, 14832, 14833, 14834, 14841, 14842, 14843, 14844, 14845, 14846, 14847, 14848, 14849, 14850, 14857, 14859, 14860, 14861, 14862, 14864, 14865, 14866, 14867, 14868, 14869, 14871, 14872, 14873, 14874, 14875, 14876, 14878, 14880, 14881, 14882, 14883, 14884, 14887, 14888, 14889, 14890, 14892, 14893, 14894, 14901, 14902, 14903, 14904, 14905, 14908, 14909, 14910, 14911, 14912, 14921, 14942, 14943, 14944, 14945, 14946, 14947, 14948, 14961, 14962, 14963, 14964, 14965, 14981, 14982, 14983, 14984, 14986, 14987, 14988, 14989, 14990, 14991, 14994, 15001, 15002, 15003, 15004, 15005, 15006, 15007, 15008, 15009, 15010, 15011, 15012, 15021, 15022, 15041, 15042, 15043, 15045, 15046, 15047, 15061, 15062, 15063, 15064, 15065, 15066, 15067, 15068, 15069, 15070, 15071, 15072, 15073, 15074, 15075, 15076, 15077, 15078, 15079, 15080, 15082, 15083, 15084, 15086, 15087, 15088, 15089, 15090, 15091, 15101, 15102, 15103, 15104, 15105, 15106, 15107, 15108, 15109, 15111, 15112, 15113, 15114, 15115, 15116, 15117, 15119, 15122, 15124, 15125, 15126, 15127, 15128, 15130, 15131, 15136, 15137, 15138, 15140, 15141, 15146, 15162, 15163, 15164, 15165, 15168, 15169, 15170, 15171, 15172, 15174, 15175, 15176, 15177, 15178, 15179, 15180, 15181, 15182, 15183, 15184, 15185, 15186, 15187, 15188, 15189, 15190, 15191, 15192, 15193, 15194, 15195, 15196, 15197, 15198, 15199, 15200, 15201, 15202, 15203, 15204, 15205, 15206, 15207, 15208, 15209, 15211, 15212, 15213, 15215, 15218, 15220, 15221, 15222, 15224, 15229, 15230, 15233, 15235, 15236, 15240, 15241, 15242, 15246, 15247, 15249, 15250, 15252, 15260, 15261, 15262, 15263, 15264, 15270, 15271, 15273, 15274, 15275, 15276, 15277, 15278, 15279, 15280, 15281, 15282, 15283, 15284, 15285, 15286, 15287, 15288, 15289, 15290, 15291, 15292, 15293, 15294, 15295, 15296, 15297, 15298, 15299, 15300, 15301, 15302, 15303, 15304, 15305, 15306, 15307, 15308, 15309, 15310, 15311, 15312, 15315, 15316, 15318, 15319, 15320, 15323, 15324, 15325, 15327, 15333, 15334, 15335, 15336, 15338, 15339, 15340, 15341, 15343, 15344, 15348, 15350, 15351, 15352, 15353, 15354, 15355, 15358, 15362, 15363, 15366, 15367, 15369, 15370, 15371, 15372, 15378, 15379, 15380, 15381, 15384, 15385, 15386, 15387, 15388, 15389, 15390, 15391, 15392, 15395, 15397, 15398, 15399, 15400, 15401, 15402, 15403, 15404, 15405, 15406, 15407, 15408, 15409, 15415, 15416, 15417, 15418, 15419, 15420, 15428, 15429, 15430, 15433, 15438, 15439, 15440, 15441, 15442, 15443, 15444, 15447, 15458, 15461, 15462, 15463, 15464, 15467, 15468, 15470, 15471, 15473, 15474, 15476, 15477, 15478, 15479, 15480, 15482, 15483, 15484, 15487, 15489, 15491, 15492, 15493, 15494, 15496, 15497, 15498, 15499, 15500, 15501, 15502, 15503, 15504, 15505, 15508, 15509, 15510, 15511, 15513, 15515, 15516, 15517, 15521, 15526, 15527, 15528, 15537, 15538, 15540, 15541, 15542, 15543, 15544, 15546, 15547, 15548, 15549, 15550, 15551, 15554, 15555, 15556, 15557, 15558, 15559, 15560, 15561, 15562, 15563, 15564, 15565, 15566, 15567, 15568, 15569, 15570, 15572, 15573, 15574, 15575, 15576, 15577, 15578, 15579, 15580, 15581, 15582, 15583, 15584, 15585, 15586, 15587, 15588, 15589, 15592, 15593, 15594, 15595, 15596, 15597, 15598, 15599, 15600, 15601, 15602, 15603, 15604, 15605, 15606, 15607, 15608, 15612, 15613, 15614, 15615, 15616, 15617, 15620, 15621, 15622, 15624, 15630, 15631, 15635, 15636, 15637, 15638, 15641, 15642, 15643, 15644, 15645, 15647, 15648, 15649, 15650, 15651, 15652, 15654, 15655, 15656, 15657, 15658, 15659, 15664, 15665, 15667, 15668, 15669, 15670, 15675, 15676, 15677, 15678, 15679, 15681, 15682, 15683, 15684, 15686, 15687, 15688, 15689, 15690, 15691, 15692, 15696, 15698, 15699, 15700, 15702, 15704, 15706, 15707, 15708, 15714, 15715, 15716, 15718, 15722, 15725, 15726, 15727, 15728, 15732, 15739, 15740, 15741, 15742, 15743, 15744, 15745, 15760, 15761, 15762, 15763, 15764, 15765, 15766, 15767, 15768, 15802, 15803, 15818, 15852, 15853, 15854, 15857, 15858, 15859, 15862, 15866, 15868, 15869, 15870, 15871, 15882, 15883, 15891, 15892, 15893, 15894, 15895, 15897, 15898, 15903, 15904, 15910, 15918, 15920, 15921, 15924, 15928, 15929, 15930, 15931, 15932, 15936, 15937, 15938, 15939, 15940, 15941, 15942, 15945, 15946, 15948, 15949, 15950, 15951, 15952, 15953, 15954, 15956, 15958, 15962, 15963, 15964, 15965, 15966, 15967, 15968, 15969, 15970, 15971, 15974, 15975, 15976, 15977, 15978, 15979, 15980, 15981, 15984, 15989, 15990, 15991, 16006, 16011, 16012, 16013, 16014, 16015, 16016, 16017, 16018, 16020, 16021, 16022, 16024, 16025, 16028, 16029, 16030, 16031, 16032, 16033, 16034, 16036, 16037, 16042, 16043, 16044, 16045, 16046, 16047, 16048, 16059, 16060, 16061, 16062, 16063, 16064, 16065, 16067, 16068, 16069, 16070, 16073, 16076, 16079, 16080, 16081, 16085, 16090, 16091, 16094, 16096, 16097, 16101, 16102, 16103, 16104, 16112, 16113, 16114, 16115, 16116, 16117, 16118, 16119, 16127, 16131, 16132, 16133, 16134, 16135, 16143, 16144, 16145, 16146, 16147, 16149, 16151, 16152, 16153, 16154, 16156, 16157, 16158, 16159, 16160, 16161, 16162, 16163, 16164, 16165, 16166, 16167, 16168, 16169, 16170, 16171, 16173, 16174, 16175, 16176, 16177, 16178, 16179, 16180, 16183, 16185, 16186, 16187, 16189, 16191, 16192, 16193, 16194, 16196, 16197, 16198, 16199, 16200, 16201, 16202, 16203, 16204, 16205, 16206, 16208, 16209, 16210, 16213, 16215, 16216, 16217, 16218, 16219, 16220, 16221, 16222, 16224, 16225, 16226, 16227, 16228, 16229, 16230, 16231, 16232, 16236, 16237, 16238, 16239, 16240, 16241, 16242, 16243, 16244, 16245, 16246, 16247, 16248, 16249, 16250, 16251, 16252, 16253, 16254, 16256, 16257, 16258, 16259, 16260, 16261, 16262, 16263, 16264, 16266, 16267, 16268, 16269, 16270, 16271, 16272, 16273, 16274, 16275, 16276, 16277, 16278, 16279, 16280, 16283, 16287, 16288, 16289, 16290, 16291, 16292, 16293, 16294, 16295, 16297, 16298, 16299, 16300, 16301, 16302, 16303, 16304, 16305, 16307, 16308, 16309, 16310, 16311, 16313, 16314, 16315, 16316, 16317, 16318, 16319, 16320, 16321, 16322, 16323, 16324, 16325, 16326, 16327, 16328, 16329, 16330, 16331, 16332, 16333, 16334, 16335, 16336, 16337, 16338, 16339, 16340, 16341, 16342, 16343, 16344, 16345, 16346, 16347, 16348, 16349, 16350, 16351, 16352, 16353, 16354, 16355, 16357, 16358, 16361, 16362, 16364, 16365, 16366, 16367, 16368, 16371, 16372, 16375, 16376, 16377, 16379, 16380, 16381, 16382, 16383, 16384, 16385, 16386, 16387, 16388, 16389, 16390, 16392, 16394, 16395, 16396, 16397, 16398, 16399, 16400, 16401, 16402, 16403, 16404, 16405, 16406, 16407, 16408, 16409, 16410, 16411, 16412, 16414, 16415, 16416, 16417, 16418, 16424, 16425, 16426, 16431, 16438, 16441, 16442, 16443, 16444, 16446, 16447, 16448, 16449, 16451, 16452, 16453, 16457, 16458, 16459, 16460, 16461, 16462, 16463, 16464, 16465, 16466, 16467, 16468, 16469, 16470, 16471, 16472, 16473, 16474, 16475, 16476, 16477, 16478, 16479, 16480, 16481, 16482, 16483, 16484, 16485, 16488, 16489, 16490, 16491, 16492, 16493, 16494, 16495, 16499, 16500, 16501, 16502, 16503, 16504, 16505, 16506, 16507, 16514, 16516, 16517, 16518, 16519, 16520, 16521, 16522, 16523, 16524, 16525, 16526, 16528, 16529, 16530, 16531, 16534, 16535, 16537, 16539, 16540, 16541, 16542, 16543, 16544, 16545, 16546, 16547, 16548, 16549, 16550, 16551, 16553, 16554, 16568, 16573, 16574, 16575, 16576, 16577, 16578, 16579, 16580, 16582, 16583, 16584, 16585, 16586, 16587, 16588, 16589, 16590, 16591, 16592, 16593, 16594, 16595, 16596, 16597, 16598, 16599, 16600, 16601, 16602, 16603, 16604, 16610, 16611, 16612, 16613, 16615, 16616, 16617, 16618, 16619, 16620, 16621, 16623, 16624, 16625, 16626, 16627, 16628, 16629, 16631, 16632, 16633, 16634, 16635, 16636, 16637, 16638, 16639, 16640, 16641, 16642, 16643, 16644, 16646, 16647, 16648, 16649, 16650, 16651, 16652, 16653, 16654, 16655, 16656, 16657, 16658, 16659, 16660, 16662, 16663, 16664, 16665, 16666, 16667, 16668, 16669, 16670, 16671, 16672, 16673, 16674, 16675, 16676, 16677, 16678, 16679, 16680, 16681, 16683, 16684, 16685, 16686, 16687, 16688, 16689, 16690, 16691, 16692, 16693, 16694, 16695, 16696, 16697, 16698, 16699, 16700, 16701, 16702, 16703, 16704, 16705, 16706, 16707, 16708, 16709, 16710, 16712, 16713, 16714, 16715, 16716, 16718, 16719, 16721, 16722, 16723, 16724, 16725, 16726, 16727, 16728, 16729, 16731, 16732, 16733, 16734, 16735, 16736, 16738, 16739, 16740, 16741, 16742, 16743, 16744, 16745, 16746, 16747, 16748, 16749, 16750, 16751, 16752, 16753, 16755, 16756, 16757, 16761, 16762, 16763, 16764, 16765, 16766, 16767, 16768, 16769, 16771, 16772, 16773, 16774, 16775, 16776, 16777, 16778, 16779, 16780, 16781, 16782, 16786, 16787, 16788, 16789, 16790, 16791, 16792, 16793, 16794, 16795, 16796, 16797, 16798, 16799, 16800, 16801, 16802, 16803, 16804, 16805, 16806, 16807, 16808, 16809, 16810, 16811, 16812, 16813, 16814, 16815, 16816, 16817, 16818, 16819, 16820, 16821, 16822, 16823, 16824, 16825, 16826, 16827, 16828, 16829, 16830, 16831, 16832, 16833, 16834, 16835, 16836, 16837, 16838, 16839, 16840, 16841, 16842, 16843, 16844, 16845, 16846, 16847, 16848, 16850, 16851, 16852, 16854, 16855, 16856, 16857, 16858, 16859, 16860, 16862, 16863, 16864, 16865, 16866, 16867, 16870, 16871, 16873, 16876, 16878, 16879, 16880, 16884, 16885, 16886, 16887, 16888, 16896, 16897, 16898, 16899, 16901, 16903, 16904, 16905, 16906, 16907, 16911, 16912, 16914, 16915, 16916, 16917, 16918, 16919, 16920, 16921, 16922, 16923, 16924, 16925, 16927, 16928, 16929, 16932, 16933, 16934, 16937, 16938, 16939, 16943, 16944, 16945, 16946, 16947, 16948, 16949, 16950, 16951, 16952, 16954, 16959, 16960, 16964, 16966, 16967, 16968, 16971, 16972, 16973, 16974, 16975, 16976, 16977, 16978, 16980, 16991, 16992, 16993, 16994, 16995, 16996, 16998, 17000, 17001, 17002, 17003, 17004, 17005, 17006, 17007, 17008, 17014, 17015, 17023, 17034, 17035, 17038, 17039, 17041, 17046, 17047, 17048, 17049, 17050, 17051, 17052, 17053, 17056, 17057, 17058, 17059, 17060, 17062, 17066, 17067, 17068, 17069, 17070, 17071, 17072, 17073, 17074, 17076, 17077, 17079, 17080, 17083, 17084, 17085, 17086, 17087, 17088, 17089, 17090, 17092, 17093, 17094, 17095, 17096, 17097, 17098, 17099, 17100, 17101, 17102, 17103, 17104, 17105, 17106, 17108, 17109, 17110, 17111, 17112, 17113, 17114, 17115, 17116, 17117, 17119, 17120, 17121, 17122, 17123, 17124, 17125, 17126, 17127, 17128, 17129, 17130, 17131, 17132, 17133, 17134, 17135, 17136, 17137, 17138, 17139, 17141, 17142, 17143, 17144, 17146, 17147, 17148, 17149, 17150, 17151, 17152, 17153, 17154, 17155, 17156, 17157, 17158, 17159, 17160, 17161, 17167, 17168, 17169, 17170, 17171, 17172, 17173, 17174, 17175, 17176, 17178, 17179, 17180, 17181, 17182, 17183, 17184, 17185, 17186, 17187, 17188, 17189, 17190, 17191, 17192, 17193, 17194, 17195, 17196, 17197, 17199, 17200, 17201, 17202, 17203, 17204, 17205, 17206, 17208, 17209, 17210, 17211, 17212, 17213, 17214, 17215, 17216, 17217, 17218, 17219, 17220, 17222, 17223, 17224, 17225, 17226, 17228, 17229, 17230, 17231, 17232, 17233, 17234, 17235, 17236, 17238, 17240, 17241, 17242, 17243, 17244, 17245, 17246, 17247, 17248, 17249, 17250, 17251, 17252, 17253, 17255, 17256, 17257, 17259, 17260, 17262, 17263, 17264, 17265, 17266, 17267, 17268, 17269, 17270, 17271, 17272, 17274, 17275, 17276, 17277, 17278, 17279, 17280, 17281, 17282, 17283, 17285, 17287, 17290, 17291, 17293, 17296, 17298, 17299, 17300, 17303, 17304, 17305, 17306, 17307, 17308, 17309, 17310, 17311, 17312, 17314, 17316, 17317, 17318, 17320, 17321, 17322, 17323, 17324, 17325, 17326, 17327, 17328, 17329, 17330, 17331, 17333, 17334, 17336, 17337, 17338, 17339, 17340, 17341, 17342, 17343, 17344, 17345, 17346, 17347, 17348, 17349, 17350, 17352, 17353, 17355, 17356, 17357, 17358, 17359, 17360, 17361, 17362, 17363, 17364, 17370, 17371, 17372, 17373, 17374, 17375, 17377, 17378, 17379, 17380, 17381, 17391, 17392, 17393, 17395, 17397, 17398, 17399, 17400, 17401, 17402, 17403, 17404, 17405, 17406, 17407, 17408, 17409, 17410, 17412, 17413, 17414, 17416, 17417, 17418, 17420, 17421, 17423, 17424, 17425, 17426, 17427, 17429, 17431, 17432, 17433, 17434, 17435, 17436, 17437, 17438, 17439, 17440, 17441, 17442, 17443, 17444, 17445, 17446, 17447, 17448, 17452, 17453, 17455, 17459, 17461, 17462, 17464, 17465, 17467, 17468, 17469, 17471, 17473, 17474, 17475, 17477, 17478, 17479, 17480, 17481, 17482, 17483, 17484, 17485, 17486, 17487, 17488, 17489, 17490, 17491, 17493, 17494, 17495, 17496, 17499, 17500, 17503, 17504, 17505, 17508, 17509, 17510, 17511, 17512, 17513, 17514, 17517, 17518, 17519, 17520, 17521, 17522, 17523, 17524, 17525, 17527, 17528, 17529, 17530, 17531, 17532, 17535, 17536, 17537, 17538, 17539, 17540, 17541, 17542, 17543, 17544, 17545, 17546, 17547, 17548, 17549, 17550, 17551, 17552, 17553, 17554, 17555, 17556, 17557, 17558, 17578, 17584, 17585, 17586, 17587, 17588, 17589, 17591, 17592, 17598, 17599, 17600, 17603, 17604, 17606, 17607, 17608, 17609, 17610, 17611, 17612, 17613, 17614, 17621, 17622, 17623, 17624, 17626, 17627, 17628, 17629, 17630, 17631, 17632, 17633, 17634, 17635, 17636, 17637, 17642, 17645, 17647, 17649, 17651, 17653, 17654, 17655, 17656, 17657, 17658, 17659, 17660, 17661, 17662, 17663, 17664, 17666, 17667, 17669, 17670, 17671, 17673, 17674, 17676, 17678, 17680, 17681, 17682, 17683, 17684, 17686, 17687, 17689, 17690, 17693, 17694, 17695, 17696, 17698, 17701, 17702, 17703, 17704, 17705, 17707, 17710, 17711, 17712, 17713, 17714, 17715, 17716, 17717, 17718, 17719, 17720, 17721, 17722, 17723, 17724, 17725, 17726, 17727, 17728, 17729, 17730, 17731, 17732, 17734, 17735, 17765, 17766, 17767, 17768, 17769, 17770, 17771, 17772, 17773, 17794, 17795, 17796, 17797, 17798, 17799, 17800, 17801, 17802, 17803, 17804, 17805, 17807, 17808, 17814, 17815, 17816, 17817, 17819, 17820, 17822, 17824, 17825, 17826, 17827, 17830, 17831, 17832, 17833, 17834, 17835, 17836, 17837, 17838, 17839, 17840, 17841, 17842, 17843, 17844, 17845, 17846, 17847, 17848, 17849, 17850, 17852, 17853, 17855, 17856, 17857, 17858, 17860, 17862, 17865, 17866, 17870, 17871, 17874, 17875, 17876, 17877, 17878, 17879, 17880, 17881, 17882, 17883, 17884, 17885, 17886, 17887, 17888, 17889, 17890, 17892, 17893, 17894, 17895, 17896, 17897, 17898, 17899, 17900, 17901, 17904, 17909, 17915, 17917, 17918, 17919, 17920, 17921, 17922, 17923, 17924, 17925, 17926, 17927, 17928, 17929, 17930, 17931, 17932, 17933, 17934, 17935, 17936, 17937, 17938, 17940, 17941, 17942, 17943, 17944, 17945, 17947, 17948, 17951, 17952, 17953, 17954, 17955, 17956, 17957, 17958, 17959, 17960, 17961, 17962, 17963, 17964, 17968, 17969, 17972, 17974, 17975, 17976, 17977, 17978, 17979, 17980, 17981, 17982, 17983, 17984, 17985, 17986, 17987, 17988, 17989, 17990, 17991, 17992, 17993, 17994, 17995, 17996, 17998, 17999, 18000, 18002, 18003, 18004, 18005, 18006, 18007, 18008, 18009, 18010, 18011, 18012, 18013, 18014, 18015, 18016, 18017, 18018, 18019, 18020, 18021, 18022, 18023, 18024, 18025, 18026, 18027, 18028, 18029, 18030, 18031, 18032, 18033, 18034, 18035, 18037, 18038, 18039, 18042, 18043, 18044, 18046, 18062, 18063, 18064, 18065, 18066, 18067, 18068, 18069, 18070, 18071, 18072, 18073, 18074, 18075, 18076, 18077, 18079, 18080, 18086, 18087, 18088, 18089, 18090, 18091, 18092, 18093, 18094, 18096, 18097, 18098, 18099, 18100, 18101, 18102, 18103, 18105, 18106, 18109, 18110, 18113, 18114, 18115, 18116, 18117, 18118, 18119, 18120, 18121, 18122, 18123, 18124, 18125, 18126, 18127, 18128, 18129, 18130, 18131, 18132, 18133, 18134, 18135, 18136, 18137, 18138, 18139, 18140, 18141, 18142, 18143, 18144, 18145, 18146, 18147, 18150, 18151, 18152, 18155, 18159, 18160, 18161, 18162, 18165, 18166, 18167, 18168, 18170, 18171, 18172, 18173, 18174, 18175, 18176, 18177, 18179, 18180, 18181, 18182, 18183, 18185, 18186, 18187, 18188, 18189, 18190, 18191, 18192, 18194, 18196, 18197, 18199, 18200, 18201, 18202, 18203, 18204, 18205, 18206, 18207, 18208, 18209, 18210, 18211, 18212, 18213, 18214, 18215, 18218, 18220, 18221, 18222, 18223, 18224, 18225, 18226, 18228, 18229, 18230, 18231, 18232, 18233, 18234, 18235, 18236, 18237, 18238, 18240, 18242, 18243, 18244, 18245, 18246, 18247, 18248, 18249, 18250, 18251, 18252, 18253, 18255, 18256, 18257, 18258, 18259, 18260, 18261, 18262, 18263, 18264, 18265, 18266, 18267, 18272, 18273, 18274, 18275, 18276, 18277, 18278, 18280, 18281, 18282, 18283, 18285, 18286, 18289, 18290, 18292, 18293, 18294, 18295, 18296, 18297, 18298, 18299, 18300, 18301, 18302, 18303, 18305, 18306, 18307, 18308, 18309, 18311, 18312, 18313, 18314, 18315, 18317, 18318, 18319, 18320, 18321, 18322, 18323, 18325, 18326, 18327, 18328, 18331, 18332, 18333, 18334, 18335, 18336, 18337, 18338, 18340, 18341, 18342, 18343, 18344, 18345, 18346, 18347, 18348, 18349, 18350, 18351, 18352, 18353, 18354, 18357, 18358, 18359, 18360, 18362, 18363, 18364, 18365, 18369, 18370, 18371, 18372, 18373, 18374, 18375, 18376, 18377, 18378, 18379, 18380, 18381, 18382, 18383, 18384, 18385, 18386, 18387, 18388, 18389, 18390, 18391, 18392, 18393, 18394, 18395, 18396, 18397, 18398, 18399, 18400, 18401, 18402, 18404, 18405, 18406, 18407, 18408, 18409, 18411, 18412, 18413, 18414, 18415, 18416, 18417, 18418, 18419, 18420, 18421, 18422, 18423, 18424, 18426, 18427, 18428, 18429, 18430, 18431, 18437, 18438, 18439, 18440, 18441, 18442, 18443, 18444, 18445, 18446, 18447, 18448, 18449, 18450, 18451, 18452, 18453, 18454, 18455, 18456, 18457, 18458, 18459, 18460, 18461, 18462, 18463, 18464, 18465, 18466, 18467, 18468, 18469, 18470, 18471, 18472, 18473, 18475, 18476, 18477, 18478, 18480, 18481, 18482, 18483, 18484, 18485, 18486, 18487, 18488, 18489, 18490, 18491, 18492, 18493, 18494, 18495, 18496, 18497, 18498, 18499, 18500, 18501, 18502, 18503, 18504, 18506, 18507, 18521, 18524, 18525, 18527, 18530, 18531, 18532, 18533, 18535, 18536, 18537, 18538, 18539, 18540, 18541, 18542, 18543, 18544, 18545, 18547, 18548, 18549, 18553, 18554, 18555, 18556, 18557, 18558, 18559, 18560, 18563, 18564, 18565, 18566, 18567, 18568, 18581, 18583, 18584, 18585, 18586, 18587, 18588, 18589, 18590, 18593, 18594, 18595, 18596, 18597, 18598, 18600, 18622, 18625, 18626, 18627, 18628, 18629, 18631, 18632, 18633, 18634, 18635, 18636, 18637, 18638, 18639, 18640, 18641, 18642, 18644, 18646, 18647, 18648, 18649, 18650, 18651, 18652, 18653, 18654, 18655, 18656, 18657, 18658, 18659, 18660, 18661, 18662, 18663, 18664, 18666, 18667, 18668, 18669, 18670, 18671, 18672, 18673, 18674, 18675, 18676, 18677, 18678, 18680, 18681, 18682, 18683, 18685, 18686, 18687, 18688, 18690, 18693, 18694, 18696, 18698, 18700, 18701, 18702, 18703, 18704, 18705, 18706, 18707, 18708, 18712, 18713, 18714, 18715, 18716, 18717, 18718, 18719, 18720, 18722, 18723, 18724, 18725, 18726, 18727, 18728, 18729, 18730, 18731, 18732, 18733, 18734, 18735, 18736, 18737, 18743, 18744, 18745, 18747, 18748, 18749, 18750, 18751, 18752, 18753, 18754, 18755, 18756, 18757, 18758, 18759, 18760, 18761, 18762, 18763, 18764, 18765, 18766, 18768, 18771, 18772, 18773, 18774, 18775, 18776, 18777, 18778, 18779, 18781, 18782, 18785, 18788, 18789, 18790, 18791, 18792, 18793, 18794, 18795, 18796, 18797, 18798, 18799, 18800, 18802, 18803, 18804, 18805, 18807, 18808, 18809, 18810, 18811, 18812, 18813, 18814, 18815, 18816, 18817, 18818, 18821, 18822, 18823, 18824, 18825, 18826, 18827, 18828, 18829, 18830, 18831, 18832, 18834, 18835, 18836, 18838, 18839, 18840, 18841, 18842, 18843, 18847, 18848, 18849, 18850, 18852, 18853, 18855, 18856, 18857, 18858, 18859, 18860, 18864, 18865, 18866, 18867, 18869, 18870, 18872, 18873, 18875, 18877, 18879, 18880, 18881, 18882, 18883, 18884, 18885, 18886, 18887, 18888, 18891, 18892, 18893, 18894, 18895, 18896, 18897, 18898, 18899, 18900, 18901, 18902, 18903, 18904, 18905, 18906, 18907, 18908, 18909, 18910, 18911, 18912, 18913, 18914, 18915, 18916, 18917, 18918, 18919, 18921, 18922, 18924, 18926, 18927, 18928, 18929, 18930, 18931, 18933, 18934, 18937, 18938, 18939, 18940, 18942, 18943, 18944, 18945, 18946, 18947, 18948, 18949, 18950, 18951, 18952, 18953, 18954, 18955, 18956, 18957, 18959, 18960, 18962, 18963, 18964, 18965, 18966, 18967, 18968, 18969, 18970, 18971, 18972, 18973, 18974, 18975, 18976, 18977, 18978, 18981, 18982, 18983, 18984, 18985, 18986, 18987, 18988, 18989, 18990, 18991, 18992, 18993, 18994, 18995, 18996, 18997, 18998, 18999, 19000, 19001, 19002, 19003, 19004, 19005, 19006, 19007, 19008, 19009, 19011, 19012, 19013, 19014, 19015, 19016, 19017, 19018, 19019, 19020, 19021, 19022, 19023, 19024, 19025, 19026, 19027, 19028, 19029, 19030, 19032, 19033, 19034, 19035, 19038, 19041, 19042, 19043, 19044, 19045, 19046, 19047, 19048, 19049, 19050, 19051, 19052, 19053, 19055, 19056, 19063, 19064, 19065, 19067, 19068, 19071, 19073, 19074, 19075, 19076, 19077, 19120, 19133, 19136, 19137, 19138, 19139, 19140, 19141, 19142, 19144, 19147, 19148, 19149, 19150, 19151, 19152, 19153, 19154, 19155, 19156, 19157, 19158, 19159, 19161, 19162, 19163, 19164, 19165, 19166, 19167, 19168, 19169, 19170, 19171, 19172, 19173, 19174, 19175, 19176, 19177, 19178, 19179, 19180, 19181, 19182, 19183, 19184, 19185, 19186, 19187, 19188, 19189, 19190, 19191, 19192, 19193, 19194, 19195, 19196, 19197, 19201, 19202, 19203, 19204, 19205, 19206, 19207, 19208, 19209, 19210, 19211, 19212, 19213, 19215, 19216, 19217, 19218, 19219, 19220, 19221, 19222, 19223, 19224, 19225, 19226, 19227, 19229, 19231, 19232, 19234, 19235, 19236, 19238, 19239, 19240, 19241, 19242, 19243, 19244, 19245, 19246, 19248, 19249, 19250, 19251, 19252, 19253, 19254, 19255, 19256, 19257, 19258, 19259, 19261, 19263, 19264, 19265, 19266, 19270, 19271, 19272, 19273, 19274, 19275, 19276, 19277, 19278, 19279, 19280, 19281, 19282, 19283, 19284, 19289, 19291, 19292, 19293, 19294, 19295, 19296, 19297, 19298, 19299, 19300, 19301, 19302, 19303, 19304, 19305, 19306, 19307, 19308, 19309, 19310, 19312, 19314, 19315, 19316, 19317, 19318, 19319, 19321, 19324, 19326, 19328, 19329, 19330, 19331, 19332, 19333, 19335, 19336, 19337, 19338, 19339, 19340, 19341, 19342, 19343, 19344, 19345, 19346, 19348, 19349, 19350, 19351, 19352, 19353, 19354, 19355, 19358, 19359, 19361, 19362, 19363, 19364, 19367, 19368, 19369, 19370, 19371, 19372, 19373, 19374, 19375, 19376, 19377, 19378, 19379, 19380, 19381, 19382, 19383, 19384, 19387, 19388, 19389, 19390, 19392, 19393, 19394, 19395, 19397, 19398, 19399, 19400, 19401, 19402, 19405, 19408, 19409, 19410, 19411, 19412, 19413, 19414, 19415, 19416, 19417, 19419, 19420, 19421, 19422, 19423, 19424, 19425, 19426, 19427, 19428, 19429, 19432, 19433, 19434, 19435, 19436, 19437, 19438, 19439, 19440, 19441, 19442, 19443, 19444, 19445, 19446, 19447, 19449, 19450, 19451, 19452, 19453, 19455, 19456, 19457, 19458, 19459, 19460, 19461, 19464, 19466, 19467, 19468, 19469, 19470, 19471, 19472, 19473, 19474, 19475, 19476, 19477, 19478, 19479, 19480, 19481, 19482, 19483, 19484, 19485, 19486, 19488, 19489, 19493, 19494, 19495, 19496, 19497, 19498, 19499, 19500, 19501, 19502, 19503, 19504, 19505, 19506, 19507, 19508, 19509, 19510, 19511, 19512, 19513, 19514, 19516, 19517, 19518, 19519, 19520, 19521, 19523, 19524, 19525, 19526, 19527, 19528, 19529, 19530, 19531, 19532, 19533, 19534, 19535, 19536, 19537, 19538, 19539, 19540, 19541, 19542, 19543, 19544, 19545, 19546, 19547, 19548, 19549, 19550, 19551, 19554, 19555, 19556, 19557, 19558, 19559, 19560, 19561, 19562, 19565, 19568, 19569, 19570, 19571, 19572, 19573, 19574, 19575, 19576, 19578, 19579, 19580, 19581, 19582, 19583, 19588, 19589, 19590, 19592, 19593, 19594, 19595, 19597, 19598, 19599, 19604, 19606, 19607, 19608, 19610, 19612, 19616, 19617, 19618, 19619, 19620, 19621, 19622, 19623, 19624, 19625, 19626, 19627, 19628, 19629, 19631, 19632, 19633, 19634, 19635, 19640, 19641, 19642, 19643, 19644, 19645, 19646, 19647, 19648, 19649, 19651, 19652, 19653, 19654, 19655, 19656, 19657, 19658, 19659, 19660, 19661, 19662, 19663, 19664, 19665, 19666, 19667, 19668, 19669, 19670, 19671, 19672, 19673, 19674, 19675, 19676, 19677, 19678, 19679, 19680, 19681, 19682, 19683, 19684, 19685, 19686, 19687, 19688, 19689, 19690, 19692, 19693, 19694, 19697, 19698, 19701, 19702, 19705, 19706, 19707, 19709, 19710, 19712, 19713, 19715, 19716, 19717, 19718, 19719, 19720, 19722, 19723, 19724, 19725, 19726, 19727, 19728, 19729, 19730, 19731, 19732, 19733, 19734, 19735, 19736, 19737, 19738, 19740, 19744, 19747, 19754, 19755, 19756, 19757, 19759, 19760, 19762, 19763, 19764, 19765, 19766, 19767, 19768, 19769, 19772, 19773, 19774, 19775, 19776, 19777, 19778, 19779, 19780, 19781, 19782, 19783, 19784, 19788, 19789, 19792, 19795, 19796, 19797, 19799, 19800, 19801, 19802, 19806, 19823, 19824, 19825, 19826, 19827, 19830, 19831, 19832, 19833, 19836, 19837, 19838, 19839, 19840, 19842, 19843, 19844, 19845, 19847, 19848, 19849, 19850, 19851, 19852, 19853, 19855, 19856, 19857, 19858, 19859, 19860, 19861, 19862, 19863, 19864, 19865, 19866, 19867, 19868, 19869, 19870, 19871, 19872, 19873, 19874, 19875, 19876, 19878, 19879, 19880, 19881, 19882, 19905, 19906, 19907, 19908, 19909, 19910, 19911, 19912, 19913, 19914, 19915, 19916, 19918, 19919, 19920, 19921, 19922, 19923, 19924, 19925, 19926, 19932, 19933, 19934, 19935, 19936, 19937, 19938, 19939, 19940, 19942, 19943, 19944, 19945, 19946, 19947, 19948, 19949, 19950, 19951, 19952, 19953, 19956, 19957, 19958, 19959, 19960, 19961, 19962, 19963, 19964, 19965, 19966, 19967, 19968, 19969, 19970, 19971, 19972, 19973, 19978, 19979, 19980, 19982, 19983, 19984, 19985, 19986, 19987, 19988, 19989, 19990, 19991, 19992, 19993, 19994, 19995, 19996, 19997, 19998, 20003, 20020, 20021, 20023, 20024, 20025, 20026, 20027, 20028, 20029, 20030, 20031, 20032, 20033, 20034, 20035, 20036, 20037, 20038, 20039, 20040, 20041, 20042, 20043, 20044, 20046, 20052, 20053, 20054, 20055, 20058, 20059, 20060, 20061, 20062, 20063, 20064, 20066, 20067, 20068, 20069, 20071, 20072, 20075, 20076, 20078, 20079, 20080, 20081, 20082, 20083, 20084, 20086, 20087, 20088, 20089, 20090, 20092, 20093, 20095, 20096, 20097, 20098, 20100, 20101, 20102, 20109, 20110, 20111, 20112, 20113, 20114, 20115, 20116, 20117, 20118, 20119, 20120, 20121, 20123, 20124, 20125, 20126, 20127, 20129, 20130, 20131, 20132, 20133, 20134, 20135, 20136, 20137, 20138, 20139, 20140, 20141, 20142, 20143, 20145, 20148, 20149, 20150, 20151, 20152, 20153, 20154, 20155, 20156, 20157, 20158, 20159, 20160, 20161, 20162, 20163, 20194, 20195, 20196, 20197, 20198, 20199, 20201, 20202, 20203, 20204, 20205, 20206, 20207, 20208, 20209, 20210, 20211, 20214, 20215, 20216, 20217, 20218, 20220, 20221, 20222, 20223, 20224, 20226, 20227, 20229, 20230, 20231, 20232, 20233, 20234, 20235, 20236, 20237, 20238, 20239, 20240, 20241, 20242, 20243, 20244, 20246, 20247, 20248, 20249, 20250, 20251, 20269, 20270, 20271, 20272, 20273, 20274, 20276, 20278, 20279, 20280, 20281, 20283, 20284, 20285, 20286, 20287, 20288, 20289, 20290, 20291, 20292, 20293, 20294, 20295, 20296, 20324, 20326, 20327, 20329, 20330, 20331, 20332, 20333, 20334, 20335, 20336, 20337, 20338, 20339, 20340, 20341, 20342, 20343, 20344, 20345, 20346, 20347, 20348, 20349, 20350, 20351, 20352, 20353, 20354, 20355, 20357, 20358, 20359, 20360, 20361, 20362, 20363, 20365, 20368, 20370, 20372, 20373, 20374, 20376, 20377, 20378, 20379, 20380, 20381, 20382, 20383, 20384, 20385, 20386, 20387, 20388, 20389, 20390, 20391, 20392, 20393, 20394, 20395, 20396, 20397, 20398, 20399, 20400, 20401, 20402, 20403, 20404, 20405, 20406, 20407, 20408, 20409, 20410, 20411, 20415, 20416, 20417, 20418, 20419, 20420, 20422, 20424, 20426, 20427, 20428, 20429, 20430, 20431, 20432, 20433, 20434, 20435, 20436, 20438, 20439, 20440, 20441, 20442, 20443, 20444, 20445, 20447, 20448, 20449, 20450, 20451, 20452, 20453, 20454, 20455, 20456, 20458, 20459, 20460, 20463, 20464, 20465, 20470, 20471, 20472, 20473, 20474, 20475, 20476, 20477, 20478, 20479, 20480, 20481, 20482, 20483, 20484, 20485, 20486, 20488, 20489, 20490, 20491, 20492, 20493, 20494, 20495, 20496, 20497, 20498, 20499, 20500, 20501, 20502, 20503, 20504, 20505, 20506, 20507, 20508, 20509, 20510, 20511, 20512, 20513, 20514, 20515, 20516, 20518, 20520, 20551, 20552, 20553, 20554, 20555, 20556, 20557, 20561, 20563, 20564, 20599, 20600, 20601, 20603, 20604, 20605, 20606, 20607, 20608, 20609, 20610, 20611, 20612, 20613, 20614, 20616, 20617, 20618, 20619, 20634, 20635, 20666, 20668, 20669, 20670, 20671, 20672, 20673, 20674, 20676, 20677, 20678, 20679, 20680, 20682, 20683, 20684, 20685, 20709, 20710, 20713, 20714, 20722, 20723, 20724, 20726, 20727, 20728, 20729, 20730, 20731, 20732, 20735, 20736, 20747, 20748, 20749, 20751, 20752, 20753, 20755, 20756, 20757, 20762, 20763, 20764, 20765, 20766, 20767, 20768, 20769, 20770, 20771, 20772, 20773, 20774, 20775, 20777, 20778, 20779, 20780, 20781, 20782, 20783, 20784, 20785, 20786, 20787, 20788, 20789, 20790, 20791, 20792, 20793, 20794, 20795, 20796, 20797, 20798, 20799, 20800, 20801, 20802, 20803, 20804, 20805, 20806, 20807, 20808, 20809, 20810, 20811, 20812, 20813, 20814, 20815, 20816, 20825, 20845, 20846, 20847, 20848, 20849, 20850, 20851, 20852, 20853, 20854, 20855, 20856, 20857, 20858, 20859, 20864, 20865, 20866, 20867, 20868, 20869, 20870, 20871, 20872, 20873, 20874, 20875, 20876, 20877, 20878, 20879, 20880, 20881, 20882, 20883, 20885, 20886, 20887, 20889, 20890, 20891, 20892, 20893, 20894, 20895, 20896, 20897, 20898, 20899, 20900, 20901, 20902, 20903, 20904, 20905, 20906, 20907, 20908, 20909, 20910, 20911, 20912, 20913, 20914, 20915, 20916, 20917, 20918, 20920, 20921, 20922, 20924, 20925, 20926, 20927, 20928, 20929, 20930, 20931, 20932, 20933, 20934, 20977, 20978, 20980, 20981, 20982, 20983, 20984, 20985, 20986, 20987, 20988, 20989, 20990, 20995, 20998, 21004, 21005, 21006, 21007, 21008, 21009, 21010, 21018, 21019, 21021, 21022, 21023, 21024, 21025, 21026, 21027, 21029, 21030, 21032, 21033, 21039, 21040, 21041, 21042, 21044, 21045, 21046, 21047, 21048, 21049, 21050, 21051, 21052, 21053, 21055, 21056, 21057, 21058, 21059, 21060, 21061, 21062, 21063, 21064, 21065, 21066, 21071, 21072, 21073, 21074, 21075, 21077, 21078, 21079, 21080, 21081, 21082, 21083, 21084, 21085, 21086, 21087, 21088, 21089, 21090, 21092, 21093, 21094, 21095, 21096, 21097, 21101, 21102, 21103, 21104, 21105, 21106, 21107, 21108, 21109, 21110, 21111, 21112, 21113, 21114, 21115, 21116, 21117, 21118, 21119, 21120, 21123, 21124, 21126, 21127, 21128, 21129, 21130, 21131, 21132, 21133, 21134, 21135, 21136, 21137, 21138, 21139, 21142, 21145, 21147, 21148, 21151, 21152, 21153, 21155, 21156, 21157, 21158, 21159, 21160, 21161, 21164, 21168, 21170, 21171, 21172, 21173, 21174, 21175, 21176, 21178, 21179, 21180, 21181, 21182, 21183, 21185, 21186, 21188, 21189, 21192, 21193, 21194, 21195, 21196, 21197, 21198, 21200, 21203, 21205, 21207, 21209, 21210, 21211, 21212, 21213, 21214, 21215, 21216, 21217, 21218, 21220, 21221, 21225, 21233, 21234, 21235, 21236, 21237, 21238, 21241, 21242, 21244, 21245, 21246, 21249, 21250, 21251, 21253, 21254, 21255, 21256, 21257, 21258, 21259, 21261, 21262, 21263, 21264, 21265, 21267, 21275, 21276, 21277, 21279, 21283, 21284, 21285, 21286, 21287, 21288, 21289, 21290, 21291, 21292, 21293, 21294, 21295, 21296, 21300, 21301, 21302, 21303, 21304, 21305, 21306, 21307, 21308, 21309, 21310, 21311, 21312, 21313, 21314, 21315, 21316, 21317, 21318, 21319, 21322, 21323, 21324, 21325, 21326, 21328, 21330, 21331, 21332, 21334, 21335, 21336, 21337, 21338, 21339, 21340, 21341, 21342, 21343, 21344, 21345, 21346, 21347, 21348, 21349, 21350, 21351, 21352, 21353, 21354, 21357, 21359, 21362, 21365, 21368, 21370, 21373, 21375, 21376, 21380, 21381, 21382, 21383, 21384, 21385, 21386, 21387, 21389, 21391, 21393, 21394, 21395, 21396, 21397, 21398, 21399, 21400, 21402, 21403, 21404, 21405, 21408, 21409, 21410, 21411, 21413, 21414, 21416, 21417, 21419, 21420, 21422, 21423, 21425, 21426, 21427, 21428, 21429, 21430, 21432, 21434, 21435, 21436, 21437, 21438, 21439, 21440, 21441, 21443, 21444, 21445, 21446, 21447, 21448, 21449, 21450, 21451, 21452, 21453, 21454, 21455, 21456, 21457, 21458, 21459, 21460, 21461, 21462, 21463, 21464, 21465, 21466, 21467, 21468, 21469, 21470, 21471, 21472, 21474, 21475, 21476, 21477, 21478, 21483, 21484, 21485, 21487, 21488, 21489, 21492, 21493, 21494, 21496, 21497, 21498, 21499, 21500, 21501, 21502, 21503, 21504, 21505, 21506, 21510, 21512, 21514, 21515, 21516, 21517, 21518, 21519, 21520, 23408, 21713, 20588, 21627, 21628, 21632, 21633, 21636, 21637, 21638, 21639, 21640, 21641, 21643, 21644, 21648, 21649, 21650, 21651, 21652, 21654, 21655, 21656, 21657, 21658, 21659, 21660, 21661, 21662, 21663, 21664, 21682, 21683, 21684, 21685, 21686, 21687, 21690, 21691, 21692, 21694, 21695, 21696, 21699, 21700, 21701, 21702, 21703, 21704, 21705, 21706, 21707, 21708, 21709, 21710, 21711, 21717, 21718, 21719, 21720, 21721, 21722, 21723, 21724, 21725, 21726, 21727, 21728, 21729, 21730, 21731, 21732, 21733, 21734, 21735, 21736, 21737, 21738, 21739, 21740, 21741, 21742, 21743, 21744, 21746, 21747, 21748, 21749, 21750, 21751, 21752, 21753, 21754, 21755, 21756, 21757, 21759, 21760, 21761, 21763, 21766, 21767, 21768, 21769, 21770, 21771, 21772, 21773, 21774, 21775, 21776, 21777, 21778, 21779, 21780, 21782, 21783, 21784, 21787, 21788, 21789, 21790, 21791, 21792, 21793, 21794, 21795, 21796, 21797, 21798, 21801, 21802, 21803, 21804, 21805, 21807, 21808, 21809, 21810, 21811, 21814, 21815, 21816, 21817, 21818, 21819, 21820, 21821, 21822, 21823, 21824, 21826, 21827, 21829, 21837, 21839, 21840, 21844, 21846, 21847, 21849, 21851, 21852, 21853, 21854, 21855, 21856, 21858, 21859, 21860, 21861, 21862, 21864, 21867, 21869, 21870, 21872, 21876, 21877, 21878, 21879, 21891, 21892, 21893, 21894, 21895, 21896, 21897, 21898, 21899, 21901, 21902, 21903, 21904, 21905, 21906, 21907, 21908, 21909, 21911, 21912, 21921, 21922, 21923, 21924, 21925, 21926, 21928, 21930, 21931, 21935, 21936, 21937, 21938, 21939, 21940, 21941, 21942, 21944, 21945, 21946, 21947, 21949, 21950, 21951, 21952, 21953, 21954, 21955, 21956, 21957, 21960, 21961, 21962, 21963, 21967, 21968, 21969, 21970, 21971, 21974, 21975, 21976, 21978, 21979, 21981, 21983, 21984, 21985, 21986, 21992, 21993, 21995, 21996, 21997, 21998, 21999, 22000, 22001, 22002, 22003, 22004, 22005, 22006, 22007, 22008, 22009, 22011, 22012, 22013, 22015, 22016, 22017, 22018, 22019, 22020, 22021, 22022, 22023, 22024, 22025, 22026, 22027, 22037, 22038, 22039, 22040, 22042, 22043, 22044, 22045, 22046, 22051, 22052, 22053, 22054, 22058, 22059, 22060, 22061, 22062, 22063, 22064, 22065, 22066, 22068, 22069, 22070, 22071, 22072, 22073, 22074, 22075, 22076, 22077, 22078, 22079, 22080, 22081, 22082, 22083, 22084, 22085, 22086, 22087, 22088, 22089, 22090, 22093, 22094, 22095, 22096, 22097, 22098, 22099, 22100, 22101, 22102, 22103, 22105, 22106, 22107, 22108, 22110, 22112, 22113, 22114, 22115, 22116, 22121, 22122, 22123, 22124, 22125, 22126, 22127, 22130, 22132, 22133, 22134, 22135, 22136, 22137, 22138, 22139, 22141, 22142, 22143, 22144, 22146, 22148, 22149, 22150, 22151, 22160, 22174, 22175, 22177, 22180, 22181, 22182, 22187, 22189, 22194, 22195, 22196, 22197, 22199, 22201, 22202, 22204, 22205, 22206, 22208, 22211, 22212, 22213, 22214, 22215, 22216, 22217, 22218, 22221, 22224, 22225, 22226, 22227, 22228, 22229, 22230, 22231, 22232, 22233, 22234, 22235, 22237, 22239, 22240, 22241, 22242, 22243, 22244, 22246, 22252, 22253, 22254, 22255, 22257, 22258, 22259, 22260, 22261, 22262, 22263, 22265, 22267, 22268, 22269, 22272, 22273, 22274, 22275, 22277, 22278, 22279, 22280, 22281, 22282, 22283, 22285, 22286, 22287, 22288, 22289, 22291, 22292, 22293, 22295, 22297, 22298, 22301, 22302, 22303, 22305, 22306, 22307, 22308, 22309, 22310, 22311, 22312, 22313, 22314, 22315, 22317, 22318, 22320, 22323, 22325, 22326, 22327, 22331, 22332, 22333, 22334, 22336, 22337, 22338, 22339, 22340, 22341, 22342, 22343, 22348, 22350, 22351, 22355, 22356, 22357, 22358, 22360, 22362, 22363, 22364, 22365, 22367, 22368, 22369, 22370, 22371, 22372, 22373, 22374, 22375, 22376, 22377, 22378, 22380, 22381, 22384, 22385, 22386, 22387, 22388, 22389, 22390, 22392, 22393, 22394, 22395, 22396, 22400, 22401, 22402, 22403, 22404, 22405, 22406, 22407, 22408, 22410, 22417, 22419, 22420, 22421, 22422, 22423, 22424, 22427, 22429, 22430, 22431, 22432, 22433, 22434, 22435, 22436, 22437, 22438, 22439, 22440, 22441, 22442, 22443, 22444, 22445, 22446, 22447, 22448, 22449, 22451, 22452, 22453, 22454, 22455, 22456, 22457, 22458, 22459, 22460, 22461, 22462, 22463, 22464, 22465, 22466, 22467, 22468, 22469, 22470, 22471, 22472, 22473, 22474, 22476, 22477, 22478, 22479, 22480, 22481, 22482, 22483, 22484, 22485, 22488, 22489, 22490, 22491, 22492, 22494, 22495, 22496, 22497, 22498, 22499, 22500, 22502, 22503, 22504, 22505, 22506, 22507, 22508, 22510, 22511, 22512, 22513, 22514, 22519, 22520, 22523, 22656, 22798, 22799, 22800, 22801, 22819, 22821, 22822, 22831, 22832, 22841, 22842, 22843, 22844, 22845, 22846, 22847, 22848, 22849, 22851, 22853, 22855, 22869, 22871, 22873, 22874, 22875, 22876, 22877, 22878, 22880, 22881, 22882, 22883, 22884, 22885, 22887, 22890, 22891, 22892, 22893, 22898, 22899, 22905, 22917, 22918, 22922, 22924, 22939, 22940, 22945, 22947, 22948, 22949, 22950, 22951, 22952, 22953, 22954, 22955, 22960, 22963, 22972, 22974, 22980, 22982, 22985, 22987, 22991, 23016, 23022, 23028, 23029, 23030, 23038, 23042, 23048, 23050, 23051, 23066, 23079, 23082, 23086, 23127, 23147, 23151, 23162, 23165, 23172, 23175, 23176, 23177, 23178, 23179, 23204, 23207, 23219, 23257, 23263, 23270, 23271, 23272, 23273, 23306, 23330, 23337, 23339, 23363, 23367, 23378, 23381, 23383, 23291, 23411, 23415, 23418, 23419, 23420, 23421, 23433, 23434, 23435, 23437, 23440, 23443, 23446, 23449, 23461, 23462, 23463, 23464, 23465, 23466, 23483, 23484, 24003, 24004, 23320, 23489, 22997, 21714, 21715, 21716, 23258, 17207, 17809, 17810, 17811, 17812, 20923, 22834, 22837, 22932, 22981, 22979, 23036, 22993, 23338, 22994, 22992, 23002, 22931, 15666, 14443, 15214, 15383, 15431, 15432, 15434, 15437, 15445, 15446, 15448, 15450, 15451, 15452, 15453, 15455, 15456, 15457, 15485, 15486, 15488, 15490, 15520, 15539, 15663, 15701, 15709, 15720, 15731, 15733, 15734, 15735, 17376, 17708, 18528, 21140, 21166, 21252, 22515, 22833, 22857, 22859, 22861, 22862, 22863, 22864, 22872, 22934, 22935, 22936, 22966, 23033, 23102, 23180, 23268, 23326, 23373, 23396, 23409, 23452, 23454, 23534, 23535, 23536, 23699, 23719, 17910, 17911, 17912, 17913, 17914, 22986, 23035, 19, 29, 31, 49, 55, 62, 65, 71, 73, 82, 87, 90, 93, 102, 105, 106, 107, 108, 109, 111, 112, 120, 129, 130, 153, 192, 201, 211, 221, 224, 229, 230, 242, 262, 280, 281, 282, 283, 286, 287, 290, 291, 303, 309, 351, 361, 364, 365, 370, 371, 373, 387, 388, 389, 393, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 418, 421, 542, 564, 566, 567, 601, 638, 693, 700, 749, 841, 852, 860, 882, 929, 994, 995, 996, 1055, 1056, 1067, 1171, 1227, 1293, 1384, 1392, 1403, 1406, 1408, 1409, 1468, 1541, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1631, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1714, 1730, 1757, 1764, 1798, 1810, 1811, 1819, 1820, 1849, 1857, 1858, 1861, 1862, 1864, 1879, 1881, 1925, 1926, 1927, 1928, 1929, 1930, 1932, 1945, 1990, 1991, 2040, 2095, 2109, 2138, 2213, 2217, 2218, 2219, 2221, 2222, 2279, 2280, 2281, 2282, 2286, 2288, 2289, 2290, 2291, 2292, 2294, 2298, 2325, 2472, 2593, 2637, 2665, 2689, 2690, 2702, 2709, 2710, 2741, 2746, 2797, 2807, 2809, 2833, 2862, 2863, 2864, 2865, 2866, 2867, 2868, 2869, 2871, 2873, 2874, 2875, 2877, 2886, 2889, 2890, 2891, 2896, 2899, 2935, 2938, 2939, 3146, 3151, 3152, 3200, 3259, 3262, 3437, 3460, 3462, 3524, 3559, 3564, 3575, 3580, 3642, 3668, 3697, 3699, 3777, 3778, 3793, 3796, 3826, 3832, 3839, 3852, 3860, 3869, 3870, 3876, 3878, 3938, 3957, 3966, 3971, 3972, 3973, 3997, 4039, 4055, 4069, 4121, 4149, 4153, 4157, 4174, 4176, 4178, 4179, 4206, 4224, 4237, 4239, 4245, 4246, 4247, 4253, 4261, 4322, 4333, 4340, 4346, 4347, 4348, 4394, 4395, 4408, 4410, 4443, 4482, 4487, 4491, 4621, 4626, 4669, 4683, 4691, 4703, 4704, 4717, 4725, 4816, 4862, 4881, 4955, 4957, 4970, 4975, 4976, 4985, 4986, 4987, 4988, 4989, 4990, 4991, 4992, 4993, 4994, 4997, 4998, 4999, 5000, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041, 5059, 5060, 5061, 5062, 5064, 5084, 5104, 5105, 5187, 5231, 5264, 5315, 5326, 5348, 5367, 5407, 5415, 5442, 5443, 5445, 5447, 5468, 5507, 5521, 5522, 5524, 5525, 5526, 5542, 5548, 5549, 5550, 5551, 5552, 5553, 5554, 5555, 5556, 5557, 5558, 5559, 5560, 5561, 5562, 5563, 5587, 5588, 5589, 5590, 5621, 5625, 5626, 5627, 5628, 5629, 5630, 5631, 5632, 5633, 5737, 5740, 5746, 5772, 5773, 5776, 5777, 5778, 5779, 5788, 5789, 5790, 5791, 5793, 5794, 5795, 5796, 5801, 5825, 5866, 5867, 5868, 5872, 5903, 5928, 5936, 5945, 5946, 5947, 5948, 5949, 5954, 5956, 5959, 5960, 5961, 5962, 5963, 5964, 5965, 5966, 5967, 5968, 5969, 5970, 5971, 5972, 5973, 5980, 5983, 5986, 5987, 5989, 5995, 6022, 6023, 6036, 6076, 6092, 6106, 6107, 6108, 6197, 6214, 6242, 6269, 6270, 6296, 6326, 6327, 6346, 6561, 6571, 6572, 6573, 6666, 6687, 6767, 6772, 6773, 7006, 7008, 7013, 7014, 7094, 7095, 7096, 7116, 7117, 7119, 7121, 7122, 7123, 7124, 7127, 7128, 7129, 7130, 7131, 7133, 7134, 7143, 7144, 7146, 7150, 7151, 7152, 7173, 7174, 7186, 7227, 7270, 7373, 7374, 7375, 7377, 7378, 7388, 7393, 7488, 7503, 7504, 7525, 7526, 7528, 7546, 7547, 7548, 7551, 7552, 7554, 7556, 7558, 7559, 7561, 7563, 7570, 7663, 7689, 7703, 7709, 7710, 7711, 7712, 7713, 7743, 7745, 7746, 7747, 7748, 7791, 7896, 7898, 7906, 7919, 7935, 8148, 8206, 8316, 8321, 8322, 8323, 8377, 8406, 8407, 8505, 8536, 8537, 8552, 8559, 8599, 8613, 8663, 8676, 8677, 8765, 8777, 8880, 8887, 8935, 9180, 9275, 9276, 9417, 9542, 9576, 9578, 9579, 9581, 9582, 9599, 9702, 9703, 9704, 9705, 9837, 9896, 9936, 10080, 10081, 10084, 10178, 10203, 10236, 10237, 10238, 10239, 10291, 10292, 10294, 10295, 10297, 10298, 10395, 10397, 10449, 10451, 10452, 10453, 10454, 10459, 10466, 10483, 10484, 10492, 10493, 10494, 10579, 10783, 10784, 10785, 10786, 10787, 10788, 10789, 10790, 10791, 10792, 10793, 10794, 10795, 10796, 10797, 10798, 10818, 10819, 10820, 10898, 10985, 10989, 11045, 11144, 11148, 11149, 11151, 11179, 11292, 11381, 11392, 11393, 11394, 11395, 11396, 11398, 11399, 11400, 11402, 11403, 11404, 11405, 11408, 11409, 11410, 11411, 11412, 11413, 11414, 11415, 11416, 11437, 11474, 11479, 11494, 11547, 11549, 11550, 11579, 11580, 11581, 11597, 11606, 11617, 11618, 11619, 11628, 11676, 11719, 11742, 11743, 11779, 11780, 11809, 11816, 11902, 11903, 11904, 11905, 11906, 11907, 11908, 11909, 11919, 11926, 11938, 11958, 12020, 12035, 12036, 12039, 12040, 12044, 12054, 12142, 12145, 12146, 12147, 12176, 12177, 12200, 12260, 12386, 12434, 12536, 12741, 12758, 12819, 12857, 12898, 13083, 13148, 13281, 13339, 13477, 13496, 13516, 13517, 13518, 13519, 13520, 13521, 13522, 13523, 13619, 13620, 13856, 13857, 13977, 14016, 14017, 14018, 14019, 14042, 14061, 14062, 14063, 14101, 14141, 14142, 14143, 14144, 14145, 14146, 14147, 14148, 14161, 14162, 14181, 14184, 14261, 14265, 14274, 14302, 14306, 14307, 14309, 14310, 14311, 14312, 14341, 14346, 14352, 14391, 14406, 14422, 14493, 14501, 14554, 14562, 14563, 14605, 14606, 14623, 14629, 14630, 14631, 14632, 14633, 14635, 14636, 14641, 14642, 14643, 14644, 14681, 14682, 14683, 14684, 14685, 14687, 14688, 14689, 14690, 14691, 14692, 14694, 14695, 14696, 14697, 14698, 14700, 14701, 14702, 14703, 14704, 14705, 14707, 14708, 14709, 14710, 14712, 14713, 14714, 14719, 14746, 14755, 14756, 14761, 14801, 14824, 14851, 14852, 14853, 14854, 14855, 14856, 14858, 14877, 14879, 14885, 14886, 14941, 14966, 14967, 14968, 15081, 15085, 15110, 15118, 15121, 15123, 15135, 15139, 15166, 15216, 15217, 15219, 15313, 15314, 15317, 15328, 15349, 15356, 15357, 15359, 15360, 15361, 15364, 15368, 15373, 15374, 15375, 15376, 15377, 15382, 15394, 15410, 15411, 15412, 15413, 15414, 15421, 15422, 15423, 15424, 15425, 15426, 15427, 15435, 15436, 15449, 15454, 15459, 15460, 15465, 15466, 15469, 15475, 15481, 15495, 15506, 15507, 15512, 15514, 15518, 15519, 15522, 15524, 15525, 15529, 15530, 15532, 15533, 15534, 15535, 15536, 15545, 15552, 15553, 15571, 15590, 15591, 15609, 15610, 15611, 15618, 15623, 15625, 15626, 15627, 15628, 15629, 15633, 15634, 15639, 15640, 15653, 15660, 15661, 15672, 15680, 15685, 15693, 15694, 15695, 15703, 15705, 15710, 15711, 15712, 15717, 15719, 15721, 15723, 15724, 15729, 15730, 15736, 15737, 15738, 15746, 15747, 15748, 15749, 15750, 15751, 15752, 15753, 15754, 15756, 15757, 15758, 15759, 15769, 15770, 15771, 15772, 15773, 15774, 15775, 15776, 15777, 15778, 15780, 15781, 15782, 15783, 15784, 15785, 15786, 15787, 15788, 15789, 15790, 15791, 15792, 15793, 15794, 15795, 15796, 15797, 15798, 15799, 15800, 15801, 15804, 15805, 15806, 15807, 15808, 15809, 15810, 15811, 15812, 15813, 15814, 15815, 15816, 15817, 15832, 15835, 15838, 15839, 15840, 15841, 15842, 15843, 15844, 15845, 15846, 15847, 15848, 15849, 15850, 15851, 15855, 15856, 15860, 15861, 15863, 15864, 15865, 15867, 15872, 15873, 15874, 15875, 15876, 15877, 15878, 15879, 15880, 15881, 15884, 15885, 15886, 15887, 15888, 15889, 15890, 15896, 15899, 15900, 15901, 15902, 15905, 15906, 15907, 15908, 15909, 15911, 15912, 15913, 15914, 15915, 15916, 15917, 15919, 15922, 15923, 15925, 15926, 15927, 15933, 15934, 15935, 15944, 15947, 15955, 15957, 15959, 15961, 15972, 15973, 16000, 16001, 16002, 16003, 16004, 16005, 16007, 16008, 16009, 16019, 16023, 16026, 16027, 16035, 16038, 16039, 16040, 16041, 16049, 16050, 16051, 16052, 16053, 16054, 16055, 16056, 16057, 16058, 16066, 16072, 16075, 16082, 16083, 16084, 16086, 16092, 16093, 16095, 16098, 16100, 16105, 16106, 16107, 16108, 16109, 16110, 16111, 16120, 16121, 16123, 16124, 16125, 16126, 16128, 16129, 16136, 16137, 16139, 16141, 16142, 16148, 16150, 16172, 16181, 16182, 16184, 16190, 16207, 16211, 16212, 16214, 16233, 16234, 16235, 16255, 16265, 16281, 16284, 16285, 16286, 16296, 16306, 16312, 16356, 16359, 16360, 16363, 16369, 16373, 16374, 16378, 16393, 16419, 16420, 16421, 16422, 16423, 16427, 16428, 16429, 16430, 16432, 16433, 16434, 16435, 16436, 16437, 16439, 16440, 16445, 16450, 16454, 16455, 16456, 16486, 16487, 16508, 16509, 16510, 16511, 16512, 16513, 16527, 16532, 16533, 16538, 16564, 16565, 16566, 16605, 16606, 16608, 16614, 16622, 16630, 16645, 16661, 16682, 16711, 16717, 16720, 16730, 16737, 16754, 16758, 16759, 16760, 16770, 16783, 16784, 16785, 16849, 16853, 23311, 16868, 16869, 16872, 16874, 16875, 16877, 16881, 16882, 16883, 16889, 16890, 16891, 16892, 16893, 16894, 16895, 16900, 16902, 16908, 16909, 16910, 16926, 16930, 16931, 16935, 16936, 16940, 16941, 16942, 16953, 16955, 16956, 16957, 16958, 16961, 16962, 16963, 16965, 16969, 16970, 16979, 16981, 16982, 16983, 16984, 16985, 16986, 16987, 16988, 16989, 16990, 16997, 16999, 17009, 17010, 17011, 17012, 17013, 17016, 17017, 17018, 17019, 17020, 17021, 17022, 17024, 17025, 17026, 17027, 17028, 17029, 17030, 17031, 17032, 17055, 17061, 17063, 17064, 17065, 17075, 17078, 17081, 17082, 17091, 17107, 17118, 17140, 17145, 17162, 17163, 17165, 17198, 17221, 17227, 17239, 17254, 17258, 17261, 17284, 17286, 17288, 17289, 17292, 17294, 17295, 17297, 17301, 17302, 17315, 17319, 17332, 17335, 17351, 17354, 17365, 17366, 17367, 17368, 17369, 17382, 17383, 17384, 17385, 17386, 17387, 17388, 17389, 17390, 17394, 17396, 17411, 17415, 17419, 17422, 17430, 17449, 17450, 17451, 17454, 17456, 17457, 17458, 17460, 17466, 17470, 17476, 17492, 17501, 17502, 17506, 17507, 17515, 17516, 17526, 17533, 17534, 17559, 17560, 17561, 17562, 17563, 17564, 17565, 17566, 17567, 17568, 17569, 17570, 17571, 17572, 17573, 17574, 17576, 17577, 17579, 17580, 17581, 17582, 17583, 17590, 17593, 17594, 17595, 17596, 17597, 17601, 17602, 17605, 17615, 17616, 17617, 17618, 17619, 17620, 17625, 17638, 17639, 17640, 17641, 17643, 17644, 17646, 17648, 17650, 17652, 17665, 17668, 17672, 17675, 17677, 17679, 17688, 17691, 17697, 17699, 17700, 17706, 17709, 17736, 17755, 17818, 17823, 17829, 17851, 17854, 17861, 17863, 17864, 17867, 17868, 17869, 17872, 17873, 17902, 17903, 17905, 17906, 17907, 17908, 17916, 17946, 17949, 17950, 17967, 17970, 17971, 17973, 18001, 18036, 18040, 18041, 18045, 18047, 26651, 26342, 26341, 26340, 26339, 26338, 26337, 25579, 25578, 25577, 25576, 25575, 18060, 18061, 18078, 18081, 18082, 18083, 18084, 18085, 18095, 18104, 18107, 18108, 18153, 18154, 18156, 18157, 18158, 18169, 18178, 18184, 18198, 18239, 18241, 18254, 18269, 18270, 18271, 18284, 18287, 18288, 18304, 18361, 18368, 18403, 18410, 18425, 25574, 25573, 25572, 25571, 25570, 18474, 18479, 18526, 18529, 18534, 18546, 18550, 18551, 18552, 18562, 18582, 18599, 25569, 25568, 25567, 25566, 25565, 25564, 25563, 25562, 25561, 25560, 25559, 25558, 25557, 25556, 25555, 25554, 25553, 25552, 25551, 25550, 25549, 18643, 18645, 18665, 18679, 18684, 18689, 18691, 18692, 18695, 18697, 18721, 18738, 18739, 18740, 18741, 18742, 18769, 18770, 18780, 18783, 18801, 18806, 18819, 18820, 18844, 18845, 18846, 18851, 18854, 18861, 18862, 18863, 18868, 18871, 18874, 18876, 18878, 18889, 18920, 18925, 18932, 18958, 18961, 18979, 18980, 19010, 19031, 19036, 19037, 19039, 19040, 19054, 19066, 19069, 19070, 19072, 19134, 19135, 19145, 19146, 19160, 19198, 19199, 19200, 19214, 19228, 19230, 19247, 19260, 19262, 19267, 19268, 19269, 19285, 19286, 19287, 19288, 19290, 19311, 19313, 19320, 19322, 19327, 19334, 19347, 19356, 19357, 19365, 19366, 19385, 19386, 19391, 19403, 19404, 19406, 19407, 19418, 19454, 19463, 19487, 19490, 19491, 19492, 19522, 19552, 19553, 19563, 19564, 19566, 19567, 19577, 19584, 19585, 19586, 19587, 19591, 19596, 19600, 19601, 19602, 19603, 19605, 19609, 19611, 19613, 19614, 19615, 19630, 19636, 19637, 19638, 19639, 19650, 19695, 19696, 19700, 19704, 19708, 19721, 19739, 19741, 19742, 19743, 19745, 19746, 19748, 19749, 19750, 19751, 19752, 19753, 19758, 19761, 19770, 19771, 19785, 19786, 19787, 19790, 19791, 19793, 19794, 19798, 19803, 19804, 19805, 19807, 19808, 19809, 19810, 19811, 19812, 19813, 19814, 19815, 19816, 19817, 19818, 19819, 19820, 19821, 19822, 19828, 19829, 19835, 19841, 19846, 19854, 19877, 19883, 25548, 25547, 25546, 25545, 25544, 25543, 25542, 25541, 24857, 23186, 23185, 23184, 23182, 23181, 23122, 22938, 22399, 22346, 22322, 22300, 19917, 19927, 19928, 19929, 19930, 19931, 19941, 19954, 19974, 19975, 19976, 19981, 19999, 20000, 20019, 20045, 20047, 20048, 20049, 20050, 20073, 20074, 20085, 20091, 20099, 20103, 20104, 20105, 20106, 20107, 20122, 20128, 20144, 20146, 22173, 22172, 22171, 22170, 22169, 22168, 22167, 22166, 22164, 22163, 22162, 22129, 21991, 21990, 21989, 21988, 21943, 21919, 21918, 21917, 21916, 21915, 21914, 21843, 21842, 21841, 21786, 21712, 21647, 20200, 20212, 20213, 20225, 20245, 21646, 21645, 21626, 21625, 21624, 21623, 21622, 21621, 21620, 21619, 21618, 21617, 21616, 21615, 21614, 21613, 21612, 20277, 20297, 21611, 21610, 21609, 21608, 21607, 21606, 21605, 21604, 21603, 21602, 21601, 21600, 21599, 21598, 21597, 21596, 21595, 21594, 21593, 21592, 21591, 21590, 21589, 21588, 21587, 21586, 20325, 20356, 20364, 20366, 20367, 20369, 20371, 20375, 20413, 20414, 20421, 20423, 20425, 20446, 20457, 20461, 20462, 20466, 20467, 20468, 20469, 20517, 20519, 21585, 21584, 21583, 21582, 21581, 21580, 21579, 21578, 21577, 21576, 21575, 21574, 21573, 21572, 21571, 21570, 21569, 21568, 21567, 21566, 21565, 21564, 21563, 21562, 21561, 21560, 21559, 21558, 21557, 21556, 20558, 20560, 20562, 21555, 21554, 21553, 21552, 21551, 21550, 21549, 21548, 21547, 21546, 21545, 21544, 21543, 21542, 21541, 21540, 21539, 21538, 21537, 21536, 21535, 21534, 21533, 21532, 21531, 21530, 21529, 21528, 21527, 21526, 21525, 21524, 21523, 21522, 20602, 20615, 20993, 20746, 20745, 20744, 20743, 20742, 20741, 20740, 20739, 20738, 20737, 20706, 20705, 20704, 20703, 20702, 20701, 20700, 20699, 20698, 20697, 20696, 20695, 20694, 20693, 20692, 20691, 20690, 20689, 20688, 20687, 20686, 20665, 20664, 20663, 20662, 20661, 20660, 20659, 20658, 20657, 20656, 20667, 20675, 20681, 20655, 20654, 20653, 20652, 20651, 20650, 20649, 20648, 20647, 20646, 20645, 20644, 20643, 20642, 20641, 20640, 20639, 20638, 20637, 20636, 20633, 20707, 20708, 20716, 20717, 20718, 20719, 20720, 20725, 20733, 20734, 20632, 20631, 20630, 20629, 20628, 20627, 20626, 20625, 20624, 20623, 20754, 20776, 20817, 20818, 20819, 20820, 20821, 20822, 20823, 20824, 20826, 20827, 20828, 20829, 20830, 20831, 20832, 20833, 20834, 20835, 20836, 20837, 20838, 20839, 20840, 20841, 20842, 20843, 20844, 20860, 20861, 20862, 20863, 20884, 20888, 20919, 20979, 20991, 20622, 20621, 20994, 20999, 21001, 21002, 21011, 21012, 21013, 21014, 21015, 21016, 21017, 21020, 21031, 21034, 21035, 21036, 21037, 21038, 21043, 21054, 21067, 21068, 21069, 21070, 21076, 21091, 21098, 21099, 21100, 21121, 21122, 21143, 21144, 21146, 21149, 21150, 21154, 21162, 21163, 21165, 21167, 21169, 21177, 21184, 21187, 21190, 21191, 21199, 21201, 21202, 21204, 21206, 21208, 21222, 21224, 21226, 21227, 21228, 21229, 21230, 21231, 21232, 21239, 21240, 21243, 21247, 21248, 21260, 21266, 21268, 21269, 21270, 21271, 21272, 21273, 21274, 21278, 21281, 21297, 21298, 21299, 21320, 21321, 21329, 21355, 21356, 21358, 21360, 21361, 21363, 21364, 21366, 21367, 21369, 21371, 21372, 21374, 21388, 21390, 21392, 21401, 21406, 21407, 21412, 21415, 21418, 21421, 21424, 21473, 21479, 21480, 21481, 21482, 21490, 21491, 21495, 21508, 21511, 21513, 20620, 20594, 20593, 20592, 20587, 20586, 20585, 20584, 20583, 20582, 20570, 20550, 20549, 20548, 20547, 20540, 20539, 20527, 20526, 20524, 20523, 20522, 20521, 20323, 20322, 20321, 20320, 20319, 20318, 20317, 20316, 20315, 20314, 20313, 20312, 20311, 20310, 20309, 20308, 20307, 20306, 20305, 20304, 20303, 20302, 20301, 20300, 20299, 20298, 20268, 20267, 20266, 20265, 20264, 20263, 20262, 20261, 20260, 20259, 20258, 20257, 20256, 20255, 20254, 21629, 21630, 21631, 21634, 21635, 21642, 20253, 20252, 20193, 21653, 21665, 21666, 21667, 21668, 21669, 21670, 21671, 21672, 21673, 21674, 21675, 21676, 21677, 21678, 21679, 21680, 21681, 21688, 21689, 21697, 21698, 20192, 21758, 21762, 21781, 20191, 21799, 21800, 21806, 21812, 21830, 21831, 21832, 21833, 21834, 21835, 21836, 20190, 20189, 21845, 21848, 21850, 21857, 21863, 21865, 21866, 21871, 21873, 21874, 21875, 21880, 21881, 21882, 21883, 21884, 21885, 21886, 21887, 21888, 21889, 21900, 21910, 21913, 20187, 20186, 20185, 20184, 20183, 20182, 21920, 21929, 21932, 21933, 21934, 20181, 21958, 21959, 21964, 21965, 21966, 21972, 21973, 21977, 21980, 21982, 21987, 20180, 20179, 20178, 20177, 21994, 22010, 22028, 22029, 22030, 22031, 22032, 22033, 22034, 22035, 22036, 22041, 22047, 22049, 22050, 22055, 22056, 22057, 22067, 22091, 22104, 22109, 22111, 22117, 22118, 22119, 22120, 22128, 20176, 22131, 22140, 22147, 22152, 22161, 20175, 20174, 20173, 20172, 20171, 20170, 20169, 20168, 20167, 20166, 20165, 20164, 22176, 22186, 22188, 22190, 22191, 22192, 22193, 22200, 22203, 22207, 22209, 22210, 22219, 22220, 22236, 22238, 22247, 22248, 22249, 22250, 22251, 22256, 22264, 22266, 22270, 22271, 22276, 22290, 22299, 19904, 22304, 22316, 22319, 19903, 22328, 22330, 22335, 22344, 22345, 19902, 22347, 22349, 22352, 22353, 22354, 22359, 22361, 22366, 22379, 22383, 22391, 22398, 19901, 22411, 22412, 22413, 22414, 22415, 22416, 22418, 22425, 22426, 22428, 22450, 22475, 22486, 22487, 22501, 22509, 22516, 22517, 22518, 22521, 22524, 22525, 22526, 22527, 22528, 22529, 22530, 22531, 22532, 22533, 22534, 22535, 22536, 22537, 22538, 22539, 22540, 22541, 22542, 22543, 22544, 22545, 22546, 22547, 22548, 22549, 22550, 22551, 22552, 22553, 22554, 22555, 22556, 22557, 22558, 22559, 22560, 22561, 22562, 22563, 22564, 22565, 22566, 22567, 22568, 22569, 22570, 22571, 22572, 22573, 22574, 22575, 22576, 22577, 22578, 22579, 22580, 22581, 22582, 22583, 22584, 22585, 22586, 22587, 22588, 22589, 22590, 22591, 22592, 22593, 22594, 22595, 22596, 22597, 22598, 22599, 22600, 22601, 22602, 22603, 22604, 22605, 22606, 22607, 22608, 22609, 22610, 22611, 22612, 22613, 22614, 22615, 22616, 22617, 22618, 22619, 22620, 22621, 22622, 22623, 22624, 22625, 22626, 22627, 22628, 22629, 22630, 22631, 22632, 22633, 22634, 22635, 22636, 22637, 22638, 22639, 22640, 22641, 22642, 22643, 22644, 22645, 22646, 22647, 22648, 22649, 22650, 22651, 22652, 22653, 22654, 22655, 22657, 22658, 22659, 22660, 22661, 22662, 22663, 22664, 22665, 22666, 22667, 22668, 22669, 22670, 22671, 22672, 22673, 22674, 22675, 22676, 22677, 22678, 22679, 22680, 22681, 22682, 22683, 22684, 22685, 22686, 22687, 22688, 22689, 22690, 22691, 22692, 22693, 22694, 22695, 22696, 22697, 22698, 22699, 22700, 22701, 22702, 22703, 22704, 22705, 22706, 22707, 22708, 22709, 22710, 22711, 22712, 22713, 22714, 22715, 22716, 22717, 22718, 22719, 22720, 22721, 22722, 22723, 22724, 22725, 22727, 22728, 22729, 22730, 22731, 22732, 22733, 22734, 22735, 22736, 22737, 22738, 22739, 22741, 22743, 22744, 22745, 22746, 22747, 22748, 22749, 22750, 22751, 22752, 22753, 22754, 22755, 22756, 22757, 22758, 22759, 22760, 22761, 22762, 22763, 22764, 22765, 22766, 22767, 22768, 22769, 22770, 22771, 22772, 22773, 22774, 22775, 22776, 22777, 22778, 22779, 22780, 22781, 22782, 22783, 22784, 22785, 22786, 22787, 22788, 22789, 22790, 22791, 22792, 22793, 22794, 22795, 22796, 22797, 22807, 22818, 22820, 22824, 22836, 22838, 22888, 22900, 22910, 22911, 22912, 22923, 22941, 22958, 22967, 22975, 22976, 22977, 22978, 22995, 23007, 23019, 23037, 23040, 23052, 23053, 23055, 23056, 23059, 23061, 23063, 23076, 23077, 23078, 23087, 23088, 23094, 23110, 23112, 23113, 23115, 23116, 23118, 23119, 23120, 23128, 23173, 23174, 23188, 23199, 23208, 23212, 23218, 23220, 23230, 23231, 23233, 23234, 23246, 23253, 23255, 23256, 23260, 23261, 23262, 23266, 23278, 23281, 23282, 23300, 23301, 23310, 23316, 23322, 23323, 23327, 23328, 23334, 23335, 23343, 23347, 23362, 23365, 23380, 23382, 23385, 23386, 23392, 23395, 23406, 23407, 23413, 23428, 23439, 23455, 23456, 23457, 23458, 23459, 23460, 23473, 23496, 23500, 23512, 23157, 23243, 23244, 23245, 23447, 23139, 23140, 23370, 23149, 24484, 23511, 23482, 23510, 23521, 23702, 23558, 23684, 23808, 24766, 23683, 23488, 23700, 23628, 23627, 23710, 24468, 24710, 23703, 23522, 23698, 23525, 24108, 23706, 23486, 24109, 24463, 24462, 23487, 23696, 23685, 23481, 22943, 23635, 24497, 24510, 23605, 23606, 24711, 24501, 24492, 24493, 24498, 24657, 24495, 24499, 23604, 23603, 24373, 24372, 23533, 24265, 24264, 24263, 23531, 23530, 23529, 23966, 23537, 23682, 23686, 23758, 23800, 24034, 24700, 24814, 23619, 23623, 23624, 23625, 23626, 24519, 23973, 23712, 23103, 23713, 23971, 953, 1401, 1758, 1759, 1760, 1761, 1762, 1850, 1979, 1980, 2051, 2154, 2424, 3201, 4450, 4942, 5063, 5201, 5596, 6526, 6688, 6926, 6931, 7236, 7314, 7624, 7938, 8498, 8499, 8500, 8501, 8502, 8796, 9567, 9658, 9659, 9686, 10044, 10156, 10620, 10736, 11080, 11537, 11538, 11539, 11540, 11541, 11542, 11543, 11544, 11545, 11623, 11978, 12317, 12417, 12421, 12462, 12466, 12469, 12470, 12516, 12517, 12804, 12916, 12917, 13056, 13838, 14735, 14830, 14831, 14870, 14906, 14913, 15133, 15134, 15142, 15143, 15144, 15145, 15151, 15152, 15153, 15154, 15155, 15156, 15157, 15158, 15159, 15160, 15161, 15167, 15173, 15619, 15632, 15982, 15983, 15985, 15992, 15993, 15996, 15997, 15998, 15999, 16077, 16078, 16089, 16099, 16496, 16497, 16498, 16536, 16609, 16861, 17042, 17313, 17428, 17575, 17685, 17737, 17738, 17739, 17740, 17741, 17742, 17743, 17744, 17745, 17746, 17747, 17748, 17749, 17750, 17751, 17752, 17753, 17754, 17756, 17757, 17758, 17759, 17760, 17761, 17762, 17763, 17764, 17774, 17775, 17776, 17777, 17778, 17779, 17780, 17781, 17782, 17783, 17784, 17785, 17786, 17787, 17788, 17789, 17790, 17791, 17792, 17793, 17859, 17997, 18148, 18149, 18163, 18164, 18216, 18217, 18268, 18623, 18624, 18890, 18935, 18936, 18941, 19057, 19058, 19059, 19060, 19078, 19079, 19080, 19081, 19082, 19083, 19084, 19085, 19086, 19087, 19088, 19089, 19090, 19091, 19092, 19093, 19094, 19095, 19096, 19097, 19098, 19099, 19100, 19101, 19102, 19103, 19104, 19105, 19106, 19107, 19108, 19109, 19110, 19111, 19112, 19113, 19114, 19115, 19116, 19117, 19118, 19119, 19121, 19122, 19123, 19124, 19125, 19126, 19127, 19128, 19129, 19130, 19131, 19132, 19233, 19237, 19323, 19430, 19431, 19691, 20094, 20219, 20275, 20282, 20412, 21521, 20935, 20936, 20937, 20938, 20939, 20940, 20941, 20942, 20943, 20944, 20945, 20946, 20947, 20948, 20949, 20950, 20951, 20952, 20953, 20954, 20955, 20956, 20957, 20958, 20959, 20960, 20961, 20962, 20963, 20964, 20965, 20966, 20967, 20968, 20969, 20970, 20971, 20972, 20973, 20974, 20975, 20976, 21003, 21333, 21507, 20598, 20597, 20596, 20595, 20589, 20581, 20580, 20579, 20578, 20577, 20576, 20575, 20574, 20573, 20572, 20571, 20569, 20568, 20567, 20566, 20565, 20546, 20545, 20544, 20543, 20542, 20541, 20538, 20537, 20536, 20535, 20534, 20533, 20532, 20531, 20530, 20529, 20528, 20525, 21764, 21765, 21838, 20188, 21868, 22048, 22145, 22185, 22284, 22296, 22409, 22522, 22802, 22804, 22806, 22810, 22811, 22812, 22813, 22814, 22815, 22816, 22817, 22823, 22825, 22826, 22827, 22828, 22829, 22830, 22835, 22839, 22840, 22850, 22856, 22858, 22860, 22865, 22866, 22867, 22868, 22870, 22879, 22886, 22889, 22894, 22895, 22896, 22897, 22901, 22902, 22903, 22904, 22906, 22907, 22908, 22909, 22913, 22914, 22915, 22916, 22919, 22920, 22921, 22925, 22926, 22927, 22928, 22929, 22930, 22933, 22937, 19900, 22942, 22946, 22956, 22957, 22959, 22962, 22964, 22965, 22968, 22969, 22970, 22971, 22973, 22983, 22984, 22988, 22989, 22990, 22996, 22998, 22999, 23000, 23001, 23003, 23004, 23005, 23006, 23008, 23009, 23010, 23011, 23012, 23015, 23018, 23020, 23021, 23023, 23024, 23025, 23026, 23027, 23031, 23032, 23034, 23039, 23043, 23044, 23045, 23046, 23047, 23049, 23054, 23057, 23058, 23060, 23062, 23064, 23065, 23067, 23068, 23069, 23070, 23071, 23072, 23073, 23074, 23075, 23080, 23081, 23083, 23084, 23085, 23089, 23090, 23091, 23092, 23093, 23095, 23096, 23097, 23098, 23099, 23100, 23101, 23104, 23105, 23106, 23107, 23108, 23109, 23111, 23114, 23117, 23121, 19899, 23123, 23124, 23129, 23130, 23131, 23132, 23133, 23134, 23135, 23136, 23137, 23138, 23141, 23142, 23143, 23144, 23145, 23146, 23148, 23150, 23152, 23153, 23154, 23155, 23158, 23159, 23160, 23161, 23163, 23164, 23166, 23167, 23168, 23169, 23170, 23171, 19898, 19897, 19896, 19895, 19894, 19893, 23187, 23189, 23190, 23191, 23192, 23193, 23194, 23195, 23196, 23197, 23198, 23200, 23201, 23202, 23203, 23205, 23206, 23209, 23210, 23211, 23213, 23214, 23215, 23216, 23217, 23222, 23223, 23224, 23225, 23226, 23227, 23228, 23229, 23232, 23235, 23236, 23237, 23239, 23240, 23241, 23242, 23247, 23249, 23250, 23252, 23254, 23259, 23264, 23265, 23267, 23269, 23274, 23275, 23276, 23277, 23279, 23280, 23283, 23284, 23285, 23286, 23287, 23288, 23289, 23290, 23292, 23293, 23294, 23295, 23296, 23297, 23298, 23299, 23304, 23305, 23307, 23308, 23309, 23312, 23313, 23314, 23315, 23317, 23318, 23319, 23321, 23324, 23325, 23329, 23331, 23332, 23333, 23336, 23340, 23341, 23342, 23344, 23345, 23346, 23348, 23349, 23350, 23351, 23353, 23354, 23355, 23356, 23357, 23358, 23359, 23360, 23361, 23364, 23366, 23368, 23369, 23371, 23372, 23374, 23375, 23376, 23377, 23379, 23384, 23387, 23388, 23389, 23390, 23391, 23393, 23394, 23397, 23398, 23399, 23400, 23401, 23402, 23403, 23404, 23405, 23410, 23412, 23414, 23416, 23417, 23422, 23423, 23424, 23425, 23426, 23427, 23429, 23430, 23436, 23438, 23441, 23442, 23444, 23445, 23448, 23451, 23453, 23467, 23468, 23469, 23470, 23471, 23472, 23474, 23475, 23476, 23477, 23478, 23479, 23480, 23485, 23491, 23497, 23498, 23499, 23501, 23502, 23503, 23504, 23505, 23506, 23507, 23508, 23509, 23523, 23524, 23526, 23527, 23528, 23532, 23540, 23543, 23544, 23545, 23561, 23562, 23563, 23588, 23599, 23607, 23608, 23609, 23610, 23611, 23613, 23614, 23615, 23616, 23617, 23618, 23621, 23622, 23629, 23630, 23631, 23632, 23633, 23634, 23694, 23697, 23707, 23708, 23709, 23721, 23722, 23754, 23765, 23775, 23788, 23795, 23819, 23820, 23824, 23825, 23830, 23845, 23850, 23852, 23853, 23854, 23855, 23872, 23894, 23902, 23903, 23904, 23909, 23910, 23936, 23952, 23988, 24039, 24171, 24202, 24203, 24204, 24205, 24220, 24292, 24293, 24294, 24295, 24296, 24297, 24298, 24299, 24300, 24301, 24302, 24303, 24304, 24305, 24306, 24307, 24308, 24309, 24310, 24311, 24319, 24337, 24360, 24361, 24364, 24417, 24470, 24491, 24496, 24503, 24522, 24527, 24529, 24536, 24545, 24631, 24632, 24658, 24753, 24860, 24366, 23542, 23554, 23555, 23559, 23560, 23565, 23566, 23567, 23568, 23569, 23570, 23571, 23572, 23573, 23574, 23576, 23577, 23578, 23579, 23580, 23581, 23582, 23583, 23584, 23585, 23586, 23587, 23589, 23590, 23591, 23592, 23593, 23594, 23595, 23596, 23597, 23598, 23600, 23601, 23602, 23612, 23620, 23636, 23637, 23679, 23681, 23687, 23701, 23704, 23705, 23714, 23716, 23717, 23718, 23720, 23723, 23724, 23727, 23741, 23745, 23746, 23747, 23748, 23751, 23752, 23753, 23757, 23759, 23761, 23762, 23764, 23766, 23768, 23769, 23774, 23786, 23787, 23789, 23790, 23797, 23807, 23811, 23812, 23813, 23814, 23815, 23817, 23818, 23822, 23832, 23834, 23835, 23841, 23843, 23858, 23861, 23863, 23864, 23868, 23869, 23873, 23877, 23878, 23879, 23880, 23881, 23889, 23892, 23893, 23896, 23897, 23899, 23900, 23905, 23907, 23912, 23913, 23914, 23920, 23928, 23941, 23942, 23944, 23948, 23949, 23950, 23951, 23969, 23979, 23995, 23999, 24001, 24005, 24006, 24007, 24024, 24025, 24043, 24047, 24059, 24064, 24065, 24133, 24136, 24138, 24143, 24144, 24159, 24175, 24179, 24180, 24187, 24207, 24208, 24217, 24222, 24223, 24224, 24225, 24239, 24240, 24241, 24242, 24243, 24244, 24245, 24246, 24247, 24312, 24320, 24325, 24338, 24351, 24352, 24358, 24363, 24365, 24367, 24369, 24370, 24374, 24375, 24377, 24378, 24379, 24382, 24383, 24384, 24386, 24388, 24389, 24392, 24393, 24394, 24395, 24396, 24397, 24403, 24404, 24405, 24406, 24407, 24408, 24409, 24410, 24411, 24412, 24413, 24414, 24415, 24416, 24419, 24420, 24421, 24422, 24423, 24424, 24425, 24426, 24427, 24428, 24429, 24430, 24431, 24432, 24433, 24434, 24435, 24436, 24437, 24441, 24442, 24443, 24444, 24445, 24448, 24451, 24452, 24453, 24455, 24456, 24457, 24476, 24477, 24480, 24481, 24482, 24483, 24486, 24487, 24488, 24489, 24490, 24504, 24505, 24506, 24507, 24508, 24509, 24520, 24530, 24549, 24550, 24551, 24552, 24630, 24653, 24654, 24667, 24668, 24670, 24671, 24672, 24727, 24728, 24729, 24734, 24735, 24736, 24737, 24738, 24739, 24740, 24743, 24780, 24782, 24792, 24805, 24818, 24819, 24830, 24833, 24834, 24835, 24836, 24837, 24838, 24839, 24840, 24841, 24842, 24843, 24851, 24858, 24868, 24905, 24906, 24924, 24925, 24926, 24927, 24929, 24930, 24931, 24934, 24935, 24968, 24969, 24970, 24971, 24974, 24977, 24982, 24984, 24985, 24986, 24987, 24988, 24989, 24990, 24993, 24995, 24996, 24997, 24998, 25007, 25009, 25010, 25011, 25012, 25013, 25014, 25015, 25016, 25017, 25018, 25019, 25020, 25021, 25022, 25023, 25024, 25025, 25029, 25040, 25050, 25051, 25052, 25053, 25054, 25055, 25056, 25058, 25062, 25070, 25071, 25072, 25074, 25075, 25076, 25077, 25078, 25079, 25080, 25081, 25082, 25083, 25089, 25093, 25094, 25095, 25096, 25097, 25098, 25099, 25100, 25101, 25102, 25103, 25104, 25105, 25106, 25107, 25109, 25110, 25111, 25113, 25139, 25145, 25146, 25147, 25148, 25149, 25150, 25151, 25152, 25168, 25171, 25173, 25176, 25177, 25178, 25179, 25180, 25181, 25182, 25183, 25184, 25185, 25186, 25187, 25188, 25189, 25190, 25191, 25193, 25194, 25195, 25196, 25200, 25202, 25207, 25212, 25158, 25160, 24664, 24723, 24744, 24675, 24777, 24674, 25061, 25031, 24559, 25153, 24553, 24555, 24561, 24698, 25033, 24554, 24557, 24683, 24684, 24688, 24696, 24697, 24556, 24558, 24685, 24686, 24687, 24762, 24822, 25155, 24690, 24844, 24848, 25976, 25992, 25141, 25144, 25134, 25967, 24938, 25142, 25034, 24813, 25991, 25885, 25140, 25167, 25059, 26253, 25162, 25028, 25170, 25001, 25060, 25063, 25115, 25143, 25003, 25027, 25580, 24722, 25049, 25047, 25030, 24965, 24967, 24761, 25138, 24976, 25161, 25169, 25057, 25002, 24972, 25032, 24966, 24978, 24979, 24994, 24999, 25977, 26560, 24960, 25175, 25073, 25132, 25164, 24656, 24815, 25084, 67, 70, 72, 75, 81, 149, 150, 161, 163, 165, 200, 204, 207, 208, 209, 219, 220, 243, 260, 296, 298, 301, 318, 319, 320, 321, 322, 323, 324, 326, 333, 336, 339, 354, 380, 386, 444, 470, 496, 497, 498, 509, 516, 535, 536, 538, 586, 592, 605, 606, 607, 609, 610, 611, 612, 613, 614, 725, 753, 809, 897, 904, 919, 924, 1058, 1230, 1235, 1288, 1290, 1306, 1361, 1455, 1467, 1485, 1546, 1567, 1643, 1644, 1649, 1659, 1677, 1859, 1987, 2087, 2133, 2197, 2199, 2200, 2220, 2223, 2293, 2295, 2296, 2297, 2300, 2301, 2312, 2313, 2441, 2617, 2756, 2813, 2815, 2872, 2883, 2885, 2940, 3070, 3071, 3082, 3148, 3176, 3202, 3299, 3302, 3303, 3307, 3420, 3427, 3440, 3525, 3558, 3565, 3623, 3651, 3718, 3831, 4045, 4115, 4313, 4315, 4318, 4439, 4579, 4882, 5050, 5051, 5098, 5131, 5192, 5544, 5604, 5678, 5813, 5818, 5876, 5877, 5904, 6032, 6046, 6067, 6183, 6769, 6770, 6783, 8549, 9557, 9577, 9617, 9820, 10256, 10265, 10362, 10365, 10368, 10401, 10402, 10403, 10404, 10443, 10444, 10446, 10448, 10450, 10607, 10810, 11337, 11341, 11342, 11343, 11344, 11345, 11349, 11354, 11358, 11364, 11366, 11367, 11369, 11375, 11376, 11377, 11379, 11384, 11385, 11386, 11449, 11463, 11468, 11478, 11481, 11493, 11495, 11499, 11500, 11599, 11601, 11660, 11670, 11959, 12038, 14201, 14699, 14706, 14711, 15210, 15223, 15226, 15227, 15228, 15231, 15232, 15234, 15237, 15238, 15239, 15243, 15244, 15245, 15248, 15251, 15253, 15254, 15255, 15256, 15257, 15258, 15259, 15322, 15326, 15329, 15330, 15331, 15332, 15337, 15342, 15345, 15346, 15347, 15393, 15472, 15646, 16138, 16140, 16188, 16556, 16557, 16560, 16561, 16562, 16563, 16567, 16569, 16570, 16571, 16572, 16581, 17463, 17733, 17813, 17828, 17939, 17965, 17966, 18329, 18355, 18366, 18367, 18699, 19711, 19714, 23183, 20051, 22165, 21219, 21223, 21378, 20591, 20590, 21785, 22740, 22742, 22852, 22854, 22944, 22961, 23126, 23238, 24324, 24560, 24649, 24650, 24666, 24689, 24692, 24693, 24695, 24699, 24708, 24715, 24745, 24781, 24808, 24809, 24850, 24854, 24855, 19892, 24866, 24867, 24881, 24882, 24885, 24886, 24891, 24892, 24893, 24895, 24903, 24904, 24907, 24908, 24916, 24917, 24918, 24919, 24920, 24921, 24922, 24923, 24928, 24932, 24933, 24936, 24937, 24939, 24940, 24941, 24942, 24943, 24944, 24945, 24946, 24947, 24948, 24949, 24950, 24951, 24952, 24953, 24955, 24958, 24959, 24961, 24962, 24963, 24964, 24975, 24980, 24981, 24991, 25000, 25004, 25005, 25008, 25035, 25036, 25037, 25038, 25039, 25041, 25042, 25043, 25044, 25045, 25046, 25064, 25065, 25066, 25067, 25068, 25069, 25085, 25086, 25087, 25088, 25090, 25091, 25092, 25108, 25112, 25114, 25116, 25117, 25118, 25119, 25120, 25121, 25122, 25123, 25124, 25125, 25126, 25127, 25128, 25129, 25130, 25131, 25133, 25135, 25136, 25137, 25154, 25156, 25157, 25163, 25165, 25166, 25172, 25174, 25192, 25213, 25214, 25218, 25223, 25225, 25236, 25246, 25265, 25267, 25268, 25303, 25305, 25315, 25319, 25324, 25325, 25344, 25345, 25346, 25347, 25348, 25354, 25357, 25358, 25360, 25363, 25367, 25368, 25369, 25370, 25371, 25372, 25373, 25483, 25484, 25485, 25486, 25491, 25499, 25500, 25502, 25506, 25507, 25508, 25509, 25515, 25518, 25535, 25536, 25537, 25538, 25539, 25540, 19891, 19890, 19889, 19888, 19887, 19886, 19885, 19884, 18621, 18620, 18619, 18618, 18617, 18616, 18615, 18614, 18613, 18612, 18611, 18610, 18609, 18608, 18607, 18606, 18605, 18604, 18603, 18602, 18601, 18436, 18435, 18434, 18433, 18432, 18059, 18058, 18057, 18056, 18055, 25588, 25591, 25592, 25593, 25595, 25597, 25598, 25599, 25603, 25608, 25632, 25633, 25634, 25638, 25639, 25640, 25644, 25653, 25661, 25662, 25663, 25695, 25697, 25703, 25706, 25708, 25710, 25731, 25735, 25740, 25741, 25744, 25745, 25746, 25754, 25755, 25756, 25757, 25770, 25772, 25782, 25795, 25796, 25798, 25799, 25824, 25837, 25840, 25848, 25851, 25852, 25853, 25854, 25855, 25856, 25857, 25858, 25859, 25860, 25863, 25864, 25865, 25866, 25867, 25868, 25869, 25870, 25871, 25872, 25873, 25874, 25875, 25876, 25877, 25878, 25879, 25882, 25883, 25884, 25886, 25887, 25888, 25889, 25890, 25891, 25892, 25893, 25894, 25895, 25896, 25897, 25898, 25899, 25900, 25901, 25902, 25903, 25904, 25905, 25906, 25907, 25908, 25909, 25910, 25911, 25912, 25913, 25914, 25915, 25916, 25917, 25918, 25919, 25920, 25921, 25922, 25923, 25924, 25925, 25926, 25927, 25928, 25929, 25930, 25931, 25932, 25933, 25934, 25935, 25936, 25937, 25938, 25939, 25940, 25941, 25942, 25943, 25944, 25945, 25946, 25947, 25948, 25949, 25950, 25951, 25952, 25953, 25954, 25955, 25956, 25957, 25958, 25959, 25960, 25961, 25962, 25964, 25965, 25966, 25970, 25971, 25972, 25973, 25974, 25975, 25980, 25985, 25994, 26007, 26012, 26016, 26017, 26019, 26020, 26021, 26024, 26027, 26028, 26029, 26030, 26031, 26032, 26033, 26037, 26038, 26042, 26046, 26050, 26056, 26057, 26075, 26089, 26090, 26091, 26092, 26101, 26102, 26111, 26113, 26116, 26119, 26120, 26121, 26123, 26124, 26131, 26164, 26166, 26176, 26177, 26178, 26188, 26190, 26192, 26204, 26207, 26214, 26215, 26216, 26221, 26222, 26223, 26230, 26238, 26239, 26240, 26241, 26242, 26243, 26244, 26246, 26247, 26251, 26254, 26255, 26258, 26259, 26262, 26267, 26289, 26300, 26301, 26302, 26303, 26304, 26305, 26306, 26307, 26308, 26309, 26323, 26324, 26325, 26326, 26327, 26328, 26329, 26330, 26331, 26332, 18054, 18053, 18052, 18051, 18050, 18049, 26346, 26350, 26351, 26352, 26353, 26354, 26355, 26367, 26378, 26383, 26384, 26391, 26393, 26394, 26395, 26396, 26397, 26398, 26400, 26401, 26438, 26439, 26464, 26465, 26466, 26502, 26520, 26534, 26576, 26579, 26650, 18048, 26698, 26724, 26738, 26739, 26740, 26741, 26742, 26743, 26744, 26745, 26747, 26748, 26749, 26750, 26751, 26752, 26753, 26754, 26755, 26756, 26757, 26758, 26759, 26760, 26765, 26781, 27703, 27705, 27666, 27721, 27722, 27667, 29093, 29089, 28267, 27668, 28126, 27723, 27711, 28344, 28343, 28363, 27704, 28470, 28569, 28596, 28572, 28571, 28573, 27217, 28206, 27398, 27346, 27399, 28132, 28163, 27637, 27684, 27541, 27817, 27478, 27215, 27584, 27989, 27890, 26834, 28067, 28209, 28210, 28225, 28227, 28226, 26719, 26775, 26774, 26776, 26764, 26822, 27169, 27166, 27818, 28329, 27216, 27489, 27867, 27914, 29095, 27707, 32842, 29142, 32835, 29238, 27819, 29141, 29712, 29088, 29144, 29152, 29016, 29154, 29019, 29290, 29287, 29289, 29172, 30030, 30034, 27305, 27845, 27059, 30653, 29888, 30379, 32841, 26482, 27483, 26125, 29452, 25197, 28017, 30734, 30721, 28302, 26643, 29264, 29998, 27829, 30567, 30566, 30586, 30587, 30713, 30730, 32633, 32638, 32639, 28883, 26358, 26369, 28297, 27893, 29202, 29587, 29589, 29588, 28486, 27928, 29480, 28500, 32543, 29239, 29203, 29207, 29246, 29212, 29205, 29208, 32546, 32547, 28491, 28481, 28490, 28488, 32542, 32545, 29194, 29196, 28489, 29195, 29231, 29218, 29210, 29232, 32637, 26548, 31792, 31791, 31793, 31788, 31789, 31790, 30217, 25760, 25762, 28440, 24637, 25800, 26549, 27393, 29617, 25827, 25737, 29158, 25251, 25302, 26879, 27010, 25306, 25826, 25248, 25234, 25299, 25253, 25298, 24357, 25317, 25249, 25219, 25271, 25245, 25307, 25222, 25220, 24771, 25281, 25282, 26992, 25297, 25605, 32564, 26999, 26988, 25238, 25235, 27011, 25241, 25239, 25240, 26155, 27364, 27365, 25816, 24042, 26998, 26993, 26995, 27000, 26989, 26994, 26990, 25395, 25828, 25311, 27001, 26991, 26987, 26997, 27012, 25582, 25825, 25264, 25301, 25285, 25300, 25250, 27385, 29298, 29327, 28404, 25489, 31186, 30231, 32517, 28002, 30481, 25675, 31122, 25791, 28306, 27936, 23013, 23014, 23041, 23513, 23514, 23515, 23516, 23517, 23518, 23519, 23520, 23538, 23539, 23546, 23547, 23548, 23549, 23550, 23551, 23552, 23553, 23556, 23557, 23564, 23575, 23638, 23639, 23640, 23641, 23642, 23643, 23644, 23645, 23646, 23647, 23648, 23649, 23650, 23651, 23652, 23653, 23654, 23655, 23656, 23657, 23658, 23659, 23660, 23661, 23662, 23663, 23664, 23665, 23666, 23667, 23668, 23669, 23670, 23671, 23672, 23673, 23674, 23675, 23676, 23677, 23678, 23680, 23688, 23689, 23690, 23691, 23692, 23693, 23695, 23711, 23715, 23725, 23726, 23728, 23729, 23730, 23731, 23732, 23733, 23734, 23735, 23736, 23737, 23738, 23739, 23740, 23743, 23744, 23749, 23750, 23755, 23756, 23760, 23763, 23767, 23770, 23771, 23772, 23773, 23776, 23777, 23778, 23779, 23780, 23781, 23782, 23783, 23784, 23785, 23791, 23792, 23793, 23794, 23796, 23801, 23802, 23803, 23804, 23805, 23806, 23809, 23810, 23816, 23821, 23823, 23826, 23831, 23833, 23836, 23837, 23838, 23839, 23840, 23842, 23844, 23851, 23856, 23857, 23859, 23860, 23862, 23865, 23866, 23867, 23870, 23871, 23874, 23875, 23876, 23882, 23883, 23884, 23885, 23886, 23887, 23888, 23891, 23895, 23898, 23901, 23906, 23908, 23911, 23915, 23916, 23917, 23919, 23921, 23922, 23923, 23924, 23925, 23929, 23930, 23931, 23932, 23933, 23934, 23935, 23937, 23938, 23939, 23940, 23943, 23945, 23946, 23947, 23953, 23954, 23956, 23957, 23958, 23959, 23960, 23961, 23962, 23963, 23964, 23965, 23967, 23968, 23970, 23972, 23974, 23975, 23976, 23977, 23978, 23980, 23981, 23982, 23983, 23984, 23985, 23986, 23987, 23989, 23990, 23991, 23992, 23993, 23994, 23996, 23997, 23998, 24000, 24008, 24009, 24010, 24012, 24013, 24014, 24015, 24016, 24017, 24018, 24019, 24020, 24021, 24022, 24023, 24026, 24027, 24028, 24029, 24030, 24031, 24032, 24033, 24035, 24037, 24038, 24040, 24041, 24044, 24045, 24046, 24048, 24049, 24050, 24051, 24052, 24053, 24054, 24055, 24056, 24057, 24058, 24060, 24061, 24062, 24063, 24066, 24067, 24068, 24069, 24071, 24072, 24073, 24074, 24075, 24076, 24077, 24078, 24079, 24080, 24081, 24082, 24083, 24084, 24085, 24086, 24087, 24088, 24089, 24090, 24091, 24092, 24093, 24094, 24095, 24096, 24097, 24098, 24099, 24100, 24101, 24102, 24103, 24104, 24105, 24106, 24107, 24110, 24111, 24112, 24113, 24114, 24115, 24116, 24117, 24118, 24119, 24120, 24121, 24122, 24123, 24124, 24125, 24126, 24127, 24128, 24129, 24130, 24131, 24132, 24134, 24135, 24137, 24139, 24141, 24142, 24145, 24146, 24147, 24148, 24149, 24150, 24151, 24152, 24153, 24154, 24155, 24156, 24157, 24158, 24160, 24161, 24162, 24164, 24165, 24166, 24167, 24168, 24169, 24170, 24172, 24173, 24174, 24176, 24177, 24178, 24181, 24182, 24183, 24184, 24185, 24186, 24188, 24189, 24190, 24191, 24192, 24193, 24194, 24195, 24196, 24197, 24198, 24199, 24200, 24201, 24206, 24209, 24210, 24211, 24212, 24213, 24214, 24215, 24216, 24218, 24219, 24221, 24226, 24227, 24228, 24229, 24230, 24231, 24232, 24233, 24234, 24235, 24236, 24237, 24238, 24248, 24249, 24250, 24251, 24252, 24253, 24254, 24255, 24256, 24257, 24258, 24259, 24260, 24261, 24262, 24266, 24267, 24268, 24269, 24270, 24271, 24272, 24273, 24274, 24275, 24276, 24277, 24278, 24279, 24280, 24281, 24282, 24283, 24284, 24285, 24286, 24287, 24288, 24289, 24290, 24291, 24313, 24314, 24315, 24316, 24317, 24321, 24322, 24323, 24326, 24327, 24328, 24329, 24330, 24331, 24332, 24333, 24334, 24335, 24336, 24339, 24340, 24341, 24342, 24343, 24344, 24345, 24346, 24347, 24348, 24349, 24350, 24353, 24354, 24355, 24356, 24359, 24362, 24371, 24376, 24380, 24381, 24385, 24387, 24390, 24391, 24398, 24399, 24400, 24401, 24418, 24438, 24439, 24440, 24446, 24447, 24449, 24450, 24454, 24458, 24459, 24460, 24461, 24464, 24465, 24466, 24467, 24469, 24471, 24472, 24473, 24474, 24475, 24478, 24479, 24485, 24494, 24500, 24512, 24513, 24514, 24515, 24516, 24517, 24518, 24521, 24524, 24525, 24526, 24528, 24531, 24532, 24533, 24534, 24535, 24537, 24538, 24539, 24540, 24541, 24542, 24543, 24544, 24546, 24547, 24548, 24562, 24563, 24564, 24565, 24566, 24567, 24568, 24569, 24570, 24571, 24572, 24573, 24574, 24575, 24576, 24577, 24578, 24579, 24580, 24581, 24582, 24583, 24584, 24585, 24586, 24587, 24588, 24589, 24590, 24591, 24592, 24593, 24594, 24595, 24596, 24597, 24598, 24599, 24600, 24601, 24602, 24603, 24604, 24605, 24606, 24607, 24608, 24609, 24610, 24611, 24612, 24613, 24614, 24615, 24616, 24617, 24618, 24619, 24620, 24621, 24622, 24623, 24624, 24625, 24626, 24627, 24628, 24629, 24633, 24634, 24635, 24636, 24638, 24639, 24640, 24641, 24642, 24643, 24644, 24645, 24646, 24647, 24648, 24651, 24652, 24655, 24661, 24662, 24663, 24665, 24669, 24673, 24676, 24677, 24678, 24681, 24682, 24694, 24701, 24702, 24703, 24704, 24705, 24706, 24707, 24709, 24712, 24713, 24714, 24716, 24717, 24718, 24719, 24720, 24721, 24724, 24725, 24726, 24730, 24731, 24732, 24733, 24741, 24742, 24746, 24747, 24748, 24749, 24750, 24751, 24752, 24754, 24755, 24756, 24757, 24758, 24759, 24760, 24763, 24764, 24765, 24767, 24768, 24769, 24770, 24775, 24776, 24778, 24779, 24783, 24784, 24785, 24786, 24787, 24788, 24789, 24790, 24791, 24793, 24794, 24795, 24796, 24797, 24798, 24799, 24800, 24801, 24802, 24803, 24804, 24806, 24807, 24810, 24811, 24812, 24816, 24817, 24820, 24821, 24823, 24824, 24825, 24826, 24827, 24828, 24829, 24831, 24832, 24845, 24846, 24847, 24849, 24852, 24853, 24859, 24861, 24862, 24863, 24864, 24865, 24869, 24870, 24871, 24872, 24874, 24875, 24876, 24877, 24878, 24879, 24880, 24883, 24884, 24887, 24888, 24889, 24890, 24894, 24896, 24897, 24898, 24899, 24900, 24901, 24902, 24910, 24911, 24912, 24913, 24914, 24915, 24954, 24956, 24957, 24973, 24983, 24992, 25006, 25026, 25198, 25199, 25201, 25203, 25204, 25205, 25206, 25208, 25209, 25210, 25211, 25215, 25216, 25217, 25221, 25224, 25226, 25227, 25228, 25229, 25230, 25231, 25232, 25233, 25237, 25242, 25243, 25244, 25247, 25252, 25254, 25255, 25256, 25257, 25258, 25259, 25260, 25261, 25262, 25263, 25266, 25269, 25270, 25272, 25273, 25274, 25275, 25276, 25277, 25278, 25279, 25280, 25283, 25284, 25286, 25287, 25288, 25289, 25290, 25291, 25292, 25293, 25294, 25295, 25296, 25308, 25309, 25310, 25312, 25313, 25314, 25316, 25318, 25320, 25321, 25322, 25323, 25326, 25327, 25328, 25329, 25330, 25331, 25332, 25333, 25334, 25335, 25336, 25337, 25338, 25339, 25340, 25341, 25342, 25343, 25349, 25350, 25351, 25352, 25353, 25355, 25356, 25359, 25361, 25362, 25364, 25365, 25366, 25374, 25375, 25376, 25377, 25378, 25379, 25380, 25381, 25382, 25383, 25384, 25385, 25386, 25387, 25388, 25389, 25390, 25391, 25392, 25393, 25394, 25396, 25397, 25398, 25399, 25400, 25401, 25402, 25403, 25404, 25405, 25406, 25410, 25411, 25412, 25413, 25414, 25415, 25416, 25417, 25418, 25419, 25420, 25421, 25422, 25423, 25424, 25425, 25426, 25427, 25428, 25429, 25430, 25431, 25432, 25433, 25434, 25435, 25436, 25437, 25438, 25439, 25440, 25441, 25442, 25443, 25444, 25445, 25446, 25447, 25448, 25449, 25450, 25451, 25452, 25453, 25454, 25455, 25456, 25457, 25458, 25459, 25460, 25461, 25462, 25463, 25464, 25465, 25466, 25467, 25468, 25469, 25470, 25471, 25472, 25473, 25474, 25475, 25476, 25477, 25478, 25479, 25480, 25481, 25482, 25487, 25488, 25490, 25492, 25493, 25494, 25495, 25496, 25497, 25498, 25501, 25503, 25504, 25505, 25510, 25511, 25512, 25513, 25514, 25516, 25519, 25520, 25521, 25522, 25523, 25524, 25525, 25526, 25527, 25528, 25529, 25530, 25531, 25532, 25533, 25534, 25581, 25583, 25584, 25585, 25586, 25587, 25589, 25590, 25594, 25596, 25600, 25601, 25602, 25604, 25606, 25607, 25609, 25610, 25611, 25612, 25613, 25614, 25615, 25616, 25617, 25618, 25619, 25622, 25623, 25624, 25625, 25629, 25636, 25650, 25651, 25652, 25654, 25655, 25656, 25658, 25659, 25660, 25664, 25665, 25666, 25667, 25668, 25669, 25670, 25671, 25672, 25673, 25674, 25676, 25677, 25678, 25679, 25680, 25681, 25682, 25683, 25684, 25685, 25686, 25687, 25688, 25689, 25690, 25691, 25692, 25693, 25694, 25698, 25699, 25700, 25701, 25702, 25704, 25705, 25707, 25709, 25711, 25712, 25713, 25714, 25715, 25716, 25717, 25718, 25719, 25720, 25721, 25722, 25723, 25724, 25725, 25726, 25727, 25728, 25729, 25730, 25732, 25733, 25734, 25736, 25738, 25739, 25742, 25743, 25747, 25748, 25749, 25750, 25751, 25752, 25753, 25758, 25759, 25761, 25763, 25764, 25765, 25766, 25767, 25768, 25769, 25771, 25773, 25774, 25775, 25776, 25777, 25778, 25780, 25781, 25783, 25784, 25785, 25786, 25787, 25788, 25789, 25790, 25792, 25793, 25794, 25797, 25801, 25802, 25803, 25804, 25805, 25806, 25807, 25808, 25809, 25810, 25811, 25812, 25813, 25814, 25815, 25817, 25818, 25819, 25820, 25821, 25822, 25823, 25829, 25830, 25831, 25832, 25833, 25834, 25835, 25836, 25838, 25839, 25841, 25842, 25843, 25844, 25845, 25846, 25847, 25849, 25850, 25861, 25862, 25880, 25881, 25963, 25968, 25969, 25978, 25979, 25981, 25982, 25983, 25984, 25986, 25987, 25988, 25989, 25990, 25993, 25995, 26040, 26041, 26043, 26044, 26045, 26047, 26048, 26073, 26076, 26078, 26080, 26081, 26082, 26083, 26084, 26085, 26086, 26088, 26093, 26094, 26096, 26097, 26098, 26099, 26103, 26104, 26105, 26109, 26110, 26112, 26114, 26115, 26117, 26126, 26127, 26128, 26129, 26130, 26156, 26157, 26158, 26159, 26160, 26161, 26162, 26165, 26167, 26169, 26170, 26171, 26172, 26173, 26174, 26175, 26179, 26180, 26181, 26182, 26183, 26184, 26185, 26186, 26187, 26189, 26191, 26193, 26194, 26195, 26196, 26197, 26198, 26199, 26200, 26201, 26202, 26203, 26205, 26206, 26212, 26213, 26217, 26218, 26219, 26220, 26224, 26225, 26226, 26227, 26228, 26229, 26231, 26232, 26233, 26234, 26235, 26236, 26237, 26245, 26248, 26249, 26250, 26252, 26256, 26257, 26260, 26261, 26263, 26264, 26265, 26266, 26268, 26269, 26270, 26271, 26272, 26273, 26274, 26275, 26276, 26277, 26278, 26279, 26280, 26281, 26282, 26283, 26284, 26285, 26286, 26287, 26288, 26290, 26291, 26292, 26293, 26294, 26295, 26296, 26297, 26298, 26299, 26310, 26311, 26312, 26313, 26316, 26317, 26318, 26319, 26320, 26321, 26322, 26333, 26334, 26335, 26336, 26343, 26344, 26347, 26348, 26349, 26356, 26357, 26359, 26360, 26361, 26362, 26363, 26364, 26365, 26366, 26368, 26370, 26371, 26372, 26373, 26374, 26375, 26376, 26377, 26379, 26380, 26381, 26382, 26387, 26388, 26389, 26390, 26392, 26402, 26403, 26404, 26405, 26406, 26407, 26408, 26409, 26410, 26411, 26412, 26413, 26414, 26415, 26416, 26417, 26418, 26420, 26421, 26422, 26423, 26424, 26425, 26426, 26427, 26428, 26429, 26430, 26432, 26433, 26434, 26435, 26436, 26437, 26440, 26441, 26442, 26443, 26444, 26445, 26446, 26447, 26448, 26449, 26450, 26451, 26452, 26454, 26455, 26456, 26457, 26458, 26459, 26460, 26461, 26462, 26467, 26468, 26469, 26470, 26471, 26472, 26473, 26474, 26475, 26476, 26477, 26480, 26481, 26483, 26484, 26485, 26486, 26487, 26488, 26489, 26490, 26491, 26492, 26493, 26494, 26495, 26496, 26497, 26498, 26499, 26500, 26501, 26503, 26504, 26505, 26506, 26507, 26508, 26509, 26510, 26511, 26512, 26513, 26514, 26515, 26516, 26517, 26518, 26519, 26521, 26522, 26523, 26524, 26525, 26526, 26527, 26528, 26529, 26530, 26531, 26532, 26533, 26535, 26536, 26537, 26538, 26539, 26540, 26541, 26542, 26543, 26544, 26546, 26547, 26550, 26551, 26552, 26553, 26554, 26555, 26556, 26557, 26558, 26559, 26561, 26564, 26565, 26566, 26567, 26568, 26569, 26570, 26571, 26572, 26573, 26574, 26575, 26577, 26578, 26580, 26581, 26582, 26583, 26584, 26585, 26586, 26587, 26588, 26589, 26590, 26591, 26592, 26593, 26594, 26595, 26596, 26597, 26598, 26599, 26600, 26601, 26602, 26603, 26604, 26605, 26606, 26607, 26608, 26612, 26613, 26614, 26615, 26616, 26617, 26618, 26619, 26620, 26621, 26622, 26623, 26624, 26625, 26626, 26627, 26628, 26630, 26631, 26632, 26633, 26634, 26635, 26636, 26637, 26638, 26639, 26641, 26644, 26645, 26646, 26647, 26648, 26649, 26652, 26653, 26654, 26655, 26656, 26658, 26659, 26660, 26661, 26662, 26663, 26664, 26665, 26666, 26667, 26668, 26669, 26670, 26671, 26672, 26673, 26674, 26675, 26676, 26677, 26678, 26679, 26680, 26681, 26682, 26683, 26684, 26685, 26686, 26687, 26690, 26691, 26692, 26693, 26694, 26696, 26697, 26699, 26700, 26701, 26702, 26703, 26704, 26705, 26706, 26707, 26708, 26709, 26711, 26712, 26713, 26716, 26718, 26720, 26721, 26722, 26723, 26725, 26726, 26727, 26728, 26729, 26730, 26731, 26732, 26733, 26734, 26735, 26736, 26737, 26746, 26761, 26762, 26763, 26766, 26767, 26768, 26769, 26770, 26771, 26772, 26773, 26777, 26778, 26779, 26780, 26782, 26783, 26784, 26785, 26786, 26787, 26788, 26789, 26790, 26791, 26792, 26793, 26794, 26795, 26796, 26797, 26798, 26799, 26800, 26801, 26802, 26803, 26804, 26805, 26806, 26807, 26808, 26809, 26810, 26811, 26812, 26813, 26814, 26815, 26816, 26817, 26818, 26819, 26820, 26821, 26823, 26824, 26825, 26826, 26827, 26828, 26829, 26830, 26831, 26832, 26833, 26835, 26836, 26837, 26838, 26839, 26840, 26841, 26842, 26844, 26845, 26846, 26847, 26848, 26850, 26851, 26852, 26853, 26854, 26855, 26856, 26857, 26858, 26859, 26860, 26861, 26862, 26863, 26864, 26865, 26867, 26868, 26869, 26870, 26871, 26872, 26873, 26874, 26875, 26876, 26877, 26878, 26880, 26881, 26882, 26883, 26884, 26885, 26886, 26887, 26888, 26889, 26890, 26891, 26892, 26893, 26894, 26895, 26896, 26897, 26898, 26899, 26900, 26901, 26902, 26903, 26904, 26905, 26906, 26907, 26908, 26909, 26910, 26911, 26912, 26913, 26914, 26915, 26916, 26917, 26918, 26919, 26920, 26921, 26922, 26923, 26924, 26925, 26926, 26927, 26928, 26929, 26930, 26931, 26932, 26933, 26934, 26935, 26936, 26937, 26938, 26939, 26941, 26942, 26943, 26944, 26945, 26946, 26947, 26948, 26949, 26950, 26951, 26952, 26953, 26954, 26955, 26956, 26957, 26958, 26959, 26960, 26961, 26962, 26963, 26964, 26965, 26966, 26967, 26968, 26969, 26970, 26971, 26972, 26973, 26974, 26975, 26976, 26977, 26978, 26979, 26980, 26981, 26982, 26983, 26984, 26985, 26986, 26996, 27002, 27003, 27004, 27005, 27006, 27007, 27008, 27009, 27014, 27015, 27017, 27018, 27019, 27020, 27021, 27022, 27023, 27024, 27025, 27026, 27027, 27028, 27029, 27030, 27031, 27032, 27033, 27034, 27035, 27036, 27037, 27038, 27039, 27040, 27041, 27042, 27043, 27044, 27045, 27046, 27047, 27048, 27049, 27051, 27052, 27053, 27054, 27055, 27056, 27057, 27058, 27060, 27061, 27062, 27063, 27064, 27065, 27066, 27067, 27068, 27069, 27070, 27071, 27072, 27073, 27074, 27075, 27079, 27088, 27089, 27099, 27101, 27102, 27103, 27104, 27105, 27106, 27107, 27108, 27109, 27110, 27111, 27112, 27113, 27114, 27115, 27117, 27118, 27119, 27120, 27121, 27122, 27123, 27125, 27126, 27127, 27131, 27132, 27133, 27134, 27135, 27136, 27137, 27138, 27139, 27140, 27141, 27142, 27143, 27144, 27145, 27146, 27147, 27148, 27149, 27150, 27151, 27152, 27153, 27154, 27155, 27156, 27157, 27158, 27159, 27160, 27161, 27162, 27163, 27164, 27165, 27167, 27168, 27170, 27171, 27172, 27173, 27174, 27175, 27176, 27177, 27178, 27179, 27180, 27181, 27182, 27183, 27184, 27185, 27186, 27187, 27188, 27189, 27190, 27191, 27193, 27194, 27195, 27196, 27197, 27198, 27199, 27200, 27201, 27202, 27203, 27204, 27205, 27206, 27207, 27208, 27209, 27210, 27211, 27212, 27213, 27214, 27218, 27219, 27220, 27221, 27222, 27223, 27224, 27225, 27226, 27227, 27228, 27229, 27230, 27231, 27232, 27233, 27234, 27235, 27236, 27237, 27238, 27239, 27240, 27241, 27242, 27243, 27244, 27245, 27246, 27247, 27248, 27249, 27250, 27251, 27252, 27253, 27254, 27255, 27257, 27258, 27259, 27260, 27261, 27262, 27263, 27264, 27265, 27266, 27267, 27268, 27270, 27271, 27272, 27273, 27274, 27275, 27276, 27277, 27278, 27279, 27280, 27281, 27282, 27283, 27284, 27285, 27286, 27287, 27288, 27289, 27290, 27291, 27292, 27293, 27294, 27295, 27296, 27297, 27298, 27299, 27300, 27301, 27302, 27303, 27304, 27306, 27307, 27308, 27309, 27310, 27311, 27312, 27313, 27314, 27315, 27316, 27317, 27318, 27319, 27320, 27321, 27322, 27323, 27324, 27326, 27327, 27328, 27329, 27330, 27331, 27332, 27333, 27334, 27335, 27336, 27337, 27338, 27339, 27340, 27341, 27342, 27343, 27344, 27345, 27347, 27348, 27349, 27350, 27351, 27352, 27353, 27354, 27355, 27356, 27357, 27358, 27359, 27360, 27361, 27362, 27363, 27366, 27367, 27368, 27369, 27370, 27371, 27372, 27373, 27374, 27375, 27376, 27377, 27378, 27379, 27380, 27381, 27382, 27383, 27384, 27386, 27387, 27388, 27389, 27390, 27391, 27392, 27394, 27395, 27396, 27397, 27400, 27401, 27402, 27403, 27404, 27405, 27406, 27407, 27408, 27409, 27410, 27411, 27412, 27413, 27414, 27416, 27417, 27418, 27419, 27420, 27421, 27422, 27423, 27424, 27425, 27426, 27427, 27428, 27429, 27430, 27431, 27432, 27433, 27434, 27435, 27436, 27437, 27438, 27439, 27440, 27441, 27442, 27443, 27444, 27445, 27446, 27447, 27448, 27449, 27450, 27451, 27452, 27453, 27454, 27455, 27456, 27457, 27458, 27459, 27460, 27461, 27462, 27463, 27464, 27465, 27466, 27467, 27468, 27469, 27470, 27471, 27472, 27473, 27474, 27475, 27476, 27477, 27479, 27480, 27481, 27482, 27484, 27485, 27486, 27487, 27488, 27490, 27491, 27492, 27493, 27494, 27495, 27496, 27497, 27499, 27500, 27501, 27504, 27505, 27506, 27507, 27508, 27509, 27510, 27511, 27512, 27513, 27514, 27515, 27516, 27517, 27518, 27519, 27520, 27521, 27522, 27523, 27526, 27527, 27529, 27530, 27531, 27532, 27533, 27534, 27535, 27536, 27537, 27538, 27539, 27540, 27542, 27543, 27544, 27545, 27546, 27547, 27548, 27549, 27550, 27551, 27552, 27553, 27554, 27555, 27556, 27557, 27558, 27559, 27560, 27561, 27562, 27563, 27564, 27565, 27566, 27567, 27568, 27569, 27570, 27571, 27572, 27573, 27574, 27575, 27576, 27577, 27578, 27579, 27580, 27581, 27582, 27583, 27585, 27586, 27587, 27588, 27589, 27590, 27591, 27592, 27593, 27595, 27596, 27597, 27598, 27599, 27600, 27601, 27602, 27603, 27604, 27605, 27606, 27607, 27608, 27609, 27610, 27611, 27613, 27614, 27615, 27616, 27617, 27618, 27619, 27620, 27622, 27623, 27624, 27625, 27626, 27627, 27628, 27629, 27630, 27631, 27632, 27633, 27634, 27635, 27636, 27638, 27639, 27640, 27641, 27642, 27643, 27644, 27645, 27646, 27647, 27648, 27649, 27650, 27651, 27653, 27654, 27655, 27656, 27657, 27658, 27659, 27660, 27661, 27662, 27663, 27664, 27665, 27669, 27671, 27673, 27674, 27676, 27677, 27678, 27679, 27680, 27682, 27683, 27685, 27686, 27687, 27688, 27689, 27690, 27691, 27692, 27693, 27694, 27695, 27696, 27697, 27698, 27699, 27701, 27702, 27706, 27708, 27709, 27710, 27712, 27713, 27714, 27715, 27716, 27717, 27718, 27719, 27720, 27724, 27725, 27726, 27727, 27729, 27730, 27731, 27732, 27733, 27734, 27736, 27737, 27738, 27740, 27741, 27742, 27743, 27744, 27745, 27746, 27747, 27748, 27749, 27750, 27751, 27752, 27753, 27754, 27755, 27756, 27757, 27758, 27759, 27760, 27761, 27762, 27763, 27764, 27765, 27766, 27767, 27768, 27769, 27770, 27771, 27772, 27773, 27774, 27775, 27776, 27777, 27778, 27779, 27780, 27781, 27782, 27783, 27784, 27785, 27786, 27787, 27788, 27789, 27791, 27792, 27793, 27794, 27795, 27796, 27797, 27798, 27799, 27800, 27801, 27802, 27803, 27804, 27805, 27806, 27807, 27808, 27809, 27810, 27811, 27812, 27813, 27814, 27815, 27816, 27820, 27821, 27822, 27823, 27824, 27825, 27826, 27827, 27828, 27830, 27832, 27833, 27834, 27835, 27836, 27837, 27838, 27839, 27840, 27841, 27842, 27843, 27844, 27846, 27847, 27848, 27849, 27850, 27851, 27852, 27853, 27854, 27855, 27856, 27857, 27858, 27859, 27860, 27862, 27863, 27864, 27865, 27866, 27868, 27869, 27870, 27871, 27872, 27873, 27874, 27875, 27876, 27877, 27878, 27879, 27880, 27881, 27882, 27883, 27884, 27885, 27886, 27887, 27888, 27889, 27891, 27892, 27894, 27895, 27896, 27897, 27898, 27899, 27900, 27902, 27903, 27904, 27905, 27906, 27907, 27908, 27909, 27910, 27911, 27912, 27913, 27915, 27916, 27917, 27918, 27919, 27920, 27921, 27922, 27923, 27924, 27925, 27926, 27927, 27929, 27930, 27931, 27932, 27933, 27935, 27937, 27938, 27939, 27940, 27941, 27942, 27943, 27944, 27946, 27947, 27948, 27949, 27950, 27951, 27952, 27953, 27954, 27955, 27956, 27957, 27958, 27959, 27960, 27961, 27962, 27963, 27964, 27965, 27966, 27968, 27969, 27970, 27971, 27972, 27973, 27974, 27975, 27976, 27977, 27978, 27979, 27980, 27981, 27982, 27983, 27984, 27985, 27986, 27987, 27988, 27990, 27991, 27992, 27993, 27994, 27995, 27996, 27997, 27998, 27999, 28000, 28001, 28003, 28004, 28005, 28006, 28007, 28008, 28009, 28010, 28011, 28012, 28013, 28014, 28015, 28016, 28018, 28019, 28021, 28022, 28023, 28024, 28025, 28026, 28027, 28028, 28029, 28030, 28031, 28032, 28033, 28034, 28035, 28036, 28037, 28038, 28039, 28040, 28041, 28042, 28043, 28044, 28045, 28046, 28047, 28060, 28058, 28052, 28051, 28050, 28053, 28054, 28055, 28056, 28057, 28049, 28059, 28048, 28061, 28062, 28063, 28064, 28065, 28066, 28068, 28069, 28070, 28076, 28077, 28078, 28079, 28080, 28081, 28082, 28083, 28085, 28086, 28087, 28088, 28089, 28090, 28092, 28093, 28094, 28095, 28096, 28097, 28098, 28099, 28100, 28101, 28103, 28104, 28105, 28106, 28107, 28108, 28109, 28110, 28111, 28112, 28113, 28114, 28115, 28116, 28117, 28118, 28119, 28120, 28121, 28122, 28123, 28124, 28125, 28127, 28128, 28129, 28130, 28131, 28133, 28135, 28136, 28137, 28138, 28139, 28140, 28141, 28142, 28143, 28144, 28145, 28148, 28149, 28150, 28151, 28153, 28156, 28157, 28158, 28159, 28160, 28161, 28162, 28164, 28165, 28166, 28167, 28168, 28169, 28170, 28171, 28172, 28173, 28174, 28175, 28176, 28177, 28178, 28179, 28180, 28181, 28182, 28183, 28184, 28186, 28187, 28188, 28189, 28190, 28191, 28192, 28194, 28195, 28196, 28197, 28198, 28199, 28200, 28201, 28202, 28203, 28204, 28205, 28207, 28208, 28211, 28212, 28213, 28214, 28215, 28216, 28217, 28218, 28220, 28221, 28222, 28224, 28228, 28229, 28230, 28231, 28232, 28233, 28234, 28235, 28236, 28237, 28239, 28240, 28241, 28242, 28243, 28244, 28245, 28246, 28247, 28248, 28249, 28250, 28251, 28252, 28253, 28254, 28255, 28256, 28257, 28258, 28259, 28260, 28261, 28262, 28263, 28264, 28265, 28266, 28268, 28269, 28270, 28271, 28273, 28274, 28276, 28277, 28278, 28279, 28280, 28282, 28283, 28284, 28288, 28289, 28292, 28293, 28294, 28295, 28296, 28298, 28299, 28300, 28301, 28303, 28304, 28305, 28307, 28308, 28309, 28310, 28311, 28312, 28313, 28314, 28315, 28316, 28317, 28318, 28319, 28320, 28322, 28323, 28324, 28325, 28327, 28328, 28330, 28332, 28333, 28340, 28341, 28342, 28345, 28346, 28347, 28348, 28349, 28350, 28351, 28352, 28353, 28354, 28355, 28356, 28357, 28358, 28359, 28360, 28361, 28362, 28364, 28365, 28366, 28367, 28368, 28369, 28370, 28371, 28372, 28373, 28374, 28375, 28376, 28377, 28378, 28379, 28380, 28381, 28382, 28383, 28384, 28385, 28386, 28387, 28388, 28389, 28390, 28391, 28392, 28393, 28394, 28395, 28396, 28397, 28398, 28399, 28400, 28401, 28402, 28403, 28405, 28406, 28407, 28408, 28409, 28410, 28411, 28412, 28413, 28414, 28415, 28416, 28417, 28418, 28419, 28420, 28421, 28422, 28423, 28424, 28425, 28426, 28427, 28428, 28429, 28430, 28431, 28432, 28433, 28434, 28435, 28436, 28437, 28438, 28439, 28441, 28442, 28443, 28444, 28445, 28446, 28447, 28448, 28449, 28450, 28451, 28452, 28453, 28454, 28455, 28456, 28457, 28458, 28459, 28460, 28461, 28462, 28463, 28464, 28465, 28466, 28467, 28468, 28469, 28471, 28472, 28473, 28474, 28475, 28476, 28477, 28478, 28479, 28480, 28482, 28483, 28484, 28485, 28487, 28492, 28493, 28494, 28495, 28496, 28497, 28498, 28499, 28501, 28503, 28504, 28505, 28506, 28507, 28509, 28510, 28511, 28512, 28513, 28514, 28515, 28516, 28517, 28518, 28519, 28520, 28521, 28523, 28524, 28525, 28526, 28527, 28528, 28529, 28530, 28531, 28532, 28533, 28534, 28535, 28536, 28537, 28538, 28539, 28540, 28541, 28542, 28543, 28544, 28545, 28546, 28547, 28548, 28549, 28550, 28551, 28552, 28553, 28554, 28555, 28556, 28557, 28558, 28559, 28560, 28561, 28563, 28564, 28565, 28566, 28567, 28568, 28570, 28574, 28575, 28576, 28577, 28578, 28579, 28580, 28581, 28582, 28583, 28584, 28585, 28586, 28587, 28589, 28590, 28591, 28593, 28594, 28595, 28597, 28599, 28600, 28601, 28602, 28603, 28604, 28605, 28606, 28607, 28608, 28609, 28610, 28611, 28612, 28613, 28614, 28615, 28616, 28617, 28618, 28619, 28620, 28621, 28622, 28623, 28624, 28625, 28626, 28627, 28628, 28629, 28630, 28631, 28632, 28633, 28635, 28636, 28637, 28638, 28639, 28640, 28641, 28642, 28643, 28644, 28645, 28646, 28647, 28648, 28650, 28651, 28652, 28653, 28654, 28655, 28656, 28657, 28658, 28659, 28660, 28662, 28663, 28664, 28665, 28666, 28667, 28668, 28669, 28670, 28671, 28672, 28674, 28675, 28676, 28677, 28678, 28679, 28680, 28681, 28682, 28683, 28684, 28685, 28686, 28687, 28689, 28690, 28691, 28692, 28693, 28694, 28695, 28696, 28697, 28698, 28699, 28700, 28701, 28702, 28703, 28704, 28705, 28706, 28707, 28708, 28709, 28710, 28711, 28712, 28713, 28714, 28715, 28716, 28717, 28718, 28719, 28720, 28721, 28722, 28723, 28724, 28725, 28726, 28727, 28728, 28729, 28730, 28731, 28732, 28733, 28734, 28735, 28736, 28737, 28738, 28739, 28740, 28741, 28742, 28743, 28744, 28745, 28746, 28747, 28748, 28749, 28750, 28751, 28752, 28753, 28754, 28755, 28756, 28757, 28758, 28759, 28760, 28761, 28762, 28763, 28764, 28765, 28766, 28767, 28768, 28769, 28770, 28771, 28773, 28774, 28775, 28776, 28777, 28778, 28779, 28780, 28781, 28782, 28783, 28784, 28785, 28786, 28787, 28788, 28789, 28790, 28791, 28792, 28793, 28794, 28795, 28796, 28797, 28798, 28799, 28800, 28801, 28802, 28803, 28804, 28805, 28806, 28807, 28808, 28809, 28810, 28811, 28812, 28813, 28814, 28815, 28816, 28817, 28818, 28819, 28820, 28821, 28822, 28823, 28824, 28825, 28826, 28827, 28828, 28829, 28830, 28831, 28832, 28833, 28834, 28835, 28836, 28837, 28838, 28839, 28840, 28841, 28842, 28843, 28844, 28845, 28846, 28847, 28848, 28849, 28850, 28851, 28852, 28853, 28854, 28855, 28856, 28857, 28858, 28859, 28860, 28861, 28862, 28863, 28864, 28865, 28866, 28867, 28868, 28869, 28870, 28871, 28872, 28873, 28874, 28875, 28876, 28877, 28878, 28879, 28880, 28881, 28882, 28884, 28885, 28886, 28887, 28888, 28889, 28890, 28891, 28892, 28893, 28894, 28895, 28896, 28897, 28898, 28899, 28900, 28901, 28902, 28903, 28904, 28905, 28906, 28907, 28908, 28909, 28910, 28911, 28912, 28913, 28914, 28915, 28916, 28917, 28918, 28919, 28920, 28921, 28922, 28923, 28924, 28925, 28926, 28927, 28928, 28929, 28930, 28931, 28932, 28933, 28934, 28935, 28936, 28937, 28938, 28939, 28940, 28941, 28942, 28943, 28944, 28945, 28946, 28947, 28948, 28949, 28950, 28951, 28952, 28953, 28954, 28955, 28956, 28957, 28958, 28960, 28961, 28964, 28965, 28984, 28985, 28986, 28987, 28988, 28989, 28990, 28991, 28992, 28993, 28994, 28995, 28996, 28997, 28998, 28999, 29000, 29001, 29002, 29003, 29004, 29005, 29006, 29007, 29008, 29009, 29010, 29011, 29013, 29014, 29015, 29017, 29018, 29020, 29021, 29022, 29023, 29024, 29025, 29026, 29027, 29028, 29029, 29030, 29031, 29032, 29033, 29034, 29035, 29036, 29037, 29038, 29039, 29043, 29044, 29045, 29046, 29047, 29048, 29049, 29050, 29051, 29052, 29053, 29054, 29055, 29056, 29057, 29058, 29059, 29060, 29061, 29062, 29063, 29064, 29065, 29066, 29067, 29068, 29069, 29070, 29071, 29072, 29073, 29074, 29075, 29076, 29077, 29078, 29079, 29080, 29081, 29082, 29083, 29087, 29094, 29096, 29097, 29098, 29099, 29100, 29101, 29102, 29103, 29104, 29105, 29106, 29107, 29108, 29109, 29110, 29111, 29112, 29113, 29114, 29115, 29116, 29117, 29118, 29119, 29120, 29121, 29122, 29123, 29124, 29125, 29126, 29127, 29128, 29129, 29130, 29131, 29132, 29133, 29134, 29135, 29136, 29137, 29138, 29139, 29140, 29143, 29145, 29146, 29147, 29149, 29150, 29151, 29153, 29155, 29156, 29157, 29159, 29160, 29161, 29162, 29163, 29165, 29169, 29170, 29171, 29173, 29174, 29175, 29176, 29177, 29178, 29179, 29180, 29181, 29182, 29183, 29184, 29185, 29186, 29187, 29188, 29189, 29190, 29191, 29192, 29193, 29197, 29198, 29199, 29200, 29201, 29204, 29206, 29209, 29211, 29213, 29214, 29215, 29216, 29217, 29219, 29220, 29221, 29222, 29223, 29224, 29225, 29227, 29228, 29229, 29230, 29233, 29234, 29235, 29236, 29237, 29240, 29241, 29242, 29243, 29244, 29245, 29247, 29248, 29249, 29250, 29251, 29252, 29253, 29254, 29255, 29256, 29257, 29258, 29259, 29260, 29261, 29262, 29263, 29265, 29266, 29267, 29268, 29269, 29270, 29271, 29272, 29273, 29274, 29275, 29276, 29277, 29278, 29279, 29280, 29281, 29282, 29283, 29285, 29286, 29288, 29291, 29292, 29293, 29294, 29295, 29296, 29297, 29299, 29300, 29301, 29302, 29303, 29304, 29305, 29306, 29307, 29308, 29309, 29310, 29311, 29312, 29313, 29314, 29315, 29316, 29317, 29318, 29319, 29320, 29321, 29322, 29323, 29324, 29325, 29326, 29328, 29329, 29330, 29331, 29332, 29333, 29334, 29335, 29336, 29337, 29338, 29339, 29340, 29341, 29342, 29343, 29344, 29345, 29346, 29347, 29348, 29349, 29350, 29351, 29352, 29353, 29354, 29355, 29356, 29357, 29358, 29359, 29360, 29361, 29362, 29363, 29364, 29365, 29366, 29367, 29368, 29369, 29370, 29371, 29372, 29373, 29374, 29375, 29376, 29377, 29378, 29379, 29380, 29381, 29382, 29383, 29384, 29385, 29386, 29387, 29388, 29389, 29390, 29391, 29392, 29393, 29394, 29395, 29396, 29397, 29398, 29399, 29400, 29401, 29402, 29403, 29404, 29405, 29406, 29407, 29408, 29409, 29411, 29412, 29413, 29414, 29415, 29416, 29417, 29418, 29419, 29420, 29421, 29422, 29423, 29424, 29425, 29426, 29427, 29428, 29429, 29430, 29431, 29432, 29433, 29434, 29435, 29436, 29437, 29438, 29439, 29440, 29441, 29442, 29443, 29444, 29445, 29446, 29447, 29448, 29449, 29450, 29451, 29453, 29454, 29455, 29456, 29457, 29458, 29459, 29460, 29461, 29466, 29468, 29469, 29471, 29472, 29473, 29474, 29475, 29476, 29477, 29478, 29479, 29481, 29482, 29483, 29484, 29485, 29486, 29487, 29488, 29489, 29490, 29491, 29492, 29493, 29494, 29495, 29496, 29497, 29498, 29499, 29500, 29501, 29503, 29504, 29505, 29506, 29507, 29508, 29509, 29510, 29511, 29512, 29513, 29514, 29515, 29517, 29518, 29519, 29520, 29521, 29522, 29523, 29524, 29525, 29526, 29527, 29528, 29529, 29530, 29532, 29533, 29534, 29535, 29537, 29538, 29539, 29540, 29541, 29542, 29543, 29544, 29545, 29546, 29547, 29548, 29549, 29550, 29551, 29552, 29553, 29554, 29555, 29556, 29558, 29559, 29560, 29561, 29562, 29563, 29564, 29565, 29566, 29567, 29568, 29569, 29570, 29571, 29572, 29573, 29574, 29575, 29576, 29577, 29578, 29579, 29580, 29581, 29582, 29583, 29584, 29585, 29586, 29590, 29591, 29592, 29593, 29594, 29595, 29596, 29597, 29598, 29599, 29601, 29602, 29603, 29604, 29605, 29607, 29608, 29609, 29610, 29611, 29612, 29613, 29614, 29615, 29616, 29618, 29619, 29620, 29621, 29622, 29623, 29624, 29625, 29626, 29627, 29628, 29629, 29630, 29631, 29632, 29633, 29634, 29635, 29636, 29637, 29639, 29640, 29641, 29642, 29643, 29644, 29645, 29646, 29647, 29648, 29649, 29650, 29651, 29652, 29654, 29655, 29656, 29657, 29658, 29660, 29662, 29663, 29664, 29665, 29667, 29668, 29669, 29670, 29671, 29672, 29673, 29674, 29675, 29676, 29677, 29679, 29680, 29681, 29682, 29684, 29685, 29686, 29687, 29688, 29689, 29690, 29691, 29692, 29693, 29694, 29695, 29696, 29697, 29698, 29699, 29700, 29701, 29702, 29703, 29704, 29708, 29709, 29710, 29711, 29713, 29714, 29715, 29716, 29717, 29718, 29719, 29720, 29721, 29722, 29724, 29725, 29726, 29727, 29728, 29729, 29730, 29731, 29732, 29733, 29734, 29735, 29736, 29737, 29738, 29740, 29741, 29742, 29743, 29744, 29745, 29746, 29747, 29748, 29749, 29750, 29751, 29752, 29753, 29754, 29755, 29756, 29757, 29758, 29759, 29760, 29761, 29762, 29763, 29764, 29765, 29766, 29767, 29768, 29769, 29770, 29771, 29772, 29773, 29774, 29775, 29776, 29777, 29778, 29780, 29781, 29782, 29783, 29784, 29785, 29789, 29790, 29791, 29792, 29793, 29794, 29795, 29796, 29798, 29799, 29800, 29801, 29802, 29803, 29804, 29805, 29806, 29807, 29808, 29809, 29810, 29811, 29812, 29814, 29815, 29816, 29818, 29819, 29820, 29821, 29822, 29823, 29824, 29825, 29826, 29827, 29828, 29829, 29830, 29831, 29832, 29833, 29834, 29835, 29836, 29837, 29838, 29839, 29840, 29841, 29842, 29843, 29844, 29845, 29846, 29847, 29848, 29849, 29850, 29851, 29852, 29853, 29854, 29855, 29856, 29857, 29858, 29859, 29860, 29861, 29862, 29863, 29864, 29865, 29866, 29867, 29868, 29870, 29871, 29872, 29873, 29874, 29875, 29876, 29877, 29878, 29879, 29880, 29881, 29882, 29883, 29884, 29885, 29886, 29887, 29889, 29890, 29891, 29892, 29893, 29894, 29895, 29896, 29897, 29898, 29899, 29900, 29901, 29902, 29903, 29904, 29905, 29906, 29907, 29908, 29909, 29910, 29911, 29912, 29913, 29914, 29915, 29916, 29917, 29918, 29919, 29920, 29921, 29922, 29923, 29924, 29925, 29926, 29927, 29928, 29929, 29930, 29931, 29932, 29933, 29934, 29935, 29936, 29937, 29938, 29939, 29940, 29941, 29942, 29943, 29944, 29945, 29947, 29948, 29949, 29950, 29951, 29952, 29953, 29955, 29958, 29959, 29960, 29961, 29962, 29963, 29964, 29965, 29966, 29967, 29968, 29969, 29970, 29971, 29973, 29974, 29975, 29976, 29977, 29978, 29979, 29980, 29981, 29982, 29983, 29984, 29985, 29986, 29987, 29988, 29989, 29990, 29991, 29992, 29993, 29994, 29995, 29996, 29997, 29999, 30000, 30001, 30002, 30003, 30004, 30005, 30006, 30007, 30008, 30009, 30010, 30011, 30012, 30013, 30014, 30015, 30016, 30017, 30018, 30019, 30020, 30021, 30022, 30023, 30024, 30025, 30026, 30027, 30028, 30029, 30031, 30032, 30033, 30035, 30036, 30037, 30038, 30039, 30040, 30041, 30042, 30043, 30044, 30045, 30046, 30047, 30048, 30049, 30050, 30051, 30052, 30053, 30054, 30055, 30056, 30057, 30058, 30059, 30060, 30061, 30062, 30063, 30064, 30065, 30066, 30067, 30068, 30069, 30070, 30071, 30072, 30073, 30074, 30075, 30076, 30077, 30078, 30079, 30080, 30081, 30082, 30083, 30084, 30085, 30086, 30087, 30088, 30089, 30090, 30091, 30093, 30094, 30095, 30096, 30097, 30098, 30099, 30101, 30102, 30103, 30104, 30105, 30106, 30107, 30108, 30110, 30111, 30113, 30114, 30115, 30116, 30117, 30118, 30120, 30121, 30122, 30123, 30124, 30125, 30126, 30127, 30130, 30131, 30132, 30133, 30134, 30135, 30136, 30137, 30138, 30139, 30140, 30141, 30142, 30143, 30144, 30145, 30146, 30147, 30148, 30149, 30150, 30151, 30152, 30153, 30154, 30155, 30156, 30157, 30158, 30159, 30160, 30161, 30162, 30163, 30164, 30165, 30166, 30167, 30169, 30170, 30171, 30172, 30173, 30174, 30175, 30176, 30177, 30178, 30179, 30180, 30181, 30182, 30183, 30184, 30186, 30187, 30188, 30189, 30190, 30191, 30192, 30193, 30194, 30195, 30196, 30197, 30198, 30199, 30200, 30201, 30202, 30203, 30204, 30205, 30206, 30207, 30208, 30209, 30210, 30211, 30212, 30214, 30215, 30216, 30218, 30219, 30220, 30221, 30222, 30223, 30224, 30225, 30226, 30227, 30228, 30229, 30230, 30232, 30233, 30234, 30235, 30236, 30238, 30239, 30240, 30241, 30242, 30243, 30244, 30245, 30246, 30247, 30248, 30249, 30250, 30252, 30253, 30254, 30255, 30256, 30257, 30258, 30259, 30260, 30261, 30262, 30263, 30264, 30265, 30266, 30268, 30269, 30270, 30271, 30272, 30273, 30274, 30275, 30276, 30277, 30278, 30279, 30280, 30281, 30282, 30283, 30284, 30285, 30286, 30287, 30288, 30289, 30290, 30291, 30292, 30293, 30294, 30295, 30296, 30297, 30298, 30299, 30300, 30301, 30302, 30303, 30304, 30305, 30306, 30307, 30308, 30309, 30310, 30311, 30312, 30313, 30314, 30315, 30316, 30317, 30318, 30319, 30320, 30322, 30325, 30326, 30327, 30328, 30329, 30330, 30331, 30332, 30333, 30334, 30335, 30336, 30337, 30338, 30339, 30340, 30341, 30342, 30343, 30344, 30345, 30346, 30347, 30348, 30350, 30351, 30352, 30353, 30354, 30355, 30356, 30357, 30358, 30359, 30360, 30361, 30362, 30363, 30364, 30365, 30366, 30367, 30368, 30369, 30370, 30371, 30372, 30373, 30374, 30375, 30376, 30377, 30378, 30380, 30381, 30382, 30383, 30384, 30385, 30386, 30387, 30388, 30389, 30390, 30391, 30392, 30393, 30394, 30395, 30396, 30397, 30398, 30399, 30400, 30401, 30402, 30403, 30404, 30405, 30406, 30407, 30408, 30409, 30411, 30412, 30413, 30414, 30415, 30416, 30417, 30418, 30419, 30420, 30421, 30422, 30423, 30424, 30425, 30426, 30427, 30428, 30429, 30430, 30431, 30432, 30433, 30434, 30435, 30436, 30437, 30438, 30439, 30440, 30441, 30442, 30443, 30444, 30445, 30446, 30447, 30448, 30449, 30450, 30451, 30452, 30453, 30454, 30455, 30456, 30457, 30458, 30459, 30460, 30461, 30462, 30463, 30464, 30465, 30466, 30467, 30468, 30469, 30470, 30471, 30472, 30473, 30474, 30475, 30476, 30477, 30478, 30479, 30480, 30482, 30483, 30484, 30485, 30486, 30487, 30488, 30489, 30490, 30491, 30492, 30493, 30494, 30495, 30496, 30497, 30498, 30499, 30500, 30501, 30502, 30503, 30504, 30505, 30506, 30507, 30508, 30509, 30510, 30511, 30512, 30513, 30514, 30515, 30516, 30517, 30518, 30519, 30520, 30521, 30522, 30523, 30524, 30525, 30526, 30527, 30528, 30529, 30530, 30531, 30532, 30533, 30534, 30535, 30536, 30537, 30538, 30539, 30540, 30541, 30542, 30543, 30544, 30545, 30546, 30547, 30548, 30549, 30550, 30551, 30552, 30553, 30554, 30555, 30556, 30557, 30558, 30559, 30560, 30561, 30562, 30563, 30564, 30565, 30568, 30569, 30570, 30571, 30572, 30573, 30574, 30575, 30576, 30577, 30578, 30579, 30580, 30581, 30582, 30583, 30584, 30585, 30588, 30589, 30590, 30591, 30592, 30593, 30594, 30595, 30596, 30597, 30598, 30599, 30600, 30601, 30602, 30603, 30604, 30605, 30606, 30607, 30608, 30609, 30610, 30611, 30613, 30614, 30615, 30616, 30617, 30618, 30619, 30621, 30622, 30623, 30624, 30625, 30626, 30627, 30628, 30629, 30630, 30631, 30632, 30633, 30634, 30639, 30640, 30641, 30642, 30643, 30644, 30645, 30646, 30647, 30648, 30649, 30650, 30651, 30652, 30654, 30655, 30656, 30657, 30658, 30659, 30660, 30661, 30662, 30663, 30664, 30665, 30666, 30667, 30668, 30669, 30670, 30671, 30672, 30673, 30674, 30675, 30676, 30677, 30678, 30679, 30680, 30681, 30682, 30683, 30684, 30685, 30686, 30687, 30688, 30689, 30690, 30691, 30692, 30693, 30694, 30695, 30696, 30697, 30698, 30699, 30700, 30701, 30702, 30703, 30704, 30706, 30707, 30708, 30709, 30710, 30711, 30712, 30714, 30715, 30716, 30717, 30718, 30719, 30722, 30723, 30724, 30725, 30726, 30727, 30728, 30729, 30731, 30732, 30733, 30735, 30736, 30737, 30738, 30739, 30740, 30741, 30742, 30743, 30744, 30745, 30746, 30747, 30748, 30749, 30750, 30751, 30752, 30753, 30754, 30755, 30756, 30757, 30758, 30759, 30760, 30761, 30762, 30763, 30764, 30765, 30766, 30767, 30768, 30769, 30770, 30771, 30772, 30773, 30774, 30775, 30776, 30777, 30778, 30779, 30781, 30783, 30785, 30787, 30788, 30789, 30790, 30791, 30792, 30793, 30794, 30795, 30796, 30797, 30798, 30799, 30800, 30801, 30802, 30803, 30804, 30805, 30806, 30807, 30808, 30809, 30810, 30811, 30812, 30813, 30814, 30815, 30816, 30817, 30818, 30819, 30820, 30821, 30822, 30823, 30824, 30825, 30826, 30827, 30828, 30829, 30830, 30831, 30832, 30833, 30835, 30836, 30837, 30838, 30839, 30840, 30841, 30842, 30843, 30844, 30845, 30846, 30847, 30848, 30849, 30850, 30851, 30852, 30853, 30855, 30856, 30857, 30858, 30860, 30861, 30862, 30863, 30864, 30865, 30866, 30867, 30868, 30869, 30870, 30871, 30872, 30873, 30874, 30875, 30876, 30877, 30878, 30879, 30880, 30881, 30882, 30883, 30884, 30885, 30886, 30887, 30888, 30889, 30890, 30891, 30892, 30893, 30894, 30895, 30896, 30897, 30898, 30899, 30900, 30901, 30902, 30903, 30904, 30905, 30906, 30907, 30908, 30909, 30910, 30911, 30912, 30913, 30914, 30915, 30916, 30917, 30918, 30919, 30920, 30921, 30922, 30924, 30925, 30926, 30927, 30928, 30929, 30930, 30931, 30932, 30933, 30934, 30935, 30936, 30937, 30938, 30939, 30940, 30941, 30942, 30943, 30944, 30945, 30946, 30947, 30948, 30949, 30950, 30951, 30952, 30953, 30954, 30955, 30956, 30957, 30958, 30959, 30960, 30961, 30962, 30963, 30964, 30965, 30966, 30967, 30968, 30969, 30970, 30971, 30972, 30973, 30974, 30975, 30976, 30977, 30978, 30979, 30980, 30981, 30982, 30983, 30984, 30985, 30986, 30987, 30988, 30989, 30990, 30991, 30992, 30993, 30994, 30995, 30996, 30997, 30998, 30999, 31000, 31001, 31003, 31004, 31005, 31006, 31007, 31008, 31009, 31010, 31011, 31012, 31013, 31014, 31015, 31016, 31017, 31018, 31019, 31020, 31021, 31022, 31023, 31024, 31025, 31026, 31027, 31028, 31029, 31030, 31031, 31032, 31033, 31036, 31037, 31038, 31039, 31040, 31041, 31042, 31043, 31044, 31045, 31046, 31047, 31048, 31049, 31050, 31051, 31052, 31053, 31054, 31055, 31056, 31057, 31058, 31059, 31060, 31061, 31062, 31063, 31064, 31065, 31066, 31067, 31068, 31069, 31070, 31071, 31072, 31073, 31074, 31075, 31076, 31077, 31078, 31079, 31080, 31081, 31082, 31083, 31084, 31085, 31086, 31087, 31088, 31089, 31090, 31091, 31092, 31093, 31094, 31095, 31096, 31097, 31098, 31099, 31100, 31101, 31102, 31103, 31104, 31105, 31106, 31107, 31108, 31109, 31110, 31111, 31115, 31116, 31117, 31118, 31119, 31120, 31121, 31123, 31124, 31125, 31126, 31127, 31129, 31130, 31131, 31132, 31133, 31134, 31135, 31136, 31137, 31138, 31139, 31140, 31141, 31142, 31143, 31144, 31145, 31146, 31147, 31149, 31150, 31151, 31152, 31153, 31154, 31155, 31156, 31157, 31158, 31159, 31160, 31161, 31162, 31163, 31164, 31165, 31166, 31167, 31168, 31169, 31170, 31171, 31172, 31173, 31174, 31175, 31176, 31177, 31178, 31179, 31180, 31181, 31182, 31183, 31184, 31185, 31187, 31188, 31189, 31190, 31191, 31192, 31193, 31194, 31195, 31196, 31198, 31199, 31200, 31201, 31202, 31203, 31204, 31205, 31206, 31207, 31208, 31209, 31210, 31211, 31212, 31214, 31215, 31216, 31217, 31218, 31219, 31220, 31221, 31222, 31223, 31224, 31225, 31226, 31228, 31229, 31230, 31231, 31233, 31234, 31235, 31236, 31237, 31238, 31239, 31240, 31241, 31242, 31243, 31244, 31245, 31246, 31247, 31248, 31249, 31250, 31251, 31252, 31253, 31254, 31255, 31256, 31257, 31258, 31259, 31260, 31261, 31262, 31263, 31264, 31265, 31266, 31267, 31268, 31269, 31271, 31272, 31273, 31274, 31276, 31277, 31278, 31279, 31280, 31281, 31282, 31283, 31284, 31285, 31286, 31287, 31288, 31289, 31290, 31291, 31292, 31293, 31294, 31295, 31296, 31297, 31298, 31299, 31300, 31301, 31302, 31304, 31305, 31306, 31307, 31308, 31309, 31310, 31311, 31312, 31313, 31314, 31315, 31316, 31317, 31318, 31319, 31320, 31321, 31322, 31323, 31324, 31325, 31326, 31327, 31328, 31329, 31330, 31331, 31333, 31334, 31335, 31336, 31337, 31338, 31339, 31340, 31341, 31342, 31343, 31344, 31345, 31346, 31347, 31348, 31349, 31350, 31351, 31352, 31353, 31354, 31355, 31356, 31357, 31358, 31359, 31360, 31361, 31362, 31363, 31364, 31365, 31366, 31367, 31368, 31369, 31370, 31371, 31372, 31373, 31374, 31375, 31376, 31377, 31378, 31379, 31380, 31381, 31382, 31383, 31384, 31385, 31386, 31387, 31388, 31389, 31390, 31391, 31392, 31393, 31394, 31395, 31396, 31397, 31398, 31399, 31400, 31401, 31402, 31403, 31404, 31405, 31406, 31407, 31408, 31409, 31411, 31412, 31413, 31414, 31415, 31416, 31417, 31418, 31419, 31420, 31421, 31422, 31423, 31424, 31425, 31426, 31427, 31428, 31429, 31430, 31431, 31432, 31433, 31434, 31435, 31437, 31438, 31439, 31440, 31441, 31442, 31443, 31444, 31445, 31446, 31447, 31448, 31449, 31450, 31451, 31452, 31453, 31454, 31455, 31456, 31457, 31458, 31459, 31460, 31461, 31462, 31463, 31464, 31465, 31466, 31467, 31468, 31469, 31470, 31471, 31472, 31473, 31474, 31475, 31476, 31477, 31478, 31479, 31480, 31481, 31482, 31483, 31484, 31485, 31486, 31487, 31488, 31489, 31490, 31491, 31492, 31493, 31494, 31495, 31496, 31497, 31498, 31499, 31500, 31501, 31502, 31503, 31504, 31505, 31506, 31507, 31508, 31509, 31510, 31511, 31512, 31513, 31514, 31515, 31516, 31517, 31518, 31519, 31520, 31521, 31522, 31523, 31524, 31526, 31527, 31528, 31529, 31530, 31531, 31532, 31533, 31534, 31535, 31536, 31537, 31538, 31539, 31540, 31541, 31542, 31543, 31544, 31545, 31546, 31547, 31548, 31549, 31550, 31551, 31552, 31553, 31554, 31555, 31556, 31557, 31558, 31559, 31560, 31561, 31562, 31563, 31564, 31565, 31566, 31567, 31568, 31569, 31570, 31571, 31572, 31573, 31574, 31575, 31576, 31577, 31578, 31579, 31580, 31581, 31582, 31583, 31584, 31585, 31586, 31587, 31588, 31589, 31590, 31591, 31592, 31593, 31594, 31595, 31596, 31597, 31598, 31599, 31600, 31601, 31602, 31603, 31604, 31605, 31606, 31607, 31608, 31609, 31610, 31611, 31612, 31613, 31614, 31615, 31616, 31617, 31618, 31619, 31620, 31621, 31622, 31623, 31624, 31625, 31626, 31627, 31628, 31629, 31630, 31631, 31632, 31633, 31634, 31635, 31636, 31637, 31638, 31639, 31640, 31641, 31642, 31643, 31644, 31645, 31646, 31647, 31648, 31649, 31650, 31651, 31652, 31653, 31654, 31655, 31656, 31657, 31658, 31659, 31660, 31661, 31662, 31663, 31664, 31665, 31666, 31667, 31668, 31669, 31670, 31671, 31672, 31673, 31674, 31675, 31676, 31677, 31678, 31679, 31680, 31681, 31682, 31683, 31684, 31685, 31686, 31687, 31688, 31689, 31690, 31691, 31692, 31693, 31694, 31695, 31696, 31697, 31698, 31699, 31700, 31701, 31702, 31703, 31704, 31705, 31706, 31708, 31709, 31710, 31711, 31712, 31713, 31714, 31715, 31716, 31717, 31718, 31719, 31720, 31721, 31722, 31723, 31724, 31725, 31726, 31727, 31728, 31729, 31730, 31731, 31732, 31733, 31734, 31735, 31736, 31737, 31738, 31739, 31740, 31741, 31742, 31743, 31744, 31745, 31746, 31747, 31748, 31749, 31750, 31751, 31752, 31754, 31755, 31756, 31757, 31758, 31759, 31760, 31761, 31762, 31763, 31764, 31765, 31766, 31767, 31768, 31769, 31770, 31773, 31775, 31776, 31777, 31778, 31779, 31780, 31781, 31782, 31783, 31784, 31785, 31786, 31787, 31794, 31795, 31796, 31797, 31798, 31799, 31800, 31801, 31802, 31803, 31804, 31805, 31806, 31807, 31808, 31809, 31810, 31811, 31812, 31813, 31814, 31815, 31816, 31817, 31818, 31819, 31820, 31821, 31822, 31823, 31824, 31825, 31826, 31827, 31828, 31829, 31830, 31831, 31832, 31833, 31834, 31835, 31836, 31838, 31839, 31840, 31841, 31842, 31843, 31844, 31845, 31847, 31848, 31849, 31850, 31851, 31852, 31853, 31854, 31855, 31856, 31857, 31858, 31861, 31862, 31863, 31864, 31865, 31866, 31867, 31868, 31869, 31871, 31872, 31873, 31874, 31875, 31876, 31877, 31878, 31879, 31880, 31881, 31882, 31883, 31884, 31885, 31886, 31887, 31888, 31889, 31890, 31891, 31892, 31893, 31894, 31895, 31896, 31897, 31898, 31899, 31900, 31902, 31903, 31904, 31905, 31906, 31907, 31908, 31909, 31910, 31911, 31912, 31913, 31915, 31916, 31917, 31918, 31919, 31920, 31921, 31922, 31923, 31924, 31925, 31926, 31927, 31928, 31929, 31930, 31931, 31932, 31933, 31934, 31935, 31936, 31937, 31938, 31939, 31940, 31941, 31942, 31943, 31944, 31945, 31946, 31947, 31948, 31949, 31950, 31951, 31952, 31953, 31954, 31955, 31956, 31957, 31958, 31959, 31960, 31961, 31962, 31963, 31964, 31965, 31966, 31967, 31968, 31969, 31970, 31971, 31972, 31973, 31974, 31975, 31976, 31977, 31978, 31979, 31980, 31981, 31982, 31983, 31984, 31985, 31986, 31987, 31988, 31989, 31990, 31991, 31992, 31993, 31994, 31995, 31996, 31997, 31998, 31999, 32000, 32001, 32002, 32003, 32004, 32005, 32006, 32007, 32008, 32009, 32010, 32011, 32012, 32013, 32014, 32015, 32016, 32017, 32018, 32019, 32020, 32021, 32022, 32023, 32024, 32025, 32026, 32027, 32028, 32029, 32030, 32031, 32032, 32033, 32034, 32035, 32036, 32037, 32038, 32039, 32040, 32041, 32042, 32043, 32044, 32045, 32046, 32047, 32048, 32049, 32050, 32051, 32052, 32053, 32054, 32055, 32056, 32057, 32058, 32059, 32060, 32061, 32062, 32063, 32064, 32065, 32066, 32067, 32068, 32069, 32070, 32071, 32072, 32073, 32074, 32075, 32076, 32077, 32078, 32079, 32080, 32081, 32082, 32083, 32084, 32085, 32086, 32087, 32088, 32089, 32090, 32091, 32092, 32093, 32094, 32095, 32096, 32097, 32098, 32099, 32100, 32101, 32102, 32103, 32104, 32105, 32106, 32107, 32108, 32109, 32110, 32111, 32112, 32113, 32114, 32115, 32116, 32117, 32118, 32119, 32120, 32121, 32122, 32123, 32124, 32125, 32126, 32127, 32128, 32129, 32130, 32131, 32132, 32133, 32134, 32135, 32136, 32137, 32138, 32139, 32140, 32141, 32142, 32143, 32144, 32145, 32146, 32147, 32148, 32149, 32150, 32151, 32152, 32153, 32154, 32155, 32156, 32157, 32158, 32159, 32160, 32161, 32162, 32163, 32164, 32165, 32166, 32167, 32168, 32169, 32170, 32171, 32172, 32173, 32174, 32175, 32176, 32178, 32179, 32180, 32181, 32182, 32183, 32184, 32185, 32186, 32188, 32189, 32190, 32191, 32192, 32193, 32194, 32195, 32196, 32197, 32198, 32199, 32200, 32201, 32202, 32203, 32204, 32205, 32206, 32207, 32208, 32209, 32212, 32213, 32214, 32215, 32216, 32217, 32218, 32221, 32222, 32223, 32224, 32225, 32226, 32227, 32228, 32229, 32230, 32231, 32232, 32233, 32234, 32235, 32236, 32237, 32238, 32239, 32241, 32242, 32244, 32245, 32246, 32247, 32248, 32249, 32250, 32251, 32252, 32253, 32254, 32255, 32256, 32257, 32258, 32259, 32260, 32261, 32262, 32263, 32264, 32265, 32266, 32267, 32268, 32269, 32270, 32271, 32272, 32273, 32274, 32275, 32276, 32277, 32278, 32279, 32280, 32281, 32282, 32283, 32284, 32285, 32286, 32287, 32288, 32289, 32290, 32291, 32292, 32293, 32294, 32295, 32296, 32297, 32298, 32299, 32300, 32301, 32302, 32303, 32304, 32305, 32306, 32307, 32308, 32309, 32310, 32311, 32312, 32313, 32314, 32315, 32316, 32317, 32318, 32319, 32320, 32321, 32322, 32323, 32324, 32325, 32326, 32327, 32328, 32329, 32330, 32331, 32332, 32333, 32334, 32335, 32336, 32337, 32338, 32339, 32340, 32341, 32342, 32343, 32344, 32345, 32346, 32347, 32348, 32349, 32350, 32352, 32353, 32354, 32355, 32356, 32357, 32358, 32359, 32360, 32361, 32362, 32363, 32364, 32365, 32366, 32367, 32368, 32369, 32370, 32371, 32372, 32373, 32374, 32375, 32376, 32377, 32378, 32379, 32380, 32381, 32382, 32383, 32384, 32385, 32386, 32387, 32388, 32389, 32390, 32391, 32392, 32393, 32394, 32395, 32396, 32397, 32398, 32399, 32400, 32401, 32402, 32403, 32404, 32405, 32406, 32407, 32408, 32409, 32410, 32411, 32412, 32413, 32414, 32415, 32416, 32417, 32418, 32419, 32420, 32421, 32422, 32423, 32424, 32425, 32426, 32427, 32428, 32429, 32430, 32431, 32432, 32433, 32434, 32435, 32436, 32437, 32438, 32439, 32440, 32441, 32442, 32443, 32444, 32445, 32446, 32447, 32448, 32449, 32450, 32451, 32452, 32453, 32454, 32466, 32467, 32468, 32469, 32470, 32471, 32472, 32473, 32474, 32475, 32476, 32477, 32478, 32479, 32480, 32481, 32482, 32483, 32484, 32485, 32486, 32487, 32488, 32490, 32491, 32492, 32493, 32494, 32495, 32496, 32497, 32498, 32499, 32500, 32501, 32502, 32503, 32504, 32505, 32507, 32508, 32509, 32510, 32511, 32512, 32513, 32514, 32515, 32516, 32518, 32519, 32520, 32521, 32522, 32523, 32524, 32525, 32526, 32527, 32528, 32529, 32530, 32531, 32532, 32533, 32534, 32535, 32536, 32537, 32538, 32540, 32541, 32544, 32548, 32549, 32550, 32551, 32552, 32553, 32554, 32555, 32556, 32557, 32558, 32559, 32560, 32561, 32562, 32563, 32565, 32566, 32567, 32568, 32569, 32570, 32571, 32572, 32573, 32574, 32575, 32576, 32577, 32578, 32579, 32580, 32582, 32583, 32584, 32585, 32586, 32587, 32588, 32589, 32590, 32591, 32592, 32593, 32594, 32595, 32596, 32597, 32598, 32599, 32600, 32601, 32602, 32603, 32604, 32606, 32607, 32608, 32609, 32615, 32616, 32617, 32618, 32619, 32620, 32621, 32622, 32623, 32624, 32625, 32626, 32627, 32629, 32630, 32631, 32632, 32634, 32635, 32636, 32640, 32641, 32642, 32643, 32647, 32648, 32649, 32650, 32651, 32652, 32653, 32654, 32655, 32656, 32657, 32658, 32659, 32660, 32661, 32662, 32663, 32664, 32665, 32666, 32667, 32668, 32669, 32675, 32676, 32677, 32678, 32679, 32680, 32681, 32682, 32683, 32684, 32685, 32686, 32687, 32688, 32689, 32690, 32691, 32692, 32693, 32694, 32695, 32697, 32700, 32702, 32704, 32706, 32708, 32709, 32710, 32711, 32712, 32713, 32714, 32715, 32716, 32717, 32718, 32719, 32720, 32721, 32722, 32723, 32724, 32725, 32726, 32727, 32728, 32729, 32730, 32731, 32732, 32733, 32734, 32735, 32736, 32737, 32738, 32739, 32740, 32741, 32742, 32743, 32744, 32745, 32746, 32747, 32748, 32749, 32751, 32752, 32753, 32754, 32755, 32756, 32757, 32758, 32759, 32760, 32761, 32762, 32763, 32764, 32765, 32766, 32767, 32768, 32769, 32770, 32771, 32772, 32773, 32774, 32775, 32776, 32777, 32778, 32780, 32785, 32786, 32787, 32788, 32790, 32794, 32795, 32796, 32797, 32800, 32821, 32832, 32833, 32834, 32843, 32844, 32847, 32853, 32854, 33005, 33006, 32871, 32887, 32931, 32980, 32983, 33007, 33008, 33010, 33011, 33014, 33016, 33017, 33029, 33030, 33031, 33087, 33252, 32939, 32942, 32944, 32954, 32981, 33018, 33019, 33025, 33026, 33027, 33032, 33069, 33251, 32779, 32781, 32782, 32784, 32789, 32791, 32793, 32798, 32799, 32801, 32802, 32803, 32804, 32805, 32806, 32807, 32808, 32809, 32810, 32811, 32812, 32813, 32814, 32815, 32816, 32818, 32819, 32820, 32822, 32823, 32824, 32825, 32826, 32827, 32828, 32829, 32830, 32831, 32836, 32837, 32838, 32839, 32840, 32845, 32846, 32848, 32849, 32857, 32865, 32866, 32867, 32870, 32872, 32873, 32874, 32875, 32876, 32877, 32878, 32879, 32882, 32883, 32885, 32886, 32892, 32893, 32897, 32898, 32900, 32901, 32904, 32905, 32906, 32907, 32908, 32913, 32914, 32915, 32916, 32918, 32919, 32922, 32923, 32924, 32925, 32926, 32927, 32930, 32933, 32934, 32938, 32941, 32946, 32948, 32950, 32953, 32955, 32956, 32957, 32958, 32984, 33045, 33049, 33050, 33051, 33052, 33054, 33059, 33060, 33061, 33062, 33063, 33064, 33067, 33068, 33070, 33073, 33080, 33081, 33086, 33088, 33089, 33090, 33104, 33105, 33108, 33109, 33110, 33113, 33114, 33116, 33118, 33121, 33122, 33125, 33128, 33129, 33130, 33134, 33135, 33136, 33137, 33138, 33139, 33140, 33141, 33142, 33143, 33146, 33147, 33148, 33149, 33150, 33151, 33152, 33153, 33154, 33155, 33156, 33157, 33158, 33159, 33160, 33161, 33162, 33163, 33164, 33167, 33168, 33169, 33170, 33173, 33174, 33184, 33185, 33186, 33188, 33189, 33190, 33191, 33192, 33194, 33196, 33197, 33198, 33199, 33200, 33202, 33203, 33205, 33210, 33211, 33212, 33213, 33214, 33215, 33216, 33217, 33218, 33219, 33220, 33221, 33222, 33223, 33224, 33225, 33226, 33227, 33228, 33229, 33233, 33234, 33235, 33236, 33237, 33238, 33239, 33240, 33241, 33242, 33243, 33244, 33245, 33246, 33248, 33255, 33259, 33264, 33271, 33272, 33273, 33274, 33280, 33282, 33285, 33286, 33287, 33288, 33289, 33290, 33291, 33292, 33293, 33297, 33298, 33299, 33300, 33301, 33303, 33305, 33306, 33307, 33308, 33309, 33310, 33312, 33314, 33315, 33316, 33317, 33318, 33319, 33320, 33321, 33322, 33323, 33324, 33325, 33326, 33327, 33328, 33329, 33330, 33331, 33332, 33333, 33335, 33337, 33339, 33340, 33341, 33342, 33343, 33344, 33346, 33350, 33351, 33352, 33353, 33354, 33355, 33357, 33360, 33361, 33364, 33365, 33366, 33367, 33369, 33370, 33372, 33373, 33376, 33377, 33378, 33379, 33380, 33382, 33383, 33384, 33385, 33387, 33388, 33391, 33392, 33393, 33395, 33396, 33397, 33398, 33399, 33400, 33401, 33402, 33403, 33404, 33405, 33406, 33408, 33409, 33410, 33411, 33412, 33413, 33414, 33415, 33416, 33417, 33418, 33422, 33425, 33426, 33429, 33430, 33431, 33432, 33433, 33434, 33435, 33436, 33437, 33438, 33439, 33441, 33442, 33447, 33448, 33449, 33450, 33453, 33455, 33457, 33459, 33460, 33461, 33462, 33463, 33464, 33465, 33466, 33467, 33468, 33469, 33470, 33471, 33472, 33473, 33474, 33475, 33476, 33477, 33478, 33479, 33480, 33481, 33482, 33488, 33489, 33490, 33491, 33492, 33493, 33495, 33498, 33499, 33500, 33501, 33502, 33503, 33504, 33505, 33506, 33508, 33510, 33511, 33513, 33515, 33516, 33517, 33518, 33519, 33520, 33521, 33522, 33523, 33524, 33525, 33526, 33527, 33528, 33529, 33530, 33531, 33532, 33533, 33535, 33536, 33537, 33538, 33539, 33540, 33541, 33542, 33543, 33544, 33545, 33546, 33547, 33548, 33549, 33550, 33551, 33552, 33553, 33554, 33555, 33556, 33557, 33558, 33559, 33560, 33561, 33562, 33563, 33564, 33565, 33566, 33567, 33568, 33570, 33571, 33572, 33575, 33576, 33578, 33579, 33580, 33581, 33583, 33586, 33587, 33588, 33589, 33590, 33591, 33592, 33593, 33594, 33595, 33596, 33597, 33598, 33599, 33600, 33601, 33602, 33603, 33608, 33609, 33610, 33611, 33612, 33613, 33614, 33615, 33616, 33617, 33618, 33619, 33620, 33621, 33622, 33623, 33624, 33625, 33626, 33627, 33628, 33629, 33630, 33631, 33632, 33633, 33634, 33635, 33636, 33637, 33638, 33639, 33640, 33641, 33642, 33643, 33644, 33645, 33646, 33647, 33648, 33649, 33650, 33651, 33652, 33653, 33654, 33655, 33656, 33657, 33658, 33659, 33660, 33661, 33662, 33663, 33664, 33665, 33666, 33667, 33668, 33669, 33670, 33671, 33672, 33673, 33674, 33675, 33676, 33677, 33678, 33679, 33680, 33681, 33682, 33683, 33684, 33685, 33686, 33687, 33689, 33690, 33691, 33692, 33693, 33694, 33695, 33696, 33698, 33699, 33700, 33701, 33704, 33705, 33707, 33708, 33710, 33711, 33712, 33713, 33715, 33716, 33717, 33718, 33719, 33720, 33721, 33722, 33723, 33724, 33725, 33729, 33730, 33731, 33732, 33733, 33734, 33735, 33737, 33738, 33739, 33740, 33741, 33742, 33743, 33744, 33745, 33746, 33747, 33748, 33749, 33750, 33751, 33752, 33753, 33754, 33755, 33756, 33757, 33758, 33759, 33761, 33762, 33763, 33764, 33768, 33769, 33770, 33771, 33772, 33773, 33774, 33775, 33776, 33778, 33779, 33780, 33782, 33783, 33784, 33785, 33787, 33788, 33789, 33790, 33791, 33792, 33793, 33794, 33795, 33796, 33798, 33799, 33800, 33802, 33805, 33806, 33809, 33810, 33815, 33816, 33817, 33818, 33819, 33820, 33822, 33823, 33824, 33827, 33828, 33829, 33830, 33831, 33832, 33835, 33836, 33838, 33839, 33840, 33841, 33842, 33843, 33844, 33845, 33846, 33848, 33849, 33850, 33851, 33852, 33853, 33854, 33855, 33856, 33857, 33861, 33862, 33863, 33865, 33866, 33867, 33868, 33869, 33870, 33871, 33872, 33874, 33876, 33877, 33878, 33879, 33880, 33881, 33882, 33883, 33885, 33886, 33887, 33888, 33890, 33892, 33904, 33906, 33907, 33908, 33909, 33910, 33911, 33915, 33916, 33917, 33918, 33919, 33920, 33921, 33922, 33923, 33924, 33925, 33926, 33927, 33928, 33929, 33930, 33931, 33932, 33933, 33934, 33935, 33936, 33937, 33938, 33939, 33940, 33941, 33942, 33943, 33946, 33947, 33949, 33950, 33951, 33952, 33953, 33954, 33955, 33956, 33957, 33958, 33959, 33962, 33963, 33964, 33966, 33967, 33968, 33970, 33971, 33972, 33973, 33974, 33975, 33983, 33984, 33985, 33986, 33988, 33989, 33990, 33991, 33992, 33993, 33994, 33995, 33996, 33998, 33999, 34000, 34001, 34002, 34003, 34004, 34005, 34011, 34014, 34015, 34016, 34017, 34018, 34019, 34021, 34022, 34024, 34025, 34026, 34027, 34028, 34029, 34031, 34032, 34034, 34035, 34036, 34037, 34038, 34039, 34040, 34042, 34043, 34044, 34045, 34047, 34049, 34050, 34054, 34055, 34057, 34058, 34059, 34060, 34061, 34062, 34063, 34064, 34068, 34069, 34070, 34071, 34072, 34073, 34074, 34075, 34076, 34077, 34078, 34079, 34080, 34081, 34082, 34083, 34084, 34085, 34086, 34087, 34088, 34089, 34090, 34091, 34092, 34093, 34094, 34095, 34096, 34097, 34098, 34099, 34100, 34102, 34104, 34105, 34106, 34107, 34108, 34109, 34110, 34111, 34112, 34113, 34114, 34115, 34116, 34119, 34120, 34121, 34125, 34127, 34128, 34129, 34131, 34133, 34134, 34135, 34137, 34139, 34140, 34141, 34142, 34143, 34144, 34145, 34146, 34147, 34148, 34149, 34150, 34151, 34152, 34153, 34154, 34155, 34156, 34157, 34158, 34159, 34161, 34162, 34164, 34165, 34166, 34168, 34169, 34170, 34171, 34172, 34173, 34174, 34175, 34178, 34179, 34180, 34181, 34183, 34184, 34185, 34186, 34187, 34188, 34189, 34190, 34191, 34192, 34193, 34194, 34196, 34197, 34198, 34199, 34200, 34201, 34202, 34203, 34210, 34211, 34213, 34215, 34216, 34217, 34218, 34219, 34220, 34221, 34222, 34223, 34224, 34225, 34226, 34227, 34228, 34229, 34230, 34234, 34235, 34236, 34237, 34238, 34244, 34245, 34246, 34247, 34250, 34252, 34254, 34255, 34256, 34257, 34264, 34265, 34266, 34267, 34268, 34269, 34270, 34271, 34272, 34273, 34274, 34275, 34276, 34277, 34279, 34281, 34286, 34288, 34291, 34296, 34297, 34298, 34300, 34307, 34313, 34319, 34332, 34361, 34362, 34363, 34505, 34549, 34550, 34551, 34552, 34553, 34554, 34555, 34556, 34557, 34558, 34587, 34588, 34589, 34632, 34655, 34694, 34731, 34732, 35477, 34989, 35599, 34988, 35395, 35168, 35399, 34793, 35646, 35189, 35100, 35101, 35002, 35597, 35001, 34999, 35596, 35000, 35497, 36506, 35507, 35496, 35494, 35790, 34952, 35500, 35608, 34924, 34330, 35498, 35594, 36021, 35461, 35826, 34953, 35471, 35495, 35508, 35398, 35476, 35473, 35469, 35483, 35290, 35292, 34772, 34788, 34914, 34771, 34794, 35470, 35475, 35573, 35580, 35578, 35576, 35579, 35574, 35577, 35575, 36119, 36120, 36124, 36122, 36121, 36069, 35293, 35291, 36114, 36116, 36108, 36118, 36109, 34880, 34912, 34881, 35808, 35482, 36223, 35117, 35344, 35094, 34882, 34885, 35472, 35501, 35984, 35499, 36101, 36102, 35467, 35462, 34735, 35361, 34970, 34868, 35016, 34995, 34996, 34994, 34908, 34974, 34887, 34975, 34966, 34977, 34871, 36557, 36559, 35005, 35635, 35326, 35640, 35325, 35634, 35327, 34856, 34870, 34992, 34990, 34906, 34910, 34909, 34869, 34900, 35569, 35571, 35617, 34979, 34859, 34861, 34904, 34905, 34860, 34857, 34902, 34901, 34883, 34903, 34858, 35309, 35305, 35307, 34928, 35311, 35030, 35491, 35451, 35564, 35547, 35590, 35614, 35557, 35368, 35372, 35638, 35314, 35572, 35119, 35320, 35321, 35570, 35046, 35028, 36173, 35029, 35039, 35299, 35641, 35323, 35322, 35604, 35587, 35589, 34381, 35642, 34724, 35373, 35460, 34986, 35601, 35396, 35073, 35089, 35106, 35444, 35097, 34728, 34734, 35113, 34956, 34716, 34810, 34808, 35255, 36066, 36065, 35009, 34925, 35092, 34907, 35098, 34947, 34852, 34838, 34839, 35047, 36155, 35281, 36479, 36481, 36561, 34704, 34720, 34816, 35014, 34743, 34781, 35376, 35820, 34796, 36549, 34800, 34854, 34799, 35144, 35176, 35227, 35226, 34797, 35062, 35035, 35458, 35651, 34780, 34784, 34825, 34826, 34813, 34815, 35766, 34445, 34459, 34447, 34455, 34453, 34458, 34454, 34448, 34441, 34450, 35821, 35610, 35465, 34686, 34687, 35770, 34567, 34568, 34497, 34496, 34755, 34630, 34628, 35133, 35131, 34789, 36024, 35045, 35365, 34997, 34998, 35598, 34915, 34920, 35394, 35143, 36093, 35013, 35015, 35387, 35068, 35400, 34983, 34985, 35611, 35048, 35474, 35049, 35093, 35099, 35038, 35034, 34562, 34565, 34561, 35600, 34991, 35007, 34320, 34944, 36171, 34929, 34935, 34775, 34776, 35273, 35336, 35339, 35069, 35819, 36356, 36355, 36165, 36166, 34984, 36152, 34960, 36151, 36169, 36167, 36154, 34770, 34950, 34948, 34383, 34382, 35023, 35169, 34765, 34723, 34717, 34721, 34715, 34730, 34719, 34718, 34766, 34949, 34951, 34802, 34919, 35377, 35379, 35335, 34778, 34777, 35024, 35026, 35022, 34918, 34922, 35380, 35346, 36162, 34327, 34741, 34899, 34338, 34737, 34739, 34336, 34740, 36209, 34806, 34738, 34436, 35055, 34365, 34526, 35012, 34965, 34980, 35135, 35297, 34451, 34449, 36070, 35771, 35877, 34564, 35763, 36099, 34862, 34606, 34607, 34660, 34605, 36097, 36095, 34444, 36208, 35909, 34528, 34548, 36911, 36979, 35132, 35319, 35324, 35083, 35080, 35084, 35079, 35070, 35090, 35104, 35105, 34879, 34888, 35102, 35318, 35602, 35008, 34955, 35364, 35017, 34520, 34519, 34703, 35607, 34531, 35397, 35040, 35042, 35025, 34987, 36778, 34812, 34823, 34819, 34824, 34822, 34653, 36607, 34710, 35337, 34682, 34744, 34675, 34708, 35340, 34645, 34644, 34456, 34654, 34676, 34681, 34711, 34783, 34785, 35003, 35061, 35071, 35072, 35338, 36349, 36350, 34310, 35031, 35060, 37072, 34976, 34978, 35603, 35345, 36148, 34460, 34461, 34463, 34465, 34466, 34467, 34468, 34469, 34470, 34471, 34472, 34473, 34474, 34475, 34657, 34658, 34701, 34702, 35004, 35330, 35331, 35332, 35545, 35633, 35644, 35768, 36558, 35147, 35445, 35248, 35247, 34478, 34481, 35250, 34479, 34677, 34678, 34679, 34683, 34684, 34685, 34712, 34713, 34714, 34768, 34786, 34787, 35341, 35342, 35343, 34705, 34972, 34973, 35020, 35127, 35328, 35329, 35612, 35636, 35637, 36837, 34364, 36164, 36213, 36217, 36224, 36225, 36226, 36273, 36476, 36477, 36478, 36494, 36495, 36497, 36499, 36502, 36508, 36516, 36517, 36522, 36535, 36536, 36551, 36564, 36595, 36610, 36612, 36619, 36620, 36624, 36642, 36656, 36657, 36658, 36661, 36666, 36669, 36670, 36672, 36723, 36724, 36725, 36731, 36736, 36764, 36765, 36766, 36767, 36770, 36771, 36772, 36773, 36774, 36776, 36788, 36794, 36796, 36805, 36807, 36808, 36811, 36829, 36830, 36839, 36840, 36841, 36842, 36844, 36847, 36848, 36851, 36855, 36856, 36871, 36874, 36877, 36879, 36881, 36886, 36888, 36889, 36891, 36892, 36893, 36896, 36907, 36913, 36939, 36940, 36941, 36944, 36945, 36946, 36947, 36948, 36950, 36954, 36961, 36967, 36969, 36971, 36978, 36983, 36990, 36998, 37003, 37004, 37007, 37011, 37012, 37014, 37016, 37017, 37021, 37026, 37027, 37028, 37029, 37030, 37031, 37032, 37033, 37035, 37044, 37068, 37069, 37071, 37107, 37116, 37119, 37120, 37144, 37146, 37148, 37149, 37181, 37183, 37184, 37187, 37189, 37215, 37222, 37223, 37225, 37226, 37227, 37230, 37231, 37488, 37519, 37528, 37540, 37543, 37544, 37545, 37546, 37547, 37554, 37574, 37577, 37578, 37579, 37581, 37583, 37584, 37586, 37587, 37588, 37589, 37592, 37593, 37596, 37670, 37687, 37688, 37689, 37696, 37702, 37704, 37711, 37712, 37713, 37728, 37729, 37742, 37755, 37776, 37779, 37780, 37813, 37833, 37852, 37856, 37858, 37861, 37862, 37865, 37890, 37906, 37920, 37928, 37941, 37942, 37947, 37948, 37949, 37965, 37967, 37991, 37992, 37993, 37994, 37996, 38009, 38010, 38017, 38028, 38054, 38112, 38113, 38135, 38136, 38153, 38161, 38172, 38173, 38175, 38176, 38177, 38181, 38189, 38194, 38200, 38222, 38284, 38316, 38391, 38453, 38487, 38493, 38500, 38505, 38508, 38567, 38569, 38841, 38858, 36482, 36626, 36627, 36659, 36678, 36880, 36897, 36899, 36916, 36934, 37006, 37013, 37022, 37023, 37025, 37038, 37098, 37217, 37562, 37571, 37595, 37662, 37663, 37664, 37665, 37666, 37672, 37690, 37697, 37744, 37782, 37824, 37849, 37854, 37855, 37864, 37901, 37930, 37935, 37936, 37955, 37968, 37970, 37972, 37973, 37986, 38004, 38008, 38104, 38107, 38159, 38201, 38228, 38229, 38231, 38232, 38234, 38294, 38308, 38309, 38317, 38319, 38332, 38369, 38410, 38422, 38451, 38454, 38458, 38463, 38763, 38879, 39010, 37859, 37850, 38867, 36955, 36993, 37221, 37496, 37497, 37498, 37572, 37575, 37576, 37580, 37582, 37591, 37597, 37774, 37810, 38160, 38188, 35037, 35044, 37158, 37915, 34337, 35041, 35809, 37888, 38751, 35036, 37851, 35033, 35052, 36511, 37828, 37846, 34942, 36838, 37094, 37190, 37200, 37853, 37997, 37998, 37999, 38182, 38283, 38711, 38712, 38840, 35019, 35021, 35148, 37814, 38163, 36957, 36960, 36968, 36970, 36982, 37034, 37041, 37117, 37182, 37188, 37830, 37879, 37880, 37902, 37903, 37904, 36212, 36272, 36296, 36530, 36565, 36568, 36643, 36710, 36789, 36791, 36812, 36817, 36885, 37501, 37502, 37503, 37533, 37534, 37674, 37675, 37863, 37868, 37886, 37887, 37907, 37918, 37934, 37945, 37950, 37985, 38041, 38065, 38066, 38068, 38186, 38208, 38288, 38293, 38325, 38334, 38335, 38336, 38340, 38341, 38342, 38374, 38433, 38439, 38456, 38461, 38482, 38492, 38494, 38752, 39172, 39509, 37122, 37123, 37124, 37125, 37126, 37127, 37129, 37132, 37133, 37134, 37491, 37495, 38125, 38154, 38184, 38551, 38557, 38558, 39173, 37715, 38032, 38035, 37232, 37493, 37494, 38370, 38490, 35179, 37980, 37981, 38039, 38040, 38501, 39019, 39092, 37990, 37558, 35074, 36715, 38211, 38595, 36085, 36090, 36084, 35517, 35490, 36089, 35518, 36091, 36087, 36086, 36083, 36082, 36088, 36538, 36566, 36572, 38110, 38193, 36571, 37282, 37281, 35519, 35493, 37280, 37279, 35527, 35521, 37278, 35522, 37277, 37293, 37720, 37550, 37551, 37100, 37549, 35354, 35353, 35520, 36863, 35523, 38599, 38603, 38524, 38525, 38563, 38544, 38564, 38568, 37074, 36864, 37564, 36977, 37286, 36617, 37643, 37565, 37627, 37629, 37613, 36938, 38220, 37645, 37646, 37647, 37648, 37649, 37650, 37651, 37652, 37609, 37638, 37644, 37612, 37637, 35524, 37640, 37635, 37656, 37622, 37118, 37101, 37626, 37641, 37642, 37636, 37639, 36859, 36858, 36857, 37618, 37567, 37677, 37568, 36498, 37607, 38249, 38025, 38026, 37731, 37730, 36644, 37569, 35654, 35534, 37036, 37292, 37296, 35528, 36862, 36861, 36860, 37614, 37302, 37606, 37305, 35717, 37566, 37563, 37608, 37624, 37625, 37623, 37797, 36067, 35529, 37604, 37603, 37605, 37628, 36804, 37809, 36071, 35525, 37261, 37270, 37276, 37273, 37285, 37289, 37299, 38267, 38233, 38057, 38058, 38075, 38073, 38076, 38072, 38074, 35427, 38077, 39168, 34476, 38157, 38406, 38261, 38408, 35421, 38407, 38082, 38086, 38079, 38031, 38061, 38059, 38081, 38078, 38085, 38083, 38080, 38092, 38091, 38090, 38087, 38088, 38096, 38256, 35415, 35407, 38097, 38093, 38084, 38089, 35401, 38638, 35357, 35310, 38444, 38128, 38481, 38445, 38446, 35285, 35259, 36792, 36757, 35254, 36679, 38402, 35251, 38393, 35156, 38394, 35067, 35032, 36542, 36532, 36483, 34971, 36301, 36215, 35983, 34895, 35559, 35543, 35537, 38596, 38398, 38396, 38586, 38550, 37506, 37655, 38138, 38123, 38108, 38062, 38064, 38063, 38418, 38103, 38602, 38098, 38100, 38102, 38480, 38099, 38101, 38479, 38604, 38312, 38600, 35110, 35107, 35087, 38297, 37959, 38399, 38400, 38105, 36075, 34889, 35653, 34827, 34709, 34580, 38419, 38775, 37131, 36910, 36867, 36380, 36358, 36351, 35720, 35586, 38395, 38404, 38262, 38403, 37063, 38405, 38095, 38257, 36966, 36963, 36605, 36556, 35244, 35228, 36550, 38174, 38169, 38197, 38198, 34437, 38219, 38171, 38167, 38166, 38168, 38170, 36545, 35533, 34482, 38397, 38298, 38299, 38303, 38304, 38258, 38126, 38000, 38132, 38133, 38131, 36135, 38185, 38204, 37882, 38362, 35540, 34515, 37304, 37301, 37295, 37291, 37260, 37269, 37275, 37272, 37284, 37288, 37298, 38266, 38459, 39167, 34435, 38639, 38685, 38691, 38689, 35419, 38687, 34434, 34428, 38693, 35413, 35405, 35362, 38637, 35356, 35308, 38699, 35261, 35258, 36769, 36737, 35253, 36677, 38582, 35249, 38628, 35155, 38625, 35066, 35018, 36537, 36510, 36431, 34930, 36284, 36189, 35910, 34893, 35546, 35542, 35536, 38597, 38633, 39001, 38585, 38549, 37505, 38760, 38758, 35109, 35091, 35086, 38296, 37958, 38769, 38771, 36074, 34875, 35652, 34801, 34612, 34579, 38776, 37130, 36904, 36866, 36360, 36357, 36303, 35719, 35568, 38631, 38679, 38683, 38675, 37039, 38681, 38677, 36965, 36949, 36574, 36554, 35243, 35180, 36547, 38722, 38727, 38725, 38724, 38726, 38723, 36544, 35532, 34480, 40533, 36128, 36504, 38635, 35539, 34484, 40165, 37303, 37300, 37294, 37290, 37259, 37268, 37274, 37271, 37283, 37287, 37297, 38265, 38460, 39166, 34425, 38640, 38692, 38690, 35417, 38688, 34393, 34360, 38694, 35410, 35403, 35358, 38156, 35355, 35306, 38700, 35260, 35256, 36763, 36726, 35252, 36648, 38583, 35246, 38629, 35145, 38626, 35051, 34993, 36533, 36484, 36390, 34921, 36235, 36168, 35895, 34891, 35544, 35541, 35535, 38598, 38632, 39000, 38431, 38390, 37504, 38761, 38759, 35108, 35088, 35085, 38106, 37957, 38770, 38772, 36072, 34847, 35588, 34798, 34581, 34533, 38777, 37128, 36875, 36865, 36359, 36352, 36302, 35718, 35560, 38630, 38680, 38684, 38676, 37037, 38682, 38678, 36964, 36923, 36573, 36553, 35242, 35157, 36546, 38721, 38737, 38735, 38734, 38736, 38733, 36543, 42078, 34477, 39137, 36076, 36503, 38634, 35538, 34483, 37246, 37258, 37255, 35492, 35438, 35441, 35514, 35511, 35447, 37252, 37249, 35216, 35278, 35270, 35265, 35262, 35705, 35686, 35683, 35680, 35692, 35711, 35724, 34442, 35695, 35774, 35436, 37243, 37267, 37264, 35350, 35347, 35671, 35689, 36473, 37240, 37237, 34566, 35429, 34649, 34648, 34650, 37192, 37201, 35740, 37234, 35708, 35702, 35743, 35734, 35746, 35665, 35662, 35721, 35714, 35728, 35668, 35699, 35674, 35731, 35737, 37245, 37257, 37254, 35468, 35439, 35442, 35515, 35512, 35448, 37251, 37248, 35268, 35279, 35271, 35266, 35263, 35706, 35687, 35684, 35681, 35693, 35712, 35725, 34443, 35696, 35775, 35433, 37242, 37266, 37263, 35351, 35348, 35672, 35690, 36474, 37239, 37236, 35615, 35425, 35655, 35658, 37191, 37194, 35741, 37233, 35709, 35703, 35744, 35735, 35747, 35666, 35663, 35722, 35715, 35729, 35669, 35700, 35675, 35732, 35738, 37244, 37256, 37253, 35459, 35440, 35443, 35516, 35513, 35449, 37250, 37247, 35269, 35280, 35272, 35267, 35264, 35707, 35688, 35685, 35682, 35694, 35713, 35726, 35749, 35697, 35776, 35431, 37241, 37265, 37262, 35352, 35349, 35673, 35691, 36475, 37238, 37235, 35616, 35423, 35656, 35659, 37168, 37193, 35742, 37202, 35710, 35704, 35745, 35736, 35748, 35667, 35664, 35723, 35716, 35730, 35670, 35701, 35676, 35733, 35739, 37172, 37917, 37964, 38016, 38023, 38042, 38044, 38045, 38295, 38471, 35116, 37214, 38030, 36597, 38121, 37601, 38485, 38472, 38006, 37984, 37671, 36908, 36909, 38338, 38337, 38491, 37966, 38339, 38328, 38248, 40295, 40281, 36912, 39372, 36598, 36609, 36633, 36701, 37695, 37698, 37799, 38757, 38995, 39371, 37228, 37229, 37531, 37532, 38199, 38421, 38429, 38430, 38548, 38556, 40160, 40607, 40413, 40405, 35050, 39048, 36853, 36980, 37186, 38223, 40703, 35146, 35876, 35878, 35043, 38589, 34386, 34387, 34489, 37801, 37845, 38191, 40725, 34532, 36823, 36824, 38285, 38392, 38579, 38584, 38667, 35360, 35359, 38462, 38483, 38292, 38271, 40246, 38434, 38435, 38436, 38401, 38784, 38785, 35531, 35530, 40198, 40436, 40443, 40446, 37919, 36064, 35027, 34490, 36991, 37000, 37205, 37211, 37509, 37510, 37512, 37523, 37527, 37538, 37539, 37541, 37542, 37552, 37707, 37745, 37746, 37763, 37764, 37765, 37781, 37829, 37844, 37881, 38047, 38048, 38052, 38056, 37826, 37827, 37832, 37857, 37871, 37878, 37893, 37894, 37952, 37976, 38001, 40625, 39746, 39747, 39751, 39794, 39814, 39863, 39899, 40001, 40029, 40041, 40042, 40043, 40044, 40055, 40081, 40083, 40091, 40100, 40135, 40142, 40146, 40417, 40419, 40421, 40423, 40429, 40626, 40627, 40628, 40870, 37306, 37307, 37308, 37309, 37310, 37311, 37312, 37313, 37314, 37315, 37316, 37317, 37318, 37319, 37320, 37321, 37322, 37323, 37324, 37325, 37326, 37327, 37328, 37329, 37330, 37331, 37332, 37333, 37334, 37335, 37336, 37337, 37338, 37339, 37340, 37341, 37342, 37343, 37344, 37345, 37346, 37347, 37348, 37349, 37350, 37351, 37352, 37353, 37354, 37355, 37356, 37357, 37358, 37359, 37360, 37361, 37362, 37363, 37364, 37365, 37366, 37367, 37368, 37369, 37370, 37371, 37372, 37373, 37374, 37375, 37376, 37377, 37378, 37379, 37380, 37381, 37382, 37383, 37384, 37385, 37386, 37387, 37388, 37389, 37390, 37391, 37392, 37393, 37394, 37395, 37396, 37397, 37398, 37399, 37400, 37401, 37402, 37403, 37404, 37405, 37406, 37407, 37408, 37409, 37410, 37411, 37412, 37413, 37414, 37415, 37416, 37417, 37418, 37419, 37420, 37421, 37422, 37423, 37424, 37425, 37426, 37427, 37428, 37429, 37430, 37431, 37432, 37433, 37434, 37435, 37436, 37437, 37438, 37439, 37440, 37441, 37442, 37443, 37444, 37445, 37446, 37447, 37448, 37449, 37450, 37451, 37452, 37453, 37454, 37455, 37456, 37457, 37458, 37459, 37460, 37461, 37462, 37463, 37464, 37465, 37466, 37467, 37468, 37469, 37470, 37471, 37472, 37473, 37474, 37475, 37476, 37477, 37478, 37479, 37480, 37481, 37482, 37483, 37484, 37485, 37486, 37525, 37526, 37530, 37535, 37610, 37611, 37615, 37616, 37617, 37619, 37620, 37621, 37630, 37631, 37632, 37633, 37634, 37653, 37654, 37657, 37658, 37678, 37691, 37693, 37699, 37700, 37703, 37721, 37722, 37732, 37734, 37749, 37750, 37751, 37752, 37766, 37767, 37768, 37769, 37770, 37771, 37772, 37773, 37775, 37787, 37788, 37790, 37798, 37800, 37820, 37825, 37831, 37860, 37869, 37883, 37898, 37932, 37937, 37944, 37982, 37983, 38011, 38012, 38013, 38014, 38019, 38020, 38021, 38043, 38049, 38050, 38053, 38067, 38094, 38116, 38129, 38130, 38134, 38137, 38139, 38151, 38158, 38162, 38164, 38180, 38207, 38216, 38226, 38230, 38236, 38260, 38264, 38273, 38289, 38291, 38310, 38320, 38321, 38322, 38349, 38350, 38351, 38352, 38353, 38361, 38367, 38386, 38388, 38486, 38495, 38496, 38497, 38503, 38527, 38528, 38529, 38546, 38547, 38552, 38566, 38572, 38580, 38581, 38587, 38588, 38590, 38601, 38605, 38606, 38607, 38608, 38609, 38610, 38641, 38686, 38695, 38698, 38701, 38702, 38710, 38716, 38717, 38773, 38774, 38778, 38786, 38787, 38788, 38789, 38790, 38825, 38830, 38831, 38839, 38843, 38846, 38857, 38860, 38863, 38870, 38877, 38882, 38883, 38900, 38901, 38903, 38905, 38906, 38907, 38919, 38920, 38921, 38970, 38971, 38972, 38973, 38974, 38975, 39011, 39012, 39013, 39021, 39023, 39045, 39046, 39047, 39055, 39057, 39058, 39060, 39089, 39090, 39091, 39101, 39103, 39120, 39121, 39122, 39123, 39125, 39130, 39131, 39132, 39135, 39158, 39189, 39190, 39217, 39229, 39230, 39231, 39232, 39233, 39234, 39252, 39253, 39259, 39263, 39264, 39265, 39271, 39273, 39275, 39283, 39284, 39285, 39286, 39287, 39288, 39289, 39296, 39299, 39300, 39301, 39302, 39303, 39304, 39305, 39306, 39307, 39309, 39310, 39311, 39328, 39343, 39349, 39355, 39356, 39361, 39362, 39368, 39386, 39396, 39420, 39421, 39448, 39454, 39462, 39466, 39508, 39581, 39623, 39624, 39632, 39633, 39639, 39647, 39648, 39654, 39672, 39675, 39678, 39682, 39683, 39686, 39691, 39692, 39695, 39703, 39707, 39711, 39712, 39713, 39714, 39715, 39716, 39717, 39735, 39743, 39744, 39755, 39757, 39758, 39759, 39760, 39763, 39798, 39799, 39805, 39807, 39815, 39817, 39818, 39819, 39820, 39821, 39823, 39825, 39826, 39827, 39836, 39837, 39841, 39842, 39852, 39856, 39860, 39861, 39864, 39872, 39888, 39891, 39901, 39902, 39903, 39910, 39920, 39922, 39934, 39938, 39940, 39944, 39945, 39967, 39968, 39969, 39970, 39973, 39975, 39976, 39977, 40006, 40010, 40037, 40038, 40039, 40057, 40097, 40098, 40101, 40102, 40103, 40104, 40110, 40120, 40122, 40124, 40125, 40138, 40141, 40143, 40144, 40145, 40151, 40175, 40176, 40182, 40184, 40187, 40188, 40189, 40191, 40192, 40195, 40196, 40199, 40203, 40204, 40205, 40206, 40207, 40208, 40209, 40210, 40211, 40212, 40213, 40214, 40215, 40216, 40217, 40218, 40220, 40222, 40225, 40231, 40241, 40253, 40256, 40257, 40260, 40263, 40264, 40265, 40274, 40279, 40301, 40305, 40312, 40329, 40352, 40354, 40356, 40361, 40363, 40368, 40373, 40374, 40387, 40388, 40391, 40392, 40404, 40414, 40415, 40416, 40418, 40420, 40422, 40424, 40425, 40426, 40428, 40435, 40437, 40438, 40441, 40468, 40469, 40470, 40471, 40472, 40478, 40479, 40481, 40492, 40502, 40506, 40606, 40617, 40670, 40671, 40672, 40673, 40674, 40675, 40681, 40682, 40683, 40684, 40704, 40721, 40724, 40842, 41839, 43280, 43281, 43282, 40624);
+
+
+-- `gameobject_questitem`.`VerifiedBuild`
+
+ALTER TABLE `gameobject_questitem`
+ ADD COLUMN `VerifiedBuild` SMALLINT(5) NOT NULL DEFAULT '0';
+
+UPDATE `gameobject_questitem` SET `VerifiedBuild` = -12340 WHERE `GameObjectEntry` = 202083;
+UPDATE `gameobject_questitem` SET `VerifiedBuild` = 15354 WHERE `GameObjectEntry` = 175984;
+UPDATE `gameobject_questitem` SET `VerifiedBuild` = 15595 WHERE `GameObjectEntry` = 202193;
+UPDATE `gameobject_questitem` SET `VerifiedBuild` = 16992 WHERE `GameObjectEntry` = 202192;
+UPDATE `gameobject_questitem` SET `VerifiedBuild` = 17371 WHERE `GameObjectEntry` = 188509;
+
+UPDATE `gameobject_questitem` SET `VerifiedBuild` = 11685 WHERE `GameObjectEntry` IN (191125, 187082);
+UPDATE `gameobject_questitem` SET `VerifiedBuild` = 17658 WHERE `GameObjectEntry` IN (178188, 187191);
+UPDATE `gameobject_questitem` SET `VerifiedBuild` = 15211 WHERE `GameObjectEntry` IN (181073, 202947, 202948);
+UPDATE `gameobject_questitem` SET `VerifiedBuild` = -1 WHERE `GameObjectEntry` IN (184839, 194328, 194956, 190363, 194326, 194329, 194330);
+UPDATE `gameobject_questitem` SET `VerifiedBuild` = 17538 WHERE `GameObjectEntry` IN (147077, 147076, 147075, 180609, 180610, 180611, 184633, 188216, 190217);
+UPDATE `gameobject_questitem` SET `VerifiedBuild` = 11159 WHERE `GameObjectEntry` IN (2563, 3200, 150080, 151951, 174596, 177491, 178609, 178645, 178647, 178649, 178671, 178745, 178746, 179665, 180050, 180051, 180052, 180797, 181578, 184378, 184691, 184830, 185574, 126342, 142976, 142977, 142978, 142979, 142980, 177325, 177396, 178667, 178668, 178669, 178805, 178924, 180715, 180719, 180743, 180746, 180747, 180748, 180793, 180796, 180798, 180799, 180844, 184561, 185926, 187193, 187235, 185520, 180024, 185582, 180654, 187567, 187194, 188444, 187236, 193960, 194159, 193967, 193426, 194789, 194324, 192265, 194462, 194338, 194339, 194821, 191179, 181853, 194325, 195669);
+UPDATE `gameobject_questitem` SET `VerifiedBuild` = 11403 WHERE `GameObjectEntry` IN (1989, 1990, 73941, 102413, 153468, 164881, 174602, 174608, 174610, 175075, 176157, 176306, 179547, 180755, 180756, 180757, 180759, 180760, 180761, 180762, 180763, 180764, 180767, 180769, 180770, 180772, 180773, 180774, 180775, 180776, 180777, 180778, 180868, 180869, 180870, 180871, 180872, 180873, 180878, 180879, 180880, 180881, 180882, 180883, 180885, 181014, 181015, 181016, 181017, 181018, 181019, 181020, 181022, 181025, 181055, 181060, 183983, 140360, 175076, 178725, 180758, 180765, 180857, 180874, 180875, 180884, 180888, 180909, 180910, 181027, 182259, 185916, 165587, 191300, 190678, 190792, 192517, 187575, 187668, 200300, 200332, 200333, 200334, 200335, 200336, 200337, 200338, 201289, 201752, 201778, 201906, 201940, 202105, 201716, 202169);
+UPDATE `gameobject_questitem` SET `VerifiedBuild` = 11723 WHERE `GameObjectEntry` IN (33, 34, 35, 331, 333, 334, 965, 1165, 1557, 1599, 1604, 1605, 1607, 1609, 1610, 1729, 1730, 1740, 1760, 1836, 1838, 1840, 1844, 1868, 1898, 1926, 1997, 1999, 2004, 2061, 2066, 2667, 2704, 2711, 2741, 2743, 2846, 2867, 2904, 180653, 3890, 3899, 3909, 3911, 3944, 3945, 3946, 3947, 3948, 3949, 3950, 3951, 4406, 6752, 7510, 7923, 9630, 10076, 17157, 17183, 18342, 18343, 18596, 18603, 19024, 19025, 19027, 19534, 19538, 19539, 19540, 19549, 19552, 19586, 19596, 19599, 19862, 19875, 19878, 19879, 19901, 20850, 20870, 20881, 20939, 20985, 20989, 21004, 21053, 21054, 21055, 21056, 21069, 21070, 21071, 21072, 21088, 21089, 21128, 21308, 22229, 22230, 22231, 22234, 22248, 22253, 22257, 26482, 31442, 31511, 32372, 32882, 32883, 32884, 35251, 35252, 36645, 48521, 48543, 48568, 48569, 48571, 48572, 48574, 48575, 61929, 74138, 74146, 90567, 92065, 92252, 92388, 92420, 102988, 102991, 102992, 102993, 102994, 102995, 103003, 103815, 109515, 111148, 112192, 112888, 113529, 113531, 113769, 113771, 124388, 124389, 126260, 130358, 136945, 136946, 138496, 138497, 140105, 141069, 141859, 141980, 141981, 142127, 142179, 142194, 142345, 144180, 144181, 147435, 148513, 148514, 148515, 148731, 148732, 148734, 148737, 148738, 148740, 148744, 148745, 148766, 148838, 148883, 148937, 148976, 148996, 148997, 148998, 149020, 149022, 149047, 149410, 149420, 149480, 149481, 149482, 149483, 150086, 150140, 151286, 152098, 153123, 153205, 153359, 153360, 153463, 153577, 160839, 161456, 161487, 161489, 164690, 164758, 164820, 164824, 164826, 164827, 164888, 164890, 164891, 164927, 165559, 167285, 167286, 167291, 171648, 171649, 171939, 173266, 173326, 174604, 174606, 174614, 174615, 174684, 174686, 174708, 174714, 175227, 175264, 175336, 175487, 175488, 175571, 175584, 175589, 175704, 175707, 175765, 175766, 175767, 175889, 175890, 175925, 176091, 176158, 176159, 176161, 176165, 176184, 176188, 176191, 176198, 176206, 176225, 176226, 176230, 176274, 176280, 176283, 176284, 176288, 176289, 176356, 176511, 176513, 176514, 176515, 176634, 176784, 176809, 176810, 176811, 176812, 176813, 176814, 176815, 176816, 176817, 176818, 176819, 176820, 176821, 176822, 176823, 176824, 176825, 176826, 176827, 176828, 176829, 176830, 176831, 176832, 176833, 176834, 176835, 176836, 176837, 176838, 176839, 176840, 176841, 176842, 176908, 176909, 176910, 176911, 176912, 176913, 176914, 176915, 176916, 176917, 176918, 176919, 176920, 176921, 176922, 177239, 177240, 177259, 177526, 177527, 177586, 177624, 177644, 177665, 177667, 177673, 177675, 177677, 177684, 177705, 177724, 177725, 177727, 177784, 177786, 177787, 177985, 178205, 178207, 178227, 178228, 178325, 178444, 180651, 180652, 178670, 179086, 179286, 179485, 179491, 179498, 179499, 179501, 179511, 179516, 179517, 179544, 179548, 179551, 179563, 179564, 179565, 179667, 179757, 179767, 179828, 179910, 179915, 180056, 180510, 180511, 180515, 180516, 180598, 180647, 180660, 180679, 180680, 180681, 180690, 180691, 180855, 181068, 181069, 181133, 181138, 181139, 181140, 181146, 181148, 181150, 181152, 181238, 181239, 181248, 181249, 181251, 181252, 181313, 181314, 181315, 181316, 181317, 181320, 181321, 181322, 181323, 181328, 181350, 181351, 181359, 181379, 181445, 181489, 181495, 181608, 181652, 181665, 181670, 181674, 181675, 181746, 181755, 181756, 181758, 181769, 181776, 181777, 181778, 181779, 181780, 181782, 181806, 181829, 181841, 181851, 181863, 181864, 181865, 181866, 181867, 181868, 181869, 181887, 181888, 181893, 181894, 181897, 181898, 181917, 181920, 181936, 181937, 181947, 181948, 181949, 181950, 181951, 181952, 181953, 181956, 181964, 181967, 181968, 181991, 181992, 181993, 181994, 181995, 181996, 181997, 181998, 181999, 182000, 182001, 182002, 182015, 182016, 182017, 182018, 182019, 182020, 182021, 182022, 182023, 182026, 182027, 182028, 182029, 182032, 182211, 182212, 182215, 182216, 182217, 182218, 182219, 182220, 182532, 182533, 182650, 182654, 182655, 182656, 182657, 182658, 182659, 182660, 182666, 182667, 182671, 182879, 182880, 182905, 182906, 182907, 182908, 182909, 182910, 182911, 182912, 182913, 182914, 182915, 182916, 182917, 182918, 182919, 182920, 182921, 182960, 182961, 182963, 182966, 183096, 183442, 183496, 183812, 183847, 184056, 184108, 184145, 184273, 184384, 184385, 184386, 184387, 184388, 184389, 184390, 184391, 184392, 184408, 184409, 184410, 184411, 184412, 184442, 184490, 184582, 184634, 184635, 184636, 184637, 184638, 184639, 184653, 184683, 184684, 184700, 184738, 184747, 184753, 184795, 184796, 184797, 184801, 184850, 184926, 184928, 184947, 184949, 184979, 185034, 185040, 185041, 185042, 185043, 185044, 185045, 185046, 185047, 185057, 185058, 185059, 185060, 185061, 185085, 185086, 185087, 185098, 185102, 185125, 185126, 185127, 185128, 185130, 185146, 185182, 185233, 185898, 185562, 185564, 185567, 185569, 185577, 185578, 185579, 185658, 185668, 185670, 185671, 185700, 185701, 185702, 185703, 185724, 185725, 185726, 185727, 185728, 185729, 185730, 185731, 185732, 185733, 185734, 185735, 185736, 185737, 185738, 185739, 185740, 185741, 185742, 185743, 185744, 185745, 185746, 185747, 185748, 185749, 185750, 185751, 185764, 185765, 185766, 185767, 185788, 185789, 185790, 185791, 185792, 185793, 185794, 185795, 185796, 185797, 185798, 185799, 185800, 185801, 185802, 185803, 185804, 185805, 185806, 185807, 185808, 185809, 185810, 185811, 185812, 185813, 185814, 185815, 185816, 185817, 185818, 185819, 185820, 185821, 185822, 185823, 185824, 185825, 185826, 185827, 185828, 185829, 185830, 185831, 185834, 185835, 185872, 185873, 185874, 185875, 185932, 185933, 185934, 185937, 1667, 1700, 1701, 1702, 1703, 1704, 1834, 1841, 1845, 1846, 1847, 1848, 1876, 1878, 1879, 1883, 1884, 1917, 2056, 3852, 3853, 3855, 3856, 3895, 3896, 3897, 3903, 3904, 3907, 3910, 18069, 18344, 18345, 20878, 20921, 20922, 20964, 92140, 92142, 112012, 142974, 170035, 170036, 170037, 170038, 170039, 170040, 170041, 170042, 170043, 170044, 170045, 170046, 174846, 174847, 176319, 176609, 176610, 176611, 176612, 179985, 1803, 1804, 1864, 1866, 1867, 1869, 1880, 1881, 1882, 1894, 1895, 1905, 1921, 1922, 1923, 1971, 2003, 2054, 2665, 3222, 3223, 3310, 3636, 3637, 3638, 3639, 3770, 6288, 20692, 20693, 20879, 20924, 20960, 22250, 22251, 22254, 22255, 22258, 22259, 22260, 22261, 22262, 37051, 37089, 37090, 37091, 37092, 37093, 37094, 37095, 37096, 38028, 38030, 40197, 48441, 48449, 51681, 55535, 74077, 103749, 103770, 103771, 103772, 112194, 112195, 112196, 112197, 112198, 112199, 112202, 112216, 112217, 112223, 113540, 141610, 141611, 142121, 142123, 142124, 142690, 143397, 147436, 147437, 147438, 147439, 147440, 147441, 147442, 147443, 147444, 147445, 147446, 147447, 147448, 147449, 147450, 148666, 148672, 148673, 148676, 148679, 148681, 148685, 148687, 148688, 148689, 149017, 149018, 150081, 150713, 152324, 153399, 153482, 164728, 164818, 171619, 171622, 174882, 174883, 174884, 174885, 174886, 174887, 174888, 174889, 174890, 174891, 174892, 174893, 174894, 174895, 174896, 174897, 174898, 174899, 174900, 174901, 174902, 174903, 174904, 174905, 174906, 174907, 174908, 174909, 174910, 174911, 174934, 174935, 174936, 174937, 174938, 174939, 174940, 174941, 174942, 174945, 175233, 176166, 176267, 176268, 176271, 176273, 176287, 176291, 176293, 176305, 176885, 176891, 176999, 177146, 177147, 177148, 177149, 177257, 177258, 177275, 177276, 177368, 177844, 179307, 179308, 179504, 179505, 179507, 179508, 179748, 179749, 179750, 179751, 179752, 179753, 179754, 179755, 179756, 179758, 179759, 179760, 179761, 179762, 179763, 179764, 179765, 179766, 179768, 179769, 179770, 179771, 179945, 180105, 180124, 180346, 180367, 180418, 180443, 180454, 180604, 180606, 180607, 180608, 180619, 180620, 180642, 180718, 180745, 180795, 180850, 180854, 180860, 180861, 180864, 180865, 181012, 181013, 181109, 181327, 181352, 181356, 181357, 181362, 181640, 181965, 181988, 182063, 182088, 182091, 182607, 183443, 183494, 183495, 184568, 184658, 185117, 185118, 185169, 185541, 185965, 113770, 113768, 185939, 185052, 185053, 185051, 185054, 184329, 184327, 184326, 184328, 184069, 184325, 184596, 184597, 184324, 184697, 184956, 185673, 185672, 185698, 185697, 185704, 185706, 185665, 185707, 185699, 185696, 185666, 185674, 185705, 185522, 185519, 185893, 181832, 185659, 185657, 185669, 185694, 185692, 185656, 185693, 185695, 185675, 185663, 185660, 185661, 185662, 185664, 185667, 185455, 186482, 186338, 185454, 185438, 186648, 187377, 186733, 186272, 186322, 186418, 186465, 180863, 181053, 186469, 186425, 186288, 186315, 187379, 187378, 186667, 186658, 186739, 186430, 186671, 187380, 186672, 186623, 187021, 187084, 186633, 186634, 185907, 188048, 188050, 187929, 187961, 187948, 187970, 187975, 187930, 188152, 187947, 188478, 190396, 190394, 187916, 187920, 187924, 187931, 187936, 187940, 187988, 187989, 188049, 188137, 188138, 187244, 187249, 188460, 190182, 190184, 190186, 190187, 190551, 190837, 191085, 191346, 191510, 191774, 191775, 191776, 192693, 193272, 188265, 188270, 188271, 192472, 192476, 186404, 186444, 186445, 186446, 186466, 186467, 186468, 186806, 187105, 187189, 187250, 187251, 187383, 187384, 187385, 187386, 187679, 187771, 187981, 188066, 188367, 188434, 188450, 188462, 188504, 189305, 189330, 189970, 190336, 190337, 190338, 190339, 190340, 190341, 190342, 190354, 190510, 190514, 190523, 190539, 190656, 190732, 190736, 190737, 190738, 190812, 190813, 190815, 190835, 190838, 190839, 190840, 190841, 190948, 190949, 191458, 191778, 191779, 191789, 191791, 192243, 192261, 192451, 192505, 192506, 192538, 193207, 193407, 193409, 193410, 193411, 193412, 193413, 193420, 193560, 193948, 193955, 193956, 187680, 193975, 193206, 193216, 193217, 193219, 193218, 193215, 193425, 193447, 193440, 193449, 193450, 193451, 193452, 193453, 193454, 193455, 193441, 193442, 193443, 193444, 193445, 193446, 193448, 193427, 193456, 193629, 193628, 193414, 193415, 194004, 194002, 190718, 190707, 190719, 190717, 192612, 190814, 191842, 192075, 192525, 191841, 191794, 192558, 192917, 192127, 193794, 193941, 192257, 192132, 193973, 192262, 191579, 193092, 187451, 192258, 191147, 187077, 194543, 194519, 194555, 192786, 2884, 194628, 184955, 192259, 195632, 192492, 195574, 195318, 201367, 201368, 195573, 201388, 193635, 193692, 193654, 193634, 193640, 193647, 193682, 193632, 193655, 193663, 193673, 193683, 193693, 193694, 193630, 193695, 193659, 193661, 193662, 193644, 193645, 193651, 193652, 193653, 193656, 193657, 193658, 193688, 193689, 193690, 193684, 193686, 193672, 193677, 193685, 193638, 193631, 193639, 193666, 193687, 193680, 193681, 193650, 193660, 193667, 193691, 193633, 193678, 193671, 193674, 193675, 193676, 193646, 193648, 193649, 193636, 193664, 193665, 193679, 193637, 193642, 193643, 193668, 193669, 193670, 193641, 193961, 194123, 195671, 202180, 202212, 179832, 194935, 195670, 21145, 21146, 21147, 21148, 180713, 201872, 194047, 202275, 195116, 188076, 185871, 202080, 187967, 188143, 188144, 190682, 191320, 180687, 187917, 187937, 187941, 187942, 187949, 187962, 188153, 188154, 188187, 185581, 187919, 187935, 187955, 187960, 193590, 193591, 193592, 193593, 193594, 194036, 194040, 194048, 194049, 201718, 201794, 201797, 201844, 201922, 201937);
+UPDATE `gameobject_questitem` SET `VerifiedBuild` = -18019 WHERE `GameObjectEntry` IN (22713, 22714, 22715, 22721, 22716, 22731, 22730, 22729, 22728, 22726, 22725, 22723, 22722, 22717, 22724, 22877, 32566, 32565, 32564, 32563, 32562, 31506, 31505, 29779, 29778, 29739, 29738, 29737, 29736, 29735, 29734, 29733, 29732, 29731, 29730, 29729, 29728, 29727, 29726, 29725, 29724, 29723, 29722, 29721, 29720, 29719, 29718, 29698, 29160, 29159, 29158, 29157, 29156, 29153, 28068, 28067, 22907, 22906, 22905, 22903, 22901, 22900, 22899, 22898, 22897, 22896, 22895, 22893, 22892, 22891, 22890, 22889, 22888, 22878, 22876, 22875, 22874, 22873, 22872, 22871, 22870, 22869, 22868, 22867, 22866, 22862, 22861, 22859, 22857, 22851, 22850, 22848, 22847, 22846, 22845, 22844, 22843, 22842, 22841, 22840, 22839, 22838, 22837, 22793, 22792, 22791, 22790, 22789, 22787, 22786, 22784, 22781, 22780, 22779, 22778, 22720, 22718, 22702, 22701, 22700, 22699, 22698, 22697, 22696, 22695, 22694, 22788, 22782, 22693, 187854, 187855, 187856, 187857, 187858, 187859, 187860, 187862, 187863, 187864, 187865, 187866, 187867, 187868, 187870, 187871, 187872, 187873, 187874, 187861, 22692, 22691, 22690, 22689, 22688, 22687, 22686, 22683, 22682, 22681, 22678, 22677, 22637, 22636, 22635, 22634, 22633, 22632, 22631, 22630, 22629, 22628, 22627, 22626, 22625, 22624, 22620, 22611, 22610, 22609, 22608, 22607, 22586, 22583, 22574, 22573, 22572, 22571, 22570, 20668, 19867, 19866, 19838, 19837, 19836, 19835, 19834, 19832, 16395, 13948, 3687, 3275, 3274, 3272, 3271, 3218, 2903, 275, 2873, 2865, 2864, 2863, 2862, 2861, 2699, 2698, 2697, 2696, 2694, 2693, 2692, 2531, 32567, 32568, 33360, 35758, 37200, 48797, 2705, 2686, 1670, 1603, 22703, 3825, 3826, 3827, 3828, 3829, 3830, 3831, 3858, 3859, 3860, 3861, 3863, 3952, 3953, 3954, 3955, 3956, 3957, 3958, 3959, 3961, 3965, 3966, 21270, 21271, 21752, 20919, 32575, 32576, 32577, 32586, 32587, 32588, 32589, 56817, 60967, 60968, 60969, 60970, 60971, 102414, 103629, 103660, 103708, 103819, 107044, 107045, 107046, 107047, 142171, 142180, 142700, 142716, 143381, 144013, 144051, 144052, 144056, 144569, 146087, 147278, 147280, 147281, 147524, 147538, 147784, 147785, 147788, 147789, 147790, 147791, 147794, 147795, 147796, 147797, 147798, 147799, 147816, 147817, 148422, 148501, 152598, 152604, 152605, 152606, 160464, 161483, 161484, 161519, 161520, 164724, 164738, 164799, 164892, 165678, 165760, 166807, 172619, 174824, 174825, 174952, 175295, 175296, 175297, 175299, 175301, 175309, 175333, 175337, 175338, 175371, 175585, 176088, 176094, 176096, 176097, 176111, 176118, 176119, 176120, 176121, 176122, 176123, 176124, 176125, 176126, 176127, 176128, 176129, 176130, 176131, 176132, 176133, 176134, 176135, 176136, 176137, 176138, 176139, 176140, 176141, 176193, 176453, 176512, 176563, 176564, 176565, 177232, 177306, 177344, 177492, 177528, 177584, 177666, 177744, 177745, 177748, 177788, 178206, 178225, 178405, 178439, 178546, 178548, 178550, 178604, 178606, 178608, 178672, 178704, 178706, 178708, 178709, 178710, 178712, 178713, 178727, 178728, 178729, 178907, 179145, 179146, 179165, 179166, 179167, 179398, 179399, 179400, 179401, 179402, 179403, 179404, 179417, 179675, 179677, 179701, 179746, 180204, 180205, 180343, 180375, 180504, 180505, 180506, 180659, 180673, 180867, 181046, 181047, 181048, 181049, 181050, 181052, 181059, 181094, 181096, 181113, 181164, 181371, 181377, 181479, 181601, 181630, 181648, 181743, 181781, 181958, 181960, 182074, 182108, 182140, 182141, 182142, 182143, 182176, 182187, 182188, 182368, 182530, 182816, 182974, 182975, 182976, 182977, 182978, 182979, 182980, 182993, 183000, 183012, 183016, 183019, 183144, 183307, 183434, 183451, 183452, 183453, 183462, 183463, 183464, 183982, 184002, 184079, 184162, 184288, 184353, 184363, 184365, 184379, 184457, 184562, 184606, 184609, 184642, 184643, 184704, 184746, 184817, 184820, 184823, 184826, 184829, 184841, 184907, 184911, 184929, 184943, 184951, 184997, 185020, 185135, 185140, 185141, 185142, 185143, 185144, 185207, 185215, 185293, 185295, 185299, 185306, 185307, 185310, 185311, 185323, 185880, 185902, 186249, 186299, 186310, 186323, 186324, 186336, 186424, 186464, 186484, 186487, 186599, 186613, 186624, 186846, 186847, 186853, 186928, 186952, 186959, 186982, 187076, 187081, 187107, 187108, 187232, 187330, 187331, 187382, 187458, 187666, 187681, 187705, 187706, 187763, 187800, 187849, 187893, 187894, 187904, 188011, 188019, 188052, 188053, 188054, 188055, 188086, 188105, 188155, 188161, 188175, 188358, 188369, 188420, 188510, 188564, 188660, 188661, 188662, 188664, 188672, 188679, 188690, 188694, 188698, 188707, 188708, 189331, 189541, 189612, 189613, 189624, 189625, 189626, 189627, 189628, 189629, 189845, 189846, 189901, 189902, 189928, 189929, 189984, 190033, 190154, 190155, 190202, 190224, 190364, 190499, 190501, 190545, 190642, 190648, 190649, 190650, 190651, 190652, 190708, 190739, 190781, 190782, 190916, 191122, 191124, 191141, 191192, 191233, 191522, 191823, 192011, 192165, 192462, 192535, 192540, 192560, 193004, 193090, 193387, 193580, 193788, 193947, 193993, 194241, 194291, 194425, 195328, 195329, 195330, 201590, 201796, 60972, 60973, 60974, 60975, 60976, 60977, 60978, 60979, 60980, 60981, 60982, 60983, 60984, 60985, 60986, 60987, 60988, 60989, 60990, 60991, 60992, 60993, 60994, 60995, 60996, 60997, 60998, 60999, 61000, 61001, 61002, 61003, 61004, 61005, 61006, 61007, 61008, 61009, 61010, 61011, 61012, 61013, 61014, 61015, 61016, 61017, 61018, 61019, 61020, 61021, 61022, 61023, 61024, 61025, 61026, 61027, 61028, 61029, 61030, 61031, 61032, 61033, 61034, 64855, 67239, 69420, 103573, 111208, 111209, 111210, 111211, 111213, 111214, 111218, 111219, 111263, 111264, 111267, 111270, 111272, 111273, 111274, 111275, 111276, 111277, 111278, 111279, 111952, 111953, 111954, 111955, 111956, 111960, 111961, 111962, 111963, 111966, 111967, 111970, 111971, 111975, 111980, 111982, 111983, 111984, 112001, 112003, 112004, 112005, 112006, 112008, 112010, 112011, 112013, 112021, 112022, 112025, 112031, 112032, 112034, 112038, 112075, 112076, 112080, 112081, 112101, 112102, 112103, 112105, 112108, 112109, 112110, 112111, 112116, 112117, 112119, 112121, 112125, 112126, 112130, 112131, 112134, 112135, 112151, 112152, 112155, 112156, 112157, 112158, 112159, 112161, 112162, 112165, 112169, 112170, 112171, 112172, 112174, 112175, 112176, 112180, 112242, 112243, 112244, 112245, 112247, 112248, 112250, 112251, 112253, 112254, 112255, 112256, 112257, 112258, 112259, 112262, 112263, 112265, 112266, 112269, 112271, 112272, 112273, 112274, 112275, 112278, 112280, 112281, 112282, 112292, 112293, 112294, 112295, 112296, 112299, 112300, 112313, 112323, 112324, 112326, 112328, 112330, 112331, 112332, 113530, 113532, 132834, 136924, 138494, 138495, 138605, 138606, 138607, 138608, 138609, 138610, 138611, 138612, 138613, 140371, 140907, 141075, 142011, 142012, 142032, 142033, 142074, 142080, 142203, 143198, 143219, 143220, 143231, 147818, 147819, 147820, 147822, 148502, 148518, 148520, 148521, 148522, 148524, 148525, 148526, 148527, 148530, 148531, 148533, 148534, 148537, 148539, 148542, 148543, 148546, 148548, 148553, 148558, 148559, 148562, 148564, 148565, 148566, 148568, 148570, 148571, 148584, 148588, 148590, 148592, 148593, 148594, 148595, 148596, 148597, 148598, 148599, 148601, 148602, 148603, 148604, 148607, 148608, 148609, 148610, 148611, 148613, 148614, 148615, 148616, 148617, 148618, 148619, 148620, 148621, 148623, 148624, 148625, 148626, 148627, 148628, 148630, 148631, 148632, 148633, 148634, 148645, 148829, 150139, 152079, 153191, 153192, 153193, 153219, 153222, 153223, 153224, 153236, 153237, 153238, 153452, 153456, 153588, 160465, 160841, 160843, 160854, 160855, 160856, 160857, 160858, 160859, 160860, 160861, 160862, 160863, 160864, 160865, 161512, 161558, 164727, 164782, 164841, 164878, 165547, 165548, 165579, 166806, 169994, 169995, 170003, 170004, 170005, 170006, 170007, 170008, 170009, 170010, 170011, 170012, 170013, 170014, 170015, 170016, 170017, 170018, 170019, 170020, 170021, 170022, 170023, 170024, 170025, 170026, 170027, 170028, 170029, 170030, 170031, 170032, 170051, 170052, 170069, 170070, 170071, 170072, 170074, 170352, 171844, 171924, 174681, 174688, 174689, 174690, 174691, 174692, 174693, 174694, 174695, 174696, 174697, 174784, 174785, 174786, 174787, 174788, 174789, 174790, 174791, 174844, 174845, 174850, 174851, 174853, 174854, 174855, 174856, 174928, 174929, 174930, 174931, 174970, 174971, 174972, 174973, 174990, 174991, 174992, 174993, 174999, 175000, 175031, 175032, 175033, 175034, 175035, 175036, 175037, 175038, 175039, 175040, 175041, 175042, 175043, 175044, 175047, 175048, 175049, 175050, 175051, 175052, 175053, 175054, 175055, 175056, 175057, 175058, 175059, 175060, 175061, 175062, 175063, 175064, 175067, 175068, 175069, 175070, 175152, 175175, 175176, 175303, 175304, 175339, 175340, 175341, 175342, 175343, 175344, 175345, 175346, 175347, 175348, 175349, 175538, 175728, 175755, 175768, 175769, 175783, 175790, 176366, 176585, 176593, 177230, 177282, 177465, 177487, 177488, 177489, 177545, 177546, 177547, 177548, 177676, 177680, 177944, 178086, 178305, 178344, 178387, 178392, 178552, 178555, 178624, 178648, 178787, 179168, 179169, 179170, 179171, 179172, 179173, 179174, 179175, 179176, 179177, 179178, 179179, 179180, 179181, 179182, 179183, 179184, 179185, 179186, 179187, 179188, 179189, 179190, 179191, 179192, 179193, 179194, 179195, 179196, 179197, 179198, 179199, 179200, 179201, 179202, 179203, 179204, 179205, 179206, 179207, 179208, 179209, 179210, 179211, 179212, 179213, 179214, 179215, 179216, 179217, 179218, 179219, 179220, 179221, 179405, 179406, 179407, 179408, 179409, 179410, 179411, 179412, 179413, 179414, 179415, 179416, 179480, 179524, 179678, 179679, 179680, 179683, 179684, 179685, 179689, 179691, 179692, 179705, 179772, 179773, 179774, 179775, 179776, 179777, 179829, 179868, 179869, 179870, 179894, 179966, 179971, 179974, 180027, 180028, 180033, 180054, 180084, 180586, 180587, 180588, 180589, 180590, 180591, 180592, 180593, 180594, 180595, 180596, 180597, 180599, 180641, 180672, 180697, 180701, 180705, 180706, 180709, 180710, 180787, 180906, 181023, 181026, 181028, 181070, 181114, 181118, 181128, 181129, 181141, 181149, 181226, 181237, 181244, 181245, 181246, 181258, 181289, 181309, 181364, 181497, 181502, 181503, 181504, 181505, 181506, 181507, 181508, 181509, 181571, 181623, 181641, 181642, 181739, 181744, 181747, 181751, 181772, 181850, 181881, 181911, 181919, 182025, 182036, 182057, 182087, 182099, 182111, 182112, 182120, 182163, 182186, 182254, 182255, 182366, 182403, 182404, 182453, 182454, 182455, 182456, 182457, 182458, 182459, 182460, 182461, 182462, 182463, 182464, 182465, 182466, 182467, 182468, 182469, 182470, 182471, 182472, 182473, 182474, 182475, 182476, 182477, 182478, 182479, 182480, 182481, 182482, 182531, 182590, 182792, 182793, 182855, 182981, 182982, 182983, 182984, 182985, 182986, 182987, 182988, 182989, 182990, 182991, 182992, 182995, 182996, 182997, 182998, 182999, 183001, 183002, 183003, 183004, 183011, 183013, 183014, 183015, 183017, 183018, 183020, 183021, 183100, 183102, 183106, 183156, 183283, 183308, 183309, 183310, 183311, 183312, 183328, 183352, 183353, 183354, 183387, 183388, 183389, 183400, 183405, 183440, 183448, 183505, 183506, 183508, 183509, 183765, 183766, 183769, 183851, 183969, 184282, 184283, 184413, 184432, 184441, 184452, 184464, 184479, 184480, 184481, 184482, 184483, 184484, 184485, 184486, 184487, 184592, 184593, 184610, 184623, 184690, 184695, 184696, 184703, 184723, 184754, 184755, 184756, 184757, 184758, 184759, 184760, 184761, 184762, 184763, 184764, 184765, 184766, 184767, 184768, 184769, 184770, 184771, 184772, 184773, 184774, 184775, 184776, 184777, 184778, 184779, 184780, 184781, 184782, 184783, 184784, 184785, 184786, 184787, 184788, 184789, 184790, 184791, 184792, 184805, 184806, 184824, 184831, 184832, 184845, 184854, 184855, 184856, 184857, 184861, 184864, 184865, 184866, 184905, 184924, 184942, 185001, 185002, 185003, 185016, 185017, 185021, 185022, 185171, 185176, 185187, 185188, 185189, 185291, 185308, 185312, 185326, 185327, 185328, 185329, 185330, 185331, 185332, 185333, 185334, 185335, 185336, 185337, 185338, 185339, 185340, 185341, 185342, 185343, 185344, 185345, 185346, 185347, 185348, 185349, 185350, 185351, 185352, 185353, 185354, 185355, 185356, 185357, 185358, 185359, 185360, 185361, 185362, 185363, 185364, 185365, 185366, 185367, 185368, 185369, 185370, 185371, 185372, 185373, 185374, 185375, 185376, 185377, 185378, 185379, 185380, 185381, 185382, 185383, 185384, 185385, 185386, 185387, 185388, 185389, 185390, 185391, 185392, 185393, 185468, 185469, 185470, 185496, 185542, 185546, 185552, 185586, 185587, 185588, 185589, 185594, 185864, 185865, 185866, 185867, 185868, 185869, 185870, 185895, 185910, 185925, 185966, 186150, 186151, 186159, 186219, 186222, 186223, 186239, 186246, 186247, 186254, 186281, 186282, 186289, 186290, 186291, 186292, 186293, 186294, 186295, 186296, 186297, 186298, 186316, 186396, 186489, 186561, 186597, 186606, 186621, 186655, 186673, 186674, 186675, 186676, 186721, 186722, 186723, 186724, 186725, 186742, 186743, 186746, 186747, 186749, 186829, 186848, 186849, 186854, 186855, 186856, 186857, 186941, 186945, 186973, 186974, 186975, 186983, 187031, 187079, 187083, 187109, 187118, 187190, 187233, 187234, 187262, 187263, 187289, 187293, 187332, 187336, 187340, 187342, 187391, 187429, 187430, 187445, 187472, 187473, 187474, 187475, 187476, 187477, 187478, 187479, 187480, 187481, 187482, 187483, 187484, 187485, 187486, 187487, 187488, 187489, 187490, 187491, 187492, 187493, 187494, 187495, 187496, 187497, 187566, 187657, 187678, 187688, 187691, 187692, 187696, 187702, 187718, 187775, 187776, 187777, 187778, 187779, 187780, 187781, 187782, 187783, 187784, 187785, 187786, 187787, 187788, 187789, 187790, 187791, 187792, 187793, 187794, 187795, 187796, 187797, 187798, 187799, 187801, 187802, 187803, 187804, 187805, 187806, 187807, 187808, 187809, 187810, 187811, 187812, 187813, 187814, 187815, 187816, 187817, 187818, 187819, 187820, 187821, 187822, 187823, 187824, 187825, 187826, 187827, 187828, 187829, 187830, 187831, 187832, 187833, 187834, 187835, 187836, 187837, 187838, 187839, 187840, 187841, 187842, 187843, 187844, 187845, 187846, 187847, 187848, 187890, 187910, 187911, 187976, 187977, 188051, 188056, 188057, 188058, 188059, 188060, 188061, 188062, 188068, 188070, 188096, 188158, 188159, 188162, 188179, 188180, 188181, 188182, 188183, 188184, 188185, 188189, 188190, 188217, 188218, 188219, 188220, 188221, 188222, 188223, 188224, 188225, 188226, 188228, 188232, 188233, 188234, 188235, 188340, 188341, 188343, 188429, 188430, 188433, 188436, 188437, 188438, 188439, 188440, 188447, 188449, 188466, 188467, 188468, 188484, 188513, 188520, 188536, 188555, 188558, 188559, 188589, 188592, 188597, 188598, 188638, 188639, 188640, 188641, 188642, 188643, 188644, 188645, 188654, 188696, 188701, 188704, 188709, 188752, 188753, 189050, 189314, 189332, 189333, 189334, 189335, 189336, 189337, 189338, 189339, 189340, 189341, 189342, 189343, 189344, 189345, 189346, 189347, 189348, 189349, 189350, 189351, 189352, 189353, 189354, 189355, 189356, 189357, 189358, 189359, 189360, 189361, 189362, 189363, 189364, 189365, 189366, 189367, 189368, 189369, 189370, 189371, 189372, 189373, 189374, 189375, 189376, 189377, 189378, 189379, 189380, 189381, 189382, 189383, 189384, 189385, 189386, 189387, 189388, 189389, 189390, 189391, 189392, 189393, 189394, 189395, 189396, 189397, 189398, 189399, 189400, 189401, 189402, 189403, 189404, 189405, 189406, 189407, 189408, 189409, 189410, 189411, 189412, 189413, 189414, 189415, 189416, 189417, 189418, 189419, 189420, 189421, 189422, 189423, 189424, 189425, 189426, 189427, 189428, 189429, 189430, 189431, 189432, 189433, 189434, 189435, 189436, 189437, 189438, 189439, 189440, 189441, 189442, 189443, 189444, 189445, 189446, 189447, 189448, 189449, 189450, 189451, 189452, 189453, 189454, 189455, 189456, 189457, 189458, 189459, 189460, 189461, 189462, 189463, 189464, 189465, 189466, 189467, 189468, 189469, 189470, 189471, 189472, 189473, 189474, 189475, 189476, 189477, 189478, 189479, 189480, 189481, 189482, 189483, 189484, 189485, 189486, 189487, 189488, 189489, 189490, 189491, 189492, 189493, 189494, 189495, 189496, 189497, 189498, 189499, 189500, 189501, 189502, 189503, 189504, 189505, 189506, 189507, 189508, 189509, 189510, 189511, 189512, 189513, 189514, 189515, 189516, 189517, 189518, 189519, 189520, 189521, 189522, 189523, 189524, 189525, 189526, 189527, 189528, 189529, 189530, 189531, 189532, 189533, 189534, 189535, 189536, 189537, 189538, 189539, 189540, 189542, 189543, 189544, 189545, 189546, 189547, 189548, 189549, 189550, 189551, 189552, 189553, 189554, 189555, 189556, 189557, 189558, 189559, 189560, 189561, 189562, 189563, 189564, 189565, 189566, 189567, 189568, 189569, 189570, 189571, 189572, 189573, 189574, 189575, 189576, 189577, 189578, 189579, 189580, 189581, 189582, 189583, 189584, 189585, 189586, 189587, 189588, 189589, 189590, 189591, 189592, 189593, 189594, 189595, 189596, 189597, 189598, 189599, 189600, 189601, 189602, 189603, 189604, 189605, 189606, 189607, 189608, 189609, 189610, 189611, 189614, 189615, 189616, 189617, 189618, 189619, 189620, 189621, 189622, 189623, 189630, 189631, 189632, 189633, 189634, 189635, 189636, 189637, 189638, 189639, 189640, 189641, 189642, 189643, 189644, 189645, 189646, 189647, 189648, 189649, 189650, 189651, 189652, 189653, 189654, 189655, 189656, 189657, 189658, 189659, 189660, 189661, 189662, 189663, 189664, 189665, 189666, 189667, 189668, 189669, 189670, 189671, 189672, 189673, 189674, 189675, 189676, 189677, 189678, 189679, 189680, 189681, 189682, 189683, 189684, 189685, 189686, 189687, 189688, 189689, 189690, 189691, 189692, 189693, 189694, 189695, 189696, 189697, 189698, 189699, 189700, 189701, 189702, 189703, 189704, 189705, 189706, 189707, 189708, 189709, 189710, 189711, 189712, 189713, 189714, 189715, 189716, 189717, 189718, 189719, 189720, 189721, 189722, 189723, 189724, 189725, 189726, 189727, 189728, 189729, 189730, 189731, 189732, 189733, 189734, 189735, 189736, 189737, 189738, 189739, 189740, 189741, 189742, 189743, 189744, 189745, 189746, 189747, 189748, 189749, 189750, 189751, 189752, 189753, 189754, 189755, 189756, 189757, 189758, 189759, 189760, 189761, 189762, 189763, 189764, 189765, 189766, 189767, 189768, 189769, 189770, 189771, 189772, 189773, 189774, 189775, 189776, 189777, 189778, 189779, 189780, 189781, 189782, 189783, 189784, 189785, 189786, 189787, 189788, 189789, 189790, 189791, 189792, 189793, 189794, 189795, 189796, 189797, 189798, 189799, 189800, 189801, 189802, 189803, 189804, 189805, 189806, 189807, 189808, 189809, 189810, 189811, 189812, 189813, 189814, 189815, 189816, 189817, 189818, 189819, 189820, 189821, 189822, 189823, 189824, 189825, 189826, 189827, 189828, 189829, 189830, 189831, 189832, 189833, 189834, 189835, 189836, 189837, 189838, 189839, 189840, 189841, 189842, 189843, 189844, 189847, 189848, 189849, 189850, 189851, 189852, 189853, 189854, 189855, 189856, 189857, 189858, 189859, 189860, 189861, 189862, 189863, 189864, 189865, 189866, 189867, 189868, 189869, 189870, 189871, 189872, 189873, 189874, 189875, 189876, 189877, 189878, 189879, 189880, 189881, 189882, 189883, 189884, 189885, 189886, 189887, 189888, 189889, 189890, 189891, 189892, 189893, 189894, 189895, 189896, 189897, 189898, 189899, 189900, 189903, 189904, 189905, 189906, 189907, 189908, 189909, 189910, 189911, 189912, 189913, 189914, 189915, 189916, 189917, 189918, 189919, 189920, 189921, 189922, 189923, 189924, 189925, 189926, 189927, 189930, 189931, 189932, 189933, 189934, 189935, 189936, 189937, 189938, 189939, 189940, 189941, 189942, 189943, 189944, 189945, 189946, 189947, 189948, 189949, 189950, 189951, 190024, 190188, 190203, 190204, 190205, 190206, 190207, 190213, 190215, 190226, 190227, 190228, 190229, 190230, 190231, 190331, 190365, 190494, 190511, 190564, 190573, 190575, 190576, 190577, 190591, 190592, 190593, 190604, 190609, 190615, 190634, 190659, 190664, 190686, 190743, 190751, 190780, 190783, 190816, 190817, 190897, 190918, 190943, 190945, 191183, 191280, 191281, 191282, 191283, 191284, 191285, 191286, 191289, 191290, 191291, 191319, 191331, 191342, 191343, 191344, 191367, 191446, 191610, 191727, 191730, 191765, 191767, 191784, 191785, 191811, 191816, 191818, 192027, 192045, 192074, 192149, 192409, 192516, 192580, 192581, 192650, 192692, 192712, 192875, 192876, 192877, 192878, 192879, 1719, 3221, 17148, 17149, 17150, 17151, 17152, 37100, 42080, 42081, 42082, 42083, 42084, 42085, 42086, 42087, 42088, 42089, 42090, 42091, 42092, 42093, 42094, 178544, 184352, 186715, 186716, 186732, 186751, 186752, 187347, 187895, 190382, 190383, 190384, 190397, 190398, 190443, 194348, 194951, 194984, 184718, 184722, 180671, 180856, 193977, 193978, 180055, 175622);
+UPDATE `gameobject_questitem` SET `VerifiedBuild` = 12340 WHERE `GameObjectEntry` IN (31, 32, 36, 37, 41, 47, 52, 54, 55, 56, 57, 58, 59, 60, 61, 68, 76, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 256, 257, 259, 261, 263, 264, 269, 270, 271, 272, 276, 287, 288, 290, 298, 299, 301, 302, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 321, 324, 369, 372, 375, 376, 377, 378, 381, 386, 387, 388, 389, 711, 759, 1162, 1166, 1560, 1561, 1562, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1585, 1587, 1593, 1594, 1595, 1596, 1597, 1598, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1627, 1628, 1630, 1631, 1638, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1663, 1664, 1665, 1666, 1668, 1669, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1685, 1686, 1690, 1692, 1698, 1699, 1710, 1720, 1721, 1722, 1723, 1726, 1727, 1728, 1731, 1732, 1733, 1734, 1735, 1736, 1743, 1744, 1745, 1748, 1749, 1759, 1761, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1809, 1810, 1811, 1814, 1815, 1816, 1822, 1824, 1825, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1835, 1837, 1843, 1849, 1850, 1851, 1852, 1857, 1870, 1873, 1874, 1875, 1885, 1886, 1887, 1888, 1889, 1890, 1896, 1897, 1908, 1912, 1914, 1915, 1928, 1936, 1937, 1938, 1939, 1940, 1941, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1959, 1960, 1961, 1962, 1964, 1967, 1969, 1970, 1973, 1977, 1981, 1985, 1986, 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2005, 2006, 2007, 2008, 2010, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2030, 2031, 2032, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2057, 2059, 2062, 2068, 2076, 2082, 2083, 2084, 2086, 2087, 2096, 2098, 2099, 2100, 2101, 2102, 2105, 2106, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2119, 2120, 2122, 2123, 2124, 2125, 2127, 2128, 2129, 2131, 2133, 2134, 2136, 2138, 2139, 2140, 2141, 2142, 2143, 2145, 2146, 2150, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2169, 2171, 2173, 2175, 2176, 2177, 2178, 2179, 2181, 2182, 2186, 2187, 2189, 2190, 2191, 2289, 2335, 2371, 2489, 2551, 2552, 2553, 2554, 2555, 2556, 2558, 2560, 2561, 2572, 2573, 2574, 2575, 2576, 2652, 2653, 2656, 2657, 2658, 2664, 2670, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2687, 2688, 2689, 2690, 2691, 2695, 2701, 2702, 2703, 2707, 2708, 2709, 2710, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2722, 2724, 2726, 2727, 2728, 2729, 2732, 2734, 2739, 2740, 2742, 2744, 2842, 2843, 2844, 2845, 2848, 2849, 2850, 2852, 2855, 2857, 2858, 2866, 2868, 2870, 2871, 2875, 2883, 2891, 2892, 2893, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2933, 2968, 2969, 2971, 2972, 2973, 2974, 2975, 2976, 3076, 3084, 3085, 3089, 3187, 3189, 3190, 3192, 3194, 3195, 3198, 3199, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3224, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3235, 3236, 3237, 3238, 3239, 3240, 3249, 3251, 3252, 3253, 3260, 3264, 3270, 3276, 3286, 3290, 3296, 3298, 3301, 3303, 3308, 3315, 3523, 3524, 3525, 3640, 3642, 3643, 3644, 3646, 3656, 3658, 3659, 3660, 3661, 3662, 3685, 3689, 3690, 3691, 186880, 3693, 3694, 3695, 3702, 3703, 3704, 3705, 3706, 3707, 3714, 3715, 3719, 3722, 3724, 3725, 3726, 3727, 3729, 3730, 3737, 3740, 3743, 3760, 3761, 3763, 3764, 3767, 3768, 3769, 3772, 3797, 3798, 3799, 3800, 3801, 3802, 3803, 3804, 3815, 3816, 3817, 3818, 3819, 3839, 3840, 3841, 3842, 3843, 3844, 3845, 3847, 3848, 3849, 3850, 3851, 3888, 3892, 3893, 3901, 3912, 3913, 3914, 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3929, 3930, 3931, 3932, 3933, 3934, 3936, 3937, 3938, 3939, 3940, 3941, 3942, 3943, 3960, 3962, 3967, 3968, 3972, 4072, 4087, 4088, 4089, 4090, 4096, 4097, 4098, 4099, 4100, 4101, 4102, 4103, 4104, 4105, 4106, 4120, 4121, 4122, 4123, 4132, 4133, 4134, 4138, 4141, 4149, 4166, 4170, 4171, 4608, 5619, 5620, 5621, 5622, 6289, 6290, 6291, 6292, 6751, 6906, 6907, 6908, 9847, 10082, 10083, 10192, 10193, 10194, 10195, 10196, 10197, 10198, 10199, 10200, 10201, 10202, 10203, 10204, 10205, 10206, 10207, 10208, 10209, 10210, 10211, 10212, 10213, 10214, 10215, 10216, 10217, 10218, 10219, 10220, 10221, 10222, 10223, 10224, 10388, 11713, 11714, 11898, 11899, 12144, 12351, 12352, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12654, 12665, 12666, 12893, 12894, 12895, 12896, 12900, 12903, 13348, 13349, 13350, 13351, 13352, 13353, 13354, 13355, 13356, 13357, 13358, 13359, 13360, 13405, 13406, 13407, 13408, 13409, 13410, 13411, 13412, 13872, 13873, 13891, 13949, 13965, 15068, 15069, 16393, 16394, 16396, 16397, 16398, 16399, 16400, 17153, 17154, 17155, 17156, 17182, 17184, 17185, 17188, 17189, 17249, 17250, 17251, 17252, 17253, 17254, 17255, 17256, 17257, 17258, 17259, 17260, 17261, 17262, 17263, 17264, 17265, 17266, 17267, 17268, 17269, 17270, 17271, 17272, 17273, 17274, 17275, 17276, 17277, 17278, 17279, 17280, 17281, 17282, 17783, 18033, 18034, 18035, 18036, 18045, 18046, 18047, 18048, 18049, 18050, 18051, 18052, 18053, 18054, 18055, 18056, 18057, 18058, 18059, 18060, 18061, 18062, 18076, 18077, 18083, 18087, 18089, 18090, 18895, 18899, 18934, 18971, 18972, 18973, 19015, 19016, 183421, 19019, 19020, 19021, 19022, 19028, 19030, 19033, 19283, 19284, 19535, 19541, 19542, 19544, 19545, 19546, 19547, 19548, 19550, 19551, 19553, 19554, 19555, 19556, 19557, 19564, 19565, 19566, 19567, 19568, 19572, 19573, 19574, 19575, 19576, 19577, 19578, 19579, 19580, 19581, 19583, 19585, 19590, 19591, 19594, 19595, 19597, 19598, 19600, 19602, 19603, 19839, 19840, 19841, 19842, 19843, 19844, 19845, 19846, 19847, 19848, 19849, 19850, 19851, 19852, 19853, 19854, 19855, 19856, 19857, 19859, 19861, 19863, 19868, 19869, 19870, 19871, 19872, 19873, 19874, 19876, 19877, 19897, 19902, 19903, 19904, 19905, 19906, 20351, 20352, 20356, 20358, 20359, 20447, 20649, 20650, 20651, 20652, 20653, 20654, 20655, 20656, 20657, 20689, 20691, 20694, 20724, 20725, 20726, 20727, 20806, 20807, 20808, 20829, 20830, 20849, 20869, 20871, 20877, 20899, 20920, 20923, 20925, 20962, 20965, 20966, 20968, 20969, 20975, 20977, 20981, 20982, 20986, 20990, 20991, 20992, 21007, 21008, 21009, 21042, 21052, 21057, 21058, 21059, 21060, 21061, 21062, 21063, 21064, 21065, 21066, 21067, 21068, 21073, 21074, 21075, 21076, 21077, 21078, 21079, 21080, 21081, 21082, 21083, 21084, 21085, 21086, 21087, 21099, 21117, 21118, 21119, 21120, 21121, 21277, 21282, 21327, 21459, 21509, 21530, 21581, 21582, 21583, 21678, 21679, 21680, 21701, 22205, 22207, 22208, 22216, 22217, 22218, 22219, 22220, 22221, 22222, 22223, 22245, 22246, 22530, 22531, 22533, 22534, 22535, 22536, 22537, 22538, 22540, 22541, 22543, 22544, 22545, 22546, 22547, 22549, 22550, 22563, 22564, 22565, 22566, 22567, 22578, 22579, 22580, 22581, 22582, 22587, 22588, 22589, 22590, 22591, 22592, 22593, 22594, 22595, 22598, 22599, 22600, 22602, 22603, 22604, 22605, 22606, 22622, 22623, 22638, 22640, 22641, 22642, 22644, 22646, 22657, 22659, 22660, 22661, 22662, 22665, 22666, 22667, 22668, 22670, 22671, 22672, 22673, 22674, 22684, 22685, 22706, 22707, 22708, 22709, 22710, 22711, 22712, 22732, 22733, 22735, 22737, 22738, 22739, 22740, 22742, 22743, 22745, 22746, 22747, 22748, 22749, 22750, 22752, 22753, 22772, 22773, 22774, 22775, 22776, 22777, 22783, 22803, 22804, 22806, 22811, 22812, 22813, 22831, 22832, 22833, 22834, 22835, 22836, 22854, 22855, 22856, 22858, 22860, 22864, 22865, 22879, 22880, 22882, 22883, 22884, 22885, 22886, 22887, 22894, 22902, 22904, 22908, 22909, 22910, 22911, 22912, 22913, 22914, 22915, 22916, 22917, 22918, 22919, 22920, 22921, 22922, 22923, 22924, 22925, 22926, 22927, 22928, 22929, 23013, 23014, 23015, 23016, 23017, 23018, 23295, 23296, 23299, 23300, 23301, 23302, 23303, 23304, 23305, 23572, 23575, 23577, 24388, 24389, 24390, 24391, 24392, 24393, 24394, 24395, 24396, 24398, 24399, 24400, 24401, 24402, 24403, 24404, 24405, 24406, 24407, 24408, 24409, 24410, 24411, 24412, 24413, 24414, 24415, 24416, 24417, 24418, 24419, 24420, 24421, 24422, 24423, 24424, 24425, 24426, 24427, 24428, 24429, 24430, 24431, 24432, 24433, 24434, 24435, 24436, 24437, 24438, 24439, 24440, 24441, 24442, 24443, 24444, 24445, 24446, 24447, 24448, 24449, 24450, 24451, 24452, 24453, 24454, 24455, 24456, 24457, 24458, 24459, 24460, 24461, 24462, 24463, 24464, 24465, 24466, 24467, 24468, 24469, 24470, 24471, 24472, 24473, 24474, 24475, 24476, 24477, 24478, 24479, 24480, 24481, 24482, 24483, 24484, 24485, 24486, 24487, 24488, 24489, 24490, 24491, 24492, 24494, 24495, 24496, 24497, 24498, 24499, 24506, 24507, 24508, 24509, 24512, 24513, 24514, 24515, 24516, 24517, 24518, 24519, 24520, 24521, 24522, 24523, 24524, 24525, 24526, 24527, 24528, 24529, 24530, 24531, 24532, 24533, 24534, 24535, 24536, 24537, 24538, 24539, 24540, 24541, 24542, 24543, 24544, 24545, 24546, 24547, 24548, 24549, 24550, 24551, 24552, 24553, 24554, 24555, 24556, 24557, 24558, 24559, 24560, 24561, 24562, 24563, 24564, 24565, 24566, 24567, 24568, 24569, 24570, 24571, 24572, 24573, 24574, 24575, 24576, 24577, 24578, 24579, 24580, 24581, 24582, 24583, 24584, 24585, 24586, 24587, 24588, 24589, 24590, 24591, 24592, 24593, 24594, 24595, 24596, 24597, 24598, 24599, 24600, 24601, 24602, 24603, 24604, 24605, 24606, 24607, 24608, 24609, 24610, 24611, 24612, 24613, 24614, 24615, 24616, 24617, 24618, 24619, 24620, 24621, 24622, 24623, 24624, 24625, 24626, 24627, 24628, 24629, 24630, 24631, 24632, 24633, 24634, 24635, 24636, 24637, 24638, 24639, 24640, 24641, 24642, 24643, 24644, 24645, 24646, 24647, 24648, 24649, 24650, 24651, 24652, 24653, 24654, 24655, 24656, 24657, 24658, 24659, 24660, 24661, 24662, 24663, 24664, 24665, 24666, 24667, 24668, 24669, 24670, 24671, 24672, 24673, 24674, 24675, 24676, 24677, 24678, 24679, 24680, 24681, 24682, 24683, 24684, 24685, 24686, 24687, 24688, 24689, 24690, 24691, 24692, 24693, 24694, 24695, 24696, 24697, 24698, 24699, 24700, 24701, 24702, 24703, 24704, 24705, 24706, 24715, 24717, 24718, 24719, 24720, 24721, 24745, 24746, 24758, 24759, 24760, 24761, 24762, 24763, 24764, 24765, 24776, 24777, 24798, 25328, 25329, 25330, 25331, 25332, 25333, 25336, 25337, 25338, 25339, 25340, 25341, 25346, 25347, 25348, 25349, 25350, 25351, 25353, 25354, 26449, 26494, 26495, 26496, 26499, 28024, 28027, 28028, 28029, 28030, 28031, 28032, 28033, 28034, 28035, 28036, 28037, 28038, 28039, 28040, 28041, 28042, 28043, 28044, 28045, 28046, 28047, 28048, 28049, 28050, 28051, 28052, 28053, 28054, 28055, 28056, 28069, 28071, 28072, 28603, 28604, 28605, 28606, 28607, 28608, 28609, 28610, 28611, 28612, 28613, 29150, 29151, 29740, 29741, 29742, 29743, 29744, 29745, 29746, 29747, 29748, 29749, 29750, 29751, 29752, 29753, 29754, 29755, 29756, 29757, 29758, 29759, 29760, 29761, 29762, 29763, 29764, 29765, 29766, 29767, 29768, 29769, 29770, 29771, 29772, 29773, 29774, 29775, 29776, 29777, 29780, 29781, 29782, 29783, 29784, 30854, 30855, 30856, 31407, 31408, 31409, 31410, 31411, 31504, 31507, 31508, 31509, 31572, 31573, 31574, 31575, 31576, 31577, 31578, 31579, 31580, 32107, 32109, 32110, 32349, 32355, 32358, 32383, 32385, 32389, 32391, 32404, 32416, 32424, 32425, 32427, 32429, 32431, 32569, 32570, 32571, 32572, 32573, 32574, 32578, 32580, 32581, 32582, 32583, 32584, 32585, 32590, 32591, 32592, 32593, 32594, 32595, 32833, 32834, 32835, 32842, 32843, 32844, 32845, 32846, 32847, 32848, 32849, 32850, 32851, 32852, 32853, 32854, 32855, 32856, 32857, 32858, 32859, 32860, 32861, 32862, 32863, 32878, 32879, 32880, 32881, 32885, 33998, 33999, 34012, 34013, 34025, 34026, 34027, 34028, 34029, 34030, 34031, 34032, 34033, 34034, 34035, 34036, 34037, 34038, 34167, 34168, 34360, 34571, 34572, 35591, 35593, 36070, 36071, 36072, 36073, 36077, 36078, 36079, 36080, 36082, 36083, 36085, 36086, 36090, 36091, 36092, 36093, 36094, 36095, 36096, 36098, 36102, 36105, 36113, 36118, 36126, 36127, 36396, 36397, 36398, 36738, 36977, 36979, 36980, 36981, 36982, 36983, 36984, 36985, 36986, 36987, 36988, 36989, 36996, 36997, 36998, 37025, 37026, 37027, 37028, 37029, 37030, 37031, 37032, 37033, 37034, 37035, 37036, 37037, 37038, 37097, 37098, 37099, 37118, 37478, 38147, 38148, 38491, 38492, 38493, 38494, 38495, 40199, 40201, 40303, 41186, 41191, 41193, 41195, 43116, 43117, 43118, 43119, 43120, 43121, 43122, 47296, 47297, 48403, 48404, 48405, 48406, 48407, 48408, 48409, 48410, 48411, 48412, 48414, 48415, 48420, 48421, 48422, 48423, 48427, 48428, 48430, 48431, 48432, 48433, 48434, 48435, 48436, 48437, 48438, 48439, 48440, 48442, 48443, 48444, 48445, 48446, 48447, 48448, 48450, 48451, 48452, 48453, 48454, 48455, 48457, 48458, 48460, 48462, 48463, 48464, 48466, 48469, 48470, 48471, 48472, 48473, 48474, 48475, 48477, 48478, 48479, 48480, 48481, 48482, 48487, 48488, 48489, 48490, 48491, 48494, 48495, 48496, 48497, 48498, 48499, 48500, 48501, 48502, 48503, 48504, 48505, 48506, 48507, 48508, 48509, 48510, 48511, 48512, 48513, 48514, 48515, 48516, 48517, 48518, 48519, 48520, 48522, 48523, 48524, 48525, 48526, 48527, 48528, 48529, 48530, 48531, 48532, 48533, 48534, 48535, 48536, 48537, 48538, 48539, 48540, 48541, 48542, 48544, 48545, 48546, 48547, 48548, 48549, 48550, 48551, 48552, 48553, 48554, 48555, 48556, 48557, 48558, 48559, 48560, 48561, 48562, 48563, 48564, 48565, 48566, 48570, 48573, 49485, 49486, 49487, 50445, 50446, 50447, 50448, 50449, 50450, 50468, 50469, 50484, 50485, 50486, 50487, 50488, 50489, 50490, 50491, 50492, 50493, 50494, 50495, 50496, 50497, 50498, 50499, 50500, 50501, 50502, 50503, 50504, 50505, 50506, 50507, 50508, 50509, 50510, 50511, 50512, 50513, 50514, 50515, 50516, 50517, 50518, 50519, 50520, 50521, 50522, 50523, 50524, 50525, 50526, 50527, 50528, 50529, 50530, 50531, 50532, 50533, 50534, 50535, 50536, 50537, 50538, 50547, 50548, 50549, 50803, 50804, 50805, 50830, 50910, 50935, 50936, 50937, 50961, 50982, 50983, 50984, 50985, 50987, 50988, 51702, 51703, 51704, 51705, 51706, 51707, 51708, 52175, 52176, 55250, 55615, 55616, 55774, 56809, 56810, 56818, 56819, 56820, 56821, 56897, 56898, 56901, 56903, 56905, 56910, 56911, 57708, 58369, 58388, 58389, 58595, 58596, 58597, 58598, 58599, 58600, 58601, 58602, 58603, 58604, 58605, 58606, 58607, 58608, 58609, 58610, 58611, 58612, 58613, 58614, 58615, 58616, 58617, 58618, 58619, 58620, 58621, 58622, 58623, 58624, 58625, 58626, 58627, 58629, 59517, 59518, 59529, 59530, 59845, 59846, 59847, 59848, 59850, 59851, 59852, 59853, 59854, 59855, 59856, 59857, 59858, 59859, 59860, 59861, 59862, 59863, 59864, 59865, 60393, 60394, 60395, 60438, 60439, 60440, 61035, 61036, 61037, 61038, 61039, 61051, 61053, 61054, 61055, 61056, 61057, 61058, 61059, 61061, 61062, 61063, 61064, 61067, 61068, 61070, 61071, 61072, 61073, 61074, 61075, 61076, 61077, 61078, 61079, 61080, 61081, 61082, 61083, 61084, 61085, 61086, 61088, 61089, 61090, 61093, 61094, 61095, 61096, 61097, 61098, 61099, 61100, 61101, 61102, 61918, 61919, 61920, 61921, 61922, 61923, 61924, 61925, 61927, 61928, 61934, 61935, 61936, 61952, 61953, 63195, 63196, 63197, 63198, 63674, 64856, 64857, 64858, 64859, 64860, 64861, 64862, 64863, 65407, 66780, 67234, 68865, 69422, 69426, 69427, 69432, 69435, 70517, 73940, 74075, 74078, 74091, 74135, 74439, 74440, 74441, 74442, 74444, 74445, 74446, 74447, 74448, 74727, 74728, 74729, 74730, 75293, 75295, 75296, 75297, 75298, 75299, 75300, 77813, 80022, 80023, 82136, 82137, 82138, 82139, 82140, 83763, 85556, 85562, 85563, 86492, 89634, 89635, 89931, 90566, 90858, 91138, 91672, 91673, 91692, 91706, 91737, 92011, 92013, 92015, 92066, 92067, 92099, 92141, 92419, 92423, 92426, 92427, 92489, 92490, 92524, 92525, 92526, 92527, 92528, 92529, 92530, 92531, 92532, 92533, 92534, 92535, 92536, 92537, 92538, 92539, 92540, 92541, 92542, 92543, 92544, 92545, 92546, 92547, 92548, 92549, 92550, 92551, 92552, 92693, 92694, 92695, 92696, 92699, 92700, 92703, 93192, 94039, 94185, 94186, 94189, 94190, 95449, 97700, 97701, 97801, 98343, 98347, 98348, 98349, 98350, 98351, 98354, 100028, 101751, 101831, 101832, 101833, 101834, 101850, 101851, 101852, 101853, 101854, 102984, 102985, 102986, 102989, 102990, 102996, 102997, 102998, 102999, 103000, 103001, 103002, 103004, 103005, 103006, 103007, 103009, 103010, 103011, 103012, 103015, 103016, 103574, 103600, 103628, 103663, 103664, 103687, 103694, 103695, 103711, 103727, 103728, 103729, 103748, 103793, 103794, 103795, 103796, 103797, 103798, 103799, 103800, 103801, 103802, 103811, 103812, 103820, 103821, 104555, 104564, 104569, 104574, 104575, 104591, 104593, 104600, 105169, 105170, 105171, 105172, 105174, 105175, 105176, 105188, 105568, 105570, 105576, 105578, 105579, 105581, 106318, 106319, 106325, 106326, 106327, 106335, 106336, 106528, 106529, 106638, 106641, 107037, 107039, 107040, 107041, 107042, 110233, 110235, 110236, 111094, 111095, 111202, 111203, 111204, 111205, 111206, 111207, 111212, 111215, 111216, 111217, 111220, 111221, 111222, 111223, 111224, 111225, 111226, 111227, 111255, 111257, 111258, 111259, 111260, 111261, 111268, 111269, 111271, 111942, 111943, 111945, 111946, 111948, 111949, 111950, 111969, 111973, 111974, 111979, 112042, 112043, 112044, 112045, 112048, 112049, 112050, 112061, 112073, 112074, 112079, 112092, 112095, 112096, 112097, 112098, 112100, 112112, 112115, 112123, 112128, 112129, 112200, 112201, 112204, 112205, 112215, 112231, 112232, 112234, 112235, 112236, 112237, 112238, 112239, 112241, 112301, 112302, 112303, 112305, 112308, 112309, 112310, 112311, 112312, 112316, 112317, 112318, 112319, 112321, 112322, 112877, 112898, 112899, 112900, 112901, 112902, 112903, 112904, 112905, 112906, 112907, 112948, 113528, 113568, 113569, 113570, 113571, 113572, 113574, 113575, 113576, 113577, 113752, 113753, 113754, 113755, 113756, 113757, 113791, 120584, 121264, 122088, 123207, 123208, 123209, 123210, 123211, 123212, 123213, 123214, 123215, 123216, 123217, 123244, 123309, 123310, 123328, 123329, 123330, 123331, 123332, 123333, 123334, 123355, 123462, 123463, 123848, 124072, 124367, 124368, 124369, 124370, 124371, 124372, 124374, 125475, 125477, 126046, 126049, 126050, 126051, 126052, 126053, 126158, 126312, 126313, 126314, 126335, 126337, 126338, 126339, 126340, 126341, 126345, 128196, 128293, 128308, 128403, 129127, 129206, 130125, 130126, 130511, 130666, 130667, 130668, 131474, 131978, 131979, 133234, 133466, 133467, 133468, 133469, 136101, 136922, 136923, 136925, 136926, 136927, 136928, 136929, 136930, 136931, 136947, 136948, 136949, 136950, 136951, 136952, 136954, 136955, 136957, 136959, 136961, 136962, 136963, 136964, 137644, 137646, 137647, 138316, 138317, 138318, 138492, 138498, 138614, 139852, 140109, 140110, 140111, 140112, 140213, 140214, 140358, 140372, 140911, 140971, 141070, 141071, 141072, 141073, 141074, 141596, 141612, 141812, 141832, 141838, 141839, 141844, 141851, 141852, 141853, 141857, 141858, 141860, 141869, 141931, 141979, 142018, 142019, 142020, 142021, 142036, 142071, 142075, 142076, 142088, 142089, 142091, 142093, 142094, 142095, 142102, 142109, 142110, 142111, 142117, 142122, 142139, 142140, 142141, 142142, 142143, 142144, 142145, 142151, 142172, 142175, 142176, 142181, 142184, 142185, 142186, 142187, 142188, 142189, 142191, 142195, 142207, 142211, 142213, 142214, 142218, 142219, 142339, 142340, 142341, 142343, 142344, 142475, 142476, 142477, 142487, 142488, 142689, 142692, 142693, 142694, 142696, 142697, 142702, 142703, 142704, 142705, 142706, 142707, 142712, 142713, 142714, 142715, 142837, 142838, 142851, 142871, 142872, 142873, 142874, 142911, 142912, 142914, 142915, 142916, 142958, 142961, 142964, 142971, 142972, 143230, 143242, 143243, 143244, 143245, 143246, 143247, 143249, 143250, 143251, 143253, 143254, 143255, 143256, 143273, 143295, 143296, 143297, 143298, 143299, 143301, 143314, 143317, 143318, 143319, 143320, 143321, 143322, 143323, 143324, 143325, 143326, 143328, 143333, 143334, 143336, 143337, 143338, 143342, 143343, 143344, 143345, 143346, 143347, 143348, 143349, 143362, 143363, 143398, 143399, 143979, 143980, 143981, 143982, 143983, 143984, 143985, 143987, 143988, 143989, 143990, 144011, 144050, 144053, 144054, 144055, 144063, 144064, 144065, 144066, 144067, 144068, 144070, 144071, 144072, 144073, 144111, 144112, 144125, 144126, 144127, 144128, 144129, 144130, 144131, 144159, 144162, 144179, 146079, 146080, 146081, 146084, 146085, 146086, 146088, 146089, 146090, 146091, 146096, 146441, 147036, 147037, 147038, 147039, 147040, 147041, 147042, 147043, 147044, 147045, 147046, 147047, 147048, 147049, 147279, 147282, 147283, 147284, 147285, 147516, 147517, 147536, 147537, 147557, 147742, 147743, 147744, 147745, 147746, 147747, 147748, 147749, 147750, 147751, 147752, 147753, 147754, 147755, 147756, 147757, 147758, 147759, 147760, 147761, 147762, 147763, 147764, 147765, 147766, 147767, 147768, 147769, 147770, 147771, 147786, 147787, 147793, 147823, 147824, 147825, 147826, 147827, 147828, 147829, 147830, 148418, 148423, 148424, 148425, 148426, 148436, 148437, 148498, 148499, 148503, 148504, 148506, 148511, 148512, 148516, 148540, 148544, 148547, 148549, 148550, 148551, 148554, 148556, 148557, 148567, 148658, 148659, 148660, 148661, 148662, 148663, 148664, 148665, 148668, 148669, 148670, 148671, 148674, 148675, 148677, 148680, 148682, 148683, 148684, 148686, 148691, 148692, 148693, 148694, 148695, 148696, 148697, 148707, 148714, 148725, 148728, 148729, 148730, 148733, 148735, 148741, 148742, 148743, 148746, 148747, 148748, 148749, 148750, 148752, 148753, 148754, 148755, 148756, 148757, 148758, 148759, 148760, 148762, 148763, 148764, 148765, 148767, 148768, 148769, 148773, 148774, 148830, 148831, 148832, 148833, 148834, 148835, 148836, 148837, 148843, 148846, 148850, 148857, 148865, 148866, 148884, 148885, 148886, 148887, 148888, 148889, 148891, 148892, 148893, 148894, 148895, 148898, 148899, 148900, 148901, 148902, 148903, 148904, 148905, 148906, 148909, 148910, 148911, 148912, 148913, 148914, 148915, 149024, 149025, 149026, 149027, 149028, 149029, 149030, 149031, 149032, 149036, 149038, 149045, 149046, 149048, 149051, 149412, 149413, 149417, 149418, 149419, 149423, 149424, 149431, 149432, 149433, 149502, 150075, 150079, 150087, 150137, 150138, 151952, 151953, 151954, 151955, 151956, 151957, 151958, 151959, 151960, 151961, 151962, 151963, 151964, 151965, 151966, 151967, 151968, 151969, 151970, 151971, 151972, 151973, 151974, 151975, 151976, 151977, 151978, 151979, 151980, 151981, 151982, 151983, 151984, 152032, 152033, 152034, 152036, 152037, 152038, 152039, 152041, 152042, 152080, 152094, 152095, 152097, 152325, 152326, 152327, 152328, 152329, 152330, 152331, 152332, 152574, 152575, 152576, 152577, 152578, 152579, 152580, 152583, 152584, 152585, 152586, 152614, 152620, 152621, 152622, 152631, 153124, 153125, 153126, 153157, 153158, 153159, 153160, 153203, 153204, 153220, 153221, 153239, 153240, 153241, 153242, 153451, 153453, 153454, 153459, 153460, 153469, 153470, 153471, 153472, 153473, 153556, 153576, 153578, 153695, 153716, 154357, 156561, 157636, 157637, 157816, 157817, 157818, 157819, 157820, 157923, 157936, 157968, 157969, 158545, 158580, 160411, 160413, 160414, 160415, 160416, 160421, 160426, 160436, 160437, 160438, 160439, 160440, 160441, 160442, 160443, 160444, 160445, 160468, 160469, 160470, 160836, 160840, 160845, 160846, 160847, 160848, 160849, 160850, 160851, 160866, 160867, 160868, 160869, 160870, 160871, 161460, 161461, 161462, 161476, 161477, 161478, 161479, 161480, 161488, 161495, 161504, 161505, 161516, 161521, 161525, 161526, 161527, 161536, 161557, 161752, 162024, 163313, 163645, 164618, 164638, 164639, 164658, 164659, 164660, 164661, 164662, 164688, 164689, 164704, 164725, 164726, 164729, 164778, 164779, 164780, 164781, 164798, 164821, 164822, 164823, 164825, 164838, 164839, 164840, 164867, 164868, 164870, 164871, 164872, 164873, 164874, 164875, 164876, 164877, 164879, 164880, 164882, 164885, 164886, 164887, 164908, 164909, 164910, 164911, 164953, 164954, 164955, 164956, 164957, 164958, 165549, 165554, 165557, 165558, 165578, 165618, 165619, 165620, 165621, 165637, 165658, 165738, 165739, 165740, 165741, 165742, 165743, 165744, 165745, 165746, 165747, 165748, 165749, 165750, 165751, 166863, 166872, 167287, 167290, 169216, 169217, 169243, 169264, 169265, 169266, 169267, 169268, 169269, 169270, 169271, 169272, 169273, 169274, 169275, 169276, 169277, 169278, 169279, 169280, 169281, 169282, 169283, 169284, 169285, 169287, 169288, 169289, 169290, 169291, 169292, 169293, 169294, 169966, 169967, 169968, 169969, 170001, 170002, 170055, 170056, 170057, 170058, 170059, 170060, 170061, 170062, 170063, 170064, 170065, 170066, 170073, 170347, 170348, 170349, 170350, 170351, 170353, 170354, 170355, 170439, 170453, 170524, 170555, 170556, 170557, 170558, 170559, 170561, 170562, 170563, 170570, 170571, 170572, 170573, 170574, 170575, 170576, 170577, 170578, 170579, 170580, 170581, 170582, 170583, 170584, 170592, 170607, 171524, 171525, 171526, 171527, 171528, 171529, 171530, 171531, 171532, 171533, 171534, 171535, 171536, 171537, 171538, 171539, 171540, 171541, 171542, 171543, 171544, 171545, 171546, 171547, 171548, 171549, 171550, 171551, 171552, 171553, 171554, 171555, 171556, 171557, 171558, 171559, 171560, 171561, 171562, 171563, 171564, 171565, 171566, 171569, 171570, 171571, 171572, 171573, 171574, 171575, 171576, 171577, 171578, 171579, 171580, 171581, 171582, 171583, 171584, 171585, 171586, 171587, 171588, 171589, 171590, 171591, 171592, 171593, 171594, 171595, 171596, 171597, 171598, 171599, 171600, 171601, 171602, 171603, 171604, 171605, 171606, 171607, 171608, 171609, 171610, 171611, 171612, 171613, 171614, 171615, 171616, 171617, 171618, 171623, 171624, 171625, 171626, 171627, 171628, 171629, 171630, 171631, 171632, 171633, 171634, 171635, 171636, 171638, 171639, 171640, 171641, 171642, 171643, 171644, 171645, 171646, 171647, 171650, 171651, 171652, 171653, 171654, 171655, 171656, 171657, 171658, 171659, 171660, 171661, 171664, 171665, 171666, 171667, 171668, 171669, 171670, 171671, 171672, 171673, 171678, 171679, 171680, 171681, 171682, 171683, 171684, 171685, 171686, 171687, 171688, 171689, 171690, 171691, 171692, 171693, 171694, 171695, 171696, 171697, 171698, 171699, 171700, 171701, 171702, 171703, 171704, 171705, 171706, 171707, 171708, 171709, 171710, 171711, 171712, 171713, 171714, 171715, 171716, 171717, 171722, 171723, 171724, 171725, 171726, 171727, 171728, 171729, 171730, 171731, 171732, 171733, 171734, 171735, 171736, 171737, 171738, 171739, 171740, 171741, 171742, 171743, 171744, 171745, 171746, 171747, 171748, 171749, 171750, 171751, 171752, 171753, 171754, 171755, 171756, 171757, 171758, 171759, 171760, 171761, 171762, 171763, 171764, 171765, 171766, 171767, 171768, 171769, 171770, 171771, 171772, 171773, 171774, 171775, 171776, 171938, 171941, 171942, 172911, 172941, 172942, 172944, 172945, 172946, 172947, 172948, 172949, 172950, 172951, 172952, 172953, 172954, 172955, 172956, 172957, 172958, 172959, 172960, 172961, 172962, 172963, 172964, 172965, 172966, 172967, 172968, 172969, 172970, 172971, 172972, 172973, 172974, 172975, 172976, 172977, 172978, 172979, 172980, 172981, 172982, 172983, 172984, 172985, 172986, 172987, 172988, 172989, 172990, 172991, 172992, 172993, 172994, 172995, 172996, 172997, 173006, 173007, 173008, 173009, 173010, 173011, 173012, 173013, 173014, 173015, 173016, 173017, 173018, 173019, 173020, 173021, 173022, 173023, 173024, 173025, 173026, 173027, 173028, 173029, 173030, 173031, 173032, 173033, 173034, 173035, 173036, 173037, 173038, 173039, 173040, 173041, 173042, 173043, 173044, 173045, 173046, 173047, 173048, 173049, 173050, 173051, 173052, 173053, 173054, 173055, 173056, 173057, 173058, 173059, 173060, 173061, 173062, 173063, 173064, 173065, 173066, 173067, 173068, 173069, 173070, 173071, 173072, 173073, 173074, 173075, 173076, 173077, 173078, 173079, 173080, 173081, 173082, 173083, 173084, 173085, 173086, 173087, 173088, 173089, 173090, 173091, 173092, 173093, 173094, 173095, 173096, 173097, 173098, 173099, 173100, 173101, 173102, 173103, 173104, 173105, 173106, 173107, 173108, 173109, 173110, 173111, 173112, 173113, 173114, 173115, 173116, 173117, 173118, 173119, 173120, 173121, 173122, 173123, 173125, 173127, 173128, 173129, 173130, 173131, 173132, 173133, 173134, 173135, 173136, 173137, 173138, 173139, 173140, 173141, 173142, 173143, 173144, 173145, 173146, 173147, 173148, 173149, 173150, 173151, 173152, 173153, 173154, 173155, 173156, 173157, 173158, 173159, 173160, 173161, 173162, 173163, 173164, 173165, 173166, 173167, 173168, 173169, 173170, 173171, 173172, 173173, 173174, 173175, 173176, 173177, 173178, 173179, 173184, 173185, 173186, 173190, 173194, 173195, 173197, 173198, 173199, 173200, 173202, 173203, 173204, 173205, 173206, 173207, 173208, 173209, 173210, 173211, 173212, 173213, 173214, 173215, 173216, 173217, 173218, 173219, 173220, 173221, 173222, 173223, 173224, 173225, 173226, 173232, 173234, 173265, 173284, 173324, 173327, 174045, 174553, 174554, 174559, 174565, 174594, 174595, 174597, 174598, 174600, 174601, 174603, 174605, 174607, 174626, 174682, 174683, 174698, 174709, 174712, 174713, 174728, 174729, 174730, 174744, 174746, 174792, 174848, 174849, 174857, 174858, 174859, 174862, 174863, 174872, 174873, 174874, 174881, 174953, 174954, 174955, 174956, 174957, 174958, 174959, 174960, 174961, 174962, 174963, 174964, 174965, 174966, 174967, 174974, 174975, 174976, 174977, 174978, 174979, 174980, 174981, 174982, 174983, 174984, 174985, 174986, 174987, 174994, 174995, 174996, 174997, 174998, 175001, 175002, 175003, 175004, 175005, 175006, 175007, 175008, 175009, 175010, 175011, 175012, 175013, 175014, 175015, 175016, 175017, 175018, 175019, 175020, 175021, 175022, 175023, 175024, 175025, 175026, 175027, 175028, 175029, 175030, 175078, 175080, 175084, 175085, 175104, 175124, 175146, 175153, 175165, 175166, 175167, 175180, 175181, 175185, 175186, 175187, 175194, 175195, 175196, 175197, 175198, 175199, 175200, 175207, 175226, 175230, 175244, 175245, 175246, 175247, 175248, 175249, 175265, 175266, 175267, 175268, 175269, 175270, 175271, 175272, 175284, 175285, 175294, 175302, 175307, 175308, 175312, 175313, 175314, 175315, 175316, 175317, 175318, 175319, 175320, 175321, 175324, 175329, 175330, 175331, 175334, 175335, 175350, 175351, 175352, 175354, 175355, 175356, 175358, 175359, 175368, 175369, 175370, 175372, 175373, 175374, 175375, 175376, 175377, 175380, 175382, 175383, 175384, 175385, 175404, 175405, 175407, 175433, 175434, 175435, 175438, 175440, 175444, 175449, 175459, 175461, 175462, 175466, 175467, 175469, 175470, 175471, 175472, 175474, 175477, 175478, 175479, 175481, 175483, 175484, 175490, 175491, 175492, 175524, 175528, 175529, 175530, 175531, 175532, 175533, 175534, 175535, 175536, 175537, 175544, 175564, 175565, 175566, 175567, 175570, 175586, 175587, 175588, 175591, 175592, 175593, 175594, 175595, 175596, 175597, 175598, 175599, 175600, 175601, 175602, 175603, 175604, 175605, 175606, 175607, 175608, 175609, 175610, 175611, 175612, 175613, 175614, 175615, 175616, 175617, 175618, 175619, 175620, 175621, 175628, 175629, 175632, 175654, 175655, 175656, 175657, 175658, 175659, 175663, 175664, 175665, 175666, 175667, 175668, 175669, 175670, 175671, 175672, 175673, 175674, 175675, 175679, 175680, 175681, 175682, 175683, 175684, 175685, 175686, 175687, 175688, 175689, 175705, 175706, 175708, 175724, 175725, 175726, 175727, 175729, 175730, 175731, 175732, 175733, 175734, 175735, 175736, 175737, 175738, 175739, 175740, 175741, 175742, 175743, 175744, 175745, 175746, 175747, 175748, 175749, 175750, 175751, 175752, 175753, 175754, 175756, 175757, 175758, 175759, 175760, 175761, 175762, 175763, 175764, 175771, 175772, 175773, 175774, 175775, 175776, 175777, 175778, 175779, 175780, 175781, 175784, 175785, 175786, 175787, 175788, 175789, 175791, 175795, 175796, 175797, 175798, 175800, 175801, 175802, 175844, 175845, 175846, 175847, 175848, 175849, 175850, 175851, 175852, 175853, 175854, 175855, 175856, 175885, 175886, 175888, 175891, 175892, 175893, 175894, 175924, 175926, 175927, 175928, 175933, 175944, 175946, 175947, 175948, 175949, 175950, 175965, 175966, 175967, 175968, 175969, 175970, 176004, 176005, 176006, 176007, 176008, 176009, 176010, 176011, 176012, 176013, 176014, 176015, 176016, 176017, 176018, 176019, 176020, 176021, 176022, 176023, 176024, 176025, 176026, 176027, 176028, 176029, 176030, 176031, 176032, 176033, 176034, 176035, 176036, 176037, 176038, 176039, 176040, 176041, 176042, 176043, 176044, 176045, 176046, 176047, 176048, 176049, 176050, 176051, 176052, 176053, 176054, 176055, 176056, 176057, 176058, 176059, 176060, 176061, 176062, 176063, 176064, 176065, 176066, 176067, 176068, 176069, 176070, 176071, 176072, 176073, 176074, 176075, 176076, 176077, 176078, 176079, 176080, 176081, 176082, 176083, 176084, 176085, 176087, 176089, 176090, 176092, 176093, 176098, 176099, 176100, 176101, 176102, 176103, 176104, 176105, 176106, 176107, 176108, 176109, 176112, 176115, 176116, 176142, 176143, 176145, 176150, 176151, 176160, 176163, 176164, 176186, 176187, 176189, 176190, 176192, 176194, 176195, 176196, 176197, 176200, 176201, 176202, 176203, 176204, 176207, 176208, 176209, 176210, 176211, 176213, 176214, 176215, 176216, 176224, 176227, 176228, 176229, 176231, 176232, 176233, 176234, 176235, 176236, 176237, 176238, 176239, 176240, 176241, 176242, 176243, 176244, 176245, 176247, 176248, 176249, 176264, 176266, 176272, 176281, 176285, 176286, 176290, 176292, 176295, 176296, 176304, 176310, 176311, 176312, 176313, 176314, 176315, 176316, 176317, 176324, 176325, 176327, 176344, 176346, 176348, 176349, 176350, 176351, 176352, 176353, 176360, 176361, 176364, 176365, 176389, 176390, 176392, 176393, 176404, 176424, 176425, 176426, 176427, 176428, 176429, 176430, 176431, 176432, 176433, 176434, 176435, 176436, 176437, 176438, 176439, 176440, 176441, 176442, 176445, 176446, 176447, 176448, 176449, 176450, 176451, 176452, 176454, 176455, 176456, 176457, 176458, 176459, 176460, 176461, 176462, 176463, 176464, 176484, 176485, 176486, 176487, 176488, 176489, 176490, 176491, 176492, 176493, 176495, 176496, 176497, 176498, 176499, 176500, 176501, 176504, 176516, 176517, 176518, 176519, 176520, 176521, 176544, 176545, 176546, 176547, 176549, 176550, 176551, 176552, 176553, 176554, 176555, 176556, 176557, 176558, 176559, 176560, 176561, 176562, 176573, 176574, 176576, 176577, 176578, 176579, 176580, 176581, 176582, 176583, 176584, 176586, 176587, 176588, 176589, 176591, 176594, 176624, 176625, 176626, 176627, 176628, 176629, 176630, 176631, 176632, 176633, 176635, 176665, 176666, 176667, 176668, 176669, 176670, 176671, 176672, 176673, 176674, 176675, 176676, 176677, 176678, 176679, 176680, 176681, 176682, 176683, 176684, 176685, 176686, 176687, 176688, 176689, 176690, 176691, 176692, 176693, 176694, 176705, 176745, 176746, 176747, 176748, 176751, 176752, 176753, 176767, 176768, 176785, 176790, 176791, 176792, 176793, 176794, 176795, 176797, 176798, 176843, 176844, 176845, 176846, 176847, 176848, 176849, 176850, 176851, 176852, 176853, 176854, 176855, 176863, 176865, 176894, 176895, 176897, 176898, 176901, 176905, 176907, 176924, 176944, 176945, 176946, 176947, 176948, 176949, 176950, 176951, 176952, 176953, 176954, 176955, 176956, 176957, 176959, 176960, 176961, 176964, 176965, 176967, 176968, 176969, 176970, 176973, 176981, 176982, 176985, 176987, 176988, 176989, 176990, 176991, 177000, 177002, 177003, 177004, 177005, 177006, 177007, 177008, 177009, 177010, 177011, 177012, 177013, 177014, 177015, 177016, 177017, 177018, 177019, 177020, 177021, 177022, 177023, 177024, 177025, 177026, 177044, 177045, 177047, 177048, 177049, 177064, 177105, 177106, 177109, 177112, 177116, 177117, 177118, 177119, 177131, 177132, 177133, 177135, 177140, 177145, 177164, 177185, 177186, 177187, 177188, 177193, 177194, 177198, 177199, 177200, 177201, 177202, 177203, 177204, 177205, 177207, 177208, 177209, 177211, 177212, 177213, 177215, 177217, 177219, 177220, 177221, 177222, 177224, 177226, 177227, 177233, 177241, 177243, 177244, 177245, 177246, 177247, 177248, 177249, 177250, 177251, 177252, 177253, 177254, 177255, 177256, 177261, 177264, 177265, 177266, 177267, 177268, 177269, 177270, 177272, 177274, 177278, 177279, 177280, 177281, 177284, 177285, 177286, 177287, 177289, 177307, 177365, 177369, 177370, 177371, 177372, 177373, 177374, 177375, 177376, 177377, 177378, 177379, 177380, 177381, 177382, 177383, 177384, 177385, 177387, 177388, 177397, 177398, 177399, 177400, 177404, 177417, 177444, 177464, 177484, 177485, 177490, 177494, 177495, 177496, 177497, 177498, 177499, 177500, 177501, 177502, 177503, 177504, 177505, 177506, 177507, 177508, 177509, 177510, 177511, 177512, 177513, 177514, 177524, 177525, 177544, 177604, 177606, 177664, 177668, 177681, 177683, 177704, 177706, 177726, 177750, 177764, 177785, 177789, 177792, 177793, 177794, 177804, 177805, 177806, 177807, 177808, 177824, 177884, 177904, 177905, 177926, 177927, 177928, 177929, 177964, 177984, 177986, 177987, 177988, 177989, 177990, 177991, 177992, 177993, 177994, 177995, 177996, 177997, 177998, 177999, 178000, 178001, 178002, 178003, 178004, 178005, 178006, 178007, 178008, 178009, 178010, 178011, 178012, 178013, 178014, 178015, 178016, 178017, 178018, 178019, 178020, 178021, 178022, 178023, 178024, 178025, 178026, 178027, 178028, 178029, 178030, 178031, 178032, 178033, 178034, 178035, 178036, 178037, 178038, 178039, 178040, 178041, 178042, 178043, 178044, 178045, 178046, 178047, 178048, 178084, 178085, 178087, 178088, 178089, 178090, 178104, 178105, 178106, 178107, 178108, 178125, 178144, 178145, 178146, 178147, 178164, 178184, 178185, 178186, 178187, 178189, 178190, 178191, 178192, 178193, 178194, 178195, 178204, 178224, 178226, 178244, 178245, 178246, 178247, 178264, 178265, 178304, 178364, 178365, 178386, 178388, 178389, 178394, 178404, 178442, 178504, 178525, 178526, 178553, 178559, 178560, 178561, 178562, 178563, 178564, 178565, 178566, 178567, 178568, 178569, 178570, 178571, 178572, 178573, 178646, 178666, 178684, 178685, 178764, 178765, 178784, 178785, 178824, 178825, 178826, 178827, 178828, 178829, 178831, 178832, 178833, 178834, 178844, 178845, 178864, 178884, 178904, 178905, 178908, 178925, 178927, 178929, 178932, 178940, 178943, 178947, 178948, 178955, 178956, 178957, 178958, 178964, 178965, 178984, 179004, 179005, 179006, 179007, 179008, 179025, 179044, 179064, 179065, 179066, 179084, 179109, 179115, 179116, 179119, 179125, 179144, 179148, 179224, 179264, 179287, 179304, 179305, 179306, 179344, 179345, 179365, 179419, 179424, 179425, 179426, 179435, 179436, 179437, 179438, 179439, 179440, 179441, 179442, 179443, 179444, 179446, 179450, 179454, 179458, 179465, 179467, 179468, 179469, 179472, 179486, 179487, 179488, 179489, 179490, 179492, 179493, 179494, 179496, 179497, 179502, 179503, 179506, 179526, 179528, 179532, 179533, 179545, 179549, 179552, 179553, 179554, 179555, 179556, 179557, 179558, 179559, 179560, 179584, 179585, 179595, 179596, 179664, 179666, 179697, 179703, 179706, 179707, 179724, 179725, 179726, 179727, 179728, 179729, 179730, 179731, 179732, 179733, 179734, 179735, 179736, 179737, 179738, 179739, 179740, 179741, 179742, 179743, 179744, 179747, 179778, 179779, 179780, 179781, 179782, 179784, 179786, 179785, 179804, 179826, 179827, 179830, 179831, 179844, 179862, 179871, 179874, 179879, 179880, 179881, 179885, 179888, 179895, 179896, 179899, 179904, 179905, 179906, 179907, 179908, 179909, 179913, 179914, 179916, 179917, 179918, 179919, 179920, 179921, 179922, 179924, 179944, 179964, 179965, 179967, 179968, 179969, 179970, 179972, 179973, 179975, 179976, 179977, 179984, 180005, 180006, 180007, 180025, 180026, 180029, 180030, 180031, 180032, 180034, 180035, 180036, 180037, 180038, 180039, 180040, 180041, 180042, 180043, 180044, 180045, 180046, 180047, 180048, 180049, 180053, 180057, 180256, 180255, 180102, 180101, 180064, 180065, 180066, 180067, 180068, 180069, 180070, 180071, 180072, 180073, 180074, 180077, 180078, 180079, 180085, 180088, 180093, 180095, 180096, 180098, 180099, 180087, 180061, 180060, 180104, 180125, 180144, 180145, 180146, 180147, 180148, 180164, 180165, 180166, 180167, 180168, 180184, 180215, 180218, 180219, 180220, 180222, 180223, 180224, 180225, 180226, 180227, 180228, 180229, 180244, 180247, 180059, 180058, 180322, 180323, 180327, 180335, 180358, 180362, 180364, 180365, 180366, 180369, 180376, 180377, 180378, 180379, 180380, 180381, 180382, 180383, 180384, 180386, 180391, 180392, 180394, 180395, 180396, 180397, 180398, 180399, 180400, 180403, 180417, 180421, 180422, 180423, 180424, 180434, 180435, 180442, 180448, 180451, 180497, 180502, 180503, 180512, 180514, 180524, 180526, 180529, 180534, 180570, 180573, 180575, 180582, 180583, 180600, 180632, 180633, 180640, 180655, 180656, 180657, 180658, 180662, 180663, 180664, 180665, 180666, 180667, 180682, 180683, 180684, 180685, 180712, 180728, 180750, 180751, 180752, 180766, 180768, 180771, 180788, 180851, 180858, 180859, 180866, 180898, 180899, 180900, 180901, 180902, 180904, 184503, 184502, 180913, 180915, 180916, 180917, 180918, 180919, 180920, 180921, 180991, 180993, 180994, 180996, 180997, 180998, 180999, 181000, 181001, 181002, 181003, 181004, 181005, 181006, 181007, 181008, 181009, 181011, 181021, 181029, 181030, 181031, 181032, 181042, 181054, 181062, 181063, 181064, 181065, 181066, 181067, 181075, 181076, 181077, 181078, 181079, 181080, 181081, 181082, 181098, 181103, 181104, 181107, 181110, 181119, 181120, 181121, 181123, 181124, 181125, 181126, 181130, 181131, 181143, 181144, 181145, 181147, 181151, 181153, 181157, 181166, 181168, 181169, 181170, 181175, 181176, 181177, 181178, 181179, 181180, 181181, 181182, 181183, 181184, 181185, 181186, 181187, 181188, 181189, 181195, 181197, 181198, 181199, 181200, 181201, 181202, 181203, 181209, 181210, 181211, 181212, 181213, 181217, 181218, 181219, 181220, 181221, 181231, 181232, 181233, 181234, 181235, 181236, 181240, 181241, 181242, 181243, 181250, 181257, 181270, 181271, 181272, 181273, 181275, 181276, 181277, 181278, 181279, 181280, 181281, 181282, 181283, 181284, 181286, 181291, 181300, 181302, 181305, 181307, 181310, 181311, 181312, 181318, 181319, 181324, 181325, 181329, 181331, 181332, 181333, 181334, 181335, 181336, 181337, 181354, 181355, 181358, 181360, 181361, 181367, 181368, 181369, 181370, 181372, 181376, 181378, 181380, 181381, 181385, 181387, 181388, 181389, 181390, 181391, 181392, 181393, 181396, 181401, 181427, 181431, 181433, 181435, 181436, 181437, 181438, 181439, 181440, 181441, 181442, 181446, 181448, 181449, 181450, 181451, 181452, 181453, 181455, 181456, 181475, 181478, 181480, 181481, 181483, 181484, 181485, 181486, 181487, 181490, 181491, 181493, 181494, 181496, 181555, 181556, 181557, 181569, 181570, 181572, 181573, 181574, 181575, 181579, 181580, 181581, 181582, 181583, 181584, 181585, 181587, 181589, 181590, 181591, 181592, 181593, 181594, 181595, 181596, 181598, 181600, 181603, 181605, 181606, 181616, 181617, 181618, 181619, 181620, 181621, 181622, 181624, 181625, 181626, 181637, 181638, 181644, 181645, 181646, 181650, 181651, 181653, 181654, 181655, 181656, 181657, 181658, 181659, 181660, 181663, 181664, 181672, 181680, 181681, 181683, 181686, 181687, 181690, 181691, 181692, 181693, 181694, 181696, 181697, 181698, 181699, 181711, 181712, 181713, 181714, 181715, 181716, 181720, 181721, 181722, 181723, 181724, 181725, 181726, 181727, 181728, 181729, 181730, 181731, 181732, 181733, 181734, 181735, 181736, 181737, 181738, 181745, 181748, 181757, 181760, 181761, 181762, 181763, 181764, 181765, 181766, 181767, 181768, 181770, 181771, 181773, 181775, 181787, 181788, 181789, 181790, 181791, 181792, 181793, 181794, 181795, 181796, 181798, 181800, 181802, 181805, 181807, 181808, 181809, 181811, 181812, 181813, 181814, 181815, 181816, 181817, 181818, 181819, 181820, 181821, 181822, 181823, 181825, 181826, 181827, 181830, 181833, 181837, 181839, 181845, 181846, 181847, 181848, 181849, 181854, 181870, 181871, 181872, 181873, 181874, 181875, 181876, 181877, 181878, 181883, 181884, 181885, 181886, 181889, 181890, 181891, 181892, 181895, 181899, 181900, 181901, 181909, 181913, 181915, 181916, 181918, 181921, 181922, 181923, 181924, 181925, 181926, 181927, 181928, 181932, 181933, 181934, 181935, 181938, 181939, 181940, 181941, 181942, 181943, 181944, 181945, 181946, 181954, 181955, 181959, 181963, 181969, 181970, 181971, 181972, 181973, 181974, 181975, 181976, 181977, 181980, 181981, 181982, 181985, 181986, 181989, 181990, 182003, 182004, 182005, 182012, 182013, 182014, 182024, 182031, 182050, 182051, 182053, 182054, 182055, 182056, 182058, 182059, 182062, 182064, 182065, 182066, 182069, 182070, 182073, 182075, 182076, 182077, 182078, 182079, 182080, 182081, 182082, 182089, 182090, 182092, 182093, 182095, 182096, 182097, 182100, 182101, 182102, 182103, 182104, 182105, 182106, 182107, 182109, 182113, 182114, 182115, 182116, 182117, 182118, 182119, 182122, 182123, 182124, 182125, 182126, 182127, 182128, 182129, 182130, 182131, 182132, 182133, 182134, 182135, 182136, 182137, 182138, 182139, 182145, 182146, 182147, 182148, 182149, 182150, 182151, 182152, 182153, 182154, 182155, 182156, 182157, 182158, 182159, 182160, 182161, 182162, 182164, 182165, 182166, 182167, 182168, 182169, 182170, 182171, 182172, 182173, 182174, 182175, 182177, 182178, 182179, 182180, 182181, 182182, 182183, 182184, 182185, 182189, 182190, 182191, 182192, 182193, 182194, 182196, 182197, 182198, 182199, 182200, 182203, 182205, 182206, 182209, 182210, 182221, 182222, 182223, 182251, 182252, 182253, 182256, 182257, 182258, 182261, 182262, 182263, 182264, 182265, 182266, 182267, 182269, 182270, 182271, 182272, 182273, 182274, 182275, 182276, 182277, 182278, 182279, 182280, 182281, 182282, 182283, 182284, 182285, 182286, 182287, 182288, 182289, 182290, 182291, 182292, 182293, 182294, 182295, 182296, 182297, 182298, 182299, 182300, 182301, 182302, 182303, 182304, 182305, 182306, 182307, 182308, 182309, 182310, 182311, 182312, 182313, 182314, 182315, 182316, 182317, 182318, 182319, 182320, 182321, 182322, 182323, 182324, 182325, 182326, 182327, 182328, 182329, 182330, 182331, 182332, 182333, 182334, 182335, 182336, 182337, 182338, 182339, 182340, 182341, 182343, 182344, 182345, 182346, 182347, 182348, 182349, 182350, 182351, 182352, 182353, 182354, 182355, 182356, 182357, 182359, 182360, 182361, 182362, 182363, 182364, 182365, 182369, 182370, 182371, 182372, 182373, 182374, 182375, 182376, 182377, 182378, 182379, 182380, 182381, 182382, 182383, 182384, 182385, 182391, 182392, 182393, 182394, 182395, 182396, 182397, 182398, 182399, 182400, 182401, 182402, 182406, 182407, 182408, 182409, 182410, 182411, 182412, 182413, 182414, 182415, 182416, 182417, 182418, 182419, 182420, 182421, 182422, 182423, 182424, 182425, 182426, 182427, 182428, 182429, 182430, 182431, 182432, 182433, 182434, 182435, 182436, 182437, 182438, 182439, 182440, 182441, 182442, 182443, 182444, 182445, 182446, 182447, 182448, 182449, 182450, 182451, 182452, 182484, 182486, 182487, 182488, 182489, 182490, 182491, 182492, 182493, 182494, 182495, 182496, 182497, 182498, 182499, 182500, 182501, 182502, 182503, 182504, 182511, 182512, 182513, 182514, 182515, 182516, 182517, 182518, 182519, 182520, 182521, 182522, 182523, 182524, 182525, 182527, 182528, 182529, 182534, 182535, 182536, 182537, 182538, 182541, 182542, 184501, 184500, 182548, 182547, 182549, 182552, 182553, 182554, 182555, 182556, 182557, 182558, 182559, 182560, 182561, 182563, 182564, 182565, 182566, 182567, 182568, 182569, 182570, 182571, 182573, 182574, 182575, 182576, 182577, 182578, 182579, 182580, 182581, 182582, 182583, 182584, 182585, 182587, 182588, 182589, 182591, 182592, 182593, 182594, 182595, 182596, 182597, 182598, 182599, 182600, 182601, 182605, 182606, 182608, 182609, 182612, 182613, 182614, 182615, 182616, 182617, 182618, 182619, 182620, 182623, 182624, 182625, 182626, 182627, 182628, 182629, 182630, 182631, 182632, 182633, 182634, 182635, 182636, 182637, 182638, 182639, 182640, 182641, 182642, 182643, 182644, 182645, 182646, 182647, 182648, 182649, 182668, 182669, 182670, 182672, 182673, 182674, 182681, 182682, 182704, 182711, 182725, 182726, 182729, 182730, 182731, 182732, 182733, 182737, 182738, 182739, 182740, 182744, 182745, 182746, 182748, 182749, 182750, 182751, 182752, 182753, 182754, 182755, 182756, 182757, 182758, 182760, 182762, 182764, 182765, 182766, 182767, 182768, 182769, 182770, 182771, 182773, 182774, 182775, 182776, 182777, 182778, 182779, 182784, 182785, 182788, 182789, 182794, 182796, 182797, 182798, 182799, 182800, 182804, 182807, 182808, 182809, 182810, 182811, 182817, 182828, 182829, 182830, 182833, 182834, 182835, 182836, 182839, 182840, 182841, 182842, 182843, 182844, 182849, 182850, 182851, 182852, 182853, 182854, 182860, 182861, 182862, 182863, 182864, 182865, 182866, 182867, 182868, 182869, 182870, 182871, 182872, 182873, 182874, 182875, 182876, 182877, 182878, 182881, 182882, 182883, 182884, 182885, 182886, 182887, 182888, 182889, 182890, 182891, 182892, 182893, 182894, 182895, 182896, 182897, 182898, 182899, 182900, 182901, 182902, 182903, 182904, 182922, 182923, 182924, 182925, 182926, 182927, 182928, 182929, 182934, 182935, 182936, 182937, 182938, 182939, 182940, 182941, 182942, 182943, 182944, 182945, 182946, 182947, 182948, 182949, 182950, 182951, 182952, 182953, 182954, 182955, 182956, 182957, 182958, 182959, 182962, 182964, 182965, 182967, 182968, 182969, 182970, 182971, 182972, 182973, 182994, 183005, 183006, 183007, 183008, 183009, 183010, 183022, 183023, 183024, 183025, 183026, 183027, 183028, 183029, 183030, 183031, 183032, 183033, 183034, 183035, 183036, 183037, 183038, 183039, 183040, 183042, 183043, 183044, 183045, 183046, 183047, 183048, 183049, 183051, 183097, 183098, 183099, 183104, 183105, 183111, 183112, 183113, 183114, 183116, 183117, 183118, 183119, 183120, 183121, 183122, 183123, 183124, 183125, 183126, 183127, 183128, 183129, 183130, 183131, 183132, 183134, 183135, 183136, 183137, 183138, 183139, 183140, 183141, 183142, 183143, 183146, 183147, 183148, 183149, 183151, 183152, 183153, 183154, 183155, 183158, 183159, 183160, 183161, 183162, 183163, 183164, 183165, 183166, 183167, 183168, 183169, 183170, 183171, 183177, 183180, 183189, 183190, 183191, 183192, 183193, 183194, 183195, 183196, 183197, 183198, 183199, 183200, 183201, 183202, 183203, 183204, 183205, 183206, 183207, 183208, 183209, 183210, 183211, 183212, 183213, 183214, 183215, 183216, 183218, 183231, 183232, 183233, 183234, 183235, 183236, 183237, 183238, 183239, 183240, 183241, 183242, 183243, 183244, 183245, 183246, 183247, 183248, 183249, 183250, 183251, 183252, 183253, 183254, 183255, 183256, 183257, 183258, 183259, 183260, 183261, 183262, 183263, 183264, 183265, 183266, 183267, 183268, 183269, 183270, 183271, 183272, 183273, 183274, 183275, 183276, 183277, 183284, 183286, 183287, 183288, 183289, 183290, 183291, 183292, 183293, 183294, 183295, 183296, 183297, 183298, 183299, 183300, 183313, 183317, 183318, 183319, 183320, 183321, 183322, 183323, 183324, 183325, 183326, 183327, 183333, 183338, 183339, 183340, 183341, 183342, 183343, 183344, 183345, 183346, 183347, 183348, 183349, 183350, 183351, 183355, 183362, 183363, 183364, 183365, 183366, 183367, 183368, 183369, 183370, 183371, 183372, 183373, 183374, 183375, 183376, 183377, 183378, 183379, 183380, 183381, 183382, 183383, 183384, 183385, 183386, 183393, 183394, 183395, 183396, 183397, 183398, 183399, 183401, 183402, 183408, 183410, 183411, 183412, 183413, 183414, 183415, 183418, 183419, 183420, 183422, 183423, 183424, 183425, 183427, 183428, 183429, 183430, 183431, 183432, 183433, 183435, 183436, 183437, 183438, 183439, 183441, 183444, 183446, 183447, 183450, 183454, 183455, 183456, 183457, 183458, 183459, 183460, 183461, 183465, 183467, 183468, 183469, 183470, 183471, 183472, 183473, 183474, 183475, 183476, 183477, 183478, 183479, 183480, 183481, 183482, 183483, 183484, 183485, 183486, 183487, 183491, 183492, 183493, 183497, 183498, 183499, 183500, 183501, 183502, 183503, 183504, 183507, 183510, 183511, 183514, 183515, 183516, 183517, 183518, 183519, 183520, 183521, 183522, 183523, 183524, 183525, 183526, 183527, 183528, 183529, 183530, 183531, 183532, 183533, 183534, 183535, 183536, 183537, 183538, 183539, 183540, 183541, 183542, 183543, 183544, 183545, 183546, 183547, 183548, 183549, 183550, 183551, 183552, 183553, 183554, 183555, 183556, 183557, 183558, 183559, 183560, 183561, 183562, 183563, 183564, 183565, 183566, 183567, 183568, 183569, 183570, 183571, 183572, 183573, 183574, 183575, 183576, 183577, 183578, 183579, 183580, 183581, 183582, 183583, 183584, 183585, 183586, 183587, 183588, 183589, 183590, 183591, 183592, 183593, 183594, 183595, 183596, 183597, 183598, 183599, 183600, 183601, 183602, 183603, 183604, 183605, 183606, 183607, 183608, 183609, 183610, 183611, 183612, 183613, 183614, 183615, 183616, 183617, 183618, 183619, 183620, 183621, 183622, 183623, 183624, 183625, 183626, 183627, 183628, 183629, 183630, 183631, 183632, 183633, 183634, 183635, 183636, 183637, 183638, 183639, 183640, 183641, 183642, 183643, 183644, 183645, 183646, 183647, 183648, 183649, 183650, 183651, 183652, 183653, 183654, 183655, 183656, 183657, 183658, 183659, 183660, 183661, 183662, 183663, 183664, 183665, 183666, 183667, 183668, 183669, 183670, 183671, 183672, 183673, 183674, 183675, 183676, 183677, 183678, 183679, 183680, 183681, 183682, 183683, 183684, 183685, 183686, 183687, 183688, 183689, 183690, 183691, 183692, 183693, 183694, 183703, 183712, 183713, 183714, 183740, 183741, 183742, 183743, 183744, 183745, 183746, 183747, 183748, 183749, 183750, 183751, 183752, 183753, 183754, 183755, 183757, 183758, 183759, 183760, 183761, 183767, 183768, 183770, 183771, 183773, 183774, 183775, 183776, 183777, 183778, 183779, 183780, 183781, 183782, 183783, 183787, 183788, 183789, 183791, 183793, 183795, 183796, 183797, 183799, 183800, 183805, 183806, 183807, 183808, 183811, 183813, 183814, 183816, 183818, 183820, 183821, 183823, 183824, 183825, 183826, 183827, 183828, 183829, 183830, 183831, 183832, 183833, 183834, 183835, 183836, 183837, 183838, 183839, 183840, 183841, 183842, 183843, 183844, 183845, 183846, 183848, 183849, 183850, 183852, 183853, 183854, 183855, 183856, 183857, 183858, 183859, 183860, 183861, 183862, 183863, 183864, 183865, 183866, 183867, 183868, 183869, 183870, 183871, 183872, 183873, 183874, 183875, 183877, 183878, 183879, 183880, 183881, 183882, 183883, 183889, 183890, 183891, 183893, 183894, 183895, 183896, 183897, 183898, 183899, 183900, 183901, 183902, 183903, 183904, 183905, 183906, 183907, 183908, 183909, 183910, 183911, 183912, 183913, 183914, 183915, 183916, 183917, 183918, 183919, 183920, 183921, 183922, 183923, 183924, 183925, 183926, 183927, 183931, 183932, 183933, 183934, 183935, 183936, 183940, 183941, 183942, 183943, 183944, 183945, 183946, 183947, 183949, 183950, 183955, 183956, 183957, 183961, 183962, 183963, 183964, 183965, 183968, 183970, 183971, 183972, 183973, 183977, 183978, 183979, 183980, 183984, 183985, 183986, 183987, 183988, 183991, 183992, 183993, 183994, 183995, 183996, 183997, 184003, 184004, 184005, 184006, 184009, 184010, 184011, 184012, 184013, 184014, 184015, 184016, 184017, 184018, 184019, 184020, 184021, 184022, 184023, 184024, 184025, 184026, 184027, 184028, 184029, 184030, 184031, 184032, 184033, 184034, 184035, 184036, 184037, 184038, 184039, 184040, 184041, 184042, 184043, 184044, 184045, 184046, 184047, 184048, 184049, 184050, 184051, 184052, 184053, 184054, 184055, 184057, 184058, 184059, 184060, 184061, 184062, 184063, 184064, 184065, 184066, 184067, 184068, 184070, 184071, 184072, 184073, 184074, 184076, 184077, 184078, 184084, 184085, 184090, 184091, 184092, 184093, 184094, 184095, 184096, 184097, 184098, 184099, 184100, 184101, 184102, 184103, 184104, 184105, 184109, 184114, 184115, 184117, 184121, 184122, 184123, 184124, 184125, 184126, 184127, 184128, 184129, 184130, 184131, 184132, 184133, 184134, 184135, 184136, 184137, 184138, 184139, 184140, 184143, 184144, 184147, 184148, 184149, 184150, 184151, 184152, 184153, 184154, 184155, 184156, 184157, 184158, 184159, 184160, 184164, 184173, 184174, 184175, 184176, 184179, 184180, 184181, 184182, 184183, 184184, 184185, 184186, 184187, 184188, 184189, 184190, 184191, 184192, 184193, 184194, 184195, 184196, 184197, 184198, 184199, 184200, 184201, 184202, 184206, 184207, 184208, 184209, 184210, 184211, 184212, 184213, 184214, 184224, 184225, 184226, 184229, 184230, 184231, 184232, 184233, 184234, 184235, 184236, 184237, 184238, 184239, 184240, 184241, 184242, 184243, 184244, 184245, 184246, 184248, 184249, 184250, 184252, 184253, 184254, 184255, 184256, 184257, 184258, 184259, 184260, 184261, 184262, 184263, 184264, 184265, 184266, 184267, 184268, 184269, 184270, 184271, 184272, 184274, 184275, 184276, 184277, 184278, 184279, 184280, 184281, 184284, 184285, 184286, 184289, 184290, 184291, 184292, 184293, 184294, 184295, 184296, 184297, 184298, 184300, 184303, 184304, 184305, 184306, 184307, 184308, 184310, 184311, 184312, 184313, 184314, 184315, 184316, 184317, 184318, 184319, 184330, 184331, 184332, 184339, 184340, 184341, 184342, 184343, 184344, 184345, 184346, 184347, 184348, 184349, 184350, 184351, 184354, 184355, 184356, 184357, 184358, 184359, 184360, 184361, 184362, 184364, 184366, 184367, 184368, 184369, 184370, 184371, 184372, 184373, 184374, 184375, 184376, 184377, 184383, 184393, 184395, 184396, 184397, 184398, 184399, 184400, 184401, 184402, 184403, 184404, 184405, 184406, 184407, 184414, 184415, 184416, 184418, 184419, 184420, 184421, 184422, 184423, 184424, 184425, 184426, 184427, 184428, 184429, 184430, 184431, 184433, 184434, 184436, 184437, 184438, 184439, 184443, 184447, 184448, 184450, 184453, 184454, 184455, 184456, 184458, 184462, 184463, 184465, 184466, 184467, 184470, 184471, 184472, 184473, 184474, 184475, 184477, 184478, 184488, 184494, 184495, 184496, 184497, 184498, 184499, 182546, 182543, 180912, 180911, 184504, 184507, 184508, 184509, 184510, 184511, 184512, 184513, 184514, 184515, 184516, 184517, 184518, 184519, 184520, 184521, 184522, 184523, 184526, 184527, 184530, 184531, 184532, 184533, 184534, 184535, 184536, 184537, 184538, 184539, 184540, 184541, 184542, 184543, 184544, 184545, 184546, 184547, 184548, 184549, 184550, 184551, 184552, 184553, 184554, 184555, 184556, 184557, 184558, 184559, 184560, 184563, 184564, 184565, 184566, 184567, 184578, 184579, 184580, 184581, 184583, 184584, 184585, 184586, 184588, 184589, 184590, 184591, 184594, 184607, 184608, 184612, 184613, 184615, 184624, 184625, 184626, 184627, 184628, 184629, 184630, 184631, 184652, 184655, 184656, 184657, 184660, 184663, 184664, 184665, 184666, 184667, 184668, 184669, 184670, 184671, 184672, 184673, 184674, 184675, 184676, 184677, 184678, 184679, 184680, 184681, 184682, 184685, 184686, 184687, 184688, 184689, 184694, 184701, 184702, 184705, 184706, 184707, 184708, 184709, 184710, 184711, 184712, 184714, 184715, 184716, 184717, 184721, 184724, 184725, 184726, 184727, 184728, 184729, 184730, 184731, 184732, 184734, 184735, 184736, 184737, 184740, 184741, 184742, 184743, 184744, 184745, 184752, 184793, 184794, 184799, 184800, 184802, 184807, 184808, 184809, 184810, 184811, 184812, 184813, 184814, 184815, 184825, 184827, 184833, 184834, 184835, 184836, 184837, 184838, 184840, 184842, 184843, 184852, 184853, 184859, 184860, 184867, 184868, 184869, 184870, 184871, 184872, 184906, 184908, 184909, 184912, 184922, 184923, 184944, 184945, 184946, 184948, 184950, 184964, 184965, 184966, 184967, 184968, 184969, 184970, 184971, 184972, 184973, 184974, 184975, 184976, 184977, 184978, 184980, 184982, 184983, 184984, 184985, 184986, 184987, 184988, 184989, 184990, 184991, 184992, 184993, 184994, 184995, 184996, 184998, 184999, 185000, 185004, 185005, 185006, 185007, 185008, 185009, 185010, 185015, 185018, 185019, 185023, 185024, 185025, 185026, 185027, 185028, 185029, 185030, 185031, 185033, 185035, 185036, 185037, 185038, 185039, 185056, 185062, 185063, 185064, 185065, 185066, 185067, 185068, 185069, 185070, 185071, 185072, 185073, 185074, 185075, 185076, 185077, 185078, 185079, 185080, 185081, 185082, 185083, 185084, 185088, 185089, 185090, 185091, 185092, 185093, 185094, 185095, 185096, 185097, 185099, 185100, 185101, 185103, 185104, 185105, 185107, 185108, 185109, 185110, 185111, 185112, 185113, 185119, 185120, 185123, 185124, 185129, 185131, 185132, 185134, 185136, 185137, 185138, 185139, 185147, 185148, 185152, 185153, 185154, 185155, 185156, 185157, 185158, 185159, 185160, 185161, 185162, 185163, 185164, 185165, 185166, 185167, 185168, 185172, 185173, 185174, 185175, 185177, 185178, 185179, 185180, 185181, 185183, 185184, 185185, 185190, 185191, 185192, 185193, 185194, 185195, 185196, 185197, 185198, 185200, 185201, 185202, 185203, 185204, 185205, 185206, 185208, 185210, 185212, 185213, 185214, 185216, 185217, 185218, 185219, 185220, 185224, 185225, 185234, 185235, 185236, 185237, 185238, 185239, 185240, 185241, 185242, 185243, 185244, 185245, 185246, 185247, 185248, 185249, 185250, 185251, 185252, 185253, 185254, 185255, 185256, 185257, 185258, 185259, 185260, 185261, 185262, 185263, 185264, 185265, 185266, 185267, 185268, 185269, 185270, 185271, 185272, 185273, 185274, 185275, 185276, 185277, 185278, 185279, 185280, 185281, 185282, 185283, 185284, 185285, 185286, 185287, 185288, 185289, 185290, 185294, 185296, 185298, 185301, 185302, 185303, 185309, 185314, 185317, 185318, 185319, 185324, 185325, 185394, 185395, 185396, 185397, 185398, 185399, 185400, 185401, 185402, 185403, 185404, 185405, 185406, 185407, 185408, 185409, 185410, 185411, 185412, 185413, 185414, 185415, 185416, 185417, 185418, 185419, 185420, 185421, 185422, 185423, 185424, 185425, 185426, 185427, 185428, 185429, 185430, 185431, 185432, 185433, 185459, 185472, 185473, 185477, 185497, 185499, 185500, 185502, 185505, 185506, 185507, 185508, 185509, 185510, 185511, 185528, 185877, 185878, 185881, 185899, 185900, 185903, 185928, 185944, 185954, 185967, 185968, 185969, 185970, 185972, 185973, 185974, 185975, 185977, 185978, 185979, 185980, 185981, 185982, 185983, 185984, 185985, 185986, 185987, 185988, 185989, 185990, 185991, 185992, 185993, 185994, 185997, 185998, 185999, 186000, 186001, 186002, 186003, 186004, 186005, 186006, 186007, 186008, 186009, 186010, 186011, 186012, 186013, 186014, 186015, 186016, 186017, 186018, 186019, 186020, 186023, 186026, 186027, 186028, 186029, 186031, 186032, 186033, 186036, 186037, 186038, 186039, 186040, 186041, 186042, 186043, 186044, 186045, 186046, 186047, 186048, 186050, 186051, 186053, 186054, 186055, 186056, 186057, 186058, 186059, 186060, 186061, 186062, 186063, 186064, 186065, 186066, 186067, 186068, 186069, 186071, 186072, 186073, 186074, 186075, 186076, 186077, 186078, 186079, 186080, 186081, 186082, 186083, 186084, 186085, 186086, 186087, 186088, 186089, 186090, 186091, 186092, 186093, 186094, 186095, 186096, 186097, 186098, 186099, 186100, 186101, 186102, 186103, 186104, 186105, 186106, 186107, 186108, 186109, 186110, 186111, 186112, 186113, 186114, 186115, 186116, 186117, 186118, 186119, 186124, 186125, 186126, 186127, 186128, 186129, 186130, 186131, 186134, 186143, 186144, 186145, 186146, 186147, 186148, 186179, 186180, 186181, 186182, 183930, 184146, 184713, 185465, 185466, 185467, 185529, 185530, 185531, 185532, 185533, 185534, 185535, 185536, 185537, 185538, 185539, 185543, 185544, 185545, 185549, 185555, 185571, 185572, 185573, 185592, 185593, 185602, 185604, 185605, 185606, 185607, 185608, 185609, 185610, 185611, 185612, 185613, 185614, 185615, 185616, 185617, 185618, 185619, 185620, 185621, 185622, 185623, 185624, 185625, 185626, 185627, 185628, 185629, 185630, 185631, 185632, 185633, 185634, 185635, 185636, 185637, 185638, 185639, 185640, 185641, 185642, 185643, 185644, 185645, 185646, 185647, 185648, 185649, 185650, 185651, 185652, 185653, 185654, 185655, 185676, 185677, 185678, 185679, 185680, 185681, 185682, 185683, 185684, 185685, 185686, 185687, 185688, 185689, 185690, 185691, 185752, 185753, 185754, 185755, 185832, 185833, 185836, 185837, 185838, 185839, 185844, 185846, 185847, 185852, 185853, 185854, 185855, 185861, 185890, 185894, 185906, 185911, 185913, 185927, 185929, 185930, 185931, 185935, 185936, 185938, 185945, 185971, 185995, 185996, 186021, 186022, 186024, 186025, 186030, 186034, 186035, 186049, 186070, 186120, 186121, 186122, 186123, 186133, 185918, 185917, 180100, 180090, 180089, 180091, 180075, 180076, 181636, 186139, 186140, 185547, 185553, 185551, 303, 305, 379, 380, 382, 1632, 1687, 1688, 1689, 1691, 1693, 1694, 1695, 1696, 1697, 1705, 1706, 1707, 1708, 1709, 1711, 1712, 1713, 1714, 1715, 1808, 1839, 1842, 1853, 1854, 1855, 1856, 1858, 1860, 1865, 1872, 1909, 1916, 2001, 2002, 2027, 2028, 2029, 2048, 2049, 2050, 2051, 2052, 3220, 3857, 3891, 3894, 3898, 3900, 3902, 3905, 3906, 3908, 4115, 4116, 4117, 4118, 4119, 4135, 4136, 4137, 18065, 18066, 18067, 18068, 18070, 18071, 18072, 18073, 18074, 18075, 18079, 18643, 19017, 19018, 20831, 20872, 20972, 20976, 20978, 20979, 20980, 23570, 24727, 28070, 28073, 28074, 28075, 29152, 29154, 29155, 32596, 40200, 48413, 48416, 48417, 48418, 48419, 48424, 48425, 48426, 48429, 48459, 48461, 48465, 48467, 48468, 48476, 48483, 48484, 48485, 48486, 48492, 48493, 48567, 48576, 69282, 92143, 97802, 97803, 101855, 103751, 104589, 105173, 111254, 111256, 111262, 111265, 111266, 140931, 141862, 141863, 142103, 142208, 142209, 142210, 142212, 142215, 142216, 142217, 142970, 142973, 143991, 144132, 144133, 147792, 148844, 148845, 148847, 148848, 148849, 148851, 148852, 148853, 148854, 148855, 148856, 148858, 148859, 148860, 148861, 148862, 148863, 148864, 148917, 152040, 165622, 165623, 165624, 165625, 165626, 165627, 165628, 165629, 165630, 165631, 165632, 165633, 175144, 175145, 175545, 176604, 176605, 176606, 176607, 176608, 176617, 176618, 176619, 177084, 177196, 179085, 179500, 180086, 180094, 180252, 180393, 181326, 181804, 183817, 184080, 184081, 184082, 184083, 184141, 184142, 184171, 184172, 184215, 184216, 184221, 184222, 184223, 184320, 184380, 184381, 184382, 184493, 184528, 184529, 184616, 184617, 184618, 184646, 184662, 184719, 184720, 184873, 184874, 184875, 184876, 184877, 184878, 184879, 184880, 184881, 184882, 184883, 184884, 184885, 184886, 184887, 184888, 184889, 184890, 184891, 184892, 184893, 184894, 184895, 184896, 184897, 184898, 184899, 184900, 184901, 184902, 184903, 184904, 185498, 185501, 185976, 186137, 186138, 186141, 186142, 186560, 176269, 180092, 180097, 185521, 185952, 175298, 175310, 175287, 175288, 175289, 175290, 175291, 175292, 175293, 175305, 182068, 1633, 1634, 1639, 1643, 1644, 1645, 1662, 1801, 1802, 1805, 1806, 1807, 1812, 1813, 1817, 1818, 1819, 1820, 1821, 1826, 1859, 1877, 1891, 1892, 1893, 1901, 1902, 1903, 1904, 1906, 1911, 1930, 1931, 1932, 1957, 1958, 1972, 1975, 1976, 1979, 1984, 2033, 2034, 2035, 2036, 2037, 2038, 2055, 2334, 2336, 2661, 2663, 2666, 2907, 2970, 2977, 2978, 3196, 3197, 3225, 3234, 3246, 3254, 3256, 3258, 3262, 3266, 3306, 3307, 3311, 3314, 3716, 3717, 3718, 3723, 3832, 3833, 3834, 3835, 3836, 3837, 3838, 3963, 3964, 6286, 6287, 12897, 12898, 12899, 12901, 12902, 12904, 12907, 12908, 12909, 17190, 17191, 17284, 18043, 18063, 18064, 18084, 18085, 18340, 18341, 18644, 18645, 18900, 18901, 18930, 18935, 18936, 19558, 19559, 19560, 19561, 19562, 19563, 19569, 19570, 19571, 19858, 20738, 20739, 20810, 20873, 20874, 20875, 20876, 20900, 20926, 20961, 20963, 20970, 21127, 22569, 22576, 22577, 22639, 22647, 22648, 22649, 22650, 22651, 22652, 22654, 22658, 22664, 22719, 22727, 22734, 22736, 22741, 22744, 22751, 22754, 22755, 23571, 23573, 23574, 23879, 23880, 23881, 24723, 24724, 24725, 24726, 24728, 24729, 181627, 181628, 35594, 35595, 35596, 35597, 35598, 35844, 38029, 40298, 40299, 40301, 41185, 41187, 41188, 41189, 41190, 41192, 41194, 50831, 50986, 50989, 51948, 51949, 51950, 61040, 61041, 61042, 61043, 61044, 61045, 61046, 61047, 61048, 61049, 61050, 61052, 61060, 61065, 61066, 61069, 61087, 61091, 61092, 69421, 69423, 69424, 69425, 69428, 69429, 69430, 69431, 69433, 69434, 69436, 69437, 69438, 74076, 74443, 88496, 88497, 88498, 91738, 92098, 92424, 92458, 94183, 94184, 94187, 94188, 94191, 101748, 101749, 101750, 101811, 101812, 101835, 101836, 101837, 101838, 101839, 101840, 101841, 101842, 101843, 101844, 101845, 101846, 101847, 101848, 101849, 103713, 103750, 103773, 105569, 110231, 110232, 110234, 111149, 112051, 112052, 112053, 112054, 112055, 112058, 112059, 112060, 112062, 112065, 112066, 112070, 112071, 112072, 112881, 136932, 136933, 136934, 136935, 136936, 136937, 136938, 136939, 136940, 136941, 136942, 136943, 136944, 136965, 136966, 140113, 140211, 140212, 140357, 140359, 140373, 140374, 140375, 140376, 140378, 140379, 140380, 140381, 140382, 140383, 140384, 140385, 140386, 140387, 140388, 140389, 140390, 140391, 140392, 140393, 140394, 140395, 140396, 140397, 140398, 140399, 140400, 140401, 140402, 140403, 140439, 141813, 141840, 141841, 141843, 141845, 141861, 141871, 141971, 141972, 142073, 142077, 142078, 142079, 142090, 142101, 142118, 142119, 142131, 142196, 142197, 142198, 142342, 142691, 142695, 142965, 142966, 142967, 142968, 142969, 143986, 147065, 148419, 148420, 148421, 148736, 148739, 148751, 148761, 148771, 148772, 148781, 148782, 148790, 148795, 148796, 148801, 148807, 148811, 148812, 148813, 148814, 148815, 148816, 148817, 148818, 148840, 148841, 148876, 148877, 148878, 148879, 148880, 148956, 148957, 148958, 148959, 148960, 149019, 149021, 149049, 150082, 152035, 152043, 152044, 152045, 152046, 152581, 152582, 152587, 152608, 152618, 152619, 153350, 153464, 153516, 153579, 153580, 153581, 153582, 153583, 153584, 153723, 158546, 158547, 158548, 158549, 158550, 158551, 158552, 158553, 158554, 158555, 158556, 158557, 158558, 158559, 158560, 158561, 158562, 158563, 158564, 158565, 158566, 158567, 158568, 158569, 158570, 158571, 158572, 158576, 158579, 158581, 158582, 158583, 158584, 158585, 158599, 158608, 158674, 158678, 158679, 158680, 160409, 160410, 160418, 160419, 160420, 161457, 161458, 161459, 161522, 161523, 161524, 164819, 167284, 167288, 167289, 169996, 169997, 169998, 169999, 170000, 170440, 170441, 170442, 170443, 170444, 170445, 170446, 170447, 170448, 170449, 170450, 170451, 170452, 170454, 170455, 170456, 170457, 170458, 170459, 170460, 170461, 170462, 170463, 170464, 170465, 170466, 170467, 170468, 170469, 170470, 170471, 170472, 170473, 170474, 170475, 170476, 170477, 170478, 170479, 170480, 170481, 170482, 170483, 170484, 170485, 170486, 170487, 170488, 170489, 170490, 170491, 170492, 170493, 170494, 170495, 170496, 170497, 170498, 170499, 170500, 170501, 170502, 170503, 170504, 170505, 170506, 170507, 170508, 170509, 170510, 170511, 170512, 170513, 170514, 170515, 170516, 170517, 170518, 170519, 170520, 170521, 170522, 170523, 170525, 170526, 170527, 170528, 170529, 170530, 170531, 170532, 170533, 170534, 170535, 170536, 170537, 170538, 170539, 170540, 170541, 170542, 170543, 170544, 170545, 170546, 170547, 170548, 170549, 170550, 170551, 170552, 170553, 170554, 170560, 170564, 170565, 170566, 170567, 170568, 170569, 173180, 173181, 173182, 173183, 173187, 173188, 173189, 173191, 173192, 173193, 173196, 174407, 174408, 174409, 174410, 174411, 174412, 174413, 174414, 174415, 174416, 174417, 174418, 174419, 174420, 174421, 174422, 174423, 174424, 174425, 174426, 174427, 174428, 174429, 174430, 174431, 174432, 174433, 174434, 174435, 174436, 174437, 174438, 174439, 174440, 174441, 174442, 174443, 174444, 174445, 174446, 174447, 174448, 174449, 174450, 174451, 174452, 174453, 174454, 174455, 174456, 174457, 174458, 174459, 174460, 174461, 174462, 174463, 174464, 174465, 174466, 174467, 174468, 174469, 174470, 174471, 174472, 174473, 174474, 174475, 174476, 174477, 174478, 174479, 174480, 174481, 174482, 174483, 174484, 174485, 174486, 174487, 174488, 174489, 174490, 174491, 174492, 174493, 174494, 174495, 174496, 174497, 174498, 174499, 174500, 174501, 174502, 174503, 174504, 174505, 174506, 174507, 174508, 174509, 174510, 174511, 174512, 174513, 174514, 174515, 174516, 174517, 174518, 174519, 174520, 174521, 174522, 174523, 174524, 174525, 174526, 174527, 174528, 174529, 174530, 174531, 174532, 174533, 174534, 174535, 174536, 174537, 174538, 174539, 174540, 174541, 174542, 174543, 174544, 174545, 174546, 174547, 174548, 174549, 174550, 174551, 174552, 174555, 174556, 174557, 174558, 174560, 174561, 174562, 174563, 174564, 174566, 174699, 174745, 174875, 174876, 174877, 174878, 174879, 174880, 174932, 174933, 174943, 174944, 175179, 175286, 175306, 175353, 175357, 175379, 175381, 175432, 175436, 175437, 175439, 175441, 175442, 175443, 175445, 175447, 175450, 175454, 175455, 175457, 175458, 175460, 175463, 175630, 175631, 175799, 175811, 175824, 175825, 175857, 175858, 175929, 175930, 175931, 175932, 176113, 176217, 176270, 176275, 176276, 176277, 176278, 176279, 176282, 176294, 176307, 176308, 176309, 176318, 176326, 176443, 176444, 176506, 176507, 176508, 176509, 176636, 176637, 176638, 176639, 176640, 176641, 176642, 176643, 176645, 176749, 176787, 176796, 176799, 176800, 176801, 176804, 176805, 176806, 176807, 176808, 176886, 176887, 176888, 176889, 176892, 176896, 176899, 176904, 176906, 176958, 176966, 176971, 176972, 176978, 176979, 176980, 176983, 176984, 176986, 176992, 176993, 176994, 176998, 177104, 177107, 177108, 177110, 177111, 177113, 177114, 177115, 177120, 177121, 177122, 177123, 177124, 177125, 177126, 177127, 177128, 177129, 177130, 177134, 177136, 177137, 177138, 177139, 177141, 177142, 177143, 177144, 177150, 177151, 177152, 177153, 177154, 177155, 177165, 177189, 177192, 177195, 177197, 177225, 177262, 177263, 177273, 177277, 177288, 177292, 177293, 177326, 177327, 177366, 177367, 177405, 177406, 177408, 177409, 177410, 177411, 177412, 177413, 178393, 178524, 178935, 178936, 178944, 178945, 178946, 179104, 179105, 179106, 179107, 179108, 179110, 179111, 179112, 179113, 179114, 179117, 179118, 179120, 179121, 179122, 179284, 179285, 179310, 179364, 179384, 179385, 179386, 179387, 179388, 179389, 179390, 179391, 179392, 179393, 179394, 179395, 179396, 179397, 179445, 179449, 179453, 179466, 179470, 179471, 179481, 179482, 179483, 179484, 179509, 179510, 179513, 179550, 179704, 179846, 179863, 179864, 179875, 179876, 179877, 179878, 179882, 179886, 179887, 180248, 180324, 180325, 180326, 180328, 180329, 180330, 180331, 180332, 180333, 180334, 180337, 180338, 180339, 180340, 180341, 180342, 180345, 180347, 180348, 180349, 180350, 180351, 180352, 180353, 180368, 180370, 180371, 180372, 180373, 180374, 180419, 180420, 180436, 180438, 180439, 180440, 180441, 180452, 180455, 180456, 180461, 180466, 180473, 180474, 180475, 180476, 180477, 180478, 180479, 180480, 180501, 180518, 180539, 180544, 180549, 180554, 180559, 180564, 180631, 180634, 180635, 180636, 180661, 180698, 180699, 180700, 180703, 180704, 180707, 180708, 180720, 180721, 180722, 180723, 180724, 180725, 180726, 180727, 180729, 180730, 180731, 180733, 180736, 180737, 180738, 180739, 180740, 180741, 180749, 180753, 180754, 180862, 180905, 180914, 181071, 181099, 181108, 181134, 181135, 181206, 181225, 181228, 181230, 181247, 181402, 181403, 181404, 181405, 181444, 181447, 181477, 181510, 181511, 181512, 181513, 181514, 181515, 181516, 181517, 181518, 181519, 181520, 181521, 181522, 181523, 181524, 181525, 181526, 181527, 181528, 181529, 181530, 181531, 181532, 181533, 181534, 181535, 181536, 181537, 181538, 181539, 181540, 181541, 181542, 181543, 181544, 181545, 181546, 181547, 181548, 181549, 181550, 181551, 181552, 181576, 181577, 181597, 181629, 181631, 181633, 181634, 181635, 181639, 181643, 181649, 181671, 181676, 181677, 181678, 181679, 181682, 181695, 181824, 182011, 182060, 182061, 182072, 182094, 182098, 182483, 182539, 182540, 183050, 183356, 183490, 183407, 183948, 184075, 184119, 184177, 184178, 184203, 184204, 184205, 184217, 184218, 184219, 184220, 184227, 184228, 184322, 184449, 184569, 184570, 184571, 184572, 184573, 184574, 184595, 184614, 184632, 184661, 184698, 184699, 184844, 184849, 184913, 184914, 184915, 184916, 184917, 184918, 184919, 184920, 184921, 184954, 185106, 185170, 185211, 185221, 185222, 185226, 185292, 185304, 185322, 185460, 185461, 185462, 185463, 185464, 185481, 185483, 185512, 185550, 185708, 185709, 185710, 185711, 185712, 185713, 185714, 185715, 185716, 185717, 185718, 185719, 185720, 185721, 185722, 185723, 185768, 185769, 185770, 185771, 185772, 185773, 185774, 185775, 185776, 185777, 185778, 185779, 185780, 185781, 185782, 185783, 185784, 185785, 185786, 185787, 185882, 185919, 185920, 185921, 185922, 185923, 185924, 185962, 185964, 186135, 186136, 186153, 186218, 186253, 190002, 190003, 190005, 190006, 181306, 180794, 184644, 186264, 184816, 184645, 184647, 186174, 186177, 186176, 186178, 185959, 185963, 185756, 185848, 185851, 185759, 185849, 185757, 185758, 185850, 185915, 185600, 185453, 185448, 185452, 185451, 184804, 184803, 185443, 185444, 185442, 185445, 185446, 185447, 185439, 185440, 185441, 185450, 185449, 184640, 186717, 186252, 186331, 186680, 186229, 186681, 186682, 186173, 186714, 186221, 186189, 186709, 186185, 186187, 186186, 186257, 186260, 186259, 186184, 186183, 186255, 186256, 187265, 185863, 186265, 186312, 185321, 179473, 185845, 185842, 185761, 185762, 185763, 185843, 185841, 185840, 185760, 181085, 181072, 186472, 185554, 186475, 186807, 180779, 186738, 185434, 187115, 202833, 186407, 184863, 186302, 186280, 184858, 186307, 186284, 186251, 186728, 186860, 187035, 186858, 186622, 187036, 187037, 187359, 186811, 186812, 186303, 186305, 186304, 186306, 186859, 186731, 186730, 187370, 187294, 186406, 186285, 186286, 187329, 187299, 186175, 185595, 185590, 187372, 186972, 187291, 187292, 175149, 175151, 175150, 175148, 187295, 180643, 187337, 187296, 186432, 186273, 186283, 186278, 186243, 186423, 186266, 186451, 186301, 186287, 186450, 187273, 187272, 186441, 186240, 186332, 186334, 186241, 186242, 186233, 186230, 186426, 186231, 186232, 186463, 186329, 186330, 186335, 187252, 182071, 187290, 186729, 186631, 186629, 186630, 185480, 185478, 185584, 185601, 185479, 186152, 186262, 185905, 186261, 185892, 185482, 185487, 185489, 185490, 185488, 185485, 185486, 185883, 185886, 185887, 185884, 185888, 185885, 182260, 185946, 184287, 3872, 3875, 3877, 3871, 3878, 3886, 3873, 3874, 3870, 174860, 3883, 3876, 3885, 3865, 174861, 3864, 3866, 185557, 186419, 186420, 186422, 187254, 187390, 186896, 186897, 186901, 186899, 186900, 186903, 186904, 186902, 187267, 188215, 188127, 188126, 187058, 187057, 187056, 187335, 187073, 187039, 187990, 187764, 187979, 187896, 187770, 188065, 188064, 188165, 188166, 188177, 187215, 187214, 187207, 187206, 187217, 188075, 187216, 188415, 188523, 188524, 188421, 188119, 187226, 187227, 187228, 187229, 187224, 187225, 187221, 187220, 187223, 187222, 187218, 187219, 188132, 187111, 187112, 187345, 187333, 188081, 187080, 187078, 187431, 187428, 187120, 187355, 187354, 187371, 188171, 188178, 188172, 188118, 187766, 187578, 187765, 188173, 187357, 187356, 187363, 187123, 187264, 187260, 187113, 187114, 187116, 188214, 3881, 3884, 3882, 3880, 188123, 189993, 189994, 3879, 3869, 3867, 187055, 185223, 187572, 187573, 188021, 187653, 187576, 187667, 188020, 187971, 187973, 187952, 188352, 188174, 187963, 187945, 187959, 187708, 187957, 187953, 187946, 187966, 187918, 188157, 188156, 188151, 187969, 187944, 187951, 187954, 187914, 187457, 189989, 190351, 186865, 186745, 188067, 188142, 188073, 188072, 187882, 188077, 186685, 186808, 186809, 186478, 190022, 190386, 188498, 190367, 190368, 190395, 188508, 186737, 186217, 187564, 187923, 187926, 187928, 187932, 187934, 187938, 181688, 181689, 186238, 186835, 186836, 186837, 186838, 186839, 186840, 186841, 186842, 186843, 186844, 187256, 187258, 187259, 187316, 187558, 187560, 187568, 187851, 187889, 187980, 188131, 188160, 188169, 188521, 188692, 190193, 190194, 190287, 190352, 190536, 190556, 190557, 190680, 190681, 190683, 190684, 190709, 190710, 190711, 190712, 190713, 190714, 190715, 190942, 191164, 191364, 191374, 191375, 191376, 191377, 191378, 191379, 191380, 191381, 191382, 191383, 191384, 191385, 191503, 191504, 191505, 191506, 191507, 191508, 191538, 191539, 191540, 191541, 191746, 191747, 191748, 191790, 192052, 192686, 192688, 193963, 193981, 175177, 175178, 185563, 187074, 187085, 187188, 187239, 187240, 187245, 187246, 187247, 187248, 187268, 187275, 187276, 187277, 187278, 187283, 187284, 187285, 187297, 187298, 187300, 187301, 187302, 187303, 187312, 187313, 187314, 187315, 187321, 187322, 187325, 187326, 187327, 187328, 187339, 187341, 187343, 187346, 187348, 187349, 187350, 187351, 187364, 187367, 187376, 187387, 187388, 187561, 187565, 187577, 187655, 187658, 187659, 187660, 187661, 187662, 187663, 187664, 187670, 187671, 187673, 187675, 187676, 187677, 187683, 187684, 187685, 187686, 187687, 187689, 187703, 187772, 187773, 187850, 187852, 187879, 187880, 187881, 187884, 187885, 187886, 187897, 187898, 187899, 187900, 187901, 187902, 187909, 187985, 188012, 188013, 188015, 188016, 188017, 188018, 188022, 188024, 188025, 188026, 188027, 188030, 188031, 188032, 188033, 188034, 188035, 188036, 188038, 188039, 188040, 188041, 188042, 188043, 188044, 188084, 188085, 188087, 188088, 188089, 188107, 188112, 188120, 188141, 188163, 188164, 188227, 188229, 188230, 188236, 188237, 188342, 188344, 188346, 188347, 188348, 188353, 188354, 188355, 188356, 188357, 188359, 188362, 188363, 188364, 188371, 188372, 188373, 188379, 188380, 188381, 188382, 188383, 188390, 188391, 188392, 188393, 188394, 188395, 188396, 188397, 188398, 188399, 188400, 188401, 188402, 188403, 188404, 188407, 188408, 188409, 188410, 188411, 188412, 188413, 188414, 188416, 188418, 188419, 188423, 188424, 188432, 188441, 188445, 188446, 188448, 188454, 188457, 188474, 188475, 188476, 188489, 188491, 188494, 188495, 188496, 188511, 188514, 188531, 188534, 188539, 188543, 188544, 188546, 188548, 188549, 188550, 188551, 188560, 188561, 188562, 188563, 188581, 188582, 188583, 188584, 188585, 188586, 188587, 188594, 188604, 188605, 188606, 188607, 188612, 188625, 188626, 188627, 188628, 188629, 188630, 188631, 188632, 188633, 188634, 188635, 188636, 188637, 188646, 188649, 188650, 188651, 188652, 188653, 188655, 188656, 188657, 188658, 188659, 188663, 188671, 188673, 188675, 188676, 188678, 188699, 188706, 188712, 188713, 189287, 189289, 189293, 189295, 189304, 189306, 189307, 189315, 189316, 189317, 189329, 189973, 189978, 189979, 189992, 189996, 189997, 190019, 190025, 190032, 190120, 190128, 190130, 190131, 190133, 190143, 190147, 190148, 190150, 190151, 190152, 190153, 190160, 190169, 190173, 190179, 190180, 190189, 190190, 190236, 190274, 190276, 190278, 190279, 190282, 190285, 190286, 190288, 190289, 190290, 190291, 190292, 190293, 190294, 190353, 190356, 190357, 190358, 190370, 190372, 190374, 190375, 190376, 190377, 190378, 190546, 190547, 190548, 190950, 190951, 190952, 190953, 190954, 190955, 190956, 190957, 190958, 190961, 190962, 190963, 190964, 190965, 190966, 190967, 190968, 190969, 190970, 190971, 190972, 190973, 190974, 190975, 190976, 190977, 190978, 190979, 190980, 190981, 190982, 190983, 190984, 190985, 190986, 190987, 190988, 190989, 190990, 190991, 190992, 190993, 190994, 190995, 190996, 190997, 190998, 190999, 191001, 191002, 191003, 191004, 191005, 191070, 191072, 191088, 191089, 191090, 191093, 191094, 191095, 191096, 191097, 191098, 191099, 191142, 191217, 191219, 191225, 191226, 191227, 191228, 191303, 191304, 191332, 191334, 191335, 191336, 191337, 191338, 191339, 191340, 191370, 191486, 191487, 191488, 191489, 191490, 191491, 191492, 191493, 191494, 191495, 191496, 191497, 191548, 191697, 191698, 191699, 191799, 191808, 191809, 192030, 192031, 192032, 192033, 192034, 192035, 192036, 192046, 192048, 192051, 192140, 192148, 192153, 192154, 192155, 192156, 192157, 192158, 192507, 192508, 192613, 192671, 192672, 192673, 192674, 192773, 193019, 193166, 193191, 193192, 193193, 193904, 194005, 194006, 194025, 194026, 1684, 185435, 185437, 186236, 186370, 186371, 186391, 186397, 186403, 186427, 186431, 186433, 186434, 186435, 186436, 186437, 186438, 186440, 186442, 186443, 186447, 186448, 186449, 186452, 186470, 186485, 186490, 186491, 186492, 186493, 186494, 186498, 186499, 186500, 186501, 186502, 186503, 186504, 186505, 186508, 186509, 186512, 186513, 186514, 186515, 186516, 186521, 186522, 186523, 186524, 186525, 186527, 186528, 186529, 186530, 186531, 186532, 186533, 186534, 186535, 186536, 186537, 186538, 186539, 186540, 186541, 186542, 186543, 186544, 186545, 186546, 186547, 186548, 186549, 186550, 186551, 186552, 186553, 186554, 186555, 186559, 186562, 186565, 186566, 186567, 186568, 186569, 186570, 186571, 186572, 186573, 186574, 186575, 186577, 186578, 186579, 186580, 186586, 186587, 186591, 186595, 186601, 186602, 186603, 186604, 186605, 186616, 186617, 186618, 186619, 186620, 186632, 186639, 186641, 186642, 186643, 186644, 186645, 186646, 186647, 186651, 186652, 186654, 186656, 186657, 186659, 186660, 186661, 186662, 186665, 186678, 186679, 186684, 186687, 186695, 186696, 186697, 186698, 186699, 186700, 186701, 186702, 186703, 186704, 186705, 186706, 186707, 186708, 186711, 186712, 186757, 186758, 186759, 186760, 186761, 186762, 186770, 186805, 186827, 186828, 186830, 186831, 186832, 186861, 186862, 186863, 186864, 186883, 186894, 186895, 186905, 186907, 186908, 186910, 186911, 186912, 186913, 186914, 186915, 186916, 186917, 186918, 186919, 186920, 186921, 186922, 186923, 186924, 186938, 186946, 186949, 186950, 186953, 186954, 186955, 186960, 186961, 186962, 186963, 187022, 187023, 187026, 187027, 187032, 187038, 187255, 187261, 187317, 187318, 187319, 187320, 187984, 187986, 188106, 188108, 188136, 188186, 188231, 188238, 188244, 188245, 188246, 188247, 188248, 188249, 188250, 188251, 188252, 188253, 188254, 188256, 188257, 188258, 188259, 188260, 188261, 188262, 188263, 188264, 188272, 188273, 188274, 188275, 188276, 188277, 188278, 188279, 188280, 188281, 188282, 188283, 188284, 188285, 188286, 188287, 188288, 188289, 188290, 188291, 188292, 188293, 188294, 188295, 188296, 188297, 188298, 188299, 188300, 188301, 188302, 188303, 188304, 188305, 188306, 188307, 188308, 188309, 188310, 188311, 188312, 188313, 188314, 188315, 188316, 188317, 188318, 188319, 188320, 188321, 188322, 188323, 188324, 188325, 188326, 188327, 188328, 188329, 188333, 188334, 188335, 188336, 188337, 188338, 188339, 188351, 188360, 188365, 188366, 188368, 188375, 188376, 188377, 188378, 188428, 188443, 188451, 188452, 188453, 188455, 188458, 188461, 188464, 188465, 188469, 188471, 188472, 188473, 188479, 188480, 188481, 188483, 188487, 188492, 188493, 188499, 188500, 188501, 188502, 188503, 188505, 188506, 188515, 188516, 188517, 188518, 188530, 188535, 188541, 188554, 188556, 188557, 188572, 188573, 188574, 188575, 188596, 188600, 188601, 188608, 188609, 188610, 188611, 188613, 188614, 188615, 188616, 188617, 188618, 188619, 188620, 188621, 188622, 188623, 188624, 188665, 188666, 188667, 188668, 188670, 188691, 188695, 188697, 188702, 188703, 188705, 188710, 189290, 189310, 189313, 189320, 189323, 189325, 189326, 189327, 189328, 189958, 189959, 189960, 189967, 189968, 189969, 189972, 189976, 189977, 189980, 189981, 189983, 189991, 190004, 190014, 190015, 190016, 190021, 190026, 190027, 190028, 190029, 190030, 190031, 190092, 190118, 190119, 190165, 190167, 190170, 190172, 190175, 190192, 190197, 190198, 190199, 190208, 190209, 190210, 190211, 190212, 190219, 190220, 190221, 190222, 190223, 190350, 190361, 190362, 190369, 190371, 190373, 190401, 190447, 190453, 190454, 190455, 190495, 190496, 190497, 190500, 190504, 190507, 190508, 190512, 190524, 190525, 190526, 190527, 190533, 190537, 190540, 190559, 190578, 190579, 190580, 190581, 190587, 190590, 190598, 190599, 190600, 190616, 190621, 190622, 190635, 190636, 190637, 190638, 190639, 190644, 190645, 190646, 190660, 190661, 190688, 190700, 190701, 190702, 190762, 190764, 190765, 190766, 190768, 190779, 191019, 191133, 191136, 191163, 191184, 191185, 191186, 191187, 191188, 191189, 191193, 191194, 191195, 191196, 191197, 191198, 191199, 191200, 191202, 191209, 191210, 191222, 191235, 191236, 191244, 191253, 191254, 191255, 191258, 191259, 191260, 191276, 191277, 191278, 191316, 191329, 191341, 191345, 191369, 191414, 191460, 191461, 191462, 191502, 191511, 191512, 191513, 191514, 191515, 191516, 191517, 191519, 191521, 191530, 191531, 191532, 191533, 191534, 191537, 191544, 191545, 191549, 191552, 191553, 191567, 191568, 191574, 191576, 191608, 191647, 191660, 191661, 191676, 191677, 191678, 191679, 191700, 191701, 191702, 191703, 191704, 191714, 191715, 191749, 191750, 191751, 191752, 191753, 191770, 191773, 191793, 191795, 191796, 191797, 191798, 191800, 191801, 191802, 191803, 191804, 191805, 191806, 191807, 191810, 191814, 191815, 191833, 191834, 191835, 191840, 191843, 191844, 191845, 191850, 191854, 191855, 191857, 191858, 191859, 191862, 191863, 191864, 191865, 191866, 191867, 191870, 191872, 191873, 191874, 191875, 191876, 191941, 191942, 191957, 192010, 192012, 192013, 192019, 192020, 192021, 192022, 192023, 192024, 192025, 192026, 192028, 192029, 192037, 192044, 192049, 192050, 192057, 192058, 192059, 192072, 192085, 192086, 192087, 192102, 192103, 192120, 192121, 192122, 192126, 192134, 192171, 192172, 192183, 192184, 192185, 192219, 192227, 192228, 192229, 192230, 192231, 192232, 192233, 192234, 192241, 192242, 192399, 192491, 192493, 192494, 192495, 192509, 192510, 192541, 192542, 192543, 192544, 192545, 192546, 192556, 192557, 192562, 192563, 192582, 192583, 192584, 192588, 192589, 192590, 192591, 192592, 192593, 192594, 192595, 192596, 192597, 192598, 192599, 192600, 192601, 192602, 192603, 192604, 192605, 192606, 192607, 192608, 192609, 192610, 192611, 192717, 192718, 192720, 192721, 192737, 192738, 192739, 192740, 192818, 192820, 192824, 192828, 192830, 192831, 192832, 192859, 192860, 192908, 192909, 192910, 192911, 192912, 192952, 193020, 193082, 193083, 193202, 193205, 193220, 193221, 193223, 193225, 193229, 193241, 193242, 193243, 193390, 193402, 193604, 193608, 193609, 193610, 193791, 193915, 193972, 193985, 193987, 193994, 193997, 194008, 194010, 194013, 194016, 194019, 188241, 188242, 188243, 188266, 188267, 188268, 188269, 188330, 188331, 188332, 188345, 188507, 189298, 191201, 191241, 191242, 191243, 191245, 191257, 164759, 164760, 164761, 164762, 164763, 164764, 164765, 164766, 164767, 188167, 188168, 188170, 190671, 191083, 186935, 187237, 187369, 187373, 187389, 188100, 188101, 188102, 188103, 188113, 188133, 188140, 190171, 190567, 190959, 191386, 191387, 191388, 191389, 191390, 191391, 191392, 191393, 191394, 191395, 191396, 191410, 191509, 191543, 191625, 191627, 191628, 191629, 191643, 191644, 191672, 191705, 191706, 191707, 191718, 191754, 191755, 191756, 191757, 191758, 191813, 191820, 191824, 191825, 191827, 191828, 191829, 192061, 192062, 192063, 192123, 192135, 192138, 192139, 192161, 192162, 192178, 192264, 192469, 192470, 192471, 192477, 192478, 192479, 192480, 192481, 192482, 192483, 192484, 192485, 192486, 192522, 192523, 192547, 192548, 192575, 192576, 192577, 192578, 192774, 192784, 192785, 192787, 192797, 192798, 192799, 192800, 192801, 192802, 192803, 192804, 192805, 192858, 192861, 192862, 192913, 192914, 192915, 192916, 192919, 192932, 192933, 193007, 193024, 193025, 193027, 193028, 193030, 193041, 193042, 193058, 193060, 193199, 193200, 193201, 193400, 193401, 193424, 193468, 193469, 193470, 193471, 193476, 193480, 193481, 193482, 193483, 193484, 193485, 193486, 193487, 193488, 193489, 193490, 193491, 193492, 193493, 193494, 193495, 193496, 193497, 193516, 193517, 193518, 193519, 193520, 193530, 193531, 193532, 193533, 193534, 193535, 193536, 193537, 193538, 193539, 193540, 193541, 193542, 193543, 193544, 193545, 193546, 193547, 193548, 193549, 193550, 193551, 193552, 193553, 193554, 193555, 193556, 193557, 193558, 193559, 193562, 193563, 193565, 193566, 193579, 193582, 193583, 193584, 193585, 193586, 193600, 193601, 193602, 193607, 193616, 193618, 193620, 193622, 193767, 193789, 193790, 193792, 193793, 193846, 193847, 193848, 193849, 193850, 193851, 193852, 193853, 193854, 193855, 193856, 193857, 193858, 193859, 193860, 193861, 193862, 193863, 193864, 193865, 193866, 193867, 193868, 193869, 193870, 193871, 193872, 193873, 193874, 193875, 193876, 193877, 193878, 193879, 193880, 193881, 193882, 193883, 193884, 193885, 193886, 193887, 193888, 193889, 193890, 193891, 193892, 193893, 193894, 193895, 193939, 193943, 193982, 193983, 193984, 194009, 194027, 183306, 186258, 186325, 186326, 186390, 186457, 186459, 186479, 186480, 186481, 186486, 186495, 186496, 186497, 186506, 186507, 186510, 186511, 186517, 186518, 186519, 186520, 186526, 186556, 186557, 186558, 186585, 186598, 186600, 186607, 186608, 186609, 186610, 186611, 186612, 186640, 186649, 186650, 186653, 186663, 186664, 186666, 186688, 186689, 186690, 186691, 186692, 186693, 186694, 186718, 186756, 186798, 186813, 186814, 186885, 186886, 186909, 186925, 186926, 186927, 186929, 186930, 186933, 186934, 186936, 186937, 186943, 186944, 186956, 186957, 186958, 186964, 187033, 187075, 187106, 187117, 187184, 187185, 187186, 187187, 187238, 187241, 187242, 187243, 187279, 187280, 187281, 187282, 187286, 187287, 187304, 187305, 187306, 187307, 187324, 187338, 187352, 187353, 187381, 187432, 187433, 187446, 187447, 187448, 187449, 187450, 187452, 187453, 187454, 187455, 187456, 187460, 187461, 187462, 187463, 187464, 187465, 187466, 187467, 187468, 187469, 187470, 187471, 187498, 187499, 187500, 187501, 187502, 187503, 187504, 187505, 187506, 187507, 187508, 187509, 187510, 187511, 187512, 187513, 187514, 187515, 187516, 187517, 187518, 187519, 187520, 187521, 187522, 187523, 187524, 187525, 187526, 187527, 187579, 187580, 187581, 187582, 187584, 187586, 187587, 187588, 187589, 187590, 187591, 187592, 187593, 187594, 187595, 187596, 187597, 187598, 187599, 187600, 187601, 187669, 187690, 187693, 187694, 187695, 187697, 187710, 187711, 187712, 187713, 187714, 187715, 187719, 187720, 187721, 187722, 187723, 187724, 187725, 187726, 187727, 187728, 187729, 187730, 187731, 187732, 187733, 187734, 187735, 187736, 187737, 187738, 187739, 187740, 187741, 187742, 187743, 187744, 187745, 187746, 187747, 187748, 187749, 187750, 187751, 187752, 187753, 187754, 187755, 187756, 187757, 187758, 187759, 187760, 187761, 187762, 187774, 187875, 187903, 187905, 187908, 187912, 187915, 187982, 187983, 187987, 187995, 187996, 187997, 187998, 187999, 188000, 188001, 188002, 188003, 188004, 188005, 188006, 188007, 188008, 188010, 188014, 188028, 188029, 188037, 188091, 188092, 188104, 188109, 188370, 188386, 188387, 188388, 188389, 188405, 188406, 188422, 188425, 188426, 188442, 188463, 188486, 188488, 188522, 188525, 188526, 188527, 188528, 188537, 188542, 188545, 188547, 188565, 188566, 188567, 188568, 188569, 188570, 188571, 188576, 188577, 188578, 188579, 188580, 188593, 188595, 188599, 188677, 188682, 188683, 188684, 188685, 188686, 188687, 188711, 188715, 189288, 189291, 189292, 189294, 189299, 189300, 189301, 189302, 189308, 189311, 189312, 189318, 189319, 189321, 189322, 189324, 189963, 189964, 189965, 189966, 189971, 189975, 189985, 189986, 190017, 190018, 190020, 190023, 190094, 190095, 190117, 190121, 190122, 190123, 190124, 190125, 190126, 190127, 190129, 190132, 190134, 190135, 190136, 190137, 190138, 190156, 190159, 190174, 190176, 190191, 190225, 190275, 190280, 190281, 190283, 190284, 190332, 190334, 190335, 190399, 190402, 190444, 190445, 190446, 190456, 190457, 190458, 190459, 190460, 190461, 190462, 190463, 190464, 190465, 190466, 190467, 190468, 190469, 190470, 190471, 190472, 190473, 190474, 190476, 190477, 190478, 190479, 190480, 190481, 190482, 190483, 190484, 190488, 190498, 190505, 190506, 190513, 190515, 190522, 190534, 190535, 190538, 190541, 190542, 190543, 190550, 190554, 190555, 190568, 190569, 190570, 190572, 190574, 190582, 190584, 190586, 190589, 190594, 190595, 190596, 190597, 190602, 190603, 190618, 190619, 190620, 190623, 190629, 190630, 190633, 190647, 190657, 190662, 190663, 190687, 190691, 190695, 190697, 190698, 190699, 190704, 190716, 190720, 190722, 190723, 190724, 190726, 190727, 190731, 190752, 190753, 190763, 190767, 190769, 190778, 190784, 190785, 190789, 190790, 190791, 190793, 190795, 190796, 190797, 190799, 190800, 190801, 190802, 190803, 190804, 190805, 190806, 190807, 190808, 190809, 190810, 190811, 190834, 190836, 190842, 190843, 190857, 190858, 190859, 190860, 190861, 190862, 190863, 190864, 190865, 190866, 190867, 190868, 190869, 190870, 190871, 190872, 190873, 190874, 190875, 190876, 190877, 190878, 190879, 190880, 190881, 190882, 190883, 190884, 190885, 190886, 190887, 190888, 190889, 190890, 190891, 190892, 190893, 190894, 190895, 190896, 190898, 190899, 190900, 190901, 190902, 190903, 190904, 190905, 190906, 190907, 190908, 190909, 190910, 190911, 190912, 190913, 190914, 190915, 190917, 190919, 190920, 190921, 190922, 190923, 190924, 190925, 190926, 190927, 190928, 190929, 190930, 190931, 190932, 190933, 190934, 190935, 190936, 190937, 190938, 190939, 190940, 190941, 190944, 190946, 190947, 190960, 191006, 191007, 191008, 191009, 191010, 191011, 191012, 191013, 191014, 191015, 191016, 191018, 191028, 191029, 191030, 191071, 191073, 191074, 191075, 191076, 191077, 191078, 191079, 191080, 191081, 191082, 191084, 191086, 191087, 191092, 191102, 191103, 191104, 191105, 191106, 191107, 191108, 191109, 191110, 191111, 191112, 191113, 191114, 191115, 191116, 191117, 191118, 191119, 191120, 191121, 191126, 191144, 191148, 191155, 191156, 191157, 191158, 191159, 191160, 191161, 191162, 191165, 191166, 191167, 191168, 191169, 191170, 191171, 191172, 191173, 191174, 191175, 191176, 191177, 191178, 191180, 191181, 191182, 191190, 191191, 191203, 191204, 191205, 191206, 191207, 191208, 191223, 191224, 191229, 191230, 191237, 191238, 191239, 191240, 191256, 191261, 191262, 191263, 191264, 191265, 191266, 191267, 191268, 191269, 191270, 191271, 191287, 191288, 191292, 191293, 191294, 191295, 191296, 191301, 191302, 191305, 191306, 191307, 191308, 191309, 191310, 191311, 191313, 191314, 191315, 191317, 191318, 191324, 191325, 191326, 191327, 191328, 191330, 191333, 191347, 191349, 191351, 191371, 191407, 191411, 191412, 191413, 191415, 191416, 191440, 191444, 191445, 191457, 191459, 191463, 191464, 191465, 191466, 191467, 191468, 191469, 191470, 191471, 191472, 191473, 191474, 191475, 191476, 191477, 191478, 191479, 191480, 191481, 191482, 191527, 191529, 191535, 191536, 191542, 191547, 191554, 191555, 191556, 191557, 191558, 191559, 191560, 191562, 191563, 191564, 191565, 191566, 191575, 191577, 191580, 191581, 191582, 191583, 191584, 191585, 191586, 191587, 191588, 191589, 191590, 191606, 191609, 191612, 191613, 191614, 191615, 191616, 191617, 191618, 191622, 191623, 191630, 191631, 191632, 191633, 191634, 191635, 191636, 191637, 191638, 191639, 191641, 191642, 191645, 191646, 191648, 191649, 191650, 191652, 191653, 191654, 191655, 191656, 191657, 191658, 191659, 191662, 191663, 191664, 191665, 191667, 191669, 191670, 191671, 191674, 191675, 191680, 191681, 191682, 191683, 191684, 191686, 191687, 191688, 191708, 191722, 191723, 191726, 191728, 191729, 191731, 191732, 191733, 191734, 191735, 191741, 191745, 191760, 191761, 191766, 191768, 191769, 191780, 191781, 191782, 191783, 191788, 191817, 191826, 191832, 191836, 191837, 191838, 191839, 191846, 191847, 191848, 191849, 191851, 191852, 191853, 191856, 191860, 191861, 191868, 191869, 191871, 191886, 191887, 191888, 191889, 191890, 191891, 191892, 191893, 191894, 191895, 191896, 191897, 191898, 191899, 191900, 191901, 191902, 191903, 191904, 191909, 191910, 191911, 191912, 191913, 191914, 191915, 191916, 191917, 191918, 191919, 191924, 191925, 191926, 191927, 191928, 191929, 191930, 191931, 191932, 191933, 191934, 191935, 191939, 191940, 191943, 191945, 191946, 191947, 191948, 191949, 191950, 191951, 191952, 191953, 191954, 191955, 191956, 191958, 191959, 191960, 191964, 191965, 191966, 191974, 191975, 191980, 191981, 191983, 191984, 191986, 191987, 191988, 191989, 191990, 191991, 191992, 191993, 191994, 191995, 191997, 191998, 191999, 192002, 192003, 192004, 192017, 192038, 192053, 192054, 192060, 192064, 192065, 192066, 192067, 192068, 192069, 192070, 192083, 192084, 192088, 192089, 192090, 192091, 192092, 192093, 192094, 192095, 192096, 192097, 192098, 192099, 192109, 192110, 192111, 192112, 192113, 192114, 192115, 192116, 192117, 192118, 192119, 192125, 192128, 192129, 192130, 192131, 192136, 192137, 192150, 192152, 192159, 192160, 192163, 192164, 192166, 192170, 192173, 192174, 192175, 192176, 192177, 192180, 192181, 192186, 192187, 192188, 192189, 192190, 192191, 192192, 192193, 192194, 192195, 192196, 192197, 192198, 192199, 192200, 192201, 192202, 192203, 192204, 192205, 192206, 192207, 192208, 192209, 192210, 192211, 192212, 192213, 192214, 192215, 192216, 192217, 192218, 192220, 192221, 192222, 192223, 192224, 192225, 192235, 192236, 192237, 192238, 192239, 192240, 192252, 192253, 192256, 192263, 192267, 192268, 192271, 192272, 192275, 192276, 192279, 192281, 192282, 192286, 192287, 192288, 192291, 192292, 192299, 192304, 192305, 192306, 192307, 192308, 192309, 192310, 192312, 192313, 192314, 192316, 192317, 192318, 192319, 192320, 192321, 192322, 192323, 192324, 192325, 192326, 192327, 192328, 192329, 192330, 192331, 192332, 192333, 192334, 192335, 192377, 192387, 192388, 192389, 192390, 192391, 192392, 192395, 192396, 192397, 192398, 192400, 192401, 192424, 192425, 192426, 192427, 192428, 192440, 192442, 192443, 192444, 192449, 192450, 192452, 192453, 192465, 192466, 192467, 192468, 192474, 192475, 192487, 192489, 192490, 192498, 192499, 192500, 192501, 192502, 192503, 192504, 192511, 192512, 192513, 192514, 192518, 192519, 192520, 192526, 192527, 192528, 192529, 192530, 192531, 192536, 192539, 192549, 192553, 192554, 192555, 192564, 192565, 192566, 192567, 192568, 192569, 192570, 192571, 192572, 192573, 192579, 192585, 192614, 192615, 192616, 192617, 192618, 192619, 192620, 192621, 192622, 192625, 192628, 192629, 192632, 192633, 192635, 192651, 192652, 192653, 192654, 192663, 192664, 192665, 192666, 192676, 192677, 192678, 192679, 192680, 192681, 192682, 192685, 192687, 192689, 192690, 192691, 192697, 192704, 192705, 192706, 192707, 192708, 192709, 192710, 192713, 192714, 192715, 192716, 192719, 192734, 192735, 192736, 192741, 192742, 192743, 192775, 192776, 192783, 192788, 192806, 192807, 192808, 192809, 192810, 192811, 192812, 192813, 192814, 192815, 192816, 192817, 192819, 192821, 192822, 192823, 192825, 192826, 192827, 192833, 192835, 192836, 192838, 192839, 192840, 192841, 192842, 192843, 192844, 192845, 192846, 192847, 192848, 192849, 192850, 192851, 192852, 192853, 192854, 192855, 192856, 192863, 192864, 192866, 192867, 192868, 192869, 192870, 192871, 192872, 192874, 192880, 192881, 192882, 192883, 192884, 192885, 192886, 192887, 192888, 192889, 192890, 192891, 192892, 192893, 192894, 192895, 192896, 192903, 192904, 192905, 192907, 192918, 192920, 192921, 192922, 192923, 192924, 192925, 192926, 192927, 192928, 192929, 192930, 192931, 192934, 192935, 192936, 192937, 192938, 192941, 192942, 192943, 192944, 192945, 192946, 192947, 192948, 192949, 192950, 192951, 192953, 192954, 192955, 192956, 192957, 192958, 192959, 192960, 192961, 192962, 192963, 192964, 192965, 192966, 192967, 192968, 192969, 192970, 192971, 192972, 192973, 192974, 192975, 192976, 192977, 192978, 192979, 192980, 192981, 192982, 192983, 192985, 192986, 192987, 192988, 192989, 192990, 192991, 192992, 192993, 192994, 192995, 192996, 192997, 192999, 193000, 193001, 193002, 193003, 193029, 193039, 193040, 193043, 193044, 193045, 193049, 193050, 193051, 193052, 193053, 193057, 193059, 193061, 193062, 193071, 193080, 193081, 193084, 193085, 193086, 193087, 193088, 193089, 193093, 193094, 193096, 193097, 193098, 193099, 193100, 193101, 193102, 193103, 193104, 193105, 193106, 193107, 193108, 193109, 193124, 193125, 193126, 193128, 193129, 193130, 193131, 193132, 193133, 193134, 193135, 193136, 193137, 193138, 193147, 193148, 193149, 193150, 193151, 193152, 193153, 193154, 193155, 193156, 193157, 193158, 193159, 193162, 193163, 193164, 193165, 193167, 193168, 193171, 193172, 193173, 193174, 193175, 193176, 193177, 193178, 193179, 193180, 193182, 193183, 193184, 193185, 193188, 193189, 193190, 193196, 193197, 193198, 193208, 193209, 193210, 193211, 193212, 193213, 193214, 193222, 193224, 193226, 193227, 193228, 193230, 193231, 193232, 193233, 193234, 193235, 193236, 193237, 193238, 193239, 193240, 193244, 193245, 193246, 193247, 193248, 193249, 193250, 193251, 193252, 193253, 193254, 193255, 193256, 193257, 193258, 193259, 193260, 193261, 193262, 193263, 193264, 193265, 193266, 193267, 193268, 193269, 193270, 193271, 193273, 193274, 193275, 193276, 193277, 193278, 193279, 193280, 193281, 193282, 193283, 193284, 193285, 193286, 193287, 193288, 193289, 193290, 193291, 193292, 193293, 193294, 193295, 193296, 193297, 193298, 193299, 193300, 193301, 193302, 193303, 193304, 193305, 193306, 193307, 193308, 193309, 193310, 193311, 193312, 193313, 193314, 193315, 193316, 193317, 193318, 193319, 193320, 193321, 193322, 193323, 193324, 193325, 193326, 193327, 193328, 193329, 193330, 193331, 193332, 193333, 193334, 193335, 193336, 193337, 193338, 193339, 193340, 193341, 193342, 193343, 193344, 193345, 193346, 193347, 193348, 193349, 193350, 193351, 193352, 193353, 193354, 193355, 193356, 193357, 193358, 193359, 193360, 193361, 193362, 193363, 193364, 193365, 193366, 193367, 193368, 193369, 193370, 193371, 193372, 193373, 193374, 193375, 193376, 193377, 193378, 193379, 193380, 193381, 193382, 193383, 193384, 193385, 193386, 193388, 193389, 193391, 193392, 193393, 193394, 193395, 193396, 193397, 193398, 193399, 193406, 193422, 193423, 193428, 193429, 193430, 193431, 193432, 193433, 193434, 193435, 193436, 193437, 193438, 193439, 193561, 193564, 193578, 193587, 193588, 193597, 193598, 193599, 193603, 193611, 193615, 193617, 193619, 193624, 193625, 193626, 193627, 193696, 193697, 193698, 193699, 193700, 193701, 193702, 193703, 193704, 193705, 193706, 193707, 193708, 193709, 193710, 193711, 193712, 193713, 193714, 193715, 193716, 193717, 193718, 193719, 193720, 193721, 193722, 193723, 193724, 193725, 193726, 193727, 193728, 193729, 193730, 193731, 193732, 193733, 193734, 193735, 193736, 193737, 193738, 193739, 193740, 193741, 193742, 193743, 193744, 193745, 193746, 193747, 193748, 193749, 193750, 193751, 193752, 193753, 193754, 193755, 193756, 193757, 193758, 193759, 193760, 193761, 193762, 193763, 193764, 193765, 193766, 193768, 193769, 193770, 193771, 193772, 193781, 193782, 193783, 193784, 193785, 193786, 193787, 193795, 193796, 193896, 193897, 193898, 193899, 193900, 193901, 193902, 193903, 193906, 193907, 193909, 193910, 193911, 193912, 193913, 193914, 193916, 193917, 193918, 193919, 193920, 193921, 193922, 193923, 193924, 193925, 193926, 193927, 193928, 193929, 193930, 193931, 193932, 193933, 193934, 193935, 193936, 193940, 193942, 193944, 193945, 193946, 193949, 193950, 193951, 193962, 193964, 193988, 193990, 193995, 194011, 194012, 194017, 194018, 194020, 194021, 194022, 194029, 194082, 194083, 194086, 190509, 190777, 192151, 193969, 193970, 193971, 192865, 192378, 192379, 192363, 192372, 192355, 192358, 192354, 192834, 192285, 193160, 193161, 192371, 192359, 192338, 192284, 192339, 193139, 193140, 193141, 193142, 193143, 193144, 193145, 192362, 193146, 192350, 192351, 193127, 192366, 192367, 192368, 192356, 192488, 192369, 192364, 192370, 192352, 192349, 192353, 192254, 192255, 192626, 192336, 192357, 192375, 192373, 192374, 192376, 192360, 193121, 193119, 193120, 193122, 193123, 193110, 193111, 193112, 193113, 193114, 193115, 193116, 193117, 193118, 192361, 190475, 192290, 192461, 192460, 192711, 193991, 190643, 190625, 190624, 190503, 190502, 190561, 190558, 190562, 190563, 190560, 190601, 190696, 193056, 193968, 190487, 192283, 192434, 192280, 192435, 192289, 192459, 192273, 192418, 192417, 192416, 192458, 193169, 192627, 192269, 192429, 192430, 192414, 192431, 192277, 192829, 193195, 190614, 190613, 190612, 191365, 191123, 191619, 191620, 192574, 191626, 191624, 192077, 192724, 192730, 192731, 192722, 192723, 192726, 192727, 192728, 192729, 192725, 192524, 192071, 193589, 193596, 192078, 192080, 192463, 192081, 192082, 191763, 191762, 192246, 192249, 192244, 192250, 192248, 192251, 192657, 192658, 192769, 192770, 192771, 192772, 192245, 192247, 192767, 192768, 193952, 192473, 192124, 193822, 193823, 193824, 193826, 193827, 193825, 193800, 193810, 193813, 193814, 193815, 193816, 193817, 193818, 193820, 193821, 193801, 193802, 193808, 193809, 193831, 193832, 193834, 193837, 193840, 193836, 193811, 193812, 193803, 193804, 193833, 193828, 193829, 193830, 193477, 193527, 193524, 193472, 193473, 193474, 193475, 193478, 193479, 193523, 193511, 193525, 193526, 193528, 193514, 193510, 193515, 193521, 193502, 193503, 193504, 193505, 193506, 193466, 193467, 193522, 193512, 193529, 193513, 193498, 193499, 193500, 193501, 193508, 193509, 193507, 193843, 193844, 193845, 193838, 193839, 193841, 193842, 193797, 193799, 193835, 193819, 193805, 193806, 193807, 193798, 194023, 194024, 193980, 193403, 193404, 193405, 189961, 189962, 193614, 193612, 193613, 193203, 193091, 193204, 192407, 192274, 192406, 192278, 193989, 193996, 191605, 193170, 193055, 194108, 194097, 194099, 194162, 194147, 194115, 192675, 193070, 193908, 194120, 194121, 194126, 194129, 192643, 192642, 191877, 192079, 192260, 193986, 193958, 187674, 187707, 187704, 188689, 194468, 194467, 194278, 194323, 194941, 194940, 194937, 194938, 194939, 194942, 194943, 194944, 194945, 194946, 194540, 194539, 194537, 194538, 194588, 194600, 194599, 194601, 195129, 194606, 194605, 194608, 194604, 194607, 194602, 194603, 194489, 194526, 194492, 194618, 194591, 194592, 194593, 194598, 194594, 194527, 194528, 194531, 194589, 194590, 194595, 194487, 194488, 194530, 194622, 194596, 194597, 194532, 194529, 194967, 194976, 194977, 194970, 194567, 194610, 194611, 194533, 194306, 194982, 194981, 194965, 194966, 194974, 194979, 194969, 194972, 194973, 194975, 194978, 194980, 194968, 194964, 194971, 194568, 194820, 194609, 194788, 194524, 194490, 194523, 194525, 194998, 194839, 194840, 194841, 194843, 194827, 194849, 194850, 194851, 194852, 194853, 194842, 194844, 194845, 194846, 194863, 194864, 194865, 194866, 194867, 194868, 194869, 194870, 194872, 194873, 194874, 194875, 194876, 194877, 194878, 194879, 194881, 194882, 194847, 194848, 194854, 194855, 194857, 194880, 194858, 194859, 194860, 194861, 194862, 194896, 194897, 194898, 194899, 194900, 194901, 194883, 194884, 194885, 194886, 194887, 194888, 194889, 194890, 194891, 194892, 194893, 194894, 194856, 194871, 194895, 194909, 194908, 194679, 192270, 192415, 194236, 194235, 194481, 194484, 194569, 194665, 194412, 194415, 194705, 194405, 194404, 194402, 194506, 194403, 194406, 194407, 194408, 194409, 194410, 194413, 194414, 194416, 194401, 194375, 194411, 194400, 194371, 194663, 194664, 194370, 194704, 194630, 194905, 194707, 194706, 194398, 194399, 194666, 194377, 194631, 194261, 194262, 194556, 194253, 194232, 194767, 194715, 194716, 194910, 194911, 194148, 194565, 194554, 194553, 194750, 194773, 194316, 194542, 194541, 194255, 194213, 194659, 194275, 194356, 195013, 194534, 194043, 194634, 194441, 194636, 194637, 194442, 194635, 194675, 194559, 194264, 194560, 194558, 194557, 194915, 195047, 194907, 194308, 194201, 194300, 194173, 194904, 194437, 194914, 194902, 194775, 194749, 194748, 194740, 194741, 194742, 194743, 194744, 194745, 194747, 194746, 194913, 194739, 194776, 194774, 194912, 194341, 188128, 187921, 194054, 195036, 194625, 194547, 194548, 194545, 194546, 195034, 195033, 195035, 194158, 193905, 194365, 194393, 194046, 194042, 194394, 194283, 191312, 194952, 194276, 194361, 191640, 192266, 194959, 194960, 192423, 194479, 187958, 193965, 193966, 194660, 194662, 194661, 194677, 194676, 194544, 194836, 194837, 194838, 194832, 194833, 194834, 194835, 194364, 194466, 194954, 194953, 194658, 194237, 194678, 194535, 193031, 193037, 193033, 193032, 193036, 193034, 193035, 194127, 194128, 194955, 195032, 194687, 194684, 194680, 194681, 194682, 194683, 194685, 194686, 194691, 195029, 194693, 194694, 195030, 195031, 194688, 194689, 194695, 195046, 194200, 194690, 194357, 194352, 194239, 194238, 194307, 194151, 194696, 194692, 194155, 194274, 194281, 194044, 194045, 194034, 194035, 195147, 194578, 194579, 194580, 194581, 194582, 194583, 194584, 194585, 194586, 194587, 194055, 194277, 194282, 185879, 194962, 194280, 186417, 186416, 186415, 186414, 186413, 186412, 186411, 186410, 186409, 186408, 194340, 195259, 195273, 195256, 195257, 195266, 195253, 195533, 195428, 195532, 195427, 195255, 195141, 195264, 195260, 195263, 195310, 195589, 195590, 195591, 195597, 195302, 195419, 195213, 195214, 195420, 195593, 195594, 195596, 195595, 195421, 195498, 195592, 195598, 195422, 195464, 195344, 195346, 196468, 196469, 196470, 196467, 195308, 195610, 195614, 195615, 195603, 195604, 195620, 195608, 195606, 195616, 195609, 195022, 195700, 195436, 195452, 195451, 195703, 195316, 195701, 195332, 195315, 195698, 195699, 195439, 195396, 195121, 195705, 195276, 195706, 195496, 195495, 195494, 195223, 195437, 195491, 195702, 195131, 195133, 195158, 195154, 195144, 195335, 195424, 195425, 195132, 195232, 195151, 195334, 195235, 195337, 195237, 195336, 195320, 196413, 195153, 195371, 195130, 195313, 195314, 195331, 195393, 195333, 195339, 195156, 195207, 195210, 195402, 195208, 195403, 195209, 195377, 195376, 195618, 195605, 195617, 195619, 195612, 195613, 195611, 195468, 195530, 195529, 195607, 195139, 195140, 195481, 195480, 195479, 195478, 195648, 195649, 196398, 195477, 195486, 195485, 195650, 195647, 195460, 195186, 195709, 195323, 195374, 195710, 195324, 195375, 195633, 195631, 195274, 195319, 195571, 195572, 191884, 194342, 195527, 195265, 195254, 195467, 195305, 195555, 195560, 195558, 195561, 195309, 195557, 195562, 195554, 195142, 194279, 195457, 195458, 200293, 200292, 200294, 200295, 195459, 195585, 196417, 195338, 195155, 195326, 195398, 195412, 195413, 195414, 195415, 195416, 195417, 195418, 195411, 195410, 195149, 195342, 195341, 195340, 195392, 195391, 194092, 194963, 195218, 195682, 190549, 195352, 195429, 195353, 195629, 195624, 195625, 195626, 195628, 195627, 195559, 195145, 195219, 194577, 194576, 194395, 195150, 195152, 195399, 195037, 192380, 195586, 195556, 195343, 195397, 194152, 195157, 194313, 194314, 194327, 194752, 194822, 195635, 195695, 196391, 196392, 196485, 196871, 196872, 197341, 197342, 197343, 200296, 200297, 201299, 201300, 201301, 201384, 201385, 201563, 201583, 201592, 201593, 201596, 201599, 201600, 201742, 201747, 201756, 201759, 201760, 201761, 201762, 201763, 201764, 201765, 201766, 201767, 201771, 201772, 201773, 201774, 201776, 201777, 201811, 201812, 201825, 201848, 201849, 201850, 201855, 201857, 201885, 201892, 201893, 201894, 201895, 201896, 201897, 201898, 201910, 201911, 201934, 201935, 201936, 201960, 201961, 201969, 201976, 202079, 202100, 202101, 202178, 202184, 202209, 202210, 202211, 202218, 202220, 202236, 202239, 202242, 202243, 202244, 202245, 202278, 202302, 202315, 202316, 202317, 202318, 202337, 202347, 202348, 202349, 202350, 202391, 202392, 202393, 202394, 196840, 201369, 201370, 201371, 201372, 201373, 201374, 201375, 201376, 201377, 201378, 201379, 201380, 201381, 201382, 201383, 201584, 201612, 201613, 201614, 201615, 201616, 201617, 201618, 201741, 201746, 201755, 201814, 201815, 201816, 201817, 201818, 201846, 201847, 201880, 201886, 201887, 201888, 201889, 201919, 201920, 202102, 202103, 202181, 202182, 202183, 202223, 202234, 202235, 202240, 202246, 202277, 201295, 201296, 201297, 201298, 201931, 201932, 201933, 201598, 201709, 202168, 202336, 187366, 187869, 188114, 188115, 188116, 202357, 202081, 202265, 202266, 201580, 194957, 181057, 201581, 201710, 201834, 201858, 201868, 201869, 201873, 201874, 202443, 202616, 202106, 195528, 201959, 202339, 194423, 194424, 195011, 202082, 202862, 202078, 202141, 202142, 202143, 202144, 202161, 202188, 202189, 202190, 202437, 202238, 201722, 202396, 202177, 202338, 202436, 202438, 195394, 187892, 187922, 201875, 202241, 202340, 194331, 187939, 188129, 195000, 187933, 187974, 188188, 188192, 194038, 194039, 202794, 203003, 203004, 203005, 203006, 203007, 203034, 203035, 203036, 203037, 203079, 203080, 203624, 203959, 203960, 203961, 203962, 204051, 204052, 204053, 204054, 202795, 202796, 202179, 194498, 202564, 202713, 202834, 202835, 202839, 202879, 202880, 202881, 202882, 202883, 202885, 202886, 202888, 202889, 202890, 202891, 202892, 202893, 194958, 188470, 190214, 194501, 202845, 202924, 202925, 202926, 202932, 202933, 202898, 186850, 186851, 186852, 202733, 202760, 202767, 202872, 202922, 186763, 180211, 180213, 202931);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_01_world.sql
new file mode 100644
index 00000000000..c524b8087be
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_01_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|4194304 WHERE entry IN (26861,30788);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_02_world.sql
new file mode 100644
index 00000000000..017cbd0d7ef
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_02_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `gameobject_template` SET `faction`=1375, `flags`=32 WHERE `entry` IN (184322, 184324, 184325, 184326, 184327, 184328, 184329);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_03_world.sql
new file mode 100644
index 00000000000..89e40a643d4
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_03_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|2048 WHERE entry IN (26861,30788);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_16_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_16_00_world.sql
new file mode 100644
index 00000000000..1e0da0ad8d0
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_16_00_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|2048|8192 WHERE entry IN (26861,30788,29304,31370);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_17_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_17_00_world.sql
new file mode 100644
index 00000000000..db9da587517
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_17_00_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `game_tele` SET `name`='TheRoyalExchange' WHERE `name`='TheRoyalExhange';
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_20_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_20_00_world.sql
new file mode 100644
index 00000000000..c71610a528b
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_20_00_world.sql
@@ -0,0 +1,3 @@
+-- remove existing entries
+DELETE FROM `spelldifficulty_dbc` WHERE id IN (28308,41926);
+INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`) VALUES (28308,28308,59192);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_00_world.sql
new file mode 100644
index 00000000000..03c7db23de9
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_00_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `creature` WHERE `guid`=84939 AND `id`=22023;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_01_world.sql
new file mode 100644
index 00000000000..a7bcbb124dc
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_01_world.sql
@@ -0,0 +1,4 @@
+--
+DELETE FROM `smart_scripts` WHERE `entryorguid`=3518 AND `source_type`=0;
+UPDATE `creature_template` SET `AIName`='' WHERE `entry`=3518;
+UPDATE `waypoint_scripts` SET `dataint`=1102 WHERE `id`=273 ;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_02_world.sql
new file mode 100644
index 00000000000..e79dddf7691
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_02_world.sql
@@ -0,0 +1,32 @@
+--
+-- Defias Conjurer SAI "Comments and event_flags fix"
+SET @ENTRY := 619;
+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,"Defias Conjurer - Out of Combat - Cast 'Frost Armor'"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,2400,3800,11,9053,64,0,0,0,0,2,0,0,0,0,0,0,0,"Defias Conjurer - Combat CMC - Cast 'Fireball'"),
+(@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,"Defias Conjurer - On Health - Flee for assist (No Repeat)");
+
+-- Crushridge Warmonger SAI "Comments and event_flags fix"
+SET @ENTRY := 2287;
+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,10,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Crushridge Warmonger - On Aggro - Say Line 0 (No Repeat)"),
+(@ENTRY,0,1,0,2,0,100,1,0,50,0,0,39,15,1,0,0,0,0,1,0,0,0,0,0,0,0,"Crushridge Warmonger - Between 0-50% Health - Call For Help (No Repeat)"),
+(@ENTRY,0,2,3,74,0,100,1,0,15,0,0,11,8269,1,0,0,0,0,9,0,0,0,0,0,0,0,"Crushridge Warmonger - On Friendly Between 0-15% Health - Cast 'Frenzy' (No Repeat)"),
+(@ENTRY,0,3,0,61,0,100,1,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Crushridge Warmonger - On Friendly Between 0-15% Health - Say Line 1 (No Repeat)");
+
+-- Dustbelcher Lord SAI "Line numbering and event_flags fix"
+SET @ENTRY := 2719;
+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,7800,12100,11200,30000,11,9128,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dustbelcher Lord - In Combat - Cast 'Battle Shout'"),
+(@ENTRY,0,1,0,0,0,100,0,6600,18700,30800,32400,11,13730,1,0,0,0,0,1,0,0,0,0,0,0,0,"Dustbelcher Lord - In Combat - Cast 'Demoralizing Shout'"),
+(@ENTRY,0,2,0,2,0,100,1,0,50,0,0,39,15,1,0,0,0,0,1,0,0,0,0,0,0,0,"Dustbelcher Lord - Between 0-50% Health - Call For Help (No Repeat)");
+
+-- Duggan Wildhammer & Sentinel Leader & Dal Bloodclaw SAI "event_flags fix"
+UPDATE `smart_scripts` SET `event_flags`=1 WHERE `entryorguid` IN (10817,17210) AND `source_type`=0 AND `id`=2;
+UPDATE `smart_scripts` SET `event_flags`=1 WHERE `entryorguid` IN (3987) AND `source_type`=0 AND `id`=1;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_03_world.sql
new file mode 100644
index 00000000000..aea8aaf43a1
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_03_world.sql
@@ -0,0 +1,3 @@
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 29320;
+INSERT INTO `spell_linked_spell` VALUES (29320, 29321, 0, 'Charge-Fear');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_04_world.sql
new file mode 100644
index 00000000000..40792506d57
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_04_world.sql
@@ -0,0 +1,246 @@
+--
+UPDATE `gossip_menu_option` SET `action_menu_id`=9753 WHERE `menu_id`=9754;
+
+-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT'
+SET @NPC := 127753;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2926.023,`position_y`=-3200.403,`position_z`=273.3712 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,25278,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,2926.023,-3200.403,273.3712,0,0,0,0,100,0),
+(@PATH,2,2931.457,-3188.328,273.3712,0,0,0,0,100,0),
+(@PATH,3,2925.778,-3167.298,273.787,0,0,0,0,100,0),
+(@PATH,4,2907.542,-3166.655,273.787,0,0,0,0,100,0),
+(@PATH,5,2873.219,-3165.419,273.787,0,0,0,0,100,0),
+(@PATH,6,2861.632,-3165.088,273.787,0,0,0,0,100,0),
+(@PATH,7,2860.526,-3185.717,273.787,0,0,0,0,100,0),
+(@PATH,8,2860.435,-3203.401,273.787,0,0,0,0,100,0),
+(@PATH,9,2875.204,-3203.906,273.4088,0,0,0,0,100,0),
+(@PATH,10,2892.834,-3204.38,273.3965,0,0,0,0,100,0),
+(@PATH,11,2911.993,-3204.611,273.3846,0,0,0,0,100,0);
+
+DELETE FROM `creature_template_addon` WHERE `entry` =16400;
+
+-- Pathing for Toxic Tunnel Entry: 16400 'TDB FORMAT'
+SET @NPC := 127631;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3223.018,`position_y`=-3218.725,`position_z`=316.3705 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, '28370');
+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,3223.018,-3218.725,316.3705,0,0,0,0,100,0),
+(@PATH,2,3230.179,-3211.59,316.5933,0,0,0,0,100,0);
+
+-- Pathing for Toxic Tunnel Entry: 16400 'TDB FORMAT'
+SET @NPC := 127632;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3208.167,`position_y`=-3234.595,`position_z`=315.4565 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, '28370');
+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,3208.167,-3234.595,315.4565,0,0,0,0,100,0),
+(@PATH,2,3200.392,-3242.829,315.141,0,0,0,0,100,0);
+
+-- Pathing for Toxic Tunnel Entry: 16400 'TDB FORMAT'
+SET @NPC := 127633;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3178.613,`position_y`=-3263.671,`position_z`=316.4281 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, '28370');
+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,3178.613,-3263.671,316.4281,0,0,0,0,100,0),
+(@PATH,2,3174.119,-3267.95,316.7845,0,0,0,0,100,0);
+
+-- Pathing for Toxic Tunnel Entry: 16400 'TDB FORMAT'
+SET @NPC := 127634;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3217.316,`position_y`=-3224.753,`position_z`=316.0583 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, '28370');
+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,3217.316,-3224.753,316.0583,0,0,0,0,100,0),
+(@PATH,2,3209.847,-3232.841,315.5579,0,0,0,0,100,0);
+
+-- Pathing for Toxic Tunnel Entry: 16400 'TDB FORMAT'
+SET @NPC := 127635;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3190.628,`position_y`=-3252.565,`position_z`=315.5675 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, '28370');
+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,3190.628,-3252.565,315.5675,0,0,0,0,100,0),
+(@PATH,2,3196.852,-3246.524,315.0298,0,0,0,0,100,0);
+
+-- Pathing for Toxic Tunnel Entry: 16400 'TDB FORMAT'
+SET @NPC := 127636;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3244.748,`position_y`=-3198.743,`position_z`=317.3646 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, '28370');
+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,3244.748,-3198.743,317.3646,0,0,0,0,100,0),
+(@PATH,2,3236.25,-3205.753,316.6993,0,0,0,0,100,0);
+
+-- Pathing for Toxic Tunnel Entry: 16400 'TDB FORMAT'
+SET @NPC := 127637;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3246.763,`position_y`=-3193.856,`position_z`=317.3302 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, '28370');
+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,3246.763,-3193.856,317.3302,0,0,0,0,100,0),
+(@PATH,2,3252.532,-3188.566,318.1087,0,0,0,0,100,0);
+
+-- Pathing for Stitched Colossus Entry: 30071 'TDB FORMAT'
+SET @NPC := 128058;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3454.427,`position_y`=-3187.954,`position_z`=294.6607 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,3454.427,-3187.954,294.6607,0,0,0,0,100,0),
+(@PATH,2,3453.837,-3215.978,284.005,0,0,0,0,100,0),
+(@PATH,3,3453.848,-3237.722,272.597,0,0,0,0,100,0),
+(@PATH,4,3453.705,-3262.583,267.5943,0,0,0,0,100,0),
+(@PATH,5,3453.507,-3285.881,267.5923,0,0,0,0,100,0),
+(@PATH,6,3450.008,-3299.009,267.593,0,0,0,0,100,0),
+(@PATH,7,3434.539,-3314.597,267.592,0,0,0,0,100,0),
+(@PATH,8,3423.135,-3338.302,267.593,0,0,0,0,100,0),
+(@PATH,9,3430.531,-3358.816,267.592,0,0,0,0,100,0),
+(@PATH,10,3450.598,-3369.066,267.5927,0,0,0,0,100,0),
+(@PATH,11,3472.296,-3362.288,267.5991,0,0,0,0,100,0),
+(@PATH,12,3483.6,-3341.974,267.5938,0,0,0,0,100,0),
+(@PATH,13,3477.419,-3326.692,267.5933,0,0,0,0,100,0),
+(@PATH,14,3466.747,-3312.542,267.5925,0,0,0,0,100,0),
+(@PATH,15,3455.716,-3299.394,267.5929,0,0,0,0,100,0),
+(@PATH,16,3453.988,-3285.853,267.5922,0,0,0,0,100,0),
+(@PATH,17,3454.239,-3262.38,267.5943,0,0,0,0,100,0),
+(@PATH,18,3454.453,-3237.651,272.6341,0,0,0,0,100,0),
+(@PATH,19,3454.135,-3215.837,284.079,0,0,0,0,100,0);
+
+-- Pathing for Stitched Colossus Entry: 30071 'TDB FORMAT'
+SET @NPC := 128057;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3331.301,`position_y`=-3008.488,`position_z`=294.6606 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,3331.301,-3008.488,294.6606,0,0,0,0,100,0),
+(@PATH,2,3352.705,-3027.659,294.6606,0,0,0,0,100,0),
+(@PATH,3,3378.292,-3052.875,294.6657,0,0,0,0,100,0),
+(@PATH,4,3400.806,-3075.215,294.6628,0,0,0,0,100,0),
+(@PATH,5,3420.535,-3095.16,294.6607,0,0,0,0,100,0),
+(@PATH,6,3423.608,-3104.254,294.6607,0,0,0,0,100,0),
+(@PATH,7,3424.381,-3122.999,294.6599,0,0,0,0,100,0),
+(@PATH,8,3428.679,-3145.677,294.659,0,0,0,0,100,0),
+(@PATH,9,3444.718,-3157.384,294.6608,0,0,0,0,100,0),
+(@PATH,10,3466.77,-3155.3,294.6603,0,0,0,0,100,0),
+(@PATH,11,3481.494,-3139.173,294.6597,0,0,0,0,100,0),
+(@PATH,12,3480.309,-3114.887,294.6596,0,0,0,0,100,0),
+(@PATH,13,3467.193,-3102.655,294.6595,0,0,0,0,100,0),
+(@PATH,14,3448.526,-3099.575,294.6612,0,0,0,0,100,0),
+(@PATH,15,3428.409,-3099.175,294.6607,0,0,0,0,100,0),
+(@PATH,16,3420.901,-3094.735,294.6607,0,0,0,0,100,0),
+(@PATH,17,3401.064,-3074.813,294.6629,0,0,0,0,100,0),
+(@PATH,18,3378.616,-3052.372,294.6658,0,0,0,0,100,0),
+(@PATH,19,3352.98,-3027.292,294.6606,0,0,0,0,100,0),
+(@PATH,20,3331.301,-3008.488,294.6606,0,0,0,0,100,0),
+(@PATH,21,3311.187,-2990.615,294.6598,0,0,0,0,100,0),
+(@PATH,22,3311.187,-2990.615,294.6598,2.505866,0,0,0,100,0),
+(@PATH,23,3311.187,-2990.615,294.6598,2.251878,0,0,0,100,0),
+(@PATH,24,3311.187,-2990.615,294.6598,3.254467,0,0,0,100,0),
+(@PATH,25,3311.187,-2990.615,294.6598,5.113917,0,0,0,100,0);
+
+-- Pathing for Stitched Colossus Entry: 30071 'TDB FORMAT'
+SET @NPC := 128056;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3425.885,`position_y`=-3100.784,`position_z`=294.6607 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,3425.885,-3100.784,294.6607,0,0,0,0,100,0),
+(@PATH,2,3400.279,-3075.093,294.6628,0,0,0,0,100,0),
+(@PATH,3,3373.177,-3047.739,294.6664,0,0,0,0,100,0),
+(@PATH,4,3344.838,-3019.543,294.6606,0,0,0,0,100,0),
+(@PATH,5,3341.914,-3012.742,294.6606,0,0,0,0,100,0),
+(@PATH,6,3339.663,-2995.398,294.6601,0,0,0,0,100,0),
+(@PATH,7,3337.08,-2977.52,294.6604,0,0,0,0,100,0),
+(@PATH,8,3323.939,-2963.499,294.6603,0,0,0,0,100,0),
+(@PATH,9,3299.76,-2962.284,294.6606,0,0,0,0,100,0),
+(@PATH,10,3286.439,-2972.35,294.6593,0,0,0,0,100,0),
+(@PATH,11,3280.707,-2995.567,294.6606,0,0,0,0,100,0),
+(@PATH,12,3288.473,-3011.645,294.6597,0,0,0,0,100,0),
+(@PATH,13,3307.809,-3020.176,294.659,0,0,0,0,100,0),
+(@PATH,14,3325.226,-3018.351,294.6606,0,0,0,0,100,0),
+(@PATH,15,3338.513,-3016.632,294.6606,0,0,0,0,100,0),
+(@PATH,16,3344.342,-3020.255,294.6606,0,0,0,0,100,0),
+(@PATH,17,3372.666,-3048.441,294.6662,0,0,0,0,100,0),
+(@PATH,18,3399.818,-3075.62,294.6627,0,0,0,0,100,0),
+(@PATH,19,3425.406,-3101.135,294.6607,0,0,0,0,100,0),
+(@PATH,20,3451.888,-3127.903,294.6607,0,0,0,0,100,0),
+(@PATH,21,3451.888,-3127.903,294.6607,1.541391,0,0,0,100,0),
+(@PATH,22,3456.634,-3133.219,294.6606,0,0,0,0,100,0),
+(@PATH,23,3455.112,-3131.514,294.6606,6.06443,0,0,0,100,0),
+(@PATH,24,3455.112,-3131.514,294.6606,4.858006,0,0,0,100,0),
+(@PATH,25,3455.112,-3131.514,294.6606,2.345938,0,0,0,100,0);
+
+-- Pathing for Stitched Colossus Entry: 30071 'TDB FORMAT'
+SET @NPC := 128054;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3250.639,`position_y`=-2986.463,`position_z`=294.6606 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,3250.639,-2986.463,294.6606,0,0,0,0,100,0),
+(@PATH,2,3218.217,-2985.765,281.2667,0,0,0,0,100,0),
+(@PATH,3,3198.772,-2985.637,271.0636,0,0,0,0,100,0),
+(@PATH,4,3178.061,-2985.433,267.5943,0,0,0,0,100,0),
+(@PATH,5,3159.365,-2985.343,267.5929,0,0,0,0,100,0),
+(@PATH,6,3139.7,-2981.853,267.5929,0,0,0,0,100,0),
+(@PATH,7,3126.553,-2971.708,267.5919,0,0,0,0,100,0),
+(@PATH,8,3114.558,-2959.215,267.5926,0,0,0,0,100,0),
+(@PATH,9,3095.302,-2956.31,267.5921,0,0,0,0,100,0),
+(@PATH,10,3078.464,-2964.795,267.5918,0,0,0,0,100,0),
+(@PATH,11,3070.598,-2982.696,267.5929,0,0,0,0,100,0),
+(@PATH,12,3076.846,-3004.052,267.592,0,0,0,0,100,0),
+(@PATH,13,3096.726,-3015.381,267.5934,0,0,0,0,100,0),
+(@PATH,14,3115.124,-3011.505,267.5921,0,0,0,0,100,0),
+(@PATH,15,3127.605,-2998.091,267.5924,0,0,0,0,100,0),
+(@PATH,16,3139.447,-2989.035,267.5929,0,0,0,0,100,0),
+(@PATH,17,3159.26,-2985.907,267.5929,0,0,0,0,100,0),
+(@PATH,18,3178.106,-2985.838,267.5943,0,0,0,0,100,0),
+(@PATH,19,3198.909,-2986.179,271.1352,0,0,0,0,100,0),
+(@PATH,20,3218.02,-2986.236,281.1633,0,0,0,0,100,0);
+
+-- Pathing for Shade of Naxxramas Entry: 16164 'TDB FORMAT'
+SET @NPC := 127755;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2915.294,`position_y`=-3343.234,`position_z`=298.1457 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,2915.294,-3343.234,298.1457,0,0,0,0,100,0),
+(@PATH,2,2898.639,-3327.008,298.1457,0,0,0,0,100,0),
+(@PATH,3,2915.294,-3343.234,298.1457,0,0,0,0,100,0),
+(@PATH,4,2898.639,-3327.008,298.1457,0,0,0,0,100,0),
+(@PATH,5,2915.294,-3343.234,298.1457,0,0,0,0,100,0),
+(@PATH,6,2898.639,-3327.008,298.1457,0,0,0,0,100,0);
+
+-- Sludge Belcher SAI On Reset - Cast Disease Cloud was set to OOC
+UPDATE `smart_scripts` SET `event_type`=25 WHERE `entryorguid`=16029 AND `source_type`=0 AND `id`=0;
+-- These npc's should not be moving
+UPDATE creature SET `spawndist`=0, `MovementType`=0 WHERE `guid` IN (128070,128071,128072,128073,128074,128067,130957);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_05_world.sql
new file mode 100644
index 00000000000..eccb800e8ce
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_05_world.sql
@@ -0,0 +1,41 @@
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`in(23392,23257,23334,23208,23335,22982);
+
+
+DELETE FROM `creature_text` WHERE `entry` in(23392,23257,23334,23208,23335,22982);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(23392, 0, 0, '$n is an officer and a $g gentleman : gentlewoman;.', 12, 0, 100, 0, 0, 0, 21940, 0, 'Skyguard Stable Master <Stable Master>'),
+(23257, 0, 0, 'Look who''s here. It''s $n, our top gun.', 12, 0, 100, 0, 0, 0, 21885, 0, 'Skyguard Windcharger'),
+(23257, 0, 1, '$n, terror of the skies, how are you doing?', 12, 0, 100, 0, 0, 0, 21893, 0, 'Skyguard Windcharger'),
+(23257, 0, 2, 'A-TEN-HUT, officer $n on the deck!', 12, 0, 100, 0, 0, 0, 21891, 0, 'Skyguard Windcharger'),
+(23257, 0, 3, '$G Mister : Lady; $n, what an unexpected pleasure, $g sir : ma''am;.', 12, 0, 100, 0, 0, 0, 21890, 0, 'Skyguard Windcharger'),
+(23257, 0, 4, 'Heh, the skies aren''t so friendly with $n flying them!', 12, 0, 100, 0, 0, 0, 21895, 0, 'Skyguard Windcharger'),
+(23257, 0, 5, '$n, you and I should race sometime.', 12, 0, 100, 0, 0, 0, 21937, 0, 'Skyguard Windcharger'),
+(23257, 0, 6, '$n, how''s your mount holding up? Pretty rough up there these days?', 12, 0, 100, 0, 0, 0, 21897, 0, 'Skyguard Windcharger'),
+(23334, 0, 0, 'Maybe one day $n will teach us a few of $g his : her; tricks?', 12, 0, 100, 0, 0, 0, 21942, 0, 'Sky Commander Keller'),
+(23208, 0, 0, 'Maybe one day $n will teach us a few of $g his : her; tricks?', 12, 0, 100, 0, 0, 0, 21942, 0, 'Skyguard Pyrotechnician'),
+(23335, 0, 0, 'You''re a peach! I''ll make sure that the ray is properly cared for.', 12, 0, 100, 0, 0, 0, 21371, 0, 'Skyguard Khatie'),
+(23335, 0, 1, 'Wow! Thanks for bringing it all the way back here. You didn''t have to do that.', 12, 0, 100, 0, 0, 0, 21370, 0, 'Skyguard Khatie'),
+(22982, 0, 0, '$n, do you feel the need -- the need for speed?', 12, 0, 100, 0, 0, 0, 21886, 0, 'Skyguard Navigator'),
+(22982, 0, 1, '$n, how''s your mount holding up? Pretty rough up there these days?', 12, 0, 100, 0, 0, 0, 21897, 0, 'Skyguard Navigator'),
+(22982, 0, 3, 'Heh, the skies aren''t so friendly with $n flying them!', 12, 0, 100, 0, 0, 0, 21895, 0, 'Skyguard Navigator'),
+(22982, 0, 4, '$n, terror of the skies, how are you doing?', 12, 0, 100, 0, 0, 0, 21893, 0, 'Skyguard Navigator');
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN(23392,23257,23334,23208,23335,22982) 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
+(23392, 0, 0, 0, 10, 0, 100, 0, 1, 10, 300000, 300000, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Skyguard Stable Master <Stable Master> - OOC LOS - Say'),
+(23257, 0, 0, 0, 10, 0, 100, 0, 1, 10, 150000, 150000, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Skyguard Stable Master - OOC LOS - Say'),
+(23334, 0, 0, 0, 10, 0, 100, 0, 1, 10, 300000, 300000, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Sky Commander Keller - OOC LOS - Say'),
+(23208, 0, 0, 0, 10, 0, 100, 0, 1, 10, 300000, 300000, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Skyguard Pyrotechnician - OOC LOS - Say'),
+(23335, 0, 0, 0, 10, 0, 100, 0, 1, 10, 300000, 300000, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Skyguard Khatie - OOC LOS - Say'),
+(22982, 0, 0, 0, 10, 0, 100, 0, 1, 10, 150000, 150000, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Skyguard Navigator - OOC LOS - Say');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` IN(23392,23257,23334,23208,23335,22982);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(22, 1, 23392, 0, 0, 5, 0, 1031, 128, 0, 0, 0, 0, '', 'requires shatari skyguard exhalted'),
+(22, 1, 23257, 0, 0, 5, 0, 1031, 128, 0, 0, 0, 0, '', 'requires shatari skyguard exhalted'),
+(22, 1, 23334, 0, 0, 5, 0, 1031, 128, 0, 0, 0, 0, '', 'requires shatari skyguard exhalted'),
+(22, 1, 23208, 0, 0, 5, 0, 1031, 128, 0, 0, 0, 0, '', 'requires shatari skyguard exhalted'),
+(22, 1, 23335, 0, 0, 28, 0, 11023, 0, 0, 0, 0, 0, '', 'requires Bomb Them Again complete in quest log'),
+(22, 1, 23335, 0, 1, 28, 0, 11010, 0, 0, 0, 0, 0, '', 'requires Bombing run complete in quest log'),
+(22, 1, 23335, 0, 2, 28, 0, 11102, 0, 0, 0, 0, 0, '', 'requires Bombing run complete in quest log'),
+(22, 1, 22982, 0, 0, 5, 0, 1031, 128, 0, 0, 0, 0, '', 'requires shatari skyguard exhalted');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_06_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_06_world.sql
new file mode 100644
index 00000000000..4e0ee5b2222
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_06_world.sql
@@ -0,0 +1,18 @@
+--
+-- North Sea Kraken SAI
+SET @ENTRY := 34925;
+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,40,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 Spear - ActionList'),
+(@ENTRY*100,9,0,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 Submerge'),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,18,33554432,0,0,0,0,0,1,0,0,0,0,0,0,0,'North Sea Kraken - actionList - Add unitflag not selectable'),
+(@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, 10000, 10000, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Northsea Kraken - actionList - Turn Visible'),
+(@ENTRY*100,9,4,0,0,0,100,0,0,0,0,0,19,33554432,0,0,0,0,0,1,0,0,0,0,0,0,0,'North Sea Kraken - actionList - Remove unitflag not selectable'),
+(@ENTRY, 0, 2, 3, 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, 3, 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, 4, 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, 5, 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 - Cast Whirl'),
+(@ENTRY,0,6,0,8,0,100,0,66588,0,0,0,11,66717,2,0,0,0,0,7,0,0,0,0,0,0,0,'North Sea Kraken - On spell Hit - Cast Quest credit');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_07_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_07_world.sql
new file mode 100644
index 00000000000..ce126d38081
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_07_world.sql
@@ -0,0 +1,6 @@
+--
+DELETE FROM `smart_scripts` WHERE `entryorguid`=23899 AND `source_type`=0 AND `id` IN (8,9);
+UPDATE `smart_scripts` SET `link`=9 WHERE `entryorguid`=23899 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
+(23899,0,8,0,54,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tethyr - On Just Summoned - Set Active ON"),
+(23899,0,9,0,61,0,100,0,0,0,0,0,48,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tethyr - On wp reached - Set Active OFF");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_08_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_08_world.sql
new file mode 100644
index 00000000000..d56b962ad8f
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_08_world.sql
@@ -0,0 +1,10 @@
+-- Update formation points
+UPDATE `creature_formations` SET `point_1`=1, `point_2`=19 WHERE `leaderGUID`=127045 AND `memberGUID`=127058;
+UPDATE `creature_formations` SET `point_1`=4, `point_2`=8 WHERE `leaderGUID`=201706 AND `memberGUID`=201764;
+UPDATE `creature_formations` SET `angle`=270,`point_1`=4, `point_2`=7 WHERE `leaderGUID`=201713 AND `memberGUID`=201735;
+UPDATE `creature_formations` SET `angle`=260, `point_1`=4, `point_2`=8 WHERE `leaderGUID`=202628 AND `memberGUID` IN (202680);
+UPDATE `creature_formations` SET `angle`=100, `point_1`=4, `point_2`=8 WHERE `leaderGUID`=202628 AND `memberGUID` IN (202682);
+UPDATE `creature_formations` SET `point_1`=2, `point_2`=7 WHERE `leaderGUID`=202629 AND `memberGUID` IN (202681,202684);
+UPDATE `creature_formations` SET `point_1`=1, `point_2`=10 WHERE `leaderGUID`=202692 AND `memberGUID` IN (202695,202696);
+UPDATE `creature_formations` SET `point_1`=2, `point_2`=7 WHERE `leaderGUID`=202814 AND `memberGUID` IN (202803,202804);
+UPDATE `creature_formations` SET `point_1`=3, `point_2`=6 WHERE `leaderGUID`=202815 AND `memberGUID` IN (202805,202806);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_09_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_09_world.sql
new file mode 100644
index 00000000000..ea4914a6a53
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_09_world.sql
@@ -0,0 +1,95 @@
+--
+UPDATE `creature_template` SET `npcflag`=4194305 WHERE `entry`=9988;
+UPDATE `conditions` SET `ConditionValue1` =4 WHERE `SourceGroup`=9576 AND `SourceTypeOrReferenceId`=15;
+UPDATE `creature_template` SET `npcflag`=4194305 WHERE `npcflag`=4194304 ;
+UPDATE `creature_template` SET `npcflag`=4194307 WHERE `npcflag`=4194306 ;
+UPDATE `creature_template` SET `gossip_menu_id`=9821 WHERE `entry` IN (9976,9978,9979,9982,9985,9986,10048,10049,10051,10052,10057,10058,11105,13616,15131,16094,16586,16656,16824,17896,18984,19018,21336,21517,22469,9896,19325,22551,22577,23392,24905,24974,25037,25519,29251,30155,31991,32105,35290);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14) AND `SourceGroup`=9821;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES
+(14, 9821, 13557, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is a hunter', 0),
+(14, 9821, 13584, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is not a hunter', 1);
+
+UPDATE `gossip_menu_option` SET `option_id`=1, `npc_option_npcflag`=1, `action_menu_id`=9820 WHERE `menu_id`=9821 AND `id`=1;
+
+DELETE FROM `gossip_menu` WHERE `entry`=11971 AND `text_id`=16788;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (11971,16788);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14) AND `SourceGroup`=11971;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES
+(14, 11971, 16788, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is a hunter', 0),
+(14, 11971, 16789, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is not a hunter', 1);
+
+DELETE FROM `npc_text` WHERE id=16788;
+INSERT INTO `npc_text` (`ID`, `text0_0`, `BroadcastTextID0`, `Probability0`) VALUES
+(16788, "Hey der, mon.$B$BDid ya want ta be stablin' yer pets, or were ya lookin' for a lost companion?", 45395, 1);
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id` = 11971;
+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
+(11971,0,0,'I''d like to stable my pet here.',30181,14,4194304,0,0,0,0,'',0),
+(11971,1,1,'I''m looking for a lost companion.',56613,1,1,9820,0,0,0,'',0);
+
+DELETE FROM `gossip_menu` WHERE `entry`=9864 AND `text_id`=13662;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (9864,13662);
+
+UPDATE `npc_text` SET `text0_0`="", `text0_1`="Well met, Battle-Sister. I can help stable your pets or assist you in recovering lost companions.", `BroadcastTextID0`=30667 WHERE `ID`=13662;
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id` = 9864;
+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
+(9864,0,0,'I''d like to stable my pet here.',30181,14,4194304,0,0,0,0,'',0),
+(9864,1,1,'I''m looking for a lost companion.',56613,1,1,9820,0,0,0,'',0);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14) AND `SourceGroup`=9864;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES
+(14, 9864, 13662, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is a hunter', 0),
+(14, 9864, 13661, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is not a hunter', 1);
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id` = 9212 AND `id`=1;
+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
+(9212,1,0,'I''d like to stable my pet here.',30181,14,4194304,0,0,0,0,'',0);
+
+DELETE FROM `gossip_menu` WHERE `entry`=9820 AND `text_id`=13584;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (9820,13584);
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id` = 9820;
+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
+(9820,0,0,'I''ve lost Miniwing.',30182,1,1,0,0,0,0,'',0),
+(9820,1,0,'I''ve lost my Jubling.',30183,1,1,0,0,0,0,'',0),
+(9820,2,0,'I''ve lost my sprite darter hatchling.',30192,1,1,0,0,0,0,'',0),
+(9820,3,0,'I''ve lost my worg pup.',30196,1,1,0,0,0,0,'',0),
+(9820,4,0,'I''ve lost my Smolderweb hatchling.',30197,1,1,0,0,0,0,'',0),
+(9820,5,0,'I''ve lost my Prairie Chicken.',30217,1,1,0,0,0,0,'',0),
+(9820,6,0,'I''ve lost my wolpertinger.',30224,1,1,0,0,0,0,'',0);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup`=9820;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES
+(15, 9820, 0, 0, 8, 10898, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0),
+(15, 9820, 0, 0, 2, 31760, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1),
+(15, 9820, 0, 0, 25, 39181, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1),
+(15, 9820, 1, 0, 8, 7946, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0),
+(15, 9820, 1, 0, 2, 19450, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1),
+(15, 9820, 1, 0, 2, 19462, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1),
+(15, 9820, 1, 0, 25, 23811, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1),
+(15, 9820, 2, 0, 8, 4298, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0),
+(15, 9820, 2, 0, 2, 11474, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1),
+(15, 9820, 2, 0, 25, 15067, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1),
+(15, 9820, 3, 0, 8, 4729, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0),
+(15, 9820, 3, 0, 2, 12264, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1),
+(15, 9820, 3, 0, 25, 15999, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1),
+(15, 9820, 4, 0, 8, 4862, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0),
+(15, 9820, 4, 0, 2, 12529, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1),
+(15, 9820, 4, 0, 25, 16450, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1),
+(15, 9820, 5, 0, 8, 3861, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0),
+(15, 9820, 5, 0, 2, 11110, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1),
+(15, 9820, 5, 0, 25, 13548, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1),
+(15, 9820, 5, 1, 8, 13840, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0),
+(15, 9820, 5, 1, 2, 11110, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1),
+(15, 9820, 5, 1, 25, 13548, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1),
+(15, 9820, 6, 0, 8, 11117, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0),
+(15, 9820, 6, 0, 2, 32233, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1),
+(15, 9820, 6, 0, 25, 39709, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1),
+(15, 9820, 6, 1, 8, 11431, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0),
+(15, 9820, 6, 1, 2, 32233, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1),
+(15, 9820, 6, 1, 25, 39709, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1);
+
+UPDATE `creature_template` SET `ScriptName`="npc_stable_master" WHERE `entry` IN (10052, 9978, 33854, 16764, 9986, 9987, 9989, 10045, 10046, 10047, 10048, 10049, 10050, 10051, 10053, 10054, 10055, 10056, 10057, 10058, 10059, 10060, 10061, 10062, 10063, 10085, 11069, 11104, 11105, 11117, 11119, 13616, 9983, 9982, 15131, 9981, 16094, 16185, 9985, 16656, 9980, 16824, 17485, 17666, 17896, 18244, 18250, 18984, 19018, 9979, 19368, 19476, 21336, 21517, 21518, 22468, 22469, 9896, 19325, 23392, 24905, 24974, 25037, 27010, 27385, 24066, 24067, 24154, 24350, 25519, 9977, 16586, 9976, 26597, 26721, 9984, 6749, 27056, 27065, 27068, 27150, 27183, 27194, 27948, 28057, 28690, 28790, 29250, 29251, 29658, 29740, 29906, 29948, 29959, 29967, 35344, 30039, 30155, 30304, 35290, 35291, 30008, 9988);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_10_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_10_world.sql
new file mode 100644
index 00000000000..e7938cdf352
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_10_world.sql
@@ -0,0 +1,14 @@
+-- Hall of Stone formation fixes
+UPDATE `creature_formations` SET `angle`=310, `point_1`=1, `point_2`=3 WHERE `leaderGUID`=126709 AND `memberGUID`=126692;
+UPDATE `creature_formations` SET `angle`=50, `point_1`=1, `point_2`=3 WHERE `leaderGUID`=126709 AND `memberGUID`=126693;
+UPDATE `creature_formations` SET `angle`=310, `point_1`=3, `point_2`=7 WHERE `leaderGUID`=126687 AND `memberGUID`=126705;
+UPDATE `creature_formations` SET `angle`=50, `point_1`=3, `point_2`=7 WHERE `leaderGUID`=126687 AND `memberGUID`=126700;
+UPDATE `creature_formations` SET `angle`=310, `point_1`=2, `point_2`=6 WHERE `leaderGUID`=126690 AND `memberGUID`=126707;
+UPDATE `creature_formations` SET `angle`=50, `point_1`=2, `point_2`=6 WHERE `leaderGUID`=126690 AND `memberGUID`=126701;
+UPDATE `creature_formations` SET `angle`=310, `point_1`=4, `point_2`=8 WHERE `leaderGUID`=126695 AND `memberGUID`=126713;
+UPDATE `creature_formations` SET `angle`=50, `point_1`=4, `point_2`=8 WHERE `leaderGUID`=126695 AND `memberGUID`=126703;
+UPDATE `creature_formations` SET `angle`=50, `point_1`=4, `point_2`=8 WHERE `leaderGUID`=126696 AND `memberGUID`=126714;
+UPDATE `creature_formations` SET `angle`=310, `point_1`=4, `point_2`=8 WHERE `leaderGUID`=126696 AND `memberGUID`=126704;
+UPDATE `creature_formations` SET `dist`=4, `point_1`=2, `point_2`=4 WHERE `leaderGUID`=126715 AND `memberGUID`=126716;
+UPDATE `creature_formations` SET `angle`=310, `point_1`=1, `point_2`=3 WHERE `leaderGUID`=126694 AND `memberGUID`=126711;
+UPDATE `creature_formations` SET `angle`=50, `point_1`=1, `point_2`=3 WHERE `leaderGUID`=126694 AND `memberGUID`=126712;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_22_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_22_00_world.sql
new file mode 100644
index 00000000000..821e9ea3856
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_22_00_world.sql
@@ -0,0 +1,10 @@
+DELETE FROM `creature_text` WHERE `entry` =23257 and `groupid`=0 and `id` in(7,8,9);
+DELETE FROM `creature_text` WHERE `entry` =22982 and `groupid`=0 and `id` in(5,6);
+
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+
+(23257, 0, 7, 'Well one thing''s for sure, $n''s not a nugget any more!', 12, 0, 100, 0, 0, 0, 21896, 0, 'Skyguard Windcharger'),
+(23257, 0, 8, 'Buzz the landing pad lately, $n?', 12, 0, 100, 0, 0, 0, 21889, 0, 'Skyguard Windcharger'),
+(23257, 0, 9, 'The list of Skyguard members is long and distinguished. $n tops that list.', 12, 0, 100, 0, 0, 0, 21939, 0, 'Skyguard Windcharger'),
+(22982, 0, 5, 'Well, if it isn''t our resident $g flyboy : flygirl;, $n. How''s it going, ace?', 12, 0, 100, 0, 0, 0, 21898, 0, 'Skyguard Navigator'),
+(22982, 0, 6, 'Hey, it''s our ace flyer, $n!', 12, 0, 100, 0, 0, 0, 21883, 0, 'Skyguard Navigator');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_22_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_22_01_world.sql
new file mode 100644
index 00000000000..a01d8a27e75
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_22_01_world.sql
@@ -0,0 +1,648 @@
+--
+-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT'
+SET @NPC := 127751;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2828.418,`position_y`=-3128.86,`position_z`=273.8336 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,25278,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,2828.418,-3128.86,273.8336,0,0,0,0,100,0),
+(@PATH,2,2828.67,-3097.49,273.8114,0,0,0,0,100,0),
+(@PATH,3,2824.122,-3127.451,273.8372,0,0,0,0,100,0),
+(@PATH,4,2813.568,-3143.734,273.8355,0,0,0,0,100,0),
+(@PATH,5,2801.097,-3163.161,273.787,0,0,0,0,100,0),
+(@PATH,6,2799.644,-3189.22,273.787,0,0,0,0,100,0),
+(@PATH,7,2820.002,-3202.299,273.7898,0,0,0,0,100,0),
+(@PATH,8,2844.853,-3200.758,273.787,0,0,0,0,100,0),
+(@PATH,9,2848.53,-3180.427,273.787,0,0,0,0,100,0),
+(@PATH,10,2827.984,-3152.95,273.787,0,0,0,0,100,0);
+
+-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT'
+SET @NPC := 127752;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2831.418,`position_y`=-3128.86,`position_z`=273.8336 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,25278,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,2828.418,-3128.86,273.8336,0,0,0,0,100,0),
+(@PATH,2,2828.67,-3097.49,273.8114,0,0,0,0,100,0),
+(@PATH,3,2824.122,-3127.451,273.8372,0,0,0,0,100,0),
+(@PATH,4,2813.568,-3143.734,273.8355,0,0,0,0,100,0),
+(@PATH,5,2801.097,-3163.161,273.787,0,0,0,0,100,0),
+(@PATH,6,2799.644,-3189.22,273.787,0,0,0,0,100,0),
+(@PATH,7,2820.002,-3202.299,273.7898,0,0,0,0,100,0),
+(@PATH,8,2844.853,-3200.758,273.787,0,0,0,0,100,0),
+(@PATH,9,2848.53,-3180.427,273.787,0,0,0,0,100,0),
+(@PATH,10,2827.984,-3152.95,273.787,0,0,0,0,100,0);
+
+-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT'
+SET @NPC := 127746; -- 127747
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2561.589,`position_y`=-3158.63,`position_z`=240.5253 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,25278,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,2561.589,-3158.63,240.5253,0,0,0,0,100,0), -- 00:55:40
+(@PATH,2,2577.802,-3151.077,240.5241,0,0,0,0,100,0), -- 00:55:45
+(@PATH,3,2585.239,-3138.162,240.5253,0,0,0,0,100,0), -- 00:55:52
+(@PATH,4,2585.295,-3121.586,240.5244,0,0,0,0,100,0), -- 00:55:58
+(@PATH,5,2580.453,-3111.228,240.5249,0,0,0,0,100,0), -- 00:56:05
+(@PATH,6,2584.915,-3101.806,240.5252,0,0,0,0,100,0), -- 00:56:09
+(@PATH,7,2608.073,-3078.412,240.5271,0,0,0,0,100,0), -- 00:56:14
+(@PATH,8,2627.942,-3058.567,240.5237,0,0,0,0,100,0), -- 00:56:27
+(@PATH,9,2645.011,-3041.33,240.523,0,0,0,0,100,0), -- 00:56:38
+(@PATH,10,2664.399,-3022.119,240.5253,0,0,0,0,100,0), -- 00:56:47
+(@PATH,11,2673.592,-3015.558,240.5253,0,0,0,0,100,0), -- 00:56:58
+(@PATH,12,2692.232,-3014.315,240.5253,0,0,0,0,100,0), -- 00:57:02
+(@PATH,13,2715.057,-3011.801,240.5254,0,0,0,0,100,0), -- 00:57:10
+(@PATH,14,2728.214,-2992.568,240.5253,0,0,0,0,100,0), -- 00:57:19
+(@PATH,15,2725.241,-2970.892,240.5249,0,0,0,0,100,0), -- 00:57:29
+(@PATH,16,2710.557,-2958.161,240.5251,0,0,0,0,100,0), -- 00:57:38
+(@PATH,17,2685.363,-2959.393,240.5253,0,0,0,0,100,0), -- 00:57:45
+(@PATH,18,2671.24,-2977.426,240.5248,0,0,0,0,100,0), -- 00:57:56
+(@PATH,19,2671.708,-2994.812,240.5246,0,0,0,0,100,0), -- 00:58:04
+(@PATH,20,2670.703,-3012.506,240.5252,0,0,0,0,100,0), -- 00:58:12
+(@PATH,21,2663.621,-3021.305,240.5253,0,0,0,0,100,0), -- 00:58:19
+(@PATH,22,2644.285,-3041.24,240.523,0,0,0,0,100,0), -- 00:58:24
+(@PATH,23,2627.018,-3058.662,240.5237,0,0,0,0,100,0), -- 00:58:35
+(@PATH,24,2607.562,-3078.047,240.5271,0,0,0,0,100,0), -- 00:58:44
+(@PATH,25,2583.966,-3101.257,240.5253,0,0,0,0,100,0), -- 00:58:55
+(@PATH,26,2575.257,-3105.696,240.5253,0,0,0,0,100,0), -- 00:59:08
+(@PATH,27,2561.672,-3099.622,240.5251,0,0,0,0,100,0), -- 00:59:11
+(@PATH,28,2542.95,-3102.525,240.5249,0,0,0,0,100,0), -- 00:59:17
+(@PATH,29,2529.021,-3116.719,240.5249,0,0,0,0,100,0), -- 00:59:26
+(@PATH,30,2527.216,-3133.08,240.5253,0,0,0,0,100,0), -- 00:59:33
+(@PATH,31,2530.838,-3143.624,240.5245,0,0,0,0,100,0), -- 00:59:40
+(@PATH,32,2537.175,-3152.094,240.524,0,0,0,0,100,0), -- 00:59:44
+(@PATH,33,2547.807,-3157.692,240.5253,0,0,0,0,100,0); -- 00:59:49
+
+-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT'
+SET @NPC := 127747; -- 127746
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2561.589,`position_y`=-3158.63,`position_z`=240.5253 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,25278,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,2561.589,-3158.63,240.5253,0,0,0,0,100,0), -- 00:55:40
+(@PATH,2,2577.802,-3151.077,240.5241,0,0,0,0,100,0), -- 00:55:45
+(@PATH,3,2585.239,-3138.162,240.5253,0,0,0,0,100,0), -- 00:55:52
+(@PATH,4,2585.295,-3121.586,240.5244,0,0,0,0,100,0), -- 00:55:58
+(@PATH,5,2580.453,-3111.228,240.5249,0,0,0,0,100,0), -- 00:56:05
+(@PATH,6,2584.915,-3101.806,240.5252,0,0,0,0,100,0), -- 00:56:09
+(@PATH,7,2608.073,-3078.412,240.5271,0,0,0,0,100,0), -- 00:56:14
+(@PATH,8,2627.942,-3058.567,240.5237,0,0,0,0,100,0), -- 00:56:27
+(@PATH,9,2645.011,-3041.33,240.523,0,0,0,0,100,0), -- 00:56:38
+(@PATH,10,2664.399,-3022.119,240.5253,0,0,0,0,100,0), -- 00:56:47
+(@PATH,11,2673.592,-3015.558,240.5253,0,0,0,0,100,0), -- 00:56:58
+(@PATH,12,2692.232,-3014.315,240.5253,0,0,0,0,100,0), -- 00:57:02
+(@PATH,13,2715.057,-3011.801,240.5254,0,0,0,0,100,0), -- 00:57:10
+(@PATH,14,2728.214,-2992.568,240.5253,0,0,0,0,100,0), -- 00:57:19
+(@PATH,15,2725.241,-2970.892,240.5249,0,0,0,0,100,0), -- 00:57:29
+(@PATH,16,2710.557,-2958.161,240.5251,0,0,0,0,100,0), -- 00:57:38
+(@PATH,17,2685.363,-2959.393,240.5253,0,0,0,0,100,0), -- 00:57:45
+(@PATH,18,2671.24,-2977.426,240.5248,0,0,0,0,100,0), -- 00:57:56
+(@PATH,19,2671.708,-2994.812,240.5246,0,0,0,0,100,0), -- 00:58:04
+(@PATH,20,2670.703,-3012.506,240.5252,0,0,0,0,100,0), -- 00:58:12
+(@PATH,21,2663.621,-3021.305,240.5253,0,0,0,0,100,0), -- 00:58:19
+(@PATH,22,2644.285,-3041.24,240.523,0,0,0,0,100,0), -- 00:58:24
+(@PATH,23,2627.018,-3058.662,240.5237,0,0,0,0,100,0), -- 00:58:35
+(@PATH,24,2607.562,-3078.047,240.5271,0,0,0,0,100,0), -- 00:58:44
+(@PATH,25,2583.966,-3101.257,240.5253,0,0,0,0,100,0), -- 00:58:55
+(@PATH,26,2575.257,-3105.696,240.5253,0,0,0,0,100,0), -- 00:59:08
+(@PATH,27,2561.672,-3099.622,240.5251,0,0,0,0,100,0), -- 00:59:11
+(@PATH,28,2542.95,-3102.525,240.5249,0,0,0,0,100,0), -- 00:59:17
+(@PATH,29,2529.021,-3116.719,240.5249,0,0,0,0,100,0), -- 00:59:26
+(@PATH,30,2527.216,-3133.08,240.5253,0,0,0,0,100,0), -- 00:59:33
+(@PATH,31,2530.838,-3143.624,240.5245,0,0,0,0,100,0), -- 00:59:40
+(@PATH,32,2537.175,-3152.094,240.524,0,0,0,0,100,0), -- 00:59:44
+(@PATH,33,2547.807,-3157.692,240.5253,0,0,0,0,100,0); -- 00:59:49
+
+-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT'
+SET @NPC := 127748;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2529.461,`position_y`=-3350.972,`position_z`=267.5927 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,25278,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,2529.461,-3350.972,267.5927,0,0,0,0,100,0), -- 00:55:41
+(@PATH,2,2530.323,-3325.176,267.5925,0,0,0,0,100,0), -- 00:55:47
+(@PATH,3,2543.675,-3311.973,267.593,0,0,0,0,100,0), -- 00:55:58
+(@PATH,4,2556.406,-3299.54,267.593,0,0,0,0,100,0), -- 00:56:05
+(@PATH,5,2555.974,-3276.286,267.5939,0,0,0,0,100,0), -- 00:56:13
+(@PATH,6,2556.132,-3255.743,258.8458,0,0,0,0,100,0), -- 00:56:21
+(@PATH,7,2556.734,-3215.111,240.5262,0,0,0,0,100,0), -- 00:56:31
+(@PATH,8,2556.227,-3191.951,240.5252,0,0,0,0,100,0), -- 00:56:49
+(@PATH,9,2556.103,-3169.521,240.5253,0,0,0,0,100,0), -- 00:56:58
+(@PATH,10,2544.249,-3156.771,240.5248,0,0,0,0,100,0), -- 00:57:07
+(@PATH,11,2530.144,-3142.768,240.5245,0,0,0,0,100,0), -- 00:57:13
+(@PATH,12,2526.182,-3127.083,240.5254,0,0,0,0,100,0), -- 00:57:22
+(@PATH,13,2529.482,-3115.22,240.5248,0,0,0,0,100,0), -- 00:57:28
+(@PATH,14,2541.532,-3103.333,240.5248,0,0,0,0,100,0), -- 00:57:33
+(@PATH,15,2554.839,-3099.154,240.5252,0,0,0,0,100,0), -- 00:57:40
+(@PATH,16,2573.704,-3104.429,240.5253,0,0,0,0,100,0), -- 00:57:45
+(@PATH,17,2584.594,-3120.166,240.5245,0,0,0,0,100,0), -- 00:57:53
+(@PATH,18,2579.713,-3142.299,240.5249,0,0,0,0,100,0), -- 00:58:01
+(@PATH,19,2568.922,-3153.001,240.5249,0,0,0,0,100,0), -- 00:58:10
+(@PATH,20,2556.966,-3168.974,240.5253,0,0,0,0,100,0), -- 00:58:16
+(@PATH,21,2556.745,-3191.808,240.5251,0,0,0,0,100,0), -- 00:58:24
+(@PATH,22,2556.038,-3215.004,240.5273,0,0,0,0,100,0), -- 00:58:33
+(@PATH,23,2555.711,-3255.515,258.7258,0,0,0,0,100,0), -- 00:58:42
+(@PATH,24,2555.592,-3276.532,267.5936,0,0,0,0,100,0), -- 00:59:00
+(@PATH,25,2556.91,-3299.243,267.5934,0,0,0,0,100,0), -- 00:59:10
+(@PATH,26,2565.721,-3309.663,267.5924,0,0,0,0,100,0), -- 00:59:18
+(@PATH,27,2580.893,-3321.083,267.5922,0,0,0,0,100,0), -- 00:59:23
+(@PATH,28,2586.392,-3342.971,267.5935,0,0,0,0,100,0), -- 00:59:32
+(@PATH,29,2578.376,-3360.212,267.5924,0,0,0,0,100,0), -- 00:59:40
+(@PATH,30,2556.463,-3369.452,267.593,0,0,0,0,100,0), -- 00:59:47
+(@PATH,31,2538.893,-3363.072,267.592,0,0,0,0,100,0); -- 00:59:57
+-- 0x1C2F4042A00FC8C0004C5C00017F5587 .go 2529.461 -3350.972 267.5927
+
+-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT'
+SET @NPC := 127749;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2529.461,`position_y`=-3350.972,`position_z`=267.5927 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,25278,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,2529.461,-3350.972,267.5927,0,0,0,0,100,0), -- 00:55:41
+(@PATH,2,2530.323,-3325.176,267.5925,0,0,0,0,100,0), -- 00:55:47
+(@PATH,3,2543.675,-3311.973,267.593,0,0,0,0,100,0), -- 00:55:58
+(@PATH,4,2556.406,-3299.54,267.593,0,0,0,0,100,0), -- 00:56:05
+(@PATH,5,2555.974,-3276.286,267.5939,0,0,0,0,100,0), -- 00:56:13
+(@PATH,6,2556.132,-3255.743,258.8458,0,0,0,0,100,0), -- 00:56:21
+(@PATH,7,2556.734,-3215.111,240.5262,0,0,0,0,100,0), -- 00:56:31
+(@PATH,8,2556.227,-3191.951,240.5252,0,0,0,0,100,0), -- 00:56:49
+(@PATH,9,2556.103,-3169.521,240.5253,0,0,0,0,100,0), -- 00:56:58
+(@PATH,10,2544.249,-3156.771,240.5248,0,0,0,0,100,0), -- 00:57:07
+(@PATH,11,2530.144,-3142.768,240.5245,0,0,0,0,100,0), -- 00:57:13
+(@PATH,12,2526.182,-3127.083,240.5254,0,0,0,0,100,0), -- 00:57:22
+(@PATH,13,2529.482,-3115.22,240.5248,0,0,0,0,100,0), -- 00:57:28
+(@PATH,14,2541.532,-3103.333,240.5248,0,0,0,0,100,0), -- 00:57:33
+(@PATH,15,2554.839,-3099.154,240.5252,0,0,0,0,100,0), -- 00:57:40
+(@PATH,16,2573.704,-3104.429,240.5253,0,0,0,0,100,0), -- 00:57:45
+(@PATH,17,2584.594,-3120.166,240.5245,0,0,0,0,100,0), -- 00:57:53
+(@PATH,18,2579.713,-3142.299,240.5249,0,0,0,0,100,0), -- 00:58:01
+(@PATH,19,2568.922,-3153.001,240.5249,0,0,0,0,100,0), -- 00:58:10
+(@PATH,20,2556.966,-3168.974,240.5253,0,0,0,0,100,0), -- 00:58:16
+(@PATH,21,2556.745,-3191.808,240.5251,0,0,0,0,100,0), -- 00:58:24
+(@PATH,22,2556.038,-3215.004,240.5273,0,0,0,0,100,0), -- 00:58:33
+(@PATH,23,2555.711,-3255.515,258.7258,0,0,0,0,100,0), -- 00:58:42
+(@PATH,24,2555.592,-3276.532,267.5936,0,0,0,0,100,0), -- 00:59:00
+(@PATH,25,2556.91,-3299.243,267.5934,0,0,0,0,100,0), -- 00:59:10
+(@PATH,26,2565.721,-3309.663,267.5924,0,0,0,0,100,0), -- 00:59:18
+(@PATH,27,2580.893,-3321.083,267.5922,0,0,0,0,100,0), -- 00:59:23
+(@PATH,28,2586.392,-3342.971,267.5935,0,0,0,0,100,0), -- 00:59:32
+(@PATH,29,2578.376,-3360.212,267.5924,0,0,0,0,100,0), -- 00:59:40
+(@PATH,30,2556.463,-3369.452,267.593,0,0,0,0,100,0), -- 00:59:47
+(@PATH,31,2538.893,-3363.072,267.592,0,0,0,0,100,0); -- 00:59:57
+
+-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT'
+SET @NPC := 127753;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2907.542,`position_y`=-3166.655,`position_z`=273.787 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,25278,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,2907.542,-3166.655,273.787,0,0,0,0,100,0), -- 00:46:47
+(@PATH,2,2873.219,-3165.419,273.787,0,0,0,0,100,0), -- 00:46:54
+(@PATH,3,2861.632,-3165.088,273.787,0,0,0,0,100,0), -- 00:47:09
+(@PATH,4,2860.526,-3185.717,273.787,0,0,0,0,100,0), -- 00:47:13
+(@PATH,5,2860.435,-3203.401,273.787,0,0,0,0,100,0), -- 00:47:21
+(@PATH,6,2875.204,-3203.906,273.4088,0,0,0,0,100,0), -- 00:47:28
+(@PATH,7,2892.834,-3204.38,273.3965,0,0,0,0,100,0), -- 00:47:34
+(@PATH,8,2911.993,-3204.611,273.3846,0,0,0,0,100,0), -- 00:47:42
+(@PATH,9,2926.023,-3200.403,273.3712,0,0,0,0,100,0), -- 00:47:49
+(@PATH,10,2931.457,-3188.328,273.3712,0,0,0,0,100,0), -- 00:47:55
+(@PATH,11,2925.778,-3167.298,273.787,0,0,0,0,100,0); -- 00:48:00
+
+-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT'
+SET @NPC := 127743;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2907.542,`position_y`=-3171.655,`position_z`=273.787 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,25278,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,2907.542,-3166.655,273.787,0,0,0,0,100,0), -- 00:46:47
+(@PATH,2,2873.219,-3165.419,273.787,0,0,0,0,100,0), -- 00:46:54
+(@PATH,3,2861.632,-3165.088,273.787,0,0,0,0,100,0), -- 00:47:09
+(@PATH,4,2860.526,-3185.717,273.787,0,0,0,0,100,0), -- 00:47:13
+(@PATH,5,2860.435,-3203.401,273.787,0,0,0,0,100,0), -- 00:47:21
+(@PATH,6,2875.204,-3203.906,273.4088,0,0,0,0,100,0), -- 00:47:28
+(@PATH,7,2892.834,-3204.38,273.3965,0,0,0,0,100,0), -- 00:47:34
+(@PATH,8,2911.993,-3204.611,273.3846,0,0,0,0,100,0), -- 00:47:42
+(@PATH,9,2926.023,-3200.403,273.3712,0,0,0,0,100,0), -- 00:47:49
+(@PATH,10,2931.457,-3188.328,273.3712,0,0,0,0,100,0), -- 00:47:55
+(@PATH,11,2925.778,-3167.298,273.787,0,0,0,0,100,0); -- 00:48:00
+
+-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT'
+SET @NPC := 127742;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2787.931,`position_y`=-3363.628,`position_z`=267.6847 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,25278,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,2787.931,-3363.628,267.6847,0,0,0,0,100,0),
+(@PATH,2,2787.864,-3320.595,267.6845,0,0,0,0,100,0),
+(@PATH,3,2787.388,-3287.191,267.6845,0,0,0,0,100,0),
+(@PATH,4,2787.864,-3320.595,267.6845,0,0,0,0,100,0);
+
+-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT'
+SET @NPC := 127754;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2790.931,`position_y`=-3363.628,`position_z`=267.6847 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,25278,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,2787.931,-3363.628,267.6847,0,0,0,0,100,0),
+(@PATH,2,2787.864,-3320.595,267.6845,0,0,0,0,100,0),
+(@PATH,3,2787.388,-3287.191,267.6845,0,0,0,0,100,0),
+(@PATH,4,2787.864,-3320.595,267.6845,0,0,0,0,100,0);
+
+-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT'
+SET @NPC := 127745;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2910.233,`position_y`=-2955.379,`position_z`=267.593 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,25278,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,2910.233,-2955.379,267.593,0,0,0,0,100,0), -- 00:55:44
+(@PATH,2,2892.628,-2961.647,267.5928,0,0,0,0,100,0), -- 00:55:51
+(@PATH,3,2884.039,-2971.864,267.5928,0,0,0,0,100,0), -- 00:56:00
+(@PATH,4,2870.617,-2985.568,267.593,0,0,0,0,100,0), -- 00:56:05
+(@PATH,5,2847.519,-2985.616,267.5938,0,0,0,0,100,0), -- 00:56:17
+(@PATH,6,2831.011,-2985.781,260.82,0,0,0,0,100,0), -- 00:56:26
+(@PATH,7,2811.443,-2985.972,250.9583,0,0,0,0,100,0), -- 00:56:34
+(@PATH,8,2781.199,-2986.169,240.5266,0,0,0,0,100,0), -- 00:56:42
+(@PATH,9,2763.189,-2986.039,240.5251,0,0,0,0,100,0), -- 00:56:54
+(@PATH,10,2744.237,-2985.519,240.5253,0,0,0,0,100,0), -- 00:57:02
+(@PATH,11,2734.137,-2977.427,240.5253,0,0,0,0,100,0), -- 00:57:10
+(@PATH,12,2722.754,-2967.005,240.5245,0,0,0,0,100,0), -- 00:57:15
+(@PATH,13,2708.031,-2957.228,240.5251,0,0,0,0,100,0), -- 00:57:21
+(@PATH,14,2691.098,-2957.404,240.525,0,0,0,0,100,0), -- 00:57:28
+(@PATH,15,2676.669,-2966.855,240.5253,0,0,0,0,100,0), -- 00:57:34
+(@PATH,16,2671.321,-2976.635,240.5248,0,0,0,0,100,0), -- 00:57:42
+(@PATH,17,2671.421,-2993.49,240.5246,0,0,0,0,100,0), -- 00:57:47
+(@PATH,18,2680.976,-3008.883,240.5253,0,0,0,0,100,0), -- 00:57:53
+(@PATH,19,2697.444,-3015.56,240.5247,0,0,0,0,100,0), -- 00:58:00
+(@PATH,20,2713.618,-3012.186,240.5255,0,0,0,0,100,0), -- 00:58:07
+(@PATH,21,2724.357,-3002.94,240.5247,0,0,0,0,100,0), -- 00:58:14
+(@PATH,22,2734.208,-2991.862,240.5253,0,0,0,0,100,0), -- 00:58:19
+(@PATH,23,2743.945,-2987.434,240.5253,0,0,0,0,100,0), -- 00:58:25
+(@PATH,24,2763.65,-2986.421,240.5252,0,0,0,0,100,0), -- 00:58:30
+(@PATH,25,2781.449,-2986.182,240.5266,0,0,0,0,100,0), -- 00:58:37
+(@PATH,26,2811.903,-2985.583,251.1997,0,0,0,0,100,0), -- 00:58:45
+(@PATH,27,2830.531,-2985.851,260.8194,0,0,0,0,100,0), -- 00:58:58
+(@PATH,28,2847.362,-2985.841,267.5938,0,0,0,0,100,0), -- 00:59:07
+(@PATH,29,2870.534,-2986.177,267.593,0,0,0,0,100,0), -- 00:59:14
+(@PATH,30,2882.414,-2997.007,267.593,0,0,0,0,100,0), -- 00:59:22
+(@PATH,31,2895.966,-3012.106,267.5926,0,0,0,0,100,0), -- 00:59:30
+(@PATH,32,2915.716,-3014.353,267.5935,0,0,0,0,100,0), -- 00:59:37
+(@PATH,33,2931.21,-3007.478,267.5931,0,0,0,0,100,0), -- 00:59:45
+(@PATH,34,2938.199,-2994.229,267.5933,0,0,0,0,100,0), -- 00:59:53
+(@PATH,35,2937.735,-2977.154,267.593,0,0,0,0,100,0), -- 00:59:59
+(@PATH,36,2927.648,-2962.08,267.5935,0,0,0,0,100,0); -- 01:00:05
+
+-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT'
+SET @NPC := 127744;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2910.233,`position_y`=-2955.379,`position_z`=267.593 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,25278,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,2910.233,-2955.379,267.593,0,0,0,0,100,0), -- 00:55:44
+(@PATH,2,2892.628,-2961.647,267.5928,0,0,0,0,100,0), -- 00:55:51
+(@PATH,3,2884.039,-2971.864,267.5928,0,0,0,0,100,0), -- 00:56:00
+(@PATH,4,2870.617,-2985.568,267.593,0,0,0,0,100,0), -- 00:56:05
+(@PATH,5,2847.519,-2985.616,267.5938,0,0,0,0,100,0), -- 00:56:17
+(@PATH,6,2831.011,-2985.781,260.82,0,0,0,0,100,0), -- 00:56:26
+(@PATH,7,2811.443,-2985.972,250.9583,0,0,0,0,100,0), -- 00:56:34
+(@PATH,8,2781.199,-2986.169,240.5266,0,0,0,0,100,0), -- 00:56:42
+(@PATH,9,2763.189,-2986.039,240.5251,0,0,0,0,100,0), -- 00:56:54
+(@PATH,10,2744.237,-2985.519,240.5253,0,0,0,0,100,0), -- 00:57:02
+(@PATH,11,2734.137,-2977.427,240.5253,0,0,0,0,100,0), -- 00:57:10
+(@PATH,12,2722.754,-2967.005,240.5245,0,0,0,0,100,0), -- 00:57:15
+(@PATH,13,2708.031,-2957.228,240.5251,0,0,0,0,100,0), -- 00:57:21
+(@PATH,14,2691.098,-2957.404,240.525,0,0,0,0,100,0), -- 00:57:28
+(@PATH,15,2676.669,-2966.855,240.5253,0,0,0,0,100,0), -- 00:57:34
+(@PATH,16,2671.321,-2976.635,240.5248,0,0,0,0,100,0), -- 00:57:42
+(@PATH,17,2671.421,-2993.49,240.5246,0,0,0,0,100,0), -- 00:57:47
+(@PATH,18,2680.976,-3008.883,240.5253,0,0,0,0,100,0), -- 00:57:53
+(@PATH,19,2697.444,-3015.56,240.5247,0,0,0,0,100,0), -- 00:58:00
+(@PATH,20,2713.618,-3012.186,240.5255,0,0,0,0,100,0), -- 00:58:07
+(@PATH,21,2724.357,-3002.94,240.5247,0,0,0,0,100,0), -- 00:58:14
+(@PATH,22,2734.208,-2991.862,240.5253,0,0,0,0,100,0), -- 00:58:19
+(@PATH,23,2743.945,-2987.434,240.5253,0,0,0,0,100,0), -- 00:58:25
+(@PATH,24,2763.65,-2986.421,240.5252,0,0,0,0,100,0), -- 00:58:30
+(@PATH,25,2781.449,-2986.182,240.5266,0,0,0,0,100,0), -- 00:58:37
+(@PATH,26,2811.903,-2985.583,251.1997,0,0,0,0,100,0), -- 00:58:45
+(@PATH,27,2830.531,-2985.851,260.8194,0,0,0,0,100,0), -- 00:58:58
+(@PATH,28,2847.362,-2985.841,267.5938,0,0,0,0,100,0), -- 00:59:07
+(@PATH,29,2870.534,-2986.177,267.593,0,0,0,0,100,0), -- 00:59:14
+(@PATH,30,2882.414,-2997.007,267.593,0,0,0,0,100,0), -- 00:59:22
+(@PATH,31,2895.966,-3012.106,267.5926,0,0,0,0,100,0), -- 00:59:30
+(@PATH,32,2915.716,-3014.353,267.5935,0,0,0,0,100,0), -- 00:59:37
+(@PATH,33,2931.21,-3007.478,267.5931,0,0,0,0,100,0), -- 00:59:45
+(@PATH,34,2938.199,-2994.229,267.5933,0,0,0,0,100,0), -- 00:59:53
+(@PATH,35,2937.735,-2977.154,267.593,0,0,0,0,100,0), -- 00:59:59
+(@PATH,36,2927.648,-2962.08,267.5935,0,0,0,0,100,0); -- 01:00:05
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127751,127752,127746,127747,127748,127749,127753,127743,127742,127754,127744,127745);
+DELETE FROM `creature_formations` WHERE `memberGUID` IN (127751,127752,127746,127747,127748,127749,127753,127743,127742,127754,127744,127745);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127751,127751,0,0,2,0,0),
+(127751,127752,3,90,2,2,0),
+(127746,127746,0,0,2,0,0),
+(127746,127747,3,270,2,0,0),
+(127748,127748,0,0,2,0,0),
+(127748,127749,3,270,2,0,0),
+(127753,127753,0,0,2,0,0),
+(127753,127743,3,270,2,0,0),
+(127742,127742,0,0,2,0,0),
+(127742,127754,3,270,2,1,3),
+(127744,127744,0,0,2,0,0),
+(127744,127745,3,270,2,0,0);
+
+-- Pathing for Death Knight Entry: 16146 'TDB FORMAT'
+SET @NPC := 127668;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2828.432,`position_y`=-3176.265,`position_z`=298.1476 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,2828.432,-3176.265,298.1476,0,0,0,0,100,0), -- 00:46:45
+(@PATH,2,2839.448,-3185.542,298.1487,0,0,0,0,100,0), -- 00:46:49
+(@PATH,3,2848.306,-3195.512,298.1775,0,0,0,0,100,0), -- 00:46:54
+(@PATH,4,2860.46,-3207.91,298.1058,0,0,0,0,100,0), -- 00:46:58
+(@PATH,5,2871.515,-3216.969,298.1441,0,0,0,0,100,0), -- 00:47:02
+(@PATH,6,2886.36,-3218.305,298.146,0,0,0,0,100,0), -- 00:47:07
+(@PATH,7,2871.515,-3216.969,298.1441,0,0,0,0,100,0), -- 00:47:13
+(@PATH,8,2860.46,-3207.91,298.1058,0,0,0,0,100,0), -- 00:47:17
+(@PATH,9,2848.306,-3195.512,298.1775,0,0,0,0,100,0), -- 00:47:22
+(@PATH,10,2839.448,-3185.542,298.1487,0,0,0,0,100,0), -- 00:47:27
+(@PATH,11,2828.432,-3176.265,298.1476,0,0,0,0,100,0), -- 00:47:30
+(@PATH,12,2813.296,-3175.835,298.1458,0,0,0,0,100,0), -- 00:47:35
+(@PATH,13,2790.895,-3179.5,298.1464,0,0,0,0,100,0), -- 00:47:40
+(@PATH,14,2813.296,-3175.835,298.1458,0,0,0,0,100,0); -- 00:47:49
+
+-- Pathing for Dark Touched Warrior Entry: 16156 'TDB FORMAT'
+SET @NPC := 127699;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2830.432,`position_y`=-3173.265,`position_z`=298.1476 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,2828.432,-3176.265,298.1476,0,0,0,0,100,0), -- 00:46:45
+(@PATH,2,2839.448,-3185.542,298.1487,0,0,0,0,100,0), -- 00:46:49
+(@PATH,3,2848.306,-3195.512,298.1775,0,0,0,0,100,0), -- 00:46:54
+(@PATH,4,2860.46,-3207.91,298.1058,0,0,0,0,100,0), -- 00:46:58
+(@PATH,5,2871.515,-3216.969,298.1441,0,0,0,0,100,0), -- 00:47:02
+(@PATH,6,2886.36,-3218.305,298.146,0,0,0,0,100,0), -- 00:47:07
+(@PATH,7,2871.515,-3216.969,298.1441,0,0,0,0,100,0), -- 00:47:13
+(@PATH,8,2860.46,-3207.91,298.1058,0,0,0,0,100,0), -- 00:47:17
+(@PATH,9,2848.306,-3195.512,298.1775,0,0,0,0,100,0), -- 00:47:22
+(@PATH,10,2839.448,-3185.542,298.1487,0,0,0,0,100,0), -- 00:47:27
+(@PATH,11,2828.432,-3176.265,298.1476,0,0,0,0,100,0), -- 00:47:30
+(@PATH,12,2813.296,-3175.835,298.1458,0,0,0,0,100,0), -- 00:47:35
+(@PATH,13,2790.895,-3179.5,298.1464,0,0,0,0,100,0), -- 00:47:40
+(@PATH,14,2813.296,-3175.835,298.1458,0,0,0,0,100,0); -- 00:47:49
+
+-- Pathing for Dark Touched Warrior Entry: 16156 'TDB FORMAT'
+SET @NPC := 127700;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2827.432,`position_y`=-3178.265,`position_z`=298.1476 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,2828.432,-3176.265,298.1476,0,0,0,0,100,0), -- 00:46:45
+(@PATH,2,2839.448,-3185.542,298.1487,0,0,0,0,100,0), -- 00:46:49
+(@PATH,3,2848.306,-3195.512,298.1775,0,0,0,0,100,0), -- 00:46:54
+(@PATH,4,2860.46,-3207.91,298.1058,0,0,0,0,100,0), -- 00:46:58
+(@PATH,5,2871.515,-3216.969,298.1441,0,0,0,0,100,0), -- 00:47:02
+(@PATH,6,2886.36,-3218.305,298.146,0,0,0,0,100,0), -- 00:47:07
+(@PATH,7,2871.515,-3216.969,298.1441,0,0,0,0,100,0), -- 00:47:13
+(@PATH,8,2860.46,-3207.91,298.1058,0,0,0,0,100,0), -- 00:47:17
+(@PATH,9,2848.306,-3195.512,298.1775,0,0,0,0,100,0), -- 00:47:22
+(@PATH,10,2839.448,-3185.542,298.1487,0,0,0,0,100,0), -- 00:47:27
+(@PATH,11,2828.432,-3176.265,298.1476,0,0,0,0,100,0), -- 00:47:30
+(@PATH,12,2813.296,-3175.835,298.1458,0,0,0,0,100,0), -- 00:47:35
+(@PATH,13,2790.895,-3179.5,298.1464,0,0,0,0,100,0), -- 00:47:40
+(@PATH,14,2813.296,-3175.835,298.1458,0,0,0,0,100,0); -- 00:47:49
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127668);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127668,127668,0,0,2,0,0),
+(127668,127699,3,270,2,5,12),
+(127668,127700,3,90,2,5,12);
+
+-- Pathing for Death Knight Captain Entry: 16145 'TDB FORMAT'
+SET @NPC := 127647;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2863.143,`position_y`=-3303.327,`position_z`=298.1498 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,2863.593,-3303.907,298.1498,0,0,0,0,100,0), -- 00:46:45
+(@PATH,2,2869.523,-3320.972,298.1457,0,0,0,0,100,0), -- 00:46:50
+(@PATH,3,2883.242,-3330.484,298.1457,0,0,0,0,100,0), -- 00:46:56
+(@PATH,4,2869.523,-3320.972,298.1457,0,0,0,0,100,0), -- 00:47:03
+(@PATH,5,2863.593,-3303.907,298.1498,0,0,0,0,100,0), -- 00:47:07
+(@PATH,6,2865.348,-3285.952,298.0973,0,0,0,0,100,0), -- 00:47:12
+(@PATH,7,2874.288,-3265.404,298.1561,0,0,0,0,100,0), -- 00:47:18
+(@PATH,8,2865.348,-3285.952,298.0973,0,0,0,0,100,0); -- 00:47:27
+
+-- Pathing for Death Knight Captain Entry: 16145 'TDB FORMAT'
+SET @NPC := 127648;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2867.593,`position_y`=-3304.907,`position_z`=298.1498 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,2863.593,-3303.907,298.1498,0,0,0,0,100,0), -- 00:46:45
+(@PATH,2,2869.523,-3320.972,298.1457,0,0,0,0,100,0), -- 00:46:50
+(@PATH,3,2883.242,-3330.484,298.1457,0,0,0,0,100,0), -- 00:46:56
+(@PATH,4,2869.523,-3320.972,298.1457,0,0,0,0,100,0), -- 00:47:03
+(@PATH,5,2863.593,-3303.907,298.1498,0,0,0,0,100,0), -- 00:47:07
+(@PATH,6,2865.348,-3285.952,298.0973,0,0,0,0,100,0), -- 00:47:12
+(@PATH,7,2874.288,-3265.404,298.1561,0,0,0,0,100,0), -- 00:47:18
+(@PATH,8,2865.348,-3285.952,298.0973,0,0,0,0,100,0); -- 00:47:27
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127647);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127647,127647,0,0,2,0,0),
+(127647,127648,4,270,2,2,6);
+
+-- Pathing for Shade of Naxxramas Entry: 16164 'TDB FORMAT'
+SET @NPC := 127755;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2915.294,`position_y`=-3343.234,`position_z`=298.1457 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,2915.294,-3343.234,298.1457,0,9000,0,0,100,0),
+(@PATH,2,2898.639,-3327.008,298.1457,0,9000,0,0,100,0);
+
+UPDATE `creature` SET `orientation`=5.51352 WHERE `guid` IN (127755,127758,127759);
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127755);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127755,127755,0,0,2,0,0),
+(127755,127758,2,360,2,1,2),
+(127755,127759,2,180,2,1,2);
+
+UPDATE `creature` SET `modelid`=0 WHERE `id` IN (16145,16146,16156,16163);
+
+-- Pathing for Unholy Staff Entry: 16215 'TDB FORMAT'
+SET @NPC := 127816;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2724.483,`position_y`=-3142.47,`position_z`=267.6181 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,2724.483,-3142.47,267.6181,0,0,0,0,100,0), -- 00:55:47
+(@PATH,2,2740.318,-3170.808,267.576,0,0,0,0,100,0); -- 00:56:00
+
+-- Pathing for Unholy Staff Entry: 16215 'TDB FORMAT'
+SET @NPC := 127817;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2721.483,`position_y`=-3144.47,`position_z`=267.6181 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,2724.483,-3142.47,267.6181,0,0,0,0,100,0), -- 00:55:47
+(@PATH,2,2740.318,-3170.808,267.576,0,0,0,0,100,0); -- 00:56:00
+
+-- Pathing for Unholy Staff Entry: 16215 'TDB FORMAT'
+SET @NPC := 127819;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2687.124,`position_y`=-3143.13,`position_z`=267.6205 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,2687.124,-3143.13,267.6205,0,0,0,0,100,0), -- 00:55:49
+(@PATH,2,2667.474,-3173.004,267.634,0,0,0,0,100,0); -- 00:56:04
+
+-- Pathing for Unholy Staff Entry: 16215 'TDB FORMAT'
+SET @NPC := 127820;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2684.124,`position_y`=-3142.13,`position_z`=267.6205 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,2687.124,-3143.13,267.6205,0,0,0,0,100,0), -- 00:55:49
+(@PATH,2,2667.474,-3173.004,267.634,0,0,0,0,100,0); -- 00:56:04
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127816,127819);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127816,127816,0,0,2,0,0),
+(127816,127817,3,270,2,1,2),
+(127819,127819,0,0,2,0,0),
+(127819,127820,3,270,2,1,2);
+
+-- Pathing for Unholy Axe Entry: 16194 'TDB FORMAT'
+SET @NPC := 127796;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2690.577,`position_y`=-3156.689,`position_z`=267.6078 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,2690.577,-3156.689,267.6078,0,0,0,0,100,0), -- 00:55:41
+(@PATH,2,2706.089,-3166.321,267.5782,0,0,0,0,100,0), -- 00:55:49
+(@PATH,3,2721.288,-3159.098,267.5903,0,0,0,0,100,0), -- 00:55:56
+(@PATH,4,2723.902,-3133.336,267.6333,0,0,0,0,100,0), -- 00:56:04
+(@PATH,5,2706.458,-3124.162,267.6098,0,0,0,0,100,0), -- 00:56:13
+(@PATH,6,2688.671,-3133.302,267.6201,0,0,0,0,100,0); -- 00:56:22
+
+-- Pathing for Unholy Axe Entry: 16194 'TDB FORMAT'
+SET @NPC := 127797;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2693.577,`position_y`=-3154.689,`position_z`=267.6078 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,2690.577,-3156.689,267.6078,0,0,0,0,100,0), -- 00:55:41
+(@PATH,2,2706.089,-3166.321,267.5782,0,0,0,0,100,0), -- 00:55:49
+(@PATH,3,2721.288,-3159.098,267.5903,0,0,0,0,100,0), -- 00:55:56
+(@PATH,4,2723.902,-3133.336,267.6333,0,0,0,0,100,0), -- 00:56:04
+(@PATH,5,2706.458,-3124.162,267.6098,0,0,0,0,100,0), -- 00:56:13
+(@PATH,6,2688.671,-3133.302,267.6201,0,0,0,0,100,0); -- 00:56:22
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127796);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127796,127796,0,0,2,0,0),
+(127796,127797,3,270,2,0,0);
+
+-- Pathing for Unholy Swords Entry: 16216 'TDB FORMAT'
+SET @NPC := 127822;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2740.497,`position_y`=-3216.551,`position_z`=267.6155 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,2740.497,-3216.551,267.6155,0,0,0,0,100,0), -- 00:55:46
+(@PATH,2,2735.71,-3191.704,267.4987,0,0,0,0,100,0), -- 00:55:54
+(@PATH,3,2721.61,-3178.054,267.5587,0,0,0,0,100,0), -- 00:56:05
+(@PATH,4,2735.71,-3191.704,267.4987,0,0,0,0,100,0), -- 00:56:14
+(@PATH,5,2740.497,-3216.551,267.6155,0,0,0,0,100,0), -- 00:56:21
+(@PATH,6,2734.737,-3239.713,267.602,0,0,0,0,100,0), -- 00:56:30
+(@PATH,7,2717.949,-3253.626,267.6629,0,0,0,0,100,0), -- 00:56:40
+(@PATH,8,2734.737,-3239.713,267.602,0,0,0,0,100,0); -- 00:56:50
+
+-- Pathing for Unholy Swords Entry: 16216 'TDB FORMAT'
+SET @NPC := 127823;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2743.497,`position_y`=-3216.551,`position_z`=267.6155 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,2740.497,-3216.551,267.6155,0,0,0,0,100,0), -- 00:55:46
+(@PATH,2,2735.71,-3191.704,267.4987,0,0,0,0,100,0), -- 00:55:54
+(@PATH,3,2721.61,-3178.054,267.5587,0,0,0,0,100,0), -- 00:56:05
+(@PATH,4,2735.71,-3191.704,267.4987,0,0,0,0,100,0), -- 00:56:14
+(@PATH,5,2740.497,-3216.551,267.6155,0,0,0,0,100,0), -- 00:56:21
+(@PATH,6,2734.737,-3239.713,267.602,0,0,0,0,100,0), -- 00:56:30
+(@PATH,7,2717.949,-3253.626,267.6629,0,0,0,0,100,0), -- 00:56:40
+(@PATH,8,2734.737,-3239.713,267.602,0,0,0,0,100,0); -- 00:56:50
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127822);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127822,127822,0,0,2,0,0),
+(127822,127823,4,90,2,3,7);
+
+-- Pathing for Instructor Razuvious Entry: 16061 'TDB FORMAT'
+SET @NPC := 128312;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2758.932,`position_y`=-3107.118,`position_z`=267.6845 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,2758.932,-3107.118,267.6845,0,0,0,0,100,0),
+(@PATH,2,2758.409,-3091.983,267.6845,0,0,0,0,100,0),
+(@PATH,3,2772.748,-3085.515,267.6845,0,0,0,0,100,0),
+(@PATH,4,2783.736,-3101.491,267.6845,0,0,0,0,100,0),
+(@PATH,5,2772.544,-3112.944,267.6845,0,0,0,0,100,0);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_00_world.sql
new file mode 100644
index 00000000000..5483d78b2ce
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_00_world.sql
@@ -0,0 +1,612 @@
+-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT'
+SET @NPC := 127866;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3454.462,`position_y`=-3562.112,`position_z`=267.593 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,3454.462,-3562.112,267.593,0,0,0,0,100,0), -- 18:40:27
+(@PATH,2,3454.662,-3548.537,267.593,0,0,0,0,100,0), -- 18:40:38
+(@PATH,3,3464.026,-3545.334,267.593,0,0,0,0,100,0), -- 18:40:43
+(@PATH,4,3469.727,-3539.112,267.593,0,0,0,0,100,0), -- 18:40:47
+(@PATH,5,3471.318,-3524.515,267.593,0,0,0,0,100,0), -- 18:40:50
+(@PATH,6,3465.038,-3515.349,267.593,0,0,0,0,100,0), -- 18:40:56
+(@PATH,7,3454.185,-3511.259,267.593,0,0,0,0,100,0), -- 18:41:01
+(@PATH,8,3442.813,-3514.244,267.593,0,0,0,0,100,0), -- 18:41:06
+(@PATH,9,3435.952,-3524.05,267.593,0,0,0,0,100,0), -- 18:41:11
+(@PATH,10,3436.82,-3538.214,267.593,0,0,0,0,100,0), -- 18:41:16
+(@PATH,11,3445.783,-3546.556,267.593,0,0,0,0,100,0), -- 18:41:21
+(@PATH,12,3453.797,-3548.311,267.593,0,0,0,0,100,0), -- 18:41:25
+(@PATH,13,3453.227,-3570.022,267.593,0,0,0,0,100,0), -- 18:41:29
+(@PATH,14,3453.297,-3589.868,267.593,0,0,0,0,100,0), -- 18:41:38
+(@PATH,15,3452.981,-3624.833,269.3551,0,0,0,0,100,0), -- 18:41:46
+(@PATH,16,3453.006,-3638.403,276.4746,0,0,0,0,100,0), -- 18:41:59
+(@PATH,17,3453.413,-3650.563,282.8547,0,0,0,0,100,0), -- 18:42:06
+(@PATH,18,3453.339,-3674.839,294.1114,0,0,0,0,100,0), -- 18:42:12
+(@PATH,19,3453.625,-3707.783,294.6607,0,0,0,0,100,0), -- 18:42:23
+(@PATH,20,3453.646,-3719.333,294.6607,0,0,0,0,100,0), -- 18:42:36
+(@PATH,21,3440.435,-3724.057,294.6607,0,0,0,0,100,0), -- 18:42:41
+(@PATH,22,3433.669,-3735.089,294.6609,0,0,0,0,100,0), -- 18:42:46
+(@PATH,23,3435.129,-3747.669,294.6607,0,0,0,0,100,0), -- 18:42:50
+(@PATH,24,3444.191,-3756.717,294.6607,0,0,0,0,100,0), -- 18:42:55
+(@PATH,25,3457.736,-3759.273,294.6607,0,0,0,0,100,0), -- 18:43:01
+(@PATH,26,3468.683,-3752.32,294.6607,0,0,0,0,100,0), -- 18:43:06
+(@PATH,27,3473.417,-3741.013,294.6607,0,0,0,0,100,0), -- 18:43:12
+(@PATH,28,3469.141,-3727.593,294.6607,0,0,0,0,100,0), -- 18:43:17
+(@PATH,29,3461.402,-3721.552,294.6607,0,0,0,0,100,0), -- 18:43:22
+(@PATH,30,3453.865,-3719.445,294.6607,0,0,0,0,100,0), -- 18:43:27
+(@PATH,31,3453.944,-3707.97,294.6607,0,0,0,0,100,0), -- 18:43:29
+(@PATH,32,3453.922,-3674.717,294.0525,0,0,0,0,100,0), -- 18:43:34
+(@PATH,33,3454.177,-3650.563,282.855,0,0,0,0,100,0), -- 18:43:47
+(@PATH,34,3454.576,-3638.243,276.3913,0,0,0,0,100,0), -- 18:43:58
+(@PATH,35,3454.075,-3614.297,267.5918,0,0,0,0,100,0), -- 18:44:03
+(@PATH,36,3454.152,-3589.311,267.593,0,0,0,0,100,0); -- 18:44:14
+
+-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT'
+SET @NPC := 127867;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3454.462,`position_y`=-3569.112,`position_z`=267.593 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,3454.462,-3562.112,267.593,0,0,0,0,100,0), -- 18:40:27
+(@PATH,2,3454.662,-3548.537,267.593,0,0,0,0,100,0), -- 18:40:38
+(@PATH,3,3464.026,-3545.334,267.593,0,0,0,0,100,0), -- 18:40:43
+(@PATH,4,3469.727,-3539.112,267.593,0,0,0,0,100,0), -- 18:40:47
+(@PATH,5,3471.318,-3524.515,267.593,0,0,0,0,100,0), -- 18:40:50
+(@PATH,6,3465.038,-3515.349,267.593,0,0,0,0,100,0), -- 18:40:56
+(@PATH,7,3454.185,-3511.259,267.593,0,0,0,0,100,0), -- 18:41:01
+(@PATH,8,3442.813,-3514.244,267.593,0,0,0,0,100,0), -- 18:41:06
+(@PATH,9,3435.952,-3524.05,267.593,0,0,0,0,100,0), -- 18:41:11
+(@PATH,10,3436.82,-3538.214,267.593,0,0,0,0,100,0), -- 18:41:16
+(@PATH,11,3445.783,-3546.556,267.593,0,0,0,0,100,0), -- 18:41:21
+(@PATH,12,3453.797,-3548.311,267.593,0,0,0,0,100,0), -- 18:41:25
+(@PATH,13,3453.227,-3570.022,267.593,0,0,0,0,100,0), -- 18:41:29
+(@PATH,14,3453.297,-3589.868,267.593,0,0,0,0,100,0), -- 18:41:38
+(@PATH,15,3452.981,-3624.833,269.3551,0,0,0,0,100,0), -- 18:41:46
+(@PATH,16,3453.006,-3638.403,276.4746,0,0,0,0,100,0), -- 18:41:59
+(@PATH,17,3453.413,-3650.563,282.8547,0,0,0,0,100,0), -- 18:42:06
+(@PATH,18,3453.339,-3674.839,294.1114,0,0,0,0,100,0), -- 18:42:12
+(@PATH,19,3453.625,-3707.783,294.6607,0,0,0,0,100,0), -- 18:42:23
+(@PATH,20,3453.646,-3719.333,294.6607,0,0,0,0,100,0), -- 18:42:36
+(@PATH,21,3440.435,-3724.057,294.6607,0,0,0,0,100,0), -- 18:42:41
+(@PATH,22,3433.669,-3735.089,294.6609,0,0,0,0,100,0), -- 18:42:46
+(@PATH,23,3435.129,-3747.669,294.6607,0,0,0,0,100,0), -- 18:42:50
+(@PATH,24,3444.191,-3756.717,294.6607,0,0,0,0,100,0), -- 18:42:55
+(@PATH,25,3457.736,-3759.273,294.6607,0,0,0,0,100,0), -- 18:43:01
+(@PATH,26,3468.683,-3752.32,294.6607,0,0,0,0,100,0), -- 18:43:06
+(@PATH,27,3473.417,-3741.013,294.6607,0,0,0,0,100,0), -- 18:43:12
+(@PATH,28,3469.141,-3727.593,294.6607,0,0,0,0,100,0), -- 18:43:17
+(@PATH,29,3461.402,-3721.552,294.6607,0,0,0,0,100,0), -- 18:43:22
+(@PATH,30,3453.865,-3719.445,294.6607,0,0,0,0,100,0), -- 18:43:27
+(@PATH,31,3453.944,-3707.97,294.6607,0,0,0,0,100,0), -- 18:43:29
+(@PATH,32,3453.922,-3674.717,294.0525,0,0,0,0,100,0), -- 18:43:34
+(@PATH,33,3454.177,-3650.563,282.855,0,0,0,0,100,0), -- 18:43:47
+(@PATH,34,3454.576,-3638.243,276.3913,0,0,0,0,100,0), -- 18:43:58
+(@PATH,35,3454.075,-3614.297,267.5918,0,0,0,0,100,0), -- 18:44:03
+(@PATH,36,3454.152,-3589.311,267.593,0,0,0,0,100,0); -- 18:44:14
+
+-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT'
+SET @NPC := 127862;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3234.124,`position_y`=-3743.281,`position_z`=280.9517 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,3234.124,-3743.281,280.9517,0,0,0,0,100,0), -- 18:45:33
+(@PATH,2,3234.624,-3733.446,282.4194,0,0,0,0,100,0), -- 18:45:43
+(@PATH,3,3252.519,-3730.217,279.2638,0,0,0,0,100,0), -- 18:45:46
+(@PATH,4,3276.249,-3724.284,275.8947,0,0,0,0,100,0), -- 18:45:54
+(@PATH,5,3309.417,-3714.943,266.8448,0,0,0,0,100,0), -- 18:46:03
+(@PATH,6,3322.029,-3700.557,262.8869,0,0,0,0,100,0), -- 18:46:18
+(@PATH,7,3298.23,-3700.239,271.5519,0,0,0,0,100,0), -- 18:46:26
+(@PATH,8,3280.485,-3698.461,278.4746,0,0,0,0,100,0), -- 18:46:36
+(@PATH,9,3298.23,-3700.239,271.5519,0,0,0,0,100,0), -- 18:46:45
+(@PATH,10,3321.937,-3700.525,262.8836,0,0,0,0,100,0), -- 18:46:52
+(@PATH,11,3309.417,-3714.943,266.8448,0,0,0,0,100,0), -- 18:47:02
+(@PATH,12,3276.249,-3724.284,275.8947,0,0,0,0,100,0), -- 18:47:10
+(@PATH,13,3252.581,-3730.202,279.2548,0,0,0,0,100,0), -- 18:47:25
+(@PATH,14,3234.624,-3733.446,282.4194,0,0,0,0,100,0), -- 18:47:34
+(@PATH,15,3234.132,-3743.128,280.9408,0,0,0,0,100,0), -- 18:47:42
+(@PATH,16,3247.629,-3762.814,277.5423,0,0,0,0,100,0), -- 18:47:45
+(@PATH,17,3232.144,-3779.076,273.1304,0,0,0,0,100,0), -- 18:47:55
+(@PATH,18,3247.629,-3762.814,277.5423,0,0,0,0,100,0); -- 18:48:06
+
+-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT'
+SET @NPC := 127863;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3232.124,`position_y`=-3751.281,`position_z`=280.9517 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,3234.124,-3743.281,280.9517,0,0,0,0,100,0), -- 18:45:33
+(@PATH,2,3234.624,-3733.446,282.4194,0,0,0,0,100,0), -- 18:45:43
+(@PATH,3,3252.519,-3730.217,279.2638,0,0,0,0,100,0), -- 18:45:46
+(@PATH,4,3276.249,-3724.284,275.8947,0,0,0,0,100,0), -- 18:45:54
+(@PATH,5,3309.417,-3714.943,266.8448,0,0,0,0,100,0), -- 18:46:03
+(@PATH,6,3322.029,-3700.557,262.8869,0,0,0,0,100,0), -- 18:46:18
+(@PATH,7,3298.23,-3700.239,271.5519,0,0,0,0,100,0), -- 18:46:26
+(@PATH,8,3280.485,-3698.461,278.4746,0,0,0,0,100,0), -- 18:46:36
+(@PATH,9,3298.23,-3700.239,271.5519,0,0,0,0,100,0), -- 18:46:45
+(@PATH,10,3321.937,-3700.525,262.8836,0,0,0,0,100,0), -- 18:46:52
+(@PATH,11,3309.417,-3714.943,266.8448,0,0,0,0,100,0), -- 18:47:02
+(@PATH,12,3276.249,-3724.284,275.8947,0,0,0,0,100,0), -- 18:47:10
+(@PATH,13,3252.581,-3730.202,279.2548,0,0,0,0,100,0), -- 18:47:25
+(@PATH,14,3234.624,-3733.446,282.4194,0,0,0,0,100,0), -- 18:47:34
+(@PATH,15,3234.132,-3743.128,280.9408,0,0,0,0,100,0), -- 18:47:42
+(@PATH,16,3247.629,-3762.814,277.5423,0,0,0,0,100,0), -- 18:47:45
+(@PATH,17,3232.144,-3779.076,273.1304,0,0,0,0,100,0), -- 18:47:55
+(@PATH,18,3247.629,-3762.814,277.5423,0,0,0,0,100,0); -- 18:48:06
+
+-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT'
+SET @NPC := 127872;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3282.724,`position_y`=-3894.288,`position_z`=294.6608 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,3282.724,-3894.288,294.6608,0,0,0,0,100,0), -- 18:48:08
+(@PATH,2,3280.431,-3878.874,294.6607,0,0,0,0,100,0), -- 18:48:14
+(@PATH,3,3288.137,-3862.199,294.6597,0,0,0,0,100,0), -- 18:48:21
+(@PATH,4,3300.762,-3854.986,294.6609,0,0,0,0,100,0), -- 18:48:28
+(@PATH,5,3317.737,-3854.183,294.6609,0,0,0,0,100,0), -- 18:48:34
+(@PATH,6,3337.437,-3853.406,294.6607,0,0,0,0,100,0), -- 18:48:41
+(@PATH,7,3359.545,-3831.036,294.662,0,0,0,0,100,0), -- 18:48:48
+(@PATH,8,3383.364,-3807.658,294.6969,0,0,0,0,100,0), -- 18:49:02
+(@PATH,9,3407.369,-3783.911,294.661,0,0,0,0,100,0), -- 18:49:15
+(@PATH,10,3425.444,-3761.708,294.6607,0,0,0,0,100,0), -- 18:49:29
+(@PATH,11,3425.071,-3748.542,294.6605,0,0,0,0,100,0), -- 18:49:39
+(@PATH,12,3425.387,-3729.456,294.6607,0,0,0,0,100,0), -- 18:49:44
+(@PATH,13,3435.633,-3715.143,294.6598,0,0,0,0,100,0), -- 18:49:53
+(@PATH,14,3453.195,-3709.209,294.6607,0,0,0,0,100,0), -- 18:49:59
+(@PATH,15,3465.947,-3712.353,294.6602,0,0,0,0,100,0), -- 18:50:07
+(@PATH,16,3477.195,-3720.679,294.6599,0,0,0,0,100,0), -- 18:50:12
+(@PATH,17,3483.336,-3735.452,294.6605,0,0,0,0,100,0), -- 18:50:17
+(@PATH,18,3481.773,-3748.506,294.66,0,0,0,0,100,0), -- 18:50:24
+(@PATH,19,3474.602,-3761.479,294.6591,0,0,0,0,100,0), -- 18:50:29
+(@PATH,20,3459.724,-3768.537,294.6591,0,0,0,0,100,0), -- 18:50:35
+(@PATH,21,3444.191,-3767.875,294.6595,0,0,0,0,100,0), -- 18:50:41
+(@PATH,22,3431.064,-3767.097,294.6601,0,0,0,0,100,0), -- 18:50:49
+(@PATH,23,3410.49,-3782.893,294.6607,0,0,0,0,100,0), -- 18:50:53
+(@PATH,24,3385.208,-3808.768,294.6991,0,0,0,0,100,0), -- 18:51:03
+(@PATH,25,3361.281,-3832.754,294.662,0,0,0,0,100,0), -- 18:51:18
+(@PATH,26,3338.748,-3854.621,294.6607,0,0,0,0,100,0), -- 18:51:32
+(@PATH,27,3338.51,-3872.156,294.6597,0,0,0,0,100,0), -- 18:51:44
+(@PATH,28,3339.48,-3888.635,294.6605,0,0,0,0,100,0), -- 18:51:51
+(@PATH,29,3325.759,-3908.016,294.6607,0,0,0,0,100,0), -- 18:51:58
+(@PATH,30,3310.214,-3913.58,294.6595,0,0,0,0,100,0), -- 18:52:08
+(@PATH,31,3292.234,-3906.752,294.6605,0,0,0,0,100,0); -- 18:52:14
+
+-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT'
+SET @NPC := 127873;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3286.724,`position_y`=-3902.288,`position_z`=294.6608 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,3282.724,-3894.288,294.6608,0,0,0,0,100,0), -- 18:48:08
+(@PATH,2,3280.431,-3878.874,294.6607,0,0,0,0,100,0), -- 18:48:14
+(@PATH,3,3288.137,-3862.199,294.6597,0,0,0,0,100,0), -- 18:48:21
+(@PATH,4,3300.762,-3854.986,294.6609,0,0,0,0,100,0), -- 18:48:28
+(@PATH,5,3317.737,-3854.183,294.6609,0,0,0,0,100,0), -- 18:48:34
+(@PATH,6,3337.437,-3853.406,294.6607,0,0,0,0,100,0), -- 18:48:41
+(@PATH,7,3359.545,-3831.036,294.662,0,0,0,0,100,0), -- 18:48:48
+(@PATH,8,3383.364,-3807.658,294.6969,0,0,0,0,100,0), -- 18:49:02
+(@PATH,9,3407.369,-3783.911,294.661,0,0,0,0,100,0), -- 18:49:15
+(@PATH,10,3425.444,-3761.708,294.6607,0,0,0,0,100,0), -- 18:49:29
+(@PATH,11,3425.071,-3748.542,294.6605,0,0,0,0,100,0), -- 18:49:39
+(@PATH,12,3425.387,-3729.456,294.6607,0,0,0,0,100,0), -- 18:49:44
+(@PATH,13,3435.633,-3715.143,294.6598,0,0,0,0,100,0), -- 18:49:53
+(@PATH,14,3453.195,-3709.209,294.6607,0,0,0,0,100,0), -- 18:49:59
+(@PATH,15,3465.947,-3712.353,294.6602,0,0,0,0,100,0), -- 18:50:07
+(@PATH,16,3477.195,-3720.679,294.6599,0,0,0,0,100,0), -- 18:50:12
+(@PATH,17,3483.336,-3735.452,294.6605,0,0,0,0,100,0), -- 18:50:17
+(@PATH,18,3481.773,-3748.506,294.66,0,0,0,0,100,0), -- 18:50:24
+(@PATH,19,3474.602,-3761.479,294.6591,0,0,0,0,100,0), -- 18:50:29
+(@PATH,20,3459.724,-3768.537,294.6591,0,0,0,0,100,0), -- 18:50:35
+(@PATH,21,3444.191,-3767.875,294.6595,0,0,0,0,100,0), -- 18:50:41
+(@PATH,22,3431.064,-3767.097,294.6601,0,0,0,0,100,0), -- 18:50:49
+(@PATH,23,3410.49,-3782.893,294.6607,0,0,0,0,100,0), -- 18:50:53
+(@PATH,24,3385.208,-3808.768,294.6991,0,0,0,0,100,0), -- 18:51:03
+(@PATH,25,3361.281,-3832.754,294.662,0,0,0,0,100,0), -- 18:51:18
+(@PATH,26,3338.748,-3854.621,294.6607,0,0,0,0,100,0), -- 18:51:32
+(@PATH,27,3338.51,-3872.156,294.6597,0,0,0,0,100,0), -- 18:51:44
+(@PATH,28,3339.48,-3888.635,294.6605,0,0,0,0,100,0), -- 18:51:51
+(@PATH,29,3325.759,-3908.016,294.6607,0,0,0,0,100,0), -- 18:51:58
+(@PATH,30,3310.214,-3913.58,294.6595,0,0,0,0,100,0), -- 18:52:08
+(@PATH,31,3292.234,-3906.752,294.6605,0,0,0,0,100,0); -- 18:52:14
+
+-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT'
+SET @NPC := 127864;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3118.083,`position_y`=-3883.491,`position_z`=267.593 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,3118.083,-3883.491,267.593,0,0,0,0,100,0), -- 18:36:24
+(@PATH,2,3114.162,-3894.186,267.593,0,0,0,0,100,0), -- 18:36:33
+(@PATH,3,3104.3,-3900.575,267.593,0,0,0,0,100,0), -- 18:36:38
+(@PATH,4,3093.041,-3899.523,267.593,0,0,0,0,100,0), -- 18:36:43
+(@PATH,5,3083.292,-3890.907,267.593,0,0,0,0,100,0), -- 18:36:48
+(@PATH,6,3082.536,-3878.924,267.593,0,0,0,0,100,0), -- 18:36:53
+(@PATH,7,3088.724,-3868.493,267.593,0,0,0,0,100,0), -- 18:36:57
+(@PATH,8,3103.835,-3863.884,267.593,0,0,0,0,100,0), -- 18:37:02
+(@PATH,9,3114.156,-3873.857,267.593,0,0,0,0,100,0), -- 18:37:08
+(@PATH,10,3118.014,-3882.239,267.593,0,0,0,0,100,0), -- 18:37:14
+(@PATH,11,3142.844,-3882.002,267.593,0,0,0,0,100,0), -- 18:37:18
+(@PATH,12,3166.273,-3881.469,267.5934,0,0,0,0,100,0), -- 18:37:28
+(@PATH,13,3194.12,-3881.767,268.6533,0,0,0,0,100,0), -- 18:37:37
+(@PATH,14,3207.929,-3881.54,275.8944,0,0,0,0,100,0), -- 18:37:48
+(@PATH,15,3221.411,-3881.945,282.9668,0,0,0,0,100,0), -- 18:37:54
+(@PATH,16,3241.861,-3882.487,292.3779,0,0,0,0,100,0), -- 18:38:01
+(@PATH,17,3260.216,-3882.229,294.6607,0,0,0,0,100,0), -- 18:38:10
+(@PATH,18,3279.568,-3882.604,294.6607,0,0,0,0,100,0), -- 18:38:17
+(@PATH,19,3290.396,-3881.747,294.6607,0,0,0,0,100,0), -- 18:38:25
+(@PATH,20,3296.476,-3869.041,294.6607,0,0,0,0,100,0), -- 18:38:30
+(@PATH,21,3307.822,-3864.203,294.6607,0,0,0,0,100,0), -- 18:46:32
+(@PATH,22,3321.301,-3868.157,294.6607,0,0,0,0,100,0), -- 18:46:37
+(@PATH,23,3328.406,-3877.447,294.6597,0,0,0,0,100,0), -- 18:46:43
+(@PATH,24,3327.705,-3889.598,294.6607,0,0,0,0,100,0), -- 18:46:47
+(@PATH,25,3320.085,-3897.669,294.6607,0,0,0,0,100,0), -- 18:46:52
+(@PATH,26,3312.01,-3901.51,294.6607,0,0,0,0,100,0), -- 18:46:57
+(@PATH,27,3297.603,-3897.307,294.6607,0,0,0,0,100,0), -- 18:47:00
+(@PATH,28,3292.267,-3890.234,294.6607,0,0,0,0,100,0), -- 18:47:07
+(@PATH,29,3290.384,-3882.75,294.6607,0,0,0,0,100,0), -- 18:47:10
+(@PATH,30,3279.155,-3882.98,294.6607,0,0,0,0,100,0), -- 18:47:14
+(@PATH,31,3260.253,-3882.767,294.6607,0,0,0,0,100,0), -- 18:47:17
+(@PATH,32,3241.78,-3882.872,292.339,0,0,0,0,100,0), -- 18:47:25
+(@PATH,33,3221.214,-3882.398,282.8636,0,0,0,0,100,0), -- 18:47:33
+(@PATH,34,3207.818,-3881.953,275.8358,0,0,0,0,100,0), -- 18:47:42
+(@PATH,35,3194.124,-3882.38,268.655,0,0,0,0,100,0), -- 18:47:48
+(@PATH,36,3166.121,-3882.08,267.5934,0,0,0,0,100,0), -- 18:47:54
+(@PATH,37,3142.54,-3882.999,267.593,0,0,0,0,100,0); -- 18:48:06
+
+-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT'
+SET @NPC := 127865;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3126.083,`position_y`=-3882.491,`position_z`=267.593 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,3118.083,-3883.491,267.593,0,0,0,0,100,0), -- 18:36:24
+(@PATH,2,3114.162,-3894.186,267.593,0,0,0,0,100,0), -- 18:36:33
+(@PATH,3,3104.3,-3900.575,267.593,0,0,0,0,100,0), -- 18:36:38
+(@PATH,4,3093.041,-3899.523,267.593,0,0,0,0,100,0), -- 18:36:43
+(@PATH,5,3083.292,-3890.907,267.593,0,0,0,0,100,0), -- 18:36:48
+(@PATH,6,3082.536,-3878.924,267.593,0,0,0,0,100,0), -- 18:36:53
+(@PATH,7,3088.724,-3868.493,267.593,0,0,0,0,100,0), -- 18:36:57
+(@PATH,8,3103.835,-3863.884,267.593,0,0,0,0,100,0), -- 18:37:02
+(@PATH,9,3114.156,-3873.857,267.593,0,0,0,0,100,0), -- 18:37:08
+(@PATH,10,3118.014,-3882.239,267.593,0,0,0,0,100,0), -- 18:37:14
+(@PATH,11,3142.844,-3882.002,267.593,0,0,0,0,100,0), -- 18:37:18
+(@PATH,12,3166.273,-3881.469,267.5934,0,0,0,0,100,0), -- 18:37:28
+(@PATH,13,3194.12,-3881.767,268.6533,0,0,0,0,100,0), -- 18:37:37
+(@PATH,14,3207.929,-3881.54,275.8944,0,0,0,0,100,0), -- 18:37:48
+(@PATH,15,3221.411,-3881.945,282.9668,0,0,0,0,100,0), -- 18:37:54
+(@PATH,16,3241.861,-3882.487,292.3779,0,0,0,0,100,0), -- 18:38:01
+(@PATH,17,3260.216,-3882.229,294.6607,0,0,0,0,100,0), -- 18:38:10
+(@PATH,18,3279.568,-3882.604,294.6607,0,0,0,0,100,0), -- 18:38:17
+(@PATH,19,3290.396,-3881.747,294.6607,0,0,0,0,100,0), -- 18:38:25
+(@PATH,20,3296.476,-3869.041,294.6607,0,0,0,0,100,0), -- 18:38:30
+(@PATH,21,3307.822,-3864.203,294.6607,0,0,0,0,100,0), -- 18:46:32
+(@PATH,22,3321.301,-3868.157,294.6607,0,0,0,0,100,0), -- 18:46:37
+(@PATH,23,3328.406,-3877.447,294.6597,0,0,0,0,100,0), -- 18:46:43
+(@PATH,24,3327.705,-3889.598,294.6607,0,0,0,0,100,0), -- 18:46:47
+(@PATH,25,3320.085,-3897.669,294.6607,0,0,0,0,100,0), -- 18:46:52
+(@PATH,26,3312.01,-3901.51,294.6607,0,0,0,0,100,0), -- 18:46:57
+(@PATH,27,3297.603,-3897.307,294.6607,0,0,0,0,100,0), -- 18:47:00
+(@PATH,28,3292.267,-3890.234,294.6607,0,0,0,0,100,0), -- 18:47:07
+(@PATH,29,3290.384,-3882.75,294.6607,0,0,0,0,100,0), -- 18:47:10
+(@PATH,30,3279.155,-3882.98,294.6607,0,0,0,0,100,0), -- 18:47:14
+(@PATH,31,3260.253,-3882.767,294.6607,0,0,0,0,100,0), -- 18:47:17
+(@PATH,32,3241.78,-3882.872,292.339,0,0,0,0,100,0), -- 18:47:25
+(@PATH,33,3221.214,-3882.398,282.8636,0,0,0,0,100,0), -- 18:47:33
+(@PATH,34,3207.818,-3881.953,275.8358,0,0,0,0,100,0), -- 18:47:42
+(@PATH,35,3194.124,-3882.38,268.655,0,0,0,0,100,0), -- 18:47:48
+(@PATH,36,3166.121,-3882.08,267.5934,0,0,0,0,100,0), -- 18:47:54
+(@PATH,37,3142.54,-3882.999,267.593,0,0,0,0,100,0); -- 18:48:06
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127862,127863,127864,127865,127866,127867,127872,127873);
+DELETE FROM `creature_formations` WHERE `memberGUID` IN (127862,127863,127864,127865,127866,127867,127872,127873);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127866,127866,0,0,2,0,0),
+(127866,127867,8,360,2,0,0),
+(127862,127862,0,0,2,0,0),
+(127862,127863,8,360,2,0,0),
+(127872,127872,0,0,2,0,0),
+(127872,127873,8,360,2,0,0),
+(127864,127864,0,0,2,0,0),
+(127864,127865,8,360,2,0,0);
+
+-- Pathing for Poisonous Skitterer Entry: 15977 'TDB FORMAT'
+SET @NPC := 127907;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3074.529,`position_y`=-3897.057,`position_z`=267.593 WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@PATH,0,0,1,0, ''),(@NPC+3,@PATH,0,0,1,0, ''),
+(@NPC+4,@PATH,0,0,1,0, ''),(@NPC+5,@PATH,0,0,1,0, ''),(@NPC+6,@PATH,0,0,1,0, ''),(@NPC+7,@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,3074.529,-3897.057,267.593,0,0,1,0,100,0), -- 18:49:16
+(@PATH,2,3079.677,-3905.275,267.5924,0,0,1,0,100,0), -- 18:49:18
+(@PATH,3,3100.693,-3912.941,267.593,0,0,1,0,100,0), -- 18:49:19
+(@PATH,4,3117.195,-3907.615,267.5934,0,0,1,0,100,0), -- 18:49:21
+(@PATH,5,3127.366,-3895.706,267.593,0,0,1,0,100,0), -- 18:49:22
+(@PATH,6,3140.936,-3884.294,267.593,0,0,1,0,100,0), -- 18:49:24
+(@PATH,7,3158.318,-3883.925,267.593,0,0,1,0,100,0), -- 18:49:26
+(@PATH,8,3174.53,-3883.984,267.5941,0,0,1,0,100,0), -- 18:49:27
+(@PATH,9,3194.791,-3884.305,269.0044,0,0,1,0,100,0), -- 18:49:30
+(@PATH,10,3205.072,-3884.625,274.395,0,0,1,0,100,0), -- 18:49:31
+(@PATH,11,3215.293,-3885.147,279.7566,0,0,1,0,100,0), -- 18:49:32
+(@PATH,12,3223.794,-3885.607,284.2162,0,0,1,0,100,0), -- 18:49:33
+(@PATH,13,3237.89,-3886.143,290.4647,0,0,1,0,100,0), -- 18:49:35
+(@PATH,14,3247.501,-3886.756,294.6604,0,0,1,0,100,0), -- 18:49:36
+(@PATH,15,3267.746,-3887.45,294.6607,0,0,1,0,100,0), -- 18:49:37
+(@PATH,16,3282.858,-3895.334,294.6606,0,0,1,0,100,0), -- 18:49:39
+(@PATH,17,3295.857,-3909.075,294.6605,0,0,1,0,100,0), -- 18:49:41
+(@PATH,18,3313.104,-3913.105,294.6597,0,0,1,0,100,0), -- 18:49:43
+(@PATH,19,3331.879,-3904.76,294.6607,0,0,1,0,100,0), -- 18:49:44
+(@PATH,20,3338.559,-3891.88,294.6608,0,0,1,0,100,0), -- 18:49:47
+(@PATH,21,3339.517,-3878.169,294.6594,0,0,1,0,100,0), -- 18:49:48
+(@PATH,22,3332.953,-3864.011,294.6603,0,0,1,0,100,0), -- 18:49:49
+(@PATH,23,3319.689,-3854.916,294.6607,0,0,1,0,100,0), -- 18:49:50
+(@PATH,24,3304.591,-3853.372,294.6609,0,0,1,0,100,0), -- 18:49:53
+(@PATH,25,3288.425,-3861.284,294.6596,0,0,1,0,100,0), -- 18:49:54
+(@PATH,26,3280.122,-3870.386,294.6606,0,0,1,0,100,0), -- 18:49:56
+(@PATH,27,3267.866,-3880.449,294.6615,0,0,1,0,100,0), -- 18:49:58
+(@PATH,28,3247.675,-3880.42,294.6608,0,0,1,0,100,0), -- 18:49:59
+(@PATH,29,3237.588,-3880.728,290.3199,0,0,1,0,100,0), -- 18:50:01
+(@PATH,30,3224.797,-3880.583,284.7434,0,0,1,0,100,0), -- 18:50:02
+(@PATH,31,3215.042,-3880.425,279.6261,0,0,1,0,100,0), -- 18:50:04
+(@PATH,32,3195.322,-3880.004,269.2845,0,0,1,0,100,0), -- 18:50:05
+(@PATH,33,3175.766,-3879.59,267.5942,0,0,1,0,100,0), -- 18:50:06
+(@PATH,34,3158.302,-3879.587,267.593,0,0,1,0,100,0), -- 18:50:09
+(@PATH,35,3140.589,-3879.343,267.593,0,0,1,0,100,0), -- 18:50:11
+(@PATH,36,3127.137,-3869.814,267.5929,0,0,1,0,100,0), -- 18:50:12
+(@PATH,37,3118.936,-3859.253,267.5927,0,0,1,0,100,0), -- 18:50:13
+(@PATH,38,3103.765,-3853.207,267.5929,0,0,1,0,100,0), -- 18:50:15
+(@PATH,39,3087.844,-3856.353,267.593,0,0,1,0,100,0), -- 18:50:17
+(@PATH,40,3075.642,-3865.845,267.5934,0,0,1,0,100,0), -- 18:50:18
+(@PATH,41,3070.007,-3884.099,267.593,0,0,1,0,100,0); -- 18:50:19
+-- 0x1C3B1C42A00F9A400063AC0000019CDF .go 3074.529 -3897.057 267.593
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+DELETE FROM `creature_formations` WHERE `memberGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@NPC+1,6,150,2,0,0),
+(@NPC,@NPC+2,6,100,2,0,0),
+(@NPC,@NPC+3,6,50,2,0,0),
+(@NPC,@NPC+4,6,360,2,0,0),
+(@NPC,@NPC+5,6,310,2,0,0),
+(@NPC,@NPC+6,6,240,2,0,0),
+(@NPC,@NPC+7,6,190,2,0,0);
+
+-- Pathing for Poisonous Skitterer Entry: 15977 'TDB FORMAT'
+SET @NPC := 127963;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3224.441,`position_y`=-3876.754,`position_z`=284.5573 WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@PATH,0,0,1,0, ''),(@NPC+3,@PATH,0,0,1,0, ''),
+(@NPC+4,@PATH,0,0,1,0, ''),(@NPC+5,@PATH,0,0,1,0, ''),(@NPC+6,@PATH,0,0,1,0, ''),(@NPC+7,@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,3224.441,-3876.754,284.5573,0,0,1,0,100,0), -- 18:48:59
+(@PATH,2,3243.073,-3881.118,292.9622,0,0,1,0,100,0), -- 18:49:03
+(@PATH,3,3264.531,-3885.239,294.6607,0,0,1,0,100,0), -- 18:49:04
+(@PATH,4,3280.712,-3887.944,294.6607,0,0,1,0,100,0), -- 18:49:07
+(@PATH,5,3286.485,-3901.147,294.66,0,0,1,0,100,0), -- 18:49:08
+(@PATH,6,3299.353,-3910.954,294.6605,0,0,1,0,100,0), -- 18:49:10
+(@PATH,7,3310.171,-3913.553,294.6593,0,0,1,0,100,0), -- 18:49:12
+(@PATH,8,3320.141,-3911.575,294.6602,0,0,1,0,100,0), -- 18:49:13
+(@PATH,9,3327.62,-3907.016,294.6607,0,0,1,0,100,0), -- 18:49:14
+(@PATH,10,3337.314,-3895.928,294.6607,0,0,1,0,100,0), -- 18:49:15
+(@PATH,11,3339.708,-3878.755,294.6594,0,0,1,0,100,0), -- 18:49:16
+(@PATH,12,3333.498,-3863.702,294.6603,0,0,1,0,100,0), -- 18:49:18
+(@PATH,13,3323.844,-3856.551,294.6607,0,0,1,0,100,0), -- 18:49:20
+(@PATH,14,3309.547,-3852.652,294.6601,0,0,1,0,100,0), -- 18:49:21
+(@PATH,15,3294.998,-3857.095,294.6609,0,0,1,0,100,0), -- 18:49:22
+(@PATH,16,3284.745,-3868.869,294.6604,0,0,1,0,100,0), -- 18:49:24
+(@PATH,17,3280.295,-3878.902,294.6607,0,0,1,0,100,0), -- 18:49:25
+(@PATH,18,3264.526,-3882.421,294.6607,0,0,1,0,100,0), -- 18:49:26
+(@PATH,19,3243.129,-3885.538,292.9888,0,0,1,0,100,0), -- 18:49:29
+(@PATH,20,3225,-3889.948,284.8481,0,0,1,0,100,0), -- 18:49:30
+(@PATH,21,3207.006,-3898.323,275.4061,0,0,1,0,100,0), -- 18:49:32
+(@PATH,22,3182.24,-3901.498,267.5922,0,0,1,0,100,0), -- 18:49:35
+(@PATH,23,3181.843,-3882.055,267.5952,0,0,1,0,100,0), -- 18:49:37
+(@PATH,24,3181.309,-3863.954,267.6013,0,0,1,0,100,0), -- 18:49:39
+(@PATH,25,3202.393,-3869.113,272.9927,0,0,1,0,100,0); -- 18:49:41
+-- 0x1C3B1C42A00F9A400063AC0004019CDF .go 3224.441 -3876.754 284.5573
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+DELETE FROM `creature_formations` WHERE `memberGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@NPC+1,6,150,2,0,0),
+(@NPC,@NPC+2,6,100,2,0,0),
+(@NPC,@NPC+3,6,50,2,0,0),
+(@NPC,@NPC+4,6,360,2,0,0),
+(@NPC,@NPC+5,6,310,2,0,0),
+(@NPC,@NPC+6,6,240,2,0,0),
+(@NPC,@NPC+7,6,190,2,0,0);
+
+-- Pathing for Poisonous Skitterer Entry: 15977 'TDB FORMAT'
+SET @NPC := 127915;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3435.956,`position_y`=-3606.878,`position_z`=267.5925 WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@PATH,0,0,1,0, ''),(@NPC+3,@PATH,0,0,1,0, ''),
+(@NPC+4,@PATH,0,0,1,0, ''),(@NPC+5,@PATH,0,0,1,0, ''),(@NPC+6,@PATH,0,0,1,0, ''),(@NPC+7,@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,3435.956,-3606.878,267.5925,0,0,1,0,100,0), -- 18:40:42
+(@PATH,2,3435.056,-3623.646,268.7272,0,0,1,0,100,0), -- 18:40:43
+(@PATH,3,3434.696,-3642.454,278.5947,0,0,1,0,100,0), -- 18:40:45
+(@PATH,4,3451.302,-3657.603,286.5476,0,0,1,0,100,0), -- 18:40:47
+(@PATH,5,3451.777,-3674.688,294.0381,0,0,1,0,100,0), -- 18:40:49
+(@PATH,6,3450.148,-3687.086,294.6606,0,0,1,0,100,0), -- 18:40:52
+(@PATH,7,3448.747,-3700.197,294.6606,0,0,1,0,100,0), -- 18:40:53
+(@PATH,8,3441.068,-3712.697,294.6603,0,0,1,0,100,0), -- 18:40:54
+(@PATH,9,3427.858,-3724.603,294.6606,0,0,1,0,100,0), -- 18:40:56
+(@PATH,10,3424.089,-3742.215,294.6599,0,0,1,0,100,0), -- 18:40:58
+(@PATH,11,3432.195,-3760.958,294.6607,0,0,1,0,100,0), -- 18:40:59
+(@PATH,12,3446.482,-3768.38,294.6594,0,0,1,0,100,0), -- 18:41:02
+(@PATH,13,3458.209,-3769.1,294.6591,0,0,1,0,100,0), -- 18:41:03
+(@PATH,14,3474.842,-3761.217,294.6591,0,0,1,0,100,0), -- 18:41:04
+(@PATH,15,3483.013,-3745.727,294.6602,0,0,1,0,100,0), -- 18:44:04
+(@PATH,16,3482.468,-3731.778,294.6606,0,0,1,0,100,0), -- 18:43:22
+(@PATH,17,3476.008,-3718.655,294.6598,0,0,1,0,100,0), -- 18:43:24
+(@PATH,18,3463.966,-3711.199,294.6607,0,0,1,0,100,0), -- 18:43:25
+(@PATH,19,3458.016,-3700.416,294.6607,0,0,1,0,100,0), -- 18:43:26
+(@PATH,20,3456.704,-3687.183,294.6606,0,0,1,0,100,0), -- 18:43:27
+(@PATH,21,3453.893,-3674.658,294.0241,0,0,1,0,100,0), -- 18:43:28
+(@PATH,22,3453.96,-3657.726,286.6128,0,0,1,0,100,0), -- 18:43:30
+(@PATH,23,3469.155,-3643.573,279.192,0,0,1,0,100,0), -- 18:43:32
+(@PATH,24,3470.532,-3624.281,269.0706,0,0,1,0,100,0), -- 18:43:34
+(@PATH,25,3470.325,-3607.22,267.5942,0,0,1,0,100,0), -- 18:43:37
+(@PATH,26,3451.28,-3607.224,267.5939,0,0,1,0,100,0); -- 18:43:38
+-- 0x1C3B1C42A00F9A400063AC0000019CE0 .go 3435.956 -3606.878 267.5925
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+DELETE FROM `creature_formations` WHERE `memberGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@NPC+1,6,150,2,0,0),
+(@NPC,@NPC+2,6,100,2,0,0),
+(@NPC,@NPC+3,6,50,2,0,0),
+(@NPC,@NPC+4,6,360,2,0,0),
+(@NPC,@NPC+5,6,310,2,0,0),
+(@NPC,@NPC+6,6,240,2,0,0),
+(@NPC,@NPC+7,6,190,2,0,0);
+
+-- Pathing for Poisonous Skitterer Entry: 15977 'TDB FORMAT'
+SET @NPC := 127971;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3295.49,`position_y`=-3908.793,`position_z`=294.6605 WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@PATH,0,0,1,0, ''),(@NPC+3,@PATH,0,0,1,0, ''),
+(@NPC+4,@PATH,0,0,1,0, ''),(@NPC+5,@PATH,0,0,1,0, ''),(@NPC+6,@PATH,0,0,1,0, ''),(@NPC+7,@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,3295.49,-3908.793,294.6605,0,0,1,0,100,0), -- 18:51:17
+(@PATH,2,3315.678,-3912.224,294.6599,0,0,1,0,100,0), -- 18:51:19
+(@PATH,3,3333.155,-3901.934,294.6607,0,0,1,0,100,0), -- 18:51:21
+(@PATH,4,3340.176,-3885.257,294.6602,0,0,1,0,100,0), -- 18:51:23
+(@PATH,5,3340.906,-3871.007,294.6597,0,0,1,0,100,0), -- 18:51:24
+(@PATH,6,3346.968,-3852.773,294.6607,0,0,1,0,100,0), -- 18:51:27
+(@PATH,7,3351.746,-3834.469,294.661,0,0,1,0,100,0), -- 18:51:28
+(@PATH,8,3355.633,-3811.367,294.6529,0,0,1,0,100,0), -- 18:51:30
+(@PATH,9,3364.557,-3793.01,294.6719,0,0,1,0,100,0), -- 18:51:33
+(@PATH,10,3373.259,-3788.029,294.6747,0,0,1,0,100,0), -- 18:51:34
+(@PATH,11,3386.617,-3791.233,294.6732,0,0,1,0,100,0), -- 18:51:35
+(@PATH,12,3403.893,-3786.905,294.6616,0,0,1,0,100,0), -- 18:51:36
+(@PATH,13,3417.919,-3780.905,294.6603,0,0,1,0,100,0), -- 18:51:39
+(@PATH,14,3435.631,-3777.892,294.6598,0,0,1,0,100,0), -- 18:51:40
+(@PATH,15,3453.584,-3770.242,294.6595,0,0,1,0,100,0), -- 18:51:41
+(@PATH,16,3473.68,-3761.83,294.6591,0,0,1,0,100,0), -- 18:51:44
+(@PATH,17,3482.105,-3748.733,294.66,0,0,1,0,100,0), -- 18:51:46
+(@PATH,18,3481.656,-3730.049,294.6605,0,0,1,0,100,0), -- 18:51:47
+(@PATH,19,3466.719,-3713.448,294.6601,0,0,1,0,100,0), -- 18:51:50
+(@PATH,20,3442.352,-3711.847,294.6607,0,0,1,0,100,0), -- 18:51:52
+(@PATH,21,3425.655,-3728.148,294.6607,0,0,1,0,100,0), -- 18:51:55
+(@PATH,22,3424.592,-3744.035,294.6601,0,0,1,0,100,0), -- 18:51:57
+(@PATH,23,3425.272,-3756.561,294.6607,0,0,1,0,100,0), -- 18:51:58
+(@PATH,24,3416.304,-3774.603,294.6607,0,0,1,0,100,0), -- 18:51:59
+(@PATH,25,3405.274,-3797.244,294.6658,0,0,1,0,100,0), -- 18:52:02
+(@PATH,26,3394.972,-3815.078,294.7111,0,0,1,0,100,0), -- 18:52:04
+(@PATH,27,3377.224,-3831.485,294.6744,0,0,1,0,100,0), -- 18:52:06
+(@PATH,28,3355.986,-3838.537,294.661,0,0,1,0,100,0), -- 18:52:08
+(@PATH,29,3337.649,-3843.212,294.6607,0,0,1,0,100,0), -- 18:52:10
+(@PATH,30,3316.94,-3850.059,294.6604,0,0,1,0,100,0), -- 18:52:13
+(@PATH,31,3304.55,-3853.525,294.6609,0,0,1,0,100,0), -- 18:52:15
+(@PATH,32,3288.827,-3861.687,294.6596,0,0,1,0,100,0), -- 18:52:16
+(@PATH,33,3281.996,-3873.274,294.6607,0,0,1,0,100,0), -- 18:52:18
+(@PATH,34,3281.982,-3891.924,294.6607,0,0,1,0,100,0); -- 18:52:19
+-- 0x1C3B1C42A00F9A400063AC0004019CE0 .go 3295.49 -3908.793 294.6605
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+DELETE FROM `creature_formations` WHERE `memberGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@NPC+1,6,150,2,0,0),
+(@NPC,@NPC+2,6,100,2,0,0),
+(@NPC,@NPC+3,6,50,2,0,0),
+(@NPC,@NPC+4,6,360,2,0,0),
+(@NPC,@NPC+5,6,310,2,0,0),
+(@NPC,@NPC+6,6,240,2,0,0),
+(@NPC,@NPC+7,6,190,2,0,0);
+
+-- Pathing for Poisonous Skitterer Entry: 15977 'TDB FORMAT'
+SET @NPC := 127923;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3445.511,`position_y`=-3562.019,`position_z`=267.5927 WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@PATH,0,0,1,0, ''),(@NPC+3,@PATH,0,0,1,0, ''),
+(@NPC+4,@PATH,0,0,1,0, ''),(@NPC+5,@PATH,0,0,1,0, ''),(@NPC+6,@PATH,0,0,1,0, ''),(@NPC+7,@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,3445.511,-3562.019,267.5927,0,0,1,0,100,0), -- 18:50:41
+(@PATH,2,3436.16,-3553.894,267.5926,0,0,1,0,100,0), -- 18:50:40
+(@PATH,3,3427.388,-3543.853,267.5927,0,0,1,0,100,0), -- 18:50:39
+(@PATH,4,3424.374,-3524.575,267.593,0,0,1,0,100,0), -- 18:50:36
+(@PATH,5,3430.726,-3510.367,267.5926,0,0,1,0,100,0), -- 18:50:35
+(@PATH,6,3450.23,-3500.03,267.593,0,0,1,0,100,0), -- 18:50:33
+(@PATH,7,3467.847,-3503.534,267.592,0,0,1,0,100,0), -- 18:50:32
+(@PATH,8,3476.588,-3510.952,267.5963,0,0,1,0,100,0), -- 18:50:30
+(@PATH,9,3481.654,-3519.189,267.599,0,0,1,0,100,0), -- 18:50:29
+(@PATH,10,3483.025,-3534.862,267.5939,0,0,1,0,100,0), -- 18:50:28
+(@PATH,11,3476.475,-3549.416,267.5925,0,0,1,0,100,0), -- 18:50:26
+(@PATH,12,3462.348,-3561.076,267.5923,0,0,1,0,100,0), -- 18:50:24
+(@PATH,13,3457.105,-3576.026,267.593,0,0,1,0,100,0), -- 18:50:22
+(@PATH,14,3456.484,-3596.646,267.5931,0,0,1,0,100,0), -- 18:50:21
+(@PATH,15,3456.006,-3616.097,267.5933,0,0,1,0,100,0), -- 18:50:18
+(@PATH,16,3455.418,-3633.274,273.7843,0,0,1,0,100,0), -- 18:50:17
+(@PATH,17,3455.296,-3644.975,279.9232,0,0,1,0,100,0), -- 18:50:16
+(@PATH,18,3455.71,-3658.097,286.8079,0,0,1,0,100,0), -- 18:50:13
+(@PATH,19,3454.985,-3676.887,294.6609,0,0,1,0,100,0), -- 18:50:12
+(@PATH,20,3455.906,-3694.337,294.6607,0,0,1,0,100,0), -- 18:50:10
+(@PATH,21,3467.804,-3706.619,294.66,0,0,1,0,100,0), -- 18:50:09
+(@PATH,22,3476.442,-3720.346,294.6599,0,0,1,0,100,0), -- 18:50:06
+(@PATH,23,3483.089,-3735.734,294.6605,0,0,1,0,100,0), -- 18:50:05
+(@PATH,24,3480.588,-3752.523,294.6599,0,0,1,0,100,0), -- 18:50:04
+(@PATH,25,3467.757,-3765.589,294.6591,0,0,1,0,100,0), -- 18:50:01
+(@PATH,26,3453.585,-3770.197,294.6595,0,0,1,0,100,0), -- 18:50:00
+(@PATH,27,3436.298,-3764.208,294.6599,0,0,1,0,100,0), -- 18:49:59
+(@PATH,28,3426.811,-3752.177,294.6607,0,0,1,0,100,0), -- 18:49:56
+(@PATH,29,3423.844,-3737.633,294.6601,0,0,1,0,100,0), -- 18:49:55
+(@PATH,30,3429.387,-3722.426,294.6605,0,0,1,0,100,0), -- 18:49:54
+(@PATH,31,3441.138,-3712.122,294.6603,0,0,1,0,100,0), -- 18:49:52
+(@PATH,32,3449.993,-3694.774,294.6606,0,0,1,0,100,0), -- 18:49:50
+(@PATH,33,3450.414,-3676.926,294.6604,0,0,1,0,100,0), -- 18:49:48
+(@PATH,34,3451.136,-3657.843,286.6731,0,0,1,0,100,0), -- 18:49:47
+(@PATH,35,3451.486,-3645.041,279.957,0,0,1,0,100,0), -- 18:49:46
+(@PATH,36,3451.301,-3632.746,273.5061,0,0,1,0,100,0), -- 18:49:43
+(@PATH,37,3451.295,-3615.899,267.594,0,0,1,0,100,0), -- 18:49:41
+(@PATH,38,3451.307,-3596.557,267.5931,0,0,1,0,100,0), -- 18:49:39
+(@PATH,39,3451.611,-3575.75,267.5927,0,0,1,0,100,0); -- 18:49:37
+-- 0x1C3B1C42A00F9A400063AC0008019CDF .go 3445.511 -3562.019 267.5927
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+DELETE FROM `creature_formations` WHERE `memberGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@NPC+1,6,150,2,0,0),
+(@NPC,@NPC+2,6,100,2,0,0),
+(@NPC,@NPC+3,6,50,2,0,0),
+(@NPC,@NPC+4,6,360,2,0,0),
+(@NPC,@NPC+5,6,310,2,0,0),
+(@NPC,@NPC+6,6,240,2,0,0),
+(@NPC,@NPC+7,6,190,2,0,0);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_01_world.sql
new file mode 100644
index 00000000000..a90442e8b5a
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_01_world.sql
@@ -0,0 +1,155 @@
+DELETE FROM `creature` WHERE `guid` IN (86098, 86097, 86092, 86091, 86090, 86088, 86089, 86087, 86086, 86085);
+
+-- Pathing for Dragonmaw Shaman Entry: 21720 'TDB FORMAT'
+SET @NPC := 75806;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4178.686,`position_y`=490.5659,`position_z`=30.16439 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,-4178.686,490.5659,30.16439,0,0,0,0,100,0), -- 10:20:24
+(@PATH,2,-4197.292,485.9068,30.38932,0,0,0,0,100,0), -- 10:20:35
+(@PATH,3,-4225.723,467.5575,41.27721,0,0,0,0,100,0), -- 10:20:44
+(@PATH,4,-4215.874,436.8994,48.21687,0,0,0,0,100,0), -- 10:20:57
+(@PATH,5,-4237.429,402.9925,63.27236,0,0,0,0,100,0), -- 10:21:13
+(@PATH,6,-4257.311,375.9668,78.98435,0,0,0,0,100,0), -- 10:21:30
+(@PATH,7,-4218.265,427.3583,49.21005,0,0,0,0,100,0), -- 10:21:59
+(@PATH,8,-4226.337,464.256,42.97073,0,0,0,0,100,0), -- 10:22:17
+(@PATH,9,-4205.016,481.8601,31.38265,0,0,0,0,100,0), -- 10:22:32
+(@PATH,10,-4193.525,487.0911,30.10522,0,0,0,0,100,0), -- 10:22:46
+(@PATH,11,-4172.567,476.759,31.17034,0,0,0,0,100,0), -- 10:22:55
+(@PATH,12,-4151.987,448.1165,33.53831,0,0,0,0,100,0), -- 10:23:06
+(@PATH,13,-4113.85,424.8085,34.97233,0,0,0,0,100,0), -- 10:23:18
+(@PATH,14,-4147.163,444.2449,34.1104,0,0,0,0,100,0), -- 10:23:38
+(@PATH,15,-4157.673,454.7521,31.41072,0,0,0,0,100,0); -- 10:23:57
+
+-- Pathing for Dragonmaw Shaman Entry: 21720 'TDB FORMAT'
+SET @NPC := 75803;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4294.086,`position_y`=400.621,`position_z`=81.62926 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,233, '');
+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,-4294.086,400.621,81.62926,0,25000,0,0,100,0), -- 10:13:30
+(@PATH,2,-4292.586,399.621,81.62926,0,25000,0,0,100,0); -- 10:13:50
+
+-- Pathing for Dragonmaw Shaman Entry: 21720 'TDB FORMAT'
+SET @NPC := 75798;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4244.082,`position_y`=315.9884,`position_z`=134.664 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,-4244.082,315.9884,134.664,0,0,0,0,100,0), -- 10:12:22
+(@PATH,2,-4235.726,319.797,134.6712,0,0,0,0,100,0), -- 10:12:25
+(@PATH,3,-4229.505,315.7428,134.6895,0,0,0,0,100,0), -- 10:12:28
+(@PATH,4,-4194.724,303.9587,136.7709,0,0,0,0,100,0), -- 10:12:30
+(@PATH,5,-4190.966,294.0813,135.7594,0,0,0,0,100,0), -- 10:12:45
+(@PATH,6,-4183.756,287.0773,135.6553,0,0,0,0,100,0), -- 10:14:20
+(@PATH,7,-4191.174,297.8928,136.033,0,0,0,0,100,0), -- 10:14:26
+(@PATH,8,-4220.702,310.0533,134.9795,0,0,0,0,100,0), -- 10:14:30
+(@PATH,9,-4229.358,315.7001,134.6958,0,0,0,0,100,0), -- 10:14:45
+(@PATH,10,-4230.426,317.3666,134.676,0,0,0,0,100,0), -- 10:14:48
+(@PATH,11,-4235.935,319.6286,134.6698,0,0,0,0,100,0), -- 10:14:50
+(@PATH,12,-4255.562,318.7018,134.6108,0,0,0,0,100,0), -- 10:14:54
+(@PATH,13,-4249.844,317.125,134.6809,0,0,0,0,100,0), -- 10:15:00
+(@PATH,14,-4243.675,313.4105,134.6629,0,0,0,0,100,0), -- 10:15:06
+(@PATH,15,-4235.89,308.923,134.6676,0,0,0,0,100,0), -- 10:15:08
+(@PATH,16,-4230.517,310.4198,134.6871,0,0,0,0,100,0), -- 10:15:11
+(@PATH,17,-4194.894,303.7994,136.77,0,0,0,0,100,0), -- 10:15:14
+(@PATH,18,-4188.841,309.6393,135.933,0,0,0,0,100,0), -- 10:15:29
+(@PATH,19,-4175.213,316.2365,135.7092,0,0,0,0,100,0), -- 10:15:34
+(@PATH,20,-4161.508,360.043,141.9081,0,0,0,0,100,0), -- 10:15:40
+(@PATH,21,-4171.737,320.0564,135.9073,0,0,0,0,100,0), -- 10:16:01
+(@PATH,22,-4185.639,313.6697,135.3489,0,0,0,0,100,0), -- 10:16:20
+(@PATH,23,-4191.21,305.0679,136.4015,0,0,0,0,100,0), -- 10:16:26
+(@PATH,24,-4220.617,309.9903,134.8077,0,0,0,0,100,0), -- 10:16:31
+(@PATH,25,-4229.755,310.8228,134.6904,0,0,0,0,100,0), -- 10:16:45
+(@PATH,26,-4235.208,308.5773,134.6808,0,0,0,0,100,0), -- 10:16:48
+(@PATH,27,-4243.492,313.3849,134.6674,0,0,0,0,100,0), -- 10:16:51
+(@PATH,28,-4255.519,318.5628,134.6098,0,0,0,0,100,0), -- 10:16:54
+(@PATH,29,-4249.62,317.301,134.6521,0,0,0,0,100,0); -- 10:17:00
+
+-- Pathing for Dragonmaw Shaman Entry: 21720 'TDB FORMAT'
+SET @NPC := 75801;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4263.521,`position_y`=408.381,`position_z`=79.67068 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,-4263.521,408.381,79.67068,0,0,0,0,100,0), -- 10:12:48
+(@PATH,2,-4275.601,391.1442,81.45609,0,0,0,0,100,0), -- 10:13:03
+(@PATH,3,-4276.916,384.2662,79.99209,0,0,0,0,100,0), -- 10:13:13
+(@PATH,4,-4272.852,367.3383,83.40826,0,0,0,0,100,0), -- 10:13:19
+(@PATH,5,-4299.143,333.1703,109.8589,0,0,0,0,100,0), -- 10:13:24
+(@PATH,6,-4291.638,298.5769,121.6239,0,0,0,0,100,0), -- 10:13:44
+(@PATH,7,-4284.62,294.5884,122.3762,0,0,0,0,100,0), -- 10:14:00
+(@PATH,8,-4265.867,286.0486,122.6935,0,0,0,0,100,0), -- 10:14:11
+(@PATH,9,-4231.655,272.0292,122.6157,0,0,0,0,100,0), -- 10:14:22
+(@PATH,10,-4221.664,271.404,122.5952,0,0,0,0,100,0), -- 10:14:30
+(@PATH,11,-4221.826,271.2171,122.3309,0,0,0,0,100,0), -- 10:14:42
+(@PATH,12,-4241.433,272.7845,122.9299,0,0,0,0,100,0), -- 10:14:50
+(@PATH,13,-4243.721,273.0889,123.1742,0,0,0,0,100,0), -- 10:15:00
+(@PATH,14,-4287.71,296.0865,122.0869,0,0,0,0,100,0), -- 10:15:09
+(@PATH,15,-4299.358,330.6028,110.9833,0,0,0,0,100,0), -- 10:15:20
+(@PATH,16,-4274.684,364.696,85.32684,0,0,0,0,100,0), -- 10:15:36
+(@PATH,17,-4269.528,373.963,80.26889,0,0,0,0,100,0), -- 10:15:57
+(@PATH,18,-4276.889,385.2,79.98441,0,0,0,0,100,0); -- 10:16:01
+
+-- Dragonmaw Subjugator SAI
+SET @ENTRY := 21718;
+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,"Dragonmaw Subjugator - Out of Combat - Enable Combat Movement (No Repeat)"),
+(@ENTRY,0,1,2,4,0,100,1,0,0,0,0,11,9613,0,0,0,0,0,2,0,0,0,0,0,0,0,"Dragonmaw Subjugator - On Aggro - Cast 'Shadow Bolt' (No Repeat)"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,23,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - On Aggro - Increment Phase By 1 (No Repeat)"),
+(@ENTRY,0,3,0,9,1,100,0,0,40,2400,3800,11,9613,0,0,0,0,0,2,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Within 0-40 Range - Cast 'Shadow Bolt' (No Repeat)"),
+(@ENTRY,0,4,5,3,1,100,1,0,15,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Between 0-15% Mana - Enable Combat Movement (Phase 1) (No Repeat)"),
+(@ENTRY,0,5,0,61,1,100,0,0,0,0,0,23,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Between 0-15% Mana - Increment Phase By 1 (Phase 1) (No Repeat)"),
+(@ENTRY,0,6,0,9,1,100,1,35,80,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Within 35-80 Range - Enable Combat Movement (Phase 1) (No Repeat)"),
+(@ENTRY,0,7,0,9,1,100,1,5,15,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Within 5-15 Range - Disable Combat Movement (Phase 1) (No Repeat)"),
+(@ENTRY,0,8,0,9,1,100,1,0,5,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Within 0-5 Range - Enable Combat Movement (Phase 1) (No Repeat)"),
+(@ENTRY,0,9,0,3,2,100,0,30,100,100,100,23,0,1,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Between 30-100% Mana - Decrement Phase By 1 (Phase 1) (No Repeat)"),
+(@ENTRY,0,10,11,2,0,100,1,0,15,0,0,22,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Between 0-15% Health - Set Event Phase 3 (No Repeat)"),
+(@ENTRY,0,11,12,61,0,100,0,0,0,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Between 0-15% Health - Enable Combat Movement (No Repeat)"),
+(@ENTRY,0,12,0,61,0,100,0,0,0,0,0,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Between 0-15% Health - Flee For Assist (No Repeat)"),
+(@ENTRY,0,13,0,6,0,100,1,0,0,0,0,33,22197,0,0,0,0,0,7,0,0,0,0,0,0,0,"Dragonmaw Subjugator - On Just Died - Quest Credit 'Infiltrating Dragonmaw Fortress' (No Repeat)");
+
+-- Pathing for Dragonmaw Subjugator Entry: 21718 'TDB FORMAT'
+SET @NPC := 75774;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4102.015,`position_y`=377.2606,`position_z`=30.89463 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,-4102.015,377.2606,30.89463,0,0,0,0,100,0), -- 10:20:43
+(@PATH,2,-4108.736,382.3355,30.58962,0,0,0,0,100,0), -- 10:20:47
+(@PATH,3,-4115.181,384.7361,30.83398,0,0,0,0,100,0), -- 10:20:49
+(@PATH,4,-4115.945,392.739,30.79796,0,0,0,0,100,0), -- 10:20:53
+(@PATH,5,-4111.743,392.8836,30.53397,0,0,0,0,100,0), -- 10:20:54
+(@PATH,6,-4106.752,389.3356,30.54209,0,0,0,0,100,0), -- 10:20:57
+(@PATH,7,-4103.535,395.7037,30.67706,0,0,0,0,100,0), -- 10:21:00
+(@PATH,8,-4103.445,396.1037,30.62162,0,0,0,0,100,0), -- 10:21:02
+(@PATH,9,-4099.806,402.0006,30.79059,0,0,0,0,100,0), -- 10:21:14
+(@PATH,10,-4099.44,401.964,30.87934,0,0,0,0,100,0), -- 10:21:15
+(@PATH,11,-4086.569,405.2619,30.82691,0,0,0,0,100,0), -- 10:21:21
+(@PATH,12,-4089.497,392.9045,30.76514,0,0,0,0,100,0), -- 10:21:26
+(@PATH,13,-4089.03,381.2375,31.16474,0,0,0,0,100,0), -- 10:21:31
+(@PATH,14,-4091.608,379.7381,30.97511,0,0,0,0,100,0); -- 10:21:33
+
+-- Pathing for Dragonmaw Subjugator Entry: 21718 'TDB FORMAT'
+SET @NPC := 75780;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4192.549,`position_y`=463.3147,`position_z`=30.76653 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,-4192.549,463.3147,30.76653,0,0,0,0,100,0), -- 10:21:58
+(@PATH,2,-4188.431,467.3629,30.58786,0,0,0,0,100,0); -- 10:22:00
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_02_world.sql
new file mode 100644
index 00000000000..fa89371371d
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_02_world.sql
@@ -0,0 +1,176 @@
+--
+SET @GUID1 := -78496;
+SET @GUID2 := -52330;
+UPDATE `creature` SET `position_x`= -4236.136230, `position_y`= 313.865417, `position_z`= 160.389038, `orientation`= 3.5595 WHERE `guid`= 78496;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry` IN (22317, 23188, 22253);
+UPDATE `creature_template` SET `InhabitType`= 4 WHERE `entry`=23225;
+DELETE FROM `creature` WHERE `guid` IN (132815, 132816, 132817) AND `id`=23188; -- remove wrong spawns
+UPDATE `smart_scripts` SET `event_type`=25 WHERE `entryorguid`=23311 AND `source_type`=0 AND `id`=11; -- Fix an aura set by spawn instead of reset
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@GUID1, -52330, 23188, 22253) AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (22317*100, 22317*100+1, 22317*100+2, 2318800, 2318801, 2318802, 2318803, 22253*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
+(@GUID1,0,0,0,1,0,100,0,2000,4000,12000,16000,12,23188,7,0,0,0,0,8,0,0,0,-4236.136230, 313.865417, 160.389038, 3.9795,"Netherwing Drake Escape Dummy - OOC - Summon Creature 'Dragonmaw Transporter'"),
+(@GUID1,0,1,0,63,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Netherwing Drake Escape Dummy - Just created - Set active"),
+(23188,0,0,0,54,0,100,0,0,0,0,0,87,2318800,2318801,2318802,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Just summoned - action list"),
+(2318800,9,0,0,0,0,100,0,0,0,0,0,53,1,231880,0,0,0,2,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Action list - Start Waypoint"),
+(2318800,9,1,0,0,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Action list - Set Active On"),
+(2318801,9,0,0,0,0,100,0,0,0,0,0,53,1,231881,0,0,0,2,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Action list - Start Waypoint"),
+(2318801,9,1,0,0,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Action list - Set Active On"),
+(2318802,9,0,0,0,0,100,0,0,0,0,0,53,1,231882,0,0,0,2,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Action list - Start Waypoint"),
+(2318802,9,1,0,0,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Action list - Set Active On"),
+(23188,0,1,0,58,0,100,0,27,231880,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - On Waypoint Finished - Despawn Instant"),
+(23188,0,2,0,58,0,100,0,31,231881,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - On Waypoint Finished - Despawn Instant"),
+(23188,0,3,0,58,0,100,0,25,231882,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - On Waypoint Finished - Despawn Instant"),
+(23188,0,4,0,58,0,100,0,26,231883,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - On Waypoint Finished - Despawn Instant"),
+(22253, 0, 0, 0, 0, 0, 100, 0, 3000, 5000, 7000, 7000, 11, 15496, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Ascendant - IC - Cast Cleave"),
+(22253, 0, 1, 0, 0, 0, 100, 0, 5000, 7000, 8000, 10000, 11, 17547, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Ascendant - IC - Cast Mortal Strike"),
+(22253, 0, 2, 0, 0, 0, 100, 0, 4000, 7000, 9000, 12000, 11, 10966, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Ascendant - IC - Cast Uppercut"),
+(@GUID2, 0, 0, 0, 0, 0, 100, 0, 3000, 5000, 7000, 7000, 11, 15496, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Ascendant - IC - Cast Cleave"),
+(@GUID2, 0, 1, 0, 0, 0, 100, 0, 5000, 7000, 8000, 10000, 11, 17547, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Ascendant - IC - Cast Mortal Strike"),
+(@GUID2, 0, 2, 0, 0, 0, 100, 0, 4000, 7000, 9000, 12000, 11, 10966, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Ascendant - IC - Cast Uppercut"),
+(@GUID2,0,3,0,1,0,100,0,2000,5000,12000,16000,12,23188,7,0,0,0,0,8,0,0,0,-4933.316895, 31.134706, 61.772137, 0.480736,"Dragonmaw Ascendant - OOC - Summon Creature 'Dragonmaw Transporter'"),
+(@GUID2,0,4,0,63,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Ascendant - Just created - Set active"),
+(23188,0,5,0,54,0,100,0,0,0,0,0,80,2318803,2,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Just summoned - action list"),
+(2318803,9,0,0,0,0,100,0,0,0,0,0,53,1,231883,0,0,0,2,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - action list - Start Waypoint"),
+(2318803,9,1,0,0,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - action list - Set Active On"),
+(23188, 0, 6, 0, 0, 0, 100, 0, 3000, 5000, 7000, 7000, 11, 38861, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Transporter- IC - Aimed Shot"),
+(23188, 0, 7, 0, 0, 0, 100, 0, 5000, 7000, 8000, 10000, 11, 19503, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Transporter - IC - Scatter Shot"),
+(23188, 0, 8, 0, 0, 0, 100, 0, 4000, 7000, 9000, 12000, 11, 38859, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Transporter - IC - Serpent Sting"),
+(23188, 0, 9, 0, 0, 0, 100, 0, 1000, 2000, 3000, 4000, 11, 38858, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Transporter - IC - Shoot");
+
+DELETE FROM conditions WHERE SourceTypeOrReferenceId=22 AND SourceEntry=23188;
+INSERT INTO conditions (SourceTypeOrReferenceId, SourceGroup, SourceEntry, SourceId, ElseGroup, ConditionTypeOrReference, ConditionTarget, ConditionValue1, ConditionValue2, ConditionValue3, NegativeCondition, ErrorTextId, ScriptName, Comment) VALUES
+(22, 1, 23188, 0, 0, 23, 0, 3939, 0, 0, 0, 0, '', 'Execute SmartAI for Dragonmaw Transporter if the area is 3759'),
+(22, 6, 23188, 0, 0, 23, 0, 3759, 0, 0, 0, 0, '', 'Execute SmartAI for Dragonmaw Transporter if the area is 3759');
+
+SET @PATH := 231880;
+DELETE FROM `waypoints` WHERE `entry`=@PATH;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(@PATH,1,-4234.259,316.7951,194.5695, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,2,-4278.778,291.9364,162.6098, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,3,-4315.755,272.5735,162.6098, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,4,-4332.82,267.5372,162.6098, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,5,-4354.233,260.8795,162.6098, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,6,-4391.55,249.5022,162.6098, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,7,-4429.059,238.4517,162.6098, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,8,-4470.008,227.2337,162.6098, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,9,-4489.761,222.9549,162.6098, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,10,-4502.434,220.6088,162.6098, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,11,-4528.817,218.5281,162.6098, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,12,-4546.15,218.6741,162.6098, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,13,-4595.704,217.5207,162.6098, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,14,-4641.978,205.2794,147.0265, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,15,-4662.014,198.3955,118.6931, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,16,-4686.042,195.7724,92.6098, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,17,-4720.744,183.9892,92.33202, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,18,-4745.649,173.8856,98.19311, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,19,-4756.257,154.736,105.7487, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,20,-4761.057,143.5172,108.3876, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,21,-4787.247,129.8356,110.6098, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,22,-4815.383,124.4918,109.6376, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,23,-4841.104,99.13585,116.1653, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,24,-4876.217,68.20888,99.16536, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,25,-4887.112,56.80024,92.74867, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,26,-4921.727,36.11827,73.94312, 'Dragonmaw Transporter'), -- 07:14:59
+(@PATH,27,-4924.737,36.20354,61.87088, 'Dragonmaw Transporter'); -- 07:14:59
+-- 0x1C09FC424016A500000019000022323C .go -4234.259 316.7951 194.5695
+
+-- Pathing for Dragonmaw Transporter Entry: 23188 'TDB FORMAT'
+SET @PATH := 231881;
+DELETE FROM `waypoints` WHERE `entry`=@PATH;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(@PATH,1,-4235.772,310.6806,195.9172, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,2,-4266.868,305.2986,170.0554, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,3,-4289.381,299.2866,169.0554, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,4,-4313.463,296.8451,169.0554, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,5,-4334.991,295.7913,169.0554, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,6,-4355.52,290.1741,169.0554, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,7,-4382.983,278.409,169.0554, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,8,-4419.237,271.8036,169.0554, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,9,-4448.44,268.7892,169.0554, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,10,-4463.974,265.9718,169.0554, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,11,-4486.522,265.1359,165.4998, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,12,-4515.319,266.4659,154.3332, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,13,-4538.145,266.9955,143.7777, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,14,-4565.51,267.0066,134.7498, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,15,-4574.724,266.6996,130.4999, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,16,-4585.344,265.8585,125.2221, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,17,-4610.452,266.8059,114.0276, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,18,-4648.119,265.0245,89.41651, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,19,-4679.999,264.3499,80.02769, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,20,-4726.6,265.6508,91.11095, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,21,-4757.61,263.9644,96.61092, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,22,-4790.494,252.6213,107.7221, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,23,-4830.46,243.5237,113.6109, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,24,-4850.946,232.3608,114.611, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,25,-4865.539,204.393,115.9165, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,26,-4867.515,184.822,112.5276, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,27,-4869.98,147.345,96.99986, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,28,-4875.779,115.5371,89.69432, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,29,-4900.512,79.47276,79.22215, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,30,-4920.873,41.16504,69.30544, 'Dragonmaw Transporter'), -- 07:15:20
+(@PATH,31,-4924.737,36.20354,61.87088, 'Dragonmaw Transporter'); -- 07:15:20
+-- 0x1C09FC424016A5000000190000223259 .go -4235.772 310.6806 195.9172
+
+-- Pathing for Dragonmaw Transporter Entry: 23188 'TDB FORMAT'
+SET @PATH := 231882;
+DELETE FROM `waypoints` WHERE `entry`=@PATH;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(@PATH,1,-4235.186,312.622,195.6112, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,2,-4234.272,312.2153,195.6112, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,3,-4293.566,245.1756,179.3634, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,4,-4305.508,238.4082,179.3634, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,5,-4329.843,217.8027,179.3634, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,6,-4362.729,186.0796,186.419, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,7,-4434.846,123.756,230.3912, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,8,-4459.073,85.18902,233.9189, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,9,-4482.534,56.35666,232.5023, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,10,-4493.029,34.64518,235.1689, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,11,-4503.293,2.772352,232.5856, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,12,-4536.873,-16.30306,224.7523, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,13,-4579.444,-18.38878,223.5301, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,14,-4611.417,9.642578,219.03, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,15,-4660.565,11.25814,228.7522, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,16,-4698.878,14.15853,227.3911, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,17,-4734.97,25.07422,223.0023, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,18,-4766.538,46.62153,220.8356, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,19,-4794.966,67.12045,197.8634, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,20,-4815.075,72.55089,183.6967, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,21,-4855.917,67.18316,133.6689, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,22,-4868.51,61.47526,116.2801, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,23,-4890.089,51.30317,92.11338, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,24,-4922.806,35.50499,72.91895, 'Dragonmaw Transporter'), -- 07:18:37
+(@PATH,25,-4924.737,36.20354,61.87088, 'Dragonmaw Transporter'); -- 07:18:37
+-- 0x1C09FC424016A50000001900002232FF .go -4235.186 312.622 195.6112
+
+-- Pathing for Dragonmaw Transporter Entry: 23188 'TDB FORMAT'
+SET @PATH := 231883;
+DELETE FROM `waypoints` WHERE `entry`=@PATH;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(@PATH,1,-4921.116,38.40239,62.79848, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,2,-4920.266,38.92785,62.79848, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,3,-4911.522,44.50662,65.54009, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,4,-4897.991,49.12988,69.23454, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,5,-4854.699,71.66743,69.23454, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,6,-4811.554,91.95888,69.23454, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,7,-4782.642,107.2382,69.23454, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,8,-4749.689,123.6898,102.4568, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,9,-4717.377,120.1987,102.5401, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,10,-4677.343,111.8249,122.37344, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,11,-4642.299,106.9923,122.62343, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,12,-4595.685,101.0696,122.23454, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,13,-4568.682,107.7912,122.23454, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,14,-4532.451,105.1658,122.23454, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,15,-4502.495,109.315,122.23454, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,16,-4478.215,118.6488,122.23454, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,17,-4437.049,132.6271,122.23454, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,18,-4401.484,131.5858,122.23454, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,19,-4360.693,156.9551,122.37343, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,20,-4324.191,184.9894,122.9568, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,21,-4299.081,216.2382,141.7901, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,22,-4292.715,227.4521,179.9077, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,23,-4281.613,263.6761,179.9077, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,24,-4260.6,294.3777,179.9077, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,25,-4240.507,326.8979,154.0465, 'Dragonmaw Transporter'), -- 07:15:14
+(@PATH,26,-4240.507,326.8979,154.0465, 'Dragonmaw Transporter'); -- 07:15:14
+-- 0x1C09FC424016A5000000190000223269 .go -4921.116 38.40239 62.79848
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_03_world.sql
new file mode 100644
index 00000000000..7a241bafd41
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_03_world.sql
@@ -0,0 +1,80 @@
+--
+SET @DredgeWorm:= 8925;
+SET @DeepStinger:= 8926;
+SET @DarkScreecher:= 8927;
+SET @Burrowing:= 8928;
+SET @Creeper:= 8933;
+SET @Beetle:= 8932;
+SET @Gorosh:= 9027;
+SET @Grizzle:= 9028;
+SET @Eviscerator:= 9029;
+SET @Okthor:= 9030;
+SET @Anubshiah:= 9031;
+SET @Hedrum:= 9032;
+
+UPDATE `creature_template` SET `AIName`="SmartAI", `ScriptName`='' WHERE `entry` IN (@DredgeWorm, @DeepStinger, @DarkScreecher, @Burrowing, @Creeper, @Beetle, @Gorosh, @Grizzle, @Eviscerator, @Okthor, @Anubshiah, @Hedrum);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@DredgeWorm, @DeepStinger, @DarkScreecher, @Burrowing, @Creeper, @Beetle, @Gorosh, @Grizzle, @Eviscerator, @Okthor, @Anubshiah, @Hedrum) 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
+(@DredgeWorm,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"),
+(@DeepStinger,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"),
+(@DarkScreecher,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"),
+(@Burrowing,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"),
+(@Creeper,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"),
+(@Beetle,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"),
+(@Gorosh,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"),
+(@Grizzle,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"),
+(@Eviscerator,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"),
+(@Okthor,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"),
+(@Anubshiah,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"),
+(@Hedrum,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"),
+(@DredgeWorm,0,1,0,0,0,100,0,3000,4000,10000,15000,11,14535,0,0,0,0,0,5,0,0,0,0,0,0,0,"Dredge Worm - In Combat - Cast Dredge Sickness"),
+(@DredgeWorm,0,2,0,0,0,100,0,4000,4000,8000,8000,11,13298,32,0,0,0,0,5,0,0,0,0,0,0,0,"Dredge Worm - In Combat - Cast Poison"),
+(@DredgeWorm,0,3,0,0,0,100,0,5000,6000,3000,3000,11,6917,0,0,0,0,0,5,0,0,0,0,0,0,0,"Dredge Worm - In Combat - Cast Venom Spit)"),
+(@DeepStinger,0,1,0,0,0,100,0,2000,2000,6000,8000,11,14534,0,0,0,0,0,5,0,0,0,0,0,0,0,"Deep Stinger - In Combat - Cast Barbed Sting"),
+(@DeepStinger,0,2,0,0,0,100,0,4000,4000,4000,4000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0,"Deep Stinger - In Combat - Cast Cleave"),
+(@DarkScreecher,0,1,0,0,0,100,0,2000,2000,6000,8000,11,14538,0,0,0,0,0,5,0,0,0,0,0,0,0,"Dark Screecher - In Combat - Cast Aural Shock"),
+(@DarkScreecher,0,2,0,0,0,100,0,4000,4000,9000,10000,11,8281,0,0,0,0,0,5,0,0,0,0,0,0,0,"Dark Screecher - In Combat - Cast Sonic Burst"),
+(@Burrowing,0,1,0,0,0,100,0,2000,2000,30000,30000,11,14533,0,0,0,0,0,5,0,0,0,0,0,0,0,"Burrowing Thundersnout - In Combat - Cast Disjonction"),
+(@Burrowing,0,2,0,0,0,100,0,3000,3000,3000,3000,11,15611,0,0,0,0,0,5,0,0,0,0,0,0,0,"Burrowing Thundersnout - In Combat - Cast Lizard Bolt"),
+(@Burrowing,0,3,0,0,0,100,0,5000,5000,8000,8000,11,15548,0,0,0,0,0,5,0,0,0,0,0,0,0,"Burrowing Thundersnout - In Combat - Cast Thunderclap"),
+(@Creeper,0,1,0,0,0,100,0,2000,2000,20000,20000,11,14532,0,0,0,0,0,5,0,0,0,0,0,0,0,"Cave Creeper - In Combat - Cast Creeper Venom"),
+(@Creeper,0,2,0,0,0,100,0,4000,4000,8000,8000,11,745,0,0,0,0,0,2,0,0,0,0,0,0,0,"Cave Creeper - In Combat - Cast Web"),
+(@Creeper,0,3,0,0,0,100,0,5000,6000,4000,8000,11,15656,0,0,0,0,0,5,0,0,0,0,0,0,0,"Cave Creeper - In Combat - Cast Poisonous Stab"),
+(@Beetle,0,1,0,0,0,100,0,2000,2000,30000,30000,11,14539,0,0,0,0,0,2,0,0,0,0,0,0,0,"Borer Beetle - In Combat - Cast Putrid Enzyme"),
+(@Beetle,0,2,0,0,0,100,0,4000,4000,15000,20000,11,6016,0,0,0,0,0,5,0,0,0,0,0,0,0,"Borer Beetle - In Combat - Cast Pierce Armor"),
+(@Gorosh,0,1,0,0,0,100,0,2000,4000,6000,8000,11,13736,0,0,0,0,0,2,0,0,0,0,0,0,0,"Gorosh the Dervish - In Combat - Cast Whirlwind"),
+(@Gorosh,0,2,0,0,0,100,0,4000,6000,5000,6000,11,15708,0,0,0,0,0,2,0,0,0,0,0,0,0,"Gorosh the Dervish - In Combat - Cast Mortal Strike"),
+(@Gorosh,0,3,0,0,0,100,1,10000,15000,10000,15000,11,21049,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gorosh the Dervish - In Combat - Cast Bloodlust"),
+(@Grizzle,0,1,0,0,0,100,0,2000,3000,4000,5000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0,"Grizzle the Dervish - In Combat - Cast Cleave"),
+(@Grizzle,0,2,0,0,0,100,0,4000,5000,8000,9000,11,6524,0,0,0,0,0,2,0,0,0,0,0,0,0,"Grizzle the Dervish - In Combat - Cast Ground Tremor"),
+(@Grizzle,0,3,0,0,0,100,1,10000,15000,10000,15000,11,8269,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grizzle the Dervish - In Combat - Cast Frenzy"),
+(@Grizzle,0,4,0,0,0,100,0,6000,7000,6000,9000,11,24458,0,0,0,0,0,5,0,0,0,0,0,0,0,"Grizzle the Dervish - In Combat - Cast Shadow Shock"),
+(@Eviscerator,0,1,0,0,0,100,0,2000,3000,14000,15000,11,14331,0,0,0,0,0,2,0,0,0,0,0,0,0,"Eviscerator - In Combat - Cast Vicious Rend"),
+(@Eviscerator,0,2,0,0,0,100,0,4000,5000,4000,5000,11,15245,0,0,0,0,0,2,0,0,0,0,0,0,0,"Eviscerator - In Combat - Cast Shadow Bolt Volley"),
+(@Eviscerator,0,3,0,0,0,100,0,5000,6000,15000,16000,11,8269,0,0,0,0,0,1,0,0,0,0,0,0,0,"Eviscerator - In Combat - Cast Anti-Magic Shield"),
+(@Okthor,0,1,0,0,0,100,0,2000,3000,4000,5000,11,15254,0,0,0,0,0,2,0,0,0,0,0,0,0,"Okthor - In Combat - Cast Arcane Bolt"),
+(@Okthor,0,2,0,0,0,100,0,5000,6000,6000,7000,11,15453,0,0,0,0,0,2,0,0,0,0,0,0,0,"Okthor - In Combat - Cast Arcane Explosion"),
+(@Okthor,0,3,0,0,0,100,0,9000,11000,11000,12000,11,13323,0,0,0,0,0,5,0,0,0,0,0,0,0,"Okthor - In Combat - Cast Polymorph"),
+(@Okthor,0,4,0,0,0,100,0,7000,8000,9000,10000,11,13747,0,0,0,0,0,5,0,0,0,0,0,0,0,"Okthor - In Combat - Cast Slow"),
+(@Anubshiah,0,1,0,0,0,100,0,5000,7000,10000,11000,11,8994,0,0,0,0,0,5,0,0,0,0,0,0,0,"Anubshiah - In Combat - Cast Banish"),
+(@Anubshiah,0,2,0,0,0,100,0,2000,3000,8000,9000,11,15470,0,0,0,0,0,5,0,0,0,0,0,0,0,"Anubshiah - In Combat - Cast Curse of Tongues"),
+(@Anubshiah,0,3,0,0,0,100,0,4000,5000,13000,15000,11,12493,0,0,0,0,0,5,0,0,0,0,0,0,0,"Anubshiah - In Combat - Cast Curse of Weakness"),
+(@Anubshiah,0,4,0,0,0,100,0,1000,1000,300000,300000,11,13787,0,0,0,0,0,1,0,0,0,0,0,0,0,"Anubshiah - In Combat - Cast Demon Armor"),
+(@Anubshiah,0,5,0,0,0,100,0,7000,8000,10000,13000,11,15471,0,0,0,0,0,5,0,0,0,0,0,0,0,"Anubshiah - In Combat - Cast Enveloping Web"),
+(@Anubshiah,0,6,0,0,0,100,0,3000,4000,4000,5000,11,15472,0,0,0,0,0,5,0,0,0,0,0,0,0,"Anubshiah - In Combat - Cast Shadow Bolt"),
+(@Hedrum,0,1,0,0,0,100,0,2000,2000,15000,18000,11,15475,0,0,0,0,0,5,0,0,0,0,0,0,0,"Hedrum - In Combat - Cast Baneful Poison"),
+(@Hedrum,0,2,0,0,0,100,0,7000,9000,15000,18000,11,3609,0,0,0,0,0,5,0,0,0,0,0,0,0,"Hedrum - In Combat - Cast Paralyzing Poison"),
+(@Hedrum,0,3,0,0,0,100,1,10000,15000,20000,25000,11,15474,0,0,0,0,0,5,0,0,0,0,0,0,0,"Hedrum - In Combat - Cast Web Explosion");
+
+UPDATE `creature_template` SET `unit_flags`=131904 WHERE `entry`=10096;
+DELETE FROM `creature_template_addon` WHERE `entry` IN (@DeepStinger);
+INSERT INTO `creature_template_addon` (`entry`, `bytes2`, `auras`) VALUES
+(@DeepStinger, 1, '8601');
+
+UPDATE `creature_text` SET `groupid`=4, `id`=1 WHERE `BroadcastTextId`=5441 AND `entry`=10096;
+UPDATE `creature_text` SET `groupid`=0, `id`=1 WHERE `BroadcastTextId`=5442 AND `entry`=10096;
+UPDATE `creature_text` SET `groupid`=1, `id`=1 WHERE `BroadcastTextId`=5443 AND `entry`=10096;
+UPDATE `creature_text` SET `groupid`=5, `id`=1 WHERE `BroadcastTextId`=5444 AND `entry`=10096;
+UPDATE `creature_text` SET `groupid`=2, `id`=1 WHERE `BroadcastTextId`=5445 AND `entry`=10096;
+UPDATE `creature_text` SET `groupid`=3, `id`=1 WHERE `BroadcastTextId`=5446 AND `entry`=10096;
+UPDATE `creature_text` SET `id`=0 WHERE `entry`=10096;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_04_world.sql
new file mode 100644
index 00000000000..e44acde69de
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_04_world.sql
@@ -0,0 +1 @@
+UPDATE `creature_loot_template` SET `Chance`=100 WHERE `Entry`=23188 AND `Item`=32509;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_05_world.sql
new file mode 100644
index 00000000000..1347b79a61b
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_05_world.sql
@@ -0,0 +1,9 @@
+--
+UPDATE `creature_formations` SET `point_1`=2, `point_2`=8 WHERE `leaderGUID`=126083 AND `memberGUID`<>126083;
+UPDATE `creature_formations` SET `point_1`=1, `point_2`=5 WHERE `leaderGUID`=201700 AND `memberGUID`<>201700;
+UPDATE `creature_formations` SET `point_1`=5, `point_2`=11 WHERE `leaderGUID`=202823 AND `memberGUID`<>202823;
+UPDATE `creature_formations` SET `point_1`=1, `point_2`=8 WHERE `leaderGUID`=126981 AND `memberGUID`<>126981;
+UPDATE `creature_formations` SET `point_1`=3, `point_2`=7 WHERE `leaderGUID`=131931 AND `memberGUID`<>131931;
+UPDATE `creature_formations` SET `point_1`=1, `point_2`=5 WHERE `leaderGUID`=131920 AND `memberGUID`<>131920;
+UPDATE `creature_formations` SET `point_1`=1, `point_2`=5 WHERE `leaderGUID`=131926 AND `memberGUID`<>131926;
+UPDATE `creature_formations` SET `point_1`=1, `point_2`=10 WHERE `leaderGUID`=202231 AND `memberGUID`<>202231;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_00_world.sql
new file mode 100644
index 00000000000..5047e4c44b7
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_00_world.sql
@@ -0,0 +1,209 @@
+-- Pathing for Death Knight Captain Entry: 16145 'TDB FORMAT'
+SET @NPC := 127640;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2556.952,`position_y`=-3294.904,`position_z`=267.5933 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, '');
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2556.952,`position_y`=-3294.904,`position_z`=267.5933 WHERE `guid` IN (127685,127686,127656,127657);
+DELETE FROM `creature_addon` WHERE `guid` IN (127685,127686,127656,127657);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(127685,@PATH,0,0,1,0, ''), (127686,@PATH,0,0,1,0, ''), (127656,@PATH,0,0,1,0, ''), (127657,@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,2556.952,-3294.904,267.5933,0,0,0,0,100,0),
+(@PATH,2,2556.655,-3273.629,266.7731,0,0,0,0,100,0),
+(@PATH,3,2556.505,-3258.446,260.2637,0,0,0,0,100,0),
+(@PATH,4,2556.29,-3229.774,245.2207,0,0,0,0,100,0),
+(@PATH,5,2555.99,-3205.854,240.5267,0,0,0,0,100,0),
+(@PATH,6,2555.881,-3183.735,240.5253,0,0,0,0,100,0),
+(@PATH,7,2556.055,-3164.447,240.5253,0,0,0,0,100,0),
+(@PATH,8,2556.121,-3141.804,240.5253,0,0,0,0,100,0),
+(@PATH,9,2556.055,-3164.447,240.5253,0,0,0,0,100,0),
+(@PATH,10,2555.881,-3183.735,240.5253,0,0,0,0,100,0),
+(@PATH,11,2555.99,-3205.854,240.5267,0,0,0,0,100,0),
+(@PATH,12,2556.29,-3229.774,245.2207,0,0,0,0,100,0),
+(@PATH,13,2556.505,-3258.446,260.2637,0,0,0,0,100,0),
+(@PATH,14,2556.655,-3273.629,266.7731,0,0,0,0,100,0),
+(@PATH,15,2556.952,-3294.904,267.5933,0,0,0,0,100,0),
+(@PATH,16,2556.716,-3318.195,267.593,0,0,0,0,100,0),
+(@PATH,17,2556.767,-3335.356,267.593,0,0,0,0,100,0),
+(@PATH,18,2556.716,-3318.195,267.593,0,0,0,0,100,0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127640);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127640,127640,0,0,2,0,0),
+(127640,127685,3,360,2,8,17),
+(127640,127686,3,40,2,8,17),
+(127640,127656,3,320,2,8,17),
+(127640,127657,3,260,2,8,17);
+
+-- Pathing for Death Knight Captain Entry: 16145 'TDB FORMAT'
+SET @NPC := 127641;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2540.547,`position_y`=-3209.821,`position_z`=240.5256 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, '');
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2540.547,`position_y`=-3209.821,`position_z`=240.5256 WHERE `guid` IN (127687,127688,127658,127659);
+DELETE FROM `creature_addon` WHERE `guid` IN (127687,127688,127658,127659);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(127687,@PATH,0,0,1,0, ''), (127688,@PATH,0,0,1,0, ''), (127658,@PATH,0,0,1,0, ''), (127659,@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,2540.547,-3209.821,240.5256,0,0,0,0,100,0),
+(@PATH,2,2550.174,-3195.296,240.5253,0,0,0,0,100,0),
+(@PATH,3,2550.015,-3178.325,240.5252,0,0,0,0,100,0),
+(@PATH,4,2542.807,-3161.292,240.5246,0,0,0,0,100,0),
+(@PATH,5,2531.76,-3145.814,240.5244,0,0,0,0,100,0),
+(@PATH,6,2526.761,-3124.435,240.5252,0,0,0,0,100,0),
+(@PATH,7,2535.071,-3107.707,240.5244,0,0,0,0,100,0),
+(@PATH,8,2553.146,-3099.002,240.5252,0,0,0,0,100,0),
+(@PATH,9,2568.556,-3098.702,240.5253,0,0,0,0,100,0),
+(@PATH,10,2586.523,-3091.121,240.5253,0,0,0,0,100,0),
+(@PATH,11,2599.675,-3076.474,240.5264,0,0,0,0,100,0),
+(@PATH,12,2599.267,-3055.494,240.5239,0,0,0,0,100,0),
+(@PATH,13,2618.495,-3035.821,240.5235,0,0,0,0,100,0),
+(@PATH,14,2634.81,-3052.702,240.5237,0,0,0,0,100,0),
+(@PATH,15,2651.288,-3069.151,240.5216,0,0,0,0,100,0),
+(@PATH,16,2628.244,-3086.696,240.5232,0,0,0,0,100,0),
+(@PATH,17,2608.684,-3085.287,240.5264,0,0,0,0,100,0),
+(@PATH,18,2595.005,-3098.484,240.5253,0,0,0,0,100,0),
+(@PATH,19,2587.623,-3116.573,240.5246,0,0,0,0,100,0),
+(@PATH,20,2586.39,-3131.935,240.525,0,0,0,0,100,0),
+(@PATH,21,2577.873,-3150.335,240.524,0,0,0,0,100,0),
+(@PATH,22,2565.028,-3163.529,240.5253,0,0,0,0,100,0),
+(@PATH,23,2559.751,-3177.576,240.5253,0,0,0,0,100,0),
+(@PATH,24,2559.432,-3195.028,240.5254,0,0,0,0,100,0),
+(@PATH,25,2570.551,-3210.158,240.5293,0,0,0,0,100,0),
+(@PATH,26,2555.933,-3210.18,240.5274,0,0,0,0,100,0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127641);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127641,127641,0,0,2,0,0),
+(127641,127687,3,360,2,0,0),
+(127641,127688,3,40,2,0,0),
+(127641,127658,3,320,2,0,0),
+(127641,127659,3,260,2,0,0);
+
+-- Pathing for Death Knight Captain Entry: 16145 'TDB FORMAT'
+SET @NPC := 127642;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2781.675,`position_y`=-2973.126,`position_z`=240.5271 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, '');
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2781.675,`position_y`=-2973.126,`position_z`=240.5271 WHERE `guid` IN (127689,127690,127660,127661);
+DELETE FROM `creature_addon` WHERE `guid` IN (127689,127690,127660,127661);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(127689,@PATH,0,0,1,0, ''), (127690,@PATH,0,0,1,0, ''), (127660,@PATH,0,0,1,0, ''), (127661,@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,2781.675,-2973.126,240.5271,0,0,0,0,100,0),
+(@PATH,2,2781.545,-2987.27,240.5265,0,0,0,0,100,0),
+(@PATH,3,2781.296,-2999.196,240.5251,0,0,0,0,100,0),
+(@PATH,4,2761.818,-2991.876,240.525,0,0,0,0,100,0),
+(@PATH,5,2741.577,-2996.512,240.5255,0,0,0,0,100,0),
+(@PATH,6,2720.587,-3007.503,240.5255,0,0,0,0,100,0),
+(@PATH,7,2702.402,-3013.772,240.5244,0,0,0,0,100,0),
+(@PATH,8,2678.602,-3021.83,240.5253,0,0,0,0,100,0),
+(@PATH,9,2662.359,-3033.787,240.5253,0,0,0,0,100,0),
+(@PATH,10,2656.579,-3044.628,240.5232,0,0,0,0,100,0),
+(@PATH,11,2654.518,-3070.607,240.5216,0,0,0,0,100,0),
+(@PATH,12,2642.806,-3082.523,240.5241,0,0,0,0,100,0),
+(@PATH,13,2625.915,-3067.382,240.5231,0,0,0,0,100,0),
+(@PATH,14,2613.159,-3055.652,240.5243,0,0,0,0,100,0),
+(@PATH,15,2603.647,-3046.96,240.5242,0,0,0,0,100,0),
+(@PATH,16,2613.084,-3036.567,240.5217,0,0,0,0,100,0),
+(@PATH,17,2640.296,-3028.944,240.525,0,0,0,0,100,0),
+(@PATH,18,2652.006,-3024.45,240.5253,0,0,0,0,100,0),
+(@PATH,19,2664.795,-3009.59,240.5253,0,0,0,0,100,0),
+(@PATH,20,2670.619,-2990.552,240.5244,0,0,0,0,100,0),
+(@PATH,21,2679.347,-2964.029,240.5253,0,0,0,0,100,0),
+(@PATH,22,2697.98,-2955.501,240.5241,0,0,0,0,100,0),
+(@PATH,23,2719.132,-2962.616,240.5251,0,0,0,0,100,0),
+(@PATH,24,2741.907,-2976.874,240.5253,0,0,0,0,100,0),
+(@PATH,25,2760.453,-2981.653,240.5253,0,0,0,0,100,0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127642);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127642,127642,0,0,2,0,0),
+(127642,127689,3,360,2,0,0),
+(127642,127690,3,40,2,0,0),
+(127642,127660,3,320,2,0,0),
+(127642,127661,3,260,2,0,0);
+
+-- Pathing for Death Knight Captain Entry: 16145 'TDB FORMAT'
+SET @NPC := 127645;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2584.613,`position_y`=-3100.685,`position_z`=240.5253 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, '');
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2584.613,`position_y`=-3100.685,`position_z`=240.5253 WHERE `guid` IN (127691,127692,127664,127665);
+DELETE FROM `creature_addon` WHERE `guid` IN (127691,127692,127664,127665);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(127691,@PATH,0,0,1,0, ''), (127692,@PATH,0,0,1,0, ''), (127664,@PATH,0,0,1,0, ''), (127665,@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,2584.613,-3100.685,240.5253,0,0,0,0,100,0),
+(@PATH,2,2601.56,-3083.452,240.5258,0,0,0,0,100,0),
+(@PATH,3,2629.143,-3055.421,240.5237,0,0,0,0,100,0),
+(@PATH,4,2650.178,-3034.592,240.526,0,0,0,0,100,0),
+(@PATH,5,2667.962,-3017.14,240.5253,0,0,0,0,100,0),
+(@PATH,6,2680.883,-3004.51,240.5252,0,0,0,0,100,0),
+(@PATH,7,2699.352,-2986.865,240.5253,0,0,0,0,100,0),
+(@PATH,8,2680.883,-3004.51,240.5252,0,0,0,0,100,0),
+(@PATH,9,2667.962,-3017.14,240.5253,0,0,0,0,100,0),
+(@PATH,10,2650.178,-3034.592,240.526,0,0,0,0,100,0),
+(@PATH,11,2629.143,-3055.421,240.5237,0,0,0,0,100,0),
+(@PATH,12,2601.56,-3083.452,240.5258,0,0,0,0,100,0),
+(@PATH,13,2584.613,-3100.685,240.5253,0,0,0,0,100,0),
+(@PATH,14,2570.169,-3114.794,240.5253,0,0,0,0,100,0),
+(@PATH,15,2556.747,-3128.429,240.5253,0,0,0,0,100,0),
+(@PATH,16,2570.169,-3114.794,240.5253,0,0,0,0,100,0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127645);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127645,127645,0,0,2,0,0),
+(127645,127691,3,360,2,7,15),
+(127645,127692,3,40,2,7,15),
+(127645,127664,3,320,2,7,15),
+(127645,127665,3,260,2,7,15);
+
+-- Pathing for Death Knight Captain Entry: 16145 'TDB FORMAT'
+SET @NPC := 127649;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2871.322,`position_y`=-2985.748,`position_z`=267.593 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, '');
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2871.322,`position_y`=-2985.748,`position_z`=267.593 WHERE `guid` IN (127701,127702,127670,127671);
+DELETE FROM `creature_addon` WHERE `guid` IN (127701,127702,127670,127671);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(127701,@PATH,0,0,1,0, ''), (127702,@PATH,0,0,1,0, ''), (127670,@PATH,0,0,1,0, ''), (127671,@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,2871.322,-2985.748,267.593,0,0,0,0,100,0),
+(@PATH,2,2852.31,-2985.821,267.593,0,0,0,0,100,0),
+(@PATH,3,2838.662,-2985.802,264.0277,0,0,0,0,100,0),
+(@PATH,4,2807.427,-2985.919,248.8516,0,0,0,0,100,0),
+(@PATH,5,2784.644,-2986.206,240.5265,0,0,0,0,100,0),
+(@PATH,6,2760.957,-2986.261,240.5249,0,0,0,0,100,0),
+(@PATH,7,2735.987,-2986.227,240.5253,0,0,0,0,100,0),
+(@PATH,8,2716.594,-2986.268,240.5253,0,0,0,0,100,0),
+(@PATH,9,2700.477,-2986.242,240.525,0,0,0,0,100,0),
+(@PATH,10,2716.594,-2986.268,240.5253,0,0,0,0,100,0),
+(@PATH,11,2735.987,-2986.227,240.5253,0,0,0,0,100,0),
+(@PATH,12,2760.708,-2986.261,240.5253,0,0,0,0,100,0),
+(@PATH,13,2784.644,-2986.206,240.5265,0,0,0,0,100,0),
+(@PATH,14,2807.427,-2985.919,248.8516,0,0,0,0,100,0),
+(@PATH,15,2838.662,-2985.802,264.0277,0,0,0,0,100,0),
+(@PATH,16,2852.31,-2985.821,267.593,0,0,0,0,100,0),
+(@PATH,17,2871.322,-2985.748,267.593,0,0,0,0,100,0),
+(@PATH,18,2893.314,-2985.45,267.593,0,0,0,0,100,0),
+(@PATH,19,2908.467,-2985.152,267.5937,0,0,0,0,100,0),
+(@PATH,20,2893.314,-2985.45,267.593,0,0,0,0,100,0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127649);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127649,127649,0,0,2,0,0),
+(127649,127701,3,360,2,9,19),
+(127649,127702,3,40,2,9,19),
+(127649,127670,3,320,2,9,19),
+(127649,127671,3,260,2,9,19);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_01_world.sql
new file mode 100644
index 00000000000..9bf41b75a70
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_01_world.sql
@@ -0,0 +1,24 @@
+--
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127640);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127640,127640,0,0,2,0,0),
+(127640,127685,3,360,2,0,0),
+(127640,127686,3,40,2,0,0),
+(127640,127656,3,320,2,0,0),
+(127640,127657,3,260,2,0,0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127645);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127645,127645,0,0,2,0,0),
+(127645,127691,3,360,2,0,0),
+(127645,127692,3,40,2,0,0),
+(127645,127664,3,320,2,0,0),
+(127645,127665,3,260,2,0,0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127649);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127649,127649,0,0,2,0,0),
+(127649,127701,3,360,2,0,0),
+(127649,127702,3,40,2,0,0),
+(127649,127670,3,320,2,0,0),
+(127649,127671,3,260,2,0,0);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_02_world.sql
new file mode 100644
index 00000000000..a02d7b25d85
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_02_world.sql
@@ -0,0 +1,19 @@
+--
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `Entry` IN (29698, 26043);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (29698, 26043) 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
+(29698,0,0,0,4,0,100,0,0,0,0,0,11,54487,0,0,0,0,0,2,0,0,0,0,0,0,0,'Drakuru Raptor - On aggro - Cast Jump Attack'),
+(26043,0,0,0,1,0,100,0,2000,8000,8000,15000,11,46400,0,0,0,0,0,1,0,0,0,0,0,0,0,'Steam Burst - OOC - Cast Steam Weapon');
+
+UPDATE `creature_equip_template` SET `ItemID1`=21573, `ItemID2`=143 WHERE `creatureid`=27160;
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `Entry`=27375;
+
+DELETE FROM `creature_template_addon` WHERE `entry`= 27268;
+INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES (27268,0,0,1,48553);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (13) AND `SourceEntry`=48551;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES
+(13, 1, 48551, 0, 31, 3, 27375, 0, 0, '', 'Vengeful Stormhammer only on Risen Gryphon Rider Target', 0);
+
+DELETE FROM `creature_addon` WHERE `guid`= 86097;
+DELETE FROM `waypoint_data` WHERE `id`= 860970;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_03_world.sql
new file mode 100644
index 00000000000..ea71a59cf1e
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_03_world.sql
@@ -0,0 +1,24 @@
+--
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127649);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127649,127649,0,0,2,0,0),
+(127649,127701,3,360,2,9,19),
+(127649,127702,3,40,2,9,19),
+(127649,127670,3,320,2,9,19),
+(127649,127671,3,260,2,9,19);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127645);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127645,127645,0,0,2,0,0),
+(127645,127691,3,360,2,7,15),
+(127645,127692,3,40,2,7,15),
+(127645,127664,3,320,2,7,15),
+(127645,127665,3,260,2,7,15);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127640);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(127640,127640,0,0,2,0,0),
+(127640,127685,3,360,2,8,17),
+(127640,127686,3,40,2,8,17),
+(127640,127656,3,320,2,8,17),
+(127640,127657,3,260,2,8,17);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_00_world.sql
new file mode 100644
index 00000000000..a6fdcf8198c
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_00_world.sql
@@ -0,0 +1,11 @@
+--
+SET @LAMENTER := 39048;
+UPDATE `creature_template` SET `AIName`='SmartAI', `InhabitType`=4 WHERE `entry`=@LAMENTER;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@LAMENTER AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@LAMENTER*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
+(@LAMENTER, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 80, @LAMENTER*100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sylvanas'' Lamenter - On Summoned - Action list'),
+(@LAMENTER*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 37090, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sylvanas'' Lamenter - Action list - Cast Lament of the Highborne: Highborne Aura'),
+(@LAMENTER*100, 9, 1, 0, 0, 0, 100,0,0,0,0,0,59,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sylvanas'' Lamenter - Action list - Set run off"),
+(@LAMENTER*100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 114, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sylvanas'' Lamenter - Action list - Rise up'),
+(@LAMENTER*100, 9, 3, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 4, 15095, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sylvanas'' Lamenter - Action list - Play Sound Lament of the Highborne');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_01_world.sql
new file mode 100644
index 00000000000..17fc710b804
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_01_world.sql
@@ -0,0 +1,40 @@
+--
+UPDATE `creature_template` SET `unit_flags`=33555200 WHERE `entry`=28253;
+
+SET @ENTRY := 30736;
+UPDATE `creature_template` SET `AIName`="SmartAI", `unit_flags`=33555200, `InhabitType`=4 WHERE `entry` IN (@ENTRY);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@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,75,57806,0,0,0,0,0,1,0,0,0,0,0,0,0,"Released Soul - Just summoned - Add aura"),
+(@ENTRY,0,1,2,61,0,100,0,0,0,0,0,4,37,0,0,0,0,0,1,0,0,0,0,0,0,0,"Released Soul - Just summoned - Play sound"),
+(@ENTRY,0,2,3,61,0,100,0,0,0,0,0,59,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Released Soul - Just summoned - Set run off"),
+(@ENTRY,0,3,0,61,0,100,0,0,0,0,0,114,40,0,0,0,0,0,1,0,0,0,0,0,0,0,"Released Soul - Just summoned - Rise up"),
+(@ENTRY,0,4,0,54,0,100,0,0,0,0,0,41,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Released Soul - Just summoned - Despawn");
+
+UPDATE `creature_template` SET `unit_flags`=33554432 WHERE `entry` IN (30850,30852,30841);
+
+UPDATE `creature_template` SET `unit_flags`=131076, `flags_extra`=66 WHERE `entry`=25534;
+
+UPDATE `creature_template` SET `unit_flags`=32768 WHERE `entry`=26271;
+UPDATE `creature` SET `unit_flags`=537166592 WHERE `guid` IN (110812, 110813, 110814, 110815, 110816, 110817);
+
+DELETE FROM `creature_addon` WHERE `guid` IN (110812, 110813, 110814, 110815, 110816, 110817);
+INSERT INTO `creature_addon` (`guid`, `bytes2`, `auras`) VALUES
+(110812, 1, "29266"),
+(110813, 1, "29266"),
+(110814, 1, "29266"),
+(110815, 1, "29266"),
+(110816, 1, "29266"),
+(110817, 1, "29266");
+
+UPDATE `creature_template` SET `unit_flags`=512 WHERE `entry`=31402;
+
+UPDATE `creature_template` SET `unit_flags`=33536 WHERE `entry`=30501;
+
+DELETE FROM `creature` WHERE `guid`=120496 AND `id`=28414;
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (28413);
+INSERT INTO `creature_template_addon` (`entry`, `bytes2`, `auras`) VALUES
+(28413, 0, "54450");
+
+UPDATE `creature_template` SET `flags_extra`=2 WHERE `entry` IN (28413);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_02_world.sql
new file mode 100644
index 00000000000..c5cee6530d0
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_02_world.sql
@@ -0,0 +1,6 @@
+-- Eversong Ranger
+DELETE FROM `smart_scripts` WHERE `entryorguid`=15938 AND `source_type`=0 AND `id`<14;
+UPDATE `smart_scripts` SET `id`= `id`-12 WHERE `entryorguid`=15938 AND `source_type`=0 AND `id`>13;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(15938,0,0,0,0,0,100,0,0,0,2200,3800,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Eversong Ranger - In Combat CMC - Cast 'Shoot'"),
+(15938,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,"Eversong Ranger - Between 0-15% Health - Flee For Assist (No Repeat)");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_03_world.sql
new file mode 100644
index 00000000000..b5ee16e808a
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_03_world.sql
@@ -0,0 +1,5 @@
+-- Iceskin Sentry
+UPDATE `creature` SET `movementtype`=0, `spawndist`=0 WHERE `id`=31012;
+UPDATE `creature_addon` SET `bytes1`=50331657 WHERE `guid`=121512;
+UPDATE `creature_template` SET `unit_flags`=2147778560 WHERE `entry`=31012;
+UPDATE `creature_addon` SET `auras`="58269" WHERE `guid` IN (121497, 121498, 121499, 121500, 121502, 121503, 121504, 121505, 121506, 121507, 121508, 121509, 121510, 121511, 121512);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_04_world.sql
new file mode 100644
index 00000000000..bcc71a7646a
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_04_world.sql
@@ -0,0 +1,13 @@
+UPDATE `creature` SET `movementtype`=0, `spawndist`=0 WHERE `id`=32264;
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=32264;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=32262 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
+(32262, 0, 3, 0, 1, 0, 100, 1, 0, 0, 0, 0, 11, 60309, 0, 0, 0, 0, 0, 19, 32264, 30, 0, 0, 0, 0, 0, 'Shadow Channeler - OOC - Cast Channel Souls');
+
+SET @guid=120996;
+DELETE FROM `creature` WHERE `guid` IN (@guid+0, @guid+1);
+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`) VALUES
+(@guid+0, 32262, 571, 0, 0, 1, 1, 10631, 1, 8138.115, 2063.47, 550.596, 5.449381, 300, 0, 0, 9740, 8636, 0, 0, 0, 0),
+(@guid+1, 32262, 571, 0, 0, 1, 1, 10631, 1, 8163.586, 2059.63, 550.596, 3.768629, 300, 0, 0, 9740, 8636, 0, 0, 0, 0);
+
+UPDATE `creature_addon` SET `emote`=396 WHERE `guid`IN (121534,121535,121532);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_05_world.sql
new file mode 100644
index 00000000000..955588cdd52
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_05_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `trinity_string` SET `content_default`='Invalid item count (%u) for item %u' WHERE `entry`=52;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_00_world.sql
new file mode 100644
index 00000000000..9acc58d0e26
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_00_world.sql
@@ -0,0 +1,6 @@
+--
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=27075;
+DELETE FROM `smart_scripts` WHERE `entryorguid`IN (27627) 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
+(27075,0,0,1,8,0,100,0,47935,0,0,0,33,27075,0,0,0,0,0,7,0,0,0,0,0,0,0,"Dun Argol Power Core - On Spellhit - Credit Kill"),
+(27075,0,1,0,61,0,100,0,0,0,0,0,51,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dun Argol Power Core - On Spellhit - Kill Self");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_01_world.sql
new file mode 100644
index 00000000000..d3dd352b5ca
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_01_world.sql
@@ -0,0 +1,36 @@
+--
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=5 AND `SourceEntry`=27626;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(22, 5, 27626, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'execute sai only if the player is the summoner');
+
+UPDATE `creature_template` SET `npcflag`=16777216 WHERE `entry`=27626;
+UPDATE `npc_spellclick_spells` SET `cast_flags`=1 WHERE `npc_entry`=27626 AND `spell_id`=49138;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=27626 AND `source_type`=0 AND `id`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=27627 AND `source_type`=0 AND `id`=0;
+UPDATE `smart_scripts` SET `event_phase_mask`=0 WHERE `entryorguid`=27626 AND `source_type`=0 AND `id`=4;
+UPDATE `vehicle_template_accessory` SET `minion`=1, `summontype`=5, `summontimer`=0 WHERE `entry`=27626;
+
+UPDATE `smart_scripts` SET `event_param1`=11000, `event_param2`=11000, `action_param1`=61647 WHERE `entryorguid`=2693500 AND `source_type`=9 AND `id`=3;
+UPDATE `smart_scripts` SET `event_param1`=3000, `event_param2`=3000, `action_type`=51, `comment`="Anatoly - On Script - Kill self" WHERE `entryorguid`=2697100 AND `source_type`=9 AND `id`=10;
+UPDATE `smart_scripts` SET `id`=11 WHERE `entryorguid`=2697100 AND `source_type`=9 AND `id`=10 AND `action_type`=51;
+UPDATE `smart_scripts` SET `id`=10 WHERE `entryorguid`=2697100 AND `source_type`=9 AND `id`=9 AND `action_type`=69;
+UPDATE `smart_scripts` SET `id`=9 WHERE `entryorguid`=2697100 AND `source_type`=9 AND `id`=8 AND `action_type`=45;
+UPDATE `smart_scripts` SET `id`=8 WHERE `entryorguid`=2697100 AND `source_type`=9 AND `id`=7 and `action_type`=1;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`IN (2697100) AND `source_type`=9 AND `id`= 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
+(2697100,9,7,0,0,0,100,0,0,0,0,0,51,0,0,0,0,0,0,19,27632,20,0,0,0,0,0,"Anatoly - On Script - Kill Tatjana");
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`IN (27626) AND `source_type`=0 AND `id`> 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
+(27626,0,8,9,61,0,100,0,0,0,0,0,11,49162,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tatjana's Horse - On Waypoint 19 Reached - Summon Tatjana"),
+(27626,0,9,10,61,0,100,0,0,0,0,0,41,0,0,0,0,0,0,19,27627,20,0,0,0,0,0,"Tatjana's Horse - On Waypoint 19 Reached - Despawn"),
+(27626,0,10,0,61,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tatjana's Horse - On Waypoint 19 Reached - Despawn");
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`IN (27627) 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
+(27627,0,6,0,8,0,100,0,49134,0,0,0,20,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tatjana - On Spellhit 'Tranquilizer Dart' - Stop Attack");
+
+DELETE FROM `creature_template_addon` WHERE `entry`=27632;
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`auras`) VALUES
+(27632,0,0,"49135");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_02_world.sql
new file mode 100644
index 00000000000..de63019221f
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_02_world.sql
@@ -0,0 +1,15 @@
+--
+UPDATE `creature_template` SET `flags_extra`=2 WHERE `entry`=29639;
+UPDATE `creature` SET `MovementType`=0, `spawndist`=0 WHERE `guid`=105166;
+UPDATE `creature_addon` SET `auras`=29266 WHERE `guid`=105166;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=29500;
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (29558, 32520);
+UPDATE `creature` SET `MovementType`=0, `spawndist`=0 WHERE `guid`=105243;
+UPDATE `creature_addon` SET `auras`=29266 WHERE `guid`=105243;
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `Entry` IN (29351, 29358);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (29351, 29358) 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
+(29351,0,0,0,0,0,100,0,2000,5000,7000,9000,11,38621,0,0,0,0,0,2,0,0,0,0,0,0,0,'Niffelem Frost Giant - IC - Cast Debilitating Strike'),
+(29358,0,0,0,0,0,100,0,2000,5000,7000,9000,11,61572,0,0,0,0,0,2,0,0,0,0,0,0,0,'Frostworg - IC - Cast Frostbite'),
+(29358,0,1,0,0,0,100,0,2000,6000,6000,9000,11,50075,0,0,0,0,0,2,0,0,0,0,0,0,0,'Frostworg - IC - Cast Maim Flesh');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_03_world.sql
new file mode 100644
index 00000000000..74390f75e6d
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_03_world.sql
@@ -0,0 +1,18 @@
+--
+
+DELETE FROM `creature` WHERE `id`=29558;
+UPDATE `creature_template` SET `npcflag`=16777216 WHERE `entry` IN (29351, 29358);
+
+DELETE FROM `npc_spellclick_spells` WHERE `npc_entry` IN (29358, 29351);
+INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `user_type`) VALUES
+(29358,46598,0,0),
+(29351,46598,0,0);
+
+DELETE FROM `vehicle_template_accessory` WHERE `entry` IN (29358, 29351);
+INSERT INTO `vehicle_template_accessory` (`entry`,`accessory_entry`,`seat_id`,`minion`,`description`,`summontype`) VALUES
+(29351,29558,0,1, 'Niffelem Frost Giant', 8),
+(29351,29558,1,1, 'Niffelem Frost Giant', 8),
+(29351,29558,2,1, 'Niffelem Frost Giant', 8),
+(29351,29558,3,1, 'Niffelem Frost Giant', 8),
+(29358,29558,0,1, 'Frostworg', 8),
+(29358,29558,1,1, 'Frostworg', 8);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_09_30_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_30_00_world.sql
new file mode 100644
index 00000000000..fd441ec05f5
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_30_00_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `waypoint_data` SET `position_z` = 45.5099 WHERE `id` = 845820 AND `point` = 5;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_00_world.sql
new file mode 100644
index 00000000000..8e6ca285c97
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_00_world.sql
@@ -0,0 +1,112 @@
+-- Pathing for Azuremyst Peacekeeper Entry: 18038 'TDB FORMAT'
+SET @NPC := 63772;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4171.392,`position_y`=-12464.35,`position_z`=44.40071 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,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,-4171.392,-12464.35,44.40071,0,0,0,0,100,0),
+(@PATH,2,-4172.635,-12441.57,43.73568,0,0,0,0,100,0),
+(@PATH,3,-4183.271,-12464.69,44.86507,0,0,0,0,100,0),
+(@PATH,4,-4191.694,-12478.19,45.88747,0,0,0,0,100,0),
+(@PATH,5,-4208.529,-12485.6,44.76502,0,0,0,0,100,0),
+(@PATH,6,-4206.412,-12507.59,45.07471,0,0,0,0,100,0),
+(@PATH,7,-4195.887,-12522.06,45.18763,0,0,0,0,100,0),
+(@PATH,8,-4175.124,-12527.87,44.7594,0,0,0,0,100,0),
+(@PATH,9,-4159.117,-12516.98,44.69878,0,0,0,0,100,0),
+(@PATH,10,-4153.929,-12500.22,44.07134,0,0,0,0,100,0),
+(@PATH,11,-4155.868,-12489.98,44.48027,0,0,0,0,100,0);
+
+-- Pathing for Azuremyst Peacekeeper Entry: 18038 'TDB FORMAT'
+SET @NPC := 63774;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4200.606,`position_y`=-12494.63,`position_z`=44.62513 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,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,-4200.606,-12494.63,44.62513,0,0,0,0,100,0),
+(@PATH,2,-4177.409,-12486.11,44.26247,0,0,0,0,100,0),
+(@PATH,3,-4164.705,-12500.84,44.40313,0,0,0,0,100,0),
+(@PATH,4,-4134.247,-12503.81,43.62505,0,0,0,0,100,0),
+(@PATH,5,-4100.406,-12490.22,40.99446,0,0,0,0,100,0),
+(@PATH,6,-4067.271,-12473.87,35.7093,0,0,0,0,100,0),
+(@PATH,7,-4034.042,-12460.46,31.01041,0,0,0,0,100,0),
+(@PATH,8,-4000.527,-12450.34,25.04846,0,0,0,0,100,0),
+(@PATH,9,-3967.376,-12442.74,18.43705,0,0,0,0,100,0),
+(@PATH,10,-3951.83,-12430.16,14.62435,0,0,0,0,100,0),
+(@PATH,11,-3923.009,-12427.82,9.259804,0,0,0,0,100,0),
+(@PATH,12,-3890.977,-12420.35,3.110225,0,0,0,0,100,0),
+(@PATH,13,-3845.61,-12400.15,-0.5076148,0,0,0,0,100,0),
+(@PATH,14,-3799.788,-12396.9,-1.57003,0,0,0,0,100,0),
+(@PATH,15,-3767.789,-12389.86,-1.612022,0,0,0,0,100,0),
+(@PATH,16,-3733.884,-12386.01,-2.563792,0,0,0,0,100,0),
+(@PATH,17,-3699.675,-12379.4,-3.253355,0,0,0,0,100,0),
+(@PATH,18,-3676.898,-12366.13,-3.005086,0,0,0,0,100,0),
+(@PATH,19,-3634.198,-12353.74,-1.517532,0,0,0,0,100,0),
+(@PATH,20,-3600.196,-12362.62,0.9561348,0,0,0,0,100,0),
+(@PATH,21,-3566.171,-12360.33,3.723941,0,0,0,0,100,0),
+(@PATH,22,-3533.756,-12360.66,6.88605,0,0,0,0,100,0),
+(@PATH,23,-3500.217,-12359.56,9.171444,0,0,0,0,100,0),
+(@PATH,24,-3533.756,-12360.66,6.88605,0,0,0,0,100,0),
+(@PATH,25,-3566.171,-12360.33,3.723941,0,0,0,0,100,0),
+(@PATH,26,-3600.196,-12362.62,0.9561348,0,0,0,0,100,0),
+(@PATH,27,-3634.033,-12353.8,-1.465286,0,0,0,0,100,0),
+(@PATH,28,-3676.898,-12366.13,-3.005086,0,0,0,0,100,0),
+(@PATH,29,-3699.675,-12379.4,-3.253355,0,0,0,0,100,0),
+(@PATH,30,-3733.884,-12386.01,-2.563792,0,0,0,0,100,0),
+(@PATH,31,-3767.789,-12389.86,-1.612022,0,0,0,0,100,0),
+(@PATH,32,-3799.788,-12396.9,-1.57003,0,0,0,0,100,0),
+(@PATH,33,-3845.61,-12400.15,-0.5076148,0,0,0,0,100,0),
+(@PATH,34,-3890.977,-12420.35,3.110225,0,0,0,0,100,0),
+(@PATH,35,-3923.009,-12427.82,9.259804,0,0,0,0,100,0),
+(@PATH,36,-3951.679,-12430.06,14.65267,0,0,0,0,100,0),
+(@PATH,37,-3967.376,-12442.74,18.43705,0,0,0,0,100,0),
+(@PATH,38,-4000.527,-12450.34,25.04846,0,0,0,0,100,0),
+(@PATH,39,-4034.023,-12460.46,30.9877,0,0,0,0,100,0),
+(@PATH,40,-4067.271,-12473.87,35.7093,0,0,0,0,100,0),
+(@PATH,41,-4100.406,-12490.22,40.99446,0,0,0,0,100,0),
+(@PATH,42,-4134.247,-12503.81,43.62505,0,0,0,0,100,0),
+(@PATH,43,-4164.705,-12500.84,44.40313,0,0,0,0,100,0),
+(@PATH,44,-4177.409,-12486.11,44.26247,0,0,0,0,100,0);
+
+-- Pathing for Azuremyst Peacekeeper Entry: 18038 'TDB FORMAT'
+SET @NPC := 63773;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4134.126,`position_y`=-12506.01,`position_z`=43.88897 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,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,-4134.126,-12506.01,43.88897,0,0,0,0,100,0),
+(@PATH,2,-4167.211,-12511.93,44.3844,0,0,0,0,100,0),
+(@PATH,3,-4197.208,-12508.09,44.48694,0,0,0,0,100,0),
+(@PATH,4,-4233.25,-12487.22,41.86756,0,0,0,0,100,0),
+(@PATH,5,-4267.729,-12476.33,29.47266,0,0,0,0,100,0),
+(@PATH,6,-4289.251,-12471.83,24.20484,0,0,0,0,100,0),
+(@PATH,7,-4319.148,-12478.5,18.93451,0,0,0,0,100,0),
+(@PATH,8,-4333.606,-12469.67,15.57558,0,0,0,0,100,0),
+(@PATH,9,-4364.828,-12471.54,10.27822,0,0,0,0,100,0),
+(@PATH,10,-4399.945,-12455.7,5.627916,0,0,0,0,100,0),
+(@PATH,11,-4432.767,-12443.6,2.278673,0,0,0,0,100,0),
+(@PATH,12,-4467.428,-12430.61,2.763325,0,0,0,0,100,0),
+(@PATH,13,-4499.994,-12415.54,4.523335,0,0,0,0,100,0),
+(@PATH,14,-4533.506,-12416.08,7.310507,0,0,0,0,100,0),
+(@PATH,15,-4566.756,-12417.92,9.204178,0,0,0,0,100,0),
+(@PATH,16,-4533.506,-12416.08,7.310507,0,0,0,0,100,0),
+(@PATH,17,-4499.994,-12415.54,4.523335,0,0,0,0,100,0),
+(@PATH,18,-4467.428,-12430.61,2.763325,0,0,0,0,100,0),
+(@PATH,19,-4432.767,-12443.6,2.278673,0,0,0,0,100,0),
+(@PATH,20,-4399.945,-12455.7,5.627916,0,0,0,0,100,0),
+(@PATH,21,-4364.828,-12471.54,10.27822,0,0,0,0,100,0),
+(@PATH,22,-4333.889,-12469.66,15.56435,0,0,0,0,100,0),
+(@PATH,23,-4319.148,-12478.5,18.93451,0,0,0,0,100,0),
+(@PATH,24,-4289.251,-12471.83,24.20484,0,0,0,0,100,0),
+(@PATH,25,-4267.729,-12476.33,29.47266,0,0,0,0,100,0),
+(@PATH,26,-4233.25,-12487.22,41.86756,0,0,0,0,100,0),
+(@PATH,27,-4197.208,-12508.09,44.48694,0,0,0,0,100,0),
+(@PATH,28,-4167.211,-12511.93,44.3844,0,0,0,0,100,0);
+
+DELETE FROM `creature` WHERE `guid`=63770;
+DELETE FROM `creature_addon` WHERE `guid`=63770;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_01_world.sql
new file mode 100644
index 00000000000..bb32607b23d
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_01_world.sql
@@ -0,0 +1,247 @@
+--
+SET @ENTRY := 34102;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry` IN (@ENTRY, 33462, 33480, 33459, 33467, 33477, 33465);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY, 33462, 33480, 33459, 33467, 33477, 33465) AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY*100, @ENTRY*100+1, @ENTRY*100+2, @ENTRY*100+3, @ENTRY*100+4, @ENTRY*100+5, @ENTRY*100+6, 33462*100, 33480*100, 33459*100, 33467*100, 33477*100, 33465*100, 33462*100+1, 33480*100+1, 33459*100+1, 33467*100+1, 33477*100+1, 33465*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
+(@ENTRY,0,0,0,1,0,100,0,600000,600000,1200000,1200000,53,0,@ENTRY*10,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - OOC - Action List"),
+(@ENTRY,0,1,0,40,0,100,0,1,@ENTRY*10,0,0,80,@ENTRY*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - On waypoint reached - Action List"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,8494.070313, 1102.23584, 554.327515, 3.772250,"Argent Confessor Paletress - Action List - Set orientation"),
+(@ENTRY*100,9,1,0,0,0,100,0,2000,2000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,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,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,3,0,0,0,100,0,7000,7000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,4,0,0,0,100,0,5000,5000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,5,0,0,0,100,0,7000,7000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,6,0,0,0,100,0,5000,5000,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,7,0,0,0,100,0,5000,5000,0,0,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,8,0,0,0,100,0,7000,7000,0,0,1,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,9,0,0,0,100,0,7000,7000,0,0,1,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,10,0,0,0,100,0,7000,7000,0,0,1,9,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,11,0,0,0,100,0,5000,5000,0,0,1,10,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,12,0,0,0,100,0,5000,5000,0,0,1,11,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,13,0,0,0,100,0,5000,5000,0,0,1,12,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,14,0,0,0,100,0,7000,7000,0,0,1,13,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,15,0,0,0,100,0,5000,5000,0,0,1,14,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,16,0,0,0,100,0,5000,5000,0,0,1,15,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,17,0,0,0,100,0,6000,6000,0,0,1,16,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,18,0,0,0,100,0,6000,6000,0,0,1,17,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,19,0,0,0,100,0,7000,7000,0,0,1,18,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"),
+(@ENTRY*100,9,20,0,0,0,100,0,7000,7000,0,0,53,0,@ENTRY*10+1,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Start wp"),
+(@ENTRY,0,2,0,40,0,100,0,2,@ENTRY*10+1,0,0,87,@ENTRY*100+1,@ENTRY*100+2,@ENTRY*100+3,@ENTRY*100+4,@ENTRY*100+5,@ENTRY*100+5,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - On data set - Random Action List"),
+(@ENTRY*100+1,9,0,0,0,0,100,0,0,0,0,0,54,18000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"),
+(@ENTRY*100+1,9,1,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,33462,50,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"),
+(@ENTRY*100+2,9,0,0,0,0,100,0,0,0,0,0,54,18000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"),
+(@ENTRY*100+2,9,1,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,33480,50,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"),
+(@ENTRY*100+3,9,0,0,0,0,100,0,0,0,0,0,54,18000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"),
+(@ENTRY*100+3,9,1,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,33459,50,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"),
+(@ENTRY*100+4,9,0,0,0,0,100,0,0,0,0,0,54,18000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"),
+(@ENTRY*100+4,9,1,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,33467,50,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"),
+(@ENTRY*100+5,9,0,0,0,0,100,0,0,0,0,0,54,18000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"),
+(@ENTRY*100+5,9,1,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,33477,50,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"),
+(@ENTRY*100+6,9,0,0,0,0,100,0,0,0,0,0,54,18000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"),
+(@ENTRY*100+6,9,1,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,33465,50,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"),
+(@ENTRY,0,3,0,38,0,100,0,1,1,0,0,69,0,0,0,0,0,0,8,0,0,0,8490.290039, 1111.510010, 554.333984, 4.642580,"Argent Confessor Paletress - On data set - move to pos"),
+(@ENTRY,0,4,0,38,0,100,0,1,2,0,0,5,23,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - On data set - play emote"),
+(@ENTRY,0,5,0,38,0,100,0,1,3,0,0,5,17,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - On data set - play emote"),
+(33462,0,0,0,38,0,100,0,1,1,0,0,80,33462*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - On data set - Action List"),
+(33462*100,9,0,0,0,0,100,0,0,0,0,0,91,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - Action List - Set up"),
+(33462*100,9,1,0,0,0,100,0,0,0,0,0,53,0,33462*10,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - Action List - Start waypoint"),
+(33480,0,0,0,38,0,100,0,1,1,0,0,80,33480*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - On data set - Action List"),
+(33480*100,9,0,0,0,0,100,0,0,0,0,0,91,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - Action List - Set up"),
+(33480*100,9,1,0,0,0,100,0,0,0,0,0,53,0,33480*10,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - Action List - Start waypoint"),
+(33459,0,0,0,38,0,100,0,1,1,0,0,80,33459*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - On data set - Action List"),
+(33459*100,9,0,0,0,0,100,0,0,0,0,0,91,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - Action List - Set up"),
+(33459*100,9,1,0,0,0,100,0,0,0,0,0,53,0,33459*10,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - Action List - Start waypoint"),
+(33467,0,0,0,38,0,100,0,1,1,0,0,80,33467*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - On data set - Action List"),
+(33467*100,9,0,0,0,0,100,0,0,0,0,0,91,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - Action List - Set up"),
+(33467*100,9,1,0,0,0,100,0,0,0,0,0,53,0,33467*10,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - Action List - Start waypoint"),
+(33477,0,0,0,38,0,100,0,1,1,0,0,80,33477*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - On data set - Action List"),
+(33477*100,9,0,0,0,0,100,0,0,0,0,0,91,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - Action List - Set up"),
+(33477*100,9,1,0,0,0,100,0,0,0,0,0,53,0,33477*10,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - Action List - Start waypoint"),
+(33465,0,0,0,38,0,100,0,1,1,0,0,80,33465*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - On data set - Action List"),
+(33465*100,9,0,0,0,0,100,0,0,0,0,0,91,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - Action List - Set up"),
+(33465*100,9,1,0,0,0,100,0,0,0,0,0,53,0,33465*10,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - Action List - Start waypoint"),
+(33462,0,1,0,40,0,100,0,5,33462*10,0,0,80,33462*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - On waypoint reached - Action List"),
+(33462*100+1,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,8485.782227, 1114.010864, 554.297485, 5.774796,"Gnomeregan Champion - Action List - Set orientation"),
+(33462*100+1,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,"Gnomeregan Champion - Action List - Talk"),
+(33462*100+1,9,2,0,0,0,100,0,6000,6000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - Action List - Talk"),
+(33462*100+1,9,3,0,0,0,100,0,6000,6000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - Action List - Talk"),
+(33462*100+1,9,4,0,0,0,100,0,10000,10000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - Action List - Talk"),
+(33462*100+1,9,5,0,0,0,100,0,6000,6000,0,0,1,19,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Gnomeregan Champion - Action List - Talk"),
+(33462*100+1,9,6,0,0,0,100,0,6000,6000,0,0,1,20,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Gnomeregan Champion - Action List - Talk"),
+(33462*100+1,9,7,0,0,0,100,0,6000,6000,0,0,45,1,1,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Gnomeregan Champion - Action List - Set Data"),
+(33462*100+1,9,8,0,0,0,100,0,0,0,0,0,53,0,33462*10+1,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - Action List - Start waypoint"),
+(33462,0,2,0,40,0,100,0,5,33462*10+1,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - On waypoint reached - Despawn"),
+(33480,0,1,0,40,0,100,0,5,33480*10,0,0,80,33480*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - On waypoint reached - Action List"),
+(33480*100+1,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,8485.782227, 1114.010864, 554.297485, 5.774796,"Ironforge Champion - Action List - Set orientation"),
+(33480*100+1,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,"Ironforge Champion - Action List - Talk"),
+(33480*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,"Ironforge Champion - Action List - Talk"),
+(33480*100+1,9,3,0,0,0,100,0,5000,5000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - Action List - Talk"),
+(33480*100+1,9,4,0,0,0,100,0,5000,5000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - Action List - Talk"),
+(33480*100+1,9,5,0,0,0,100,0,5000,5000,0,0,1,21,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Ironforge Champion - Action List - Talk"),
+(33480*100+1,9,6,0,0,0,100,0,5000,5000,0,0,45,1,1,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Ironforge Champion - Action List - Set Data"),
+(33480*100+1,9,7,0,0,0,100,0,0,0,0,0,53,0,33480*10+1,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - Action List - Start waypoint"),
+(33480,0,2,0,40,0,100,0,5,33480*10+1,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - On waypoint reached - Despawn"),
+(33459,0,1,0,40,0,100,0,3,33459*10,0,0,80,33459*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - On waypoint reached - Action List"),
+(33459*100+1,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,8485.782227, 1114.010864, 554.297485, 5.774796,"Orgrimmar Champion - Action List - Set orientation"),
+(33459*100+1,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,"Orgrimmar Champion - Action List - Talk"),
+(33459*100+1,9,2,0,0,0,100,0,6000,6000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - Action List - Talk"),
+(33459*100+1,9,3,0,0,0,100,0,6000,6000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - Action List - Talk"),
+(33459*100+1,9,4,0,0,0,100,0,6000,6000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - Action List - Talk"),
+(33459*100+1,9,5,0,0,0,100,0,6000,6000,0,0,1,22,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Orgrimmar Champion - Action List - Talk"),
+(33459*100+1,9,6,0,0,0,100,0,6000,6000,0,0,1,23,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Orgrimmar Champion - Action List - Talk"),
+(33459*100+1,9,7,0,0,0,100,0,4000,4000,0,0,45,1,2,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Orgrimmar Champion - Action List - Set Data"),
+(33459*100+1,9,8,0,0,0,100,0,1000,1000,0,0,5,11,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - Action List - Emote"),
+(33459*100+1,9,9,0,0,0,100,0,2000,2000,0,0,1,24,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Orgrimmar Champion - Action List - Talk"),
+(33459*100+1,9,10,0,0,0,100,0,6000,6000,0,0,45,1,1,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Orgrimmar Champion - Action List - Set Data"),
+(33459*100+1,9,11,0,0,0,100,0,0,0,0,0,53,0,33459*10+1,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - Action List - Start waypoint"),
+(33459,0,2,0,40,0,100,0,3,33459*10+1,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - On waypoint reached - Despawn"),
+(33467,0,1,0,40,0,100,0,4,33467*10,0,0,80,33467*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - On waypoint reached - Action List"),
+(33467*100+1,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,8485.782227, 1114.010864, 554.297485, 5.774796,"Silvermoon Champion - Action List - Set orientation"),
+(33467*100+1,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,"Silvermoon Champion - Action List - Talk"),
+(33467*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,"Silvermoon Champion - Action List - Talk"),
+(33467*100+1,9,3,0,0,0,100,0,5000,5000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - Action List - Talk"),
+(33467*100+1,9,4,0,0,0,100,0,5000,5000,0,0,1,25,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Silvermoon Champion - Action List - Talk"),
+(33467*100+1,9,5,0,0,0,100,0,8000,8000,0,0,1,26,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Silvermoon Champion - Action List - Talk"),
+(33467*100+1,9,6,0,0,0,100,0,2000,2000,0,0,45,1,3,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Silvermoon Champion - Action List - Set Data"),
+(33467*100+1,9,7,0,0,0,100,0,3000,3000,0,0,5,17,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - Action List - Emote"),
+(33467*100+1,9,8,0,0,0,100,0,5000,5000,0,0,45,1,1,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Silvermoon Champion - Action List - Set Data"),
+(33467*100+1,9,9,0,0,0,100,0,0,0,0,0,53,0,33467*10+1,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - Action List - Start waypoint"),
+(33467,0,2,0,40,0,100,0,4,33467*10+1,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - On waypoint reached - Despawn"),
+(33477,0,1,0,40,0,100,0,6,33477*10,0,0,80,33477*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - On waypoint reached - Action List"),
+(33477*100+1,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,8485.782227, 1114.010864, 554.297485, 5.774796,"Stormwind Champion - Action List - Set orientation"),
+(33477*100+1,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,"Stormwind Champion - Action List - Talk"),
+(33477*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,"Stormwind Champion - Action List - Talk"),
+(33477*100+1,9,3,0,0,0,100,0,5000,5000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - Action List - Talk"),
+(33477*100+1,9,4,0,0,0,100,0,5000,5000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - Action List - Talk"),
+(33477*100+1,9,5,0,0,0,100,0,5000,5000,0,0,1,27,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Stormwind Champion - Action List - Talk"),
+(33477*100+1,9,6,0,0,0,100,0,7000,7000,0,0,1,28,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Stormwind Champion - Action List - Talk"),
+(33477*100+1,9,7,0,0,0,100,0,8000,8000,0,0,1,29,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Stormwind Champion - Action List - Talk"),
+(33477*100+1,9,8,0,0,0,100,0,7000,7000,0,0,1,30,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Stormwind Champion - Action List - Talk"),
+(33477*100+1,9,9,0,0,0,100,0,5000,5000,0,0,45,1,1,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Stormwind Champion - Action List - Set Data"),
+(33477*100+1,9,10,0,0,0,100,0,0,0,0,0,53,0,33477*10+1,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - Action List - Start waypoint"),
+(33477,0,2,0,40,0,100,0,6,33477*10+1,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - On waypoint reached - Despawn"),
+(33465,0,1,0,40,0,100,0,3,33465*10,0,0,80,33465*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - On waypoint reached - Action List"),
+(33465*100+1,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,8485.782227, 1114.010864, 554.297485, 5.774796,"Undercity Champion - Action List - Set orientation"),
+(33465*100+1,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,"Undercity Champion - Action List - Talk"),
+(33465*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,31,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Undercity Champion - Action List - Talk"),
+(33465*100+1,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,"Undercity Champion - Action List - Talk"),
+(33465*100+1,9,4,0,0,0,100,0,1000,1000,0,0,5,11,0,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - Action List - Emote"),
+(33465*100+1,9,5,0,0,0,100,0,2000,2000,0,0,45,1,1,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Undercity Champion - Action List - Set Data"),
+(33465*100+1,9,6,0,0,0,100,0,3000,3000,0,0,5,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - Action List - Emote"),
+(33465*100+1,9,7,0,0,0,100,0,3000,3000,0,0,53,0,33465*10+1,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - Action List - Start waypoint"),
+(33465,0,2,0,40,0,100,0,3,33465*10+1,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - On waypoint reached - Despawn");
+
+DELETE FROM `waypoints` WHERE `entry`IN (@ENTRY*10, @ENTRY*10+1, 33462*10, 33462*10+1, 33480*10, 33480*10+1, 33459*10, 33459*10+1, 33467*10, 33467*10+1, 33477*10, 33477*10+1, 33465*10, 33465*10+1);
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@ENTRY*10+1,1,8490.655273, 1111.821045, 554.363525,'Argent Confessor Paletress'),
+(@ENTRY*10+1,2,8488.863281, 1112.676514, 554.298096,'Argent Confessor Paletress'),
+(@ENTRY*10,1,8494.070313, 1102.23584, 554.327515,'Argent Confessor Paletress'),
+(33462*10,1,8491.833008, 1100.861572, 554.361450,'Champion'),
+(33462*10,2,8491.234375, 1102.656860, 554.360840,'Champion'),
+(33462*10,3,8487.101563, 1107.712036, 554.363220,'Champion'),
+(33462*10,4,8482.299805, 1113.207886, 554.349243,'Champion'),
+(33462*10,5,8485.782227, 1114.010864, 554.297485,'Champion'),
+(33462*10+1,1,8485.782227, 1114.010864, 554.297485,'Champion'),
+(33462*10+1,2,8482.299805, 1113.207886, 554.349243,'Champion'),
+(33462*10+1,3,8487.101563, 1107.712036, 554.363220,'Champion'),
+(33462*10+1,4,8491.234375, 1102.656860, 554.360840,'Champion'),
+(33462*10+1,5,8491.833008, 1100.861572, 554.361450,'Champion'),
+(33480*10,1,8494.106445, 1097.863037, 554.344543,'Champion'),
+(33480*10,2,8491.234375, 1102.656860, 554.360840,'Champion'),
+(33480*10,3,8487.101563, 1107.712036, 554.363220,'Champion'),
+(33480*10,4,8482.942383, 1113.390015, 554.340759,'Champion'),
+(33480*10,5,8485.782227, 1114.010864, 554.297485,'Champion'),
+(33480*10+1,1,8485.782227, 1114.010864, 554.297485,'Champion'),
+(33480*10+1,2,8482.942383, 1113.390015, 554.340759,'Champion'),
+(33480*10+1,3,8487.101563, 1107.712036, 554.363220,'Champion'),
+(33480*10+1,4,8491.234375, 1102.656860, 554.360840,'Champion'),
+(33480*10+1,5,8494.106445, 1097.863037, 554.344543,'Champion'),
+(33459*10,1,8486.814453, 1107.731689, 554.365784,'Champion'),
+(33459*10,2,8482.299805, 1113.207886, 554.349243,'Champion'),
+(33459*10,3,8485.782227, 1114.010864, 554.297485,'Champion'),
+(33459*10+1,1,8485.782227, 1114.010864, 554.297485,'Champion'),
+(33459*10+1,2,8482.299805, 1113.207886, 554.349243,'Champion'),
+(33459*10+1,3,8486.814453, 1107.731689, 554.365784,'Champion'),
+(33467*10,1,8483.411133, 1105.254639, 554.445313,'Champion'),
+(33467*10,2,8486.906250, 1107.583130, 554.366699,'Champion'),
+(33467*10,3,8482.692383, 1113.328857, 554.342896,'Champion'),
+(33467*10,4,8485.782227, 1114.010864, 554.297485,'Champion'),
+(33467*10+1,1,8485.782227, 1114.010864, 554.297485,'Champion'),
+(33467*10+1,2,8482.692383, 1113.328857, 554.342896,'Champion'),
+(33467*10+1,3,8486.906250, 1107.583130, 554.366699,'Champion'),
+(33467*10+1,4,8483.411133, 1105.254639, 554.445313,'Champion'),
+(33477*10,1,8492.628906, 1091.799683, 554.420837,'Champion'),
+(33477*10,2,8496.347656, 1094.432129, 554.335510,'Champion'),
+(33477*10,3,8492.845703, 1099.233643, 554.353027,'Champion'),
+(33477*10,4,8488.207031, 1106.236206, 554.367737,'Champion'),
+(33477*10,5,8483.253906, 1113.153198, 554.338135,'Champion'),
+(33477*10,6,8485.782227, 1114.010864, 554.297485,'Champion'),
+(33477*10+1,1,8485.782227, 1114.010864, 554.297485,'Champion'),
+(33477*10+1,2,8483.253906, 1113.153198, 554.338135,'Champion'),
+(33477*10+1,3,8488.207031, 1106.236206, 554.367737,'Champion'),
+(33477*10+1,4,8492.845703, 1099.233643, 554.353027,'Champion'),
+(33477*10+1,5,8496.347656, 1094.432129, 554.335510,'Champion'),
+(33477*10+1,6,8492.628906, 1091.799683, 554.420837,'Champion'),
+(33465*10,1,8477.542969, 1110.444702, 554.429932,'Champion'),
+(33465*10,2,8482.299805, 1113.207886, 554.349243,'Champion'),
+(33465*10,3,8485.782227, 1114.010864, 554.297485,'Champion'),
+(33465*10+1,1,8485.782227, 1114.010864, 554.297485,'Champion'),
+(33465*10+1,2,8482.299805, 1113.207886, 554.349243,'Champion'),
+(33465*10+1,3,8477.542969, 1110.444702, 554.429932,'Champion');
+
+DELETE FROM `creature_text` WHERE `entry` IN (@ENTRY, 33462, 33480, 33459, 33467, 33477, 33465);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES
+(@ENTRY,0,0,'Thank you all for attending this sermon. It''s wonderful to see so many familiar faces!',12,0,100,0,0,0, 'Argent Confessor Paletress',34192),
+(@ENTRY,1,0,'Today I would like to touch on the three virtues of the Light.',12,0,100,0,0,0, 'Argent Confessor Paletress',34193),
+(@ENTRY,2,0,'These are dark and difficult times for us all. The armies of the Scourge amass to the south. Companions fall on the battlefield and rise to serve our enemy moments later.',12,0,100,0,0,0, 'Argent Confessor Paletress',34194),
+(@ENTRY,3,0,'Many of you have experienced a betrayal of trust.',12,0,100,0,0,0, 'Argent Confessor Paletress',34196),
+(@ENTRY,4,0,'Yet you persevere, as we all must. In these times, no one is a stranger to the virtue of tenacity. In the face of despair and hatred, we continue to stand true to our beliefs and fight on.',12,0,100,0,0,0, 'Argent Confessor Paletress',34197),
+(@ENTRY,5,0,'There can be no doubt as to your tenacity... but there are other virtues to consider.',12,0,100,0,0,0, 'Argent Confessor Paletress',34199),
+(@ENTRY,6,0,'Respect is the first virtue taught to those joining the path of the Light.',12,0,100,0,0,0, 'Argent Confessor Paletress',34200),
+(@ENTRY,7,0,'Look across the aisle to those you would call enemy. Despite the hatred that separates you, there are qualities to respect in your opponent. Their prowess should be acknowledged.',12,0,100,0,0,0, 'Argent Confessor Paletress',34201),
+(@ENTRY,8,0,'All of us gathered here have a concept of honorable combat. Conducting yourself with honor and treating your opponent as you wish to be treated shows respect.',12,0,100,0,0,0, 'Argent Confessor Paletress',34202),
+(@ENTRY,9,0,'Respect your opponent on the field, whether he be your brother or your sworn enemy. No matter where your beliefs truly lie, such respect is acknowledging a connection...',12,0,100,0,0,0, 'Argent Confessor Paletress',34203),
+(@ENTRY,10,0,'...and in acknowledging those connections, you are closer to the Light.',12,0,100,0,0,0, 'Argent Confessor Paletress',34205),
+(@ENTRY,11,0,'There is one further step on the path of Light: compassion.',12,0,100,0,0,0, 'Argent Confessor Paletress',34206),
+(@ENTRY,12,0,'Rivalries abound in this day and age. It is easy to see differences wherever you turn.',12,0,100,0,0,0, 'Argent Confessor Paletress',34207),
+(@ENTRY,13,0,'The challenge is in looking beyond appearances and understanding our similarities. Through this understanding, you can feel compassion for the losses others have suffered...',12,0,100,0,0,0, 'Argent Confessor Paletress',34208),
+(@ENTRY,14,0,'...even if the victim bears another banner.',12,0,100,0,0,0, 'Argent Confessor Paletress',34209),
+(@ENTRY,15,0,'By feeling and understanding compassion in enemy and ally alike, you reaffirm your connection with the world.',12,0,100,0,0,0, 'Argent Confessor Paletress',34210),
+(@ENTRY,16,0,'Acting on these tenets, these virtues, help make the world a place we all can appreciate. A world of honor and justice.',12,0,100,0,0,0, 'Argent Confessor Paletress',34211),
+(@ENTRY,17,0,'Think on my words, friends. In the darkness that surrounds us all, the Light is needed more than ever.',12,0,100,0,0,0, 'Argent Confessor Paletress',34212),
+(@ENTRY,18,0,'I''ll be behind the confessional screen if anyone wishes to speak with me. Any doubts, any worries, any uncertainties I will happily soothe.',12,0,100,0,0,0, 'Argent Confessor Paletress',34216),
+(@ENTRY,19,0,'Take heart. Size isn''t what matters, but how you use the skills you have.',12,0,100,0,0,0, 'Argent Confessor Paletress',34250),
+(@ENTRY,20,0,'What you lack in size you make up for in ambition and dedication, little one. Go with the Light.',12,0,100,0,0,0, 'Argent Confessor Paletress',34251),
+(@ENTRY,21,0,'Drink in moderation, then, my dwarven friend, but you may want to turn in your lance and reins for the time being. Go with the Light.',12,0,100,0,0,0, 'Argent Confessor Paletress',34259),
+(@ENTRY,22,0,'I understand your frustration. Your people are ferocious in battle, and this isn''t what you''re used to.',12,0,100,0,0,0, 'Argent Confessor Paletress',34285),
+(@ENTRY,23,0,'But this is a different sort of honorable combat. Difficult to adapt to, perhaps, but with your prowess I''m sure you''ll show everyone the strength in your people.',12,0,100,0,0,0, 'Argent Confessor Paletress',34286),
+(@ENTRY,24,0,'Besides... while an axe can be a valuable tool in war, lances have their uses as well.',12,0,100,0,0,0, 'Argent Confessor Paletress',34287),
+(@ENTRY,25,0,'It may seem pointless, but try to find pride in a good fight. The time will come when all this practicing and competition will be put to good use.',12,0,100,0,0,0, 'Argent Confessor Paletress',34292),
+(@ENTRY,26,0,'And your hair looks wonderful.',12,0,100,0,0,0, 'Argent Confessor Paletress',34293),
+(@ENTRY,27,0,'Your heart is in the right place, and I know you seek to serve the Light. But these small strikes do little to the great undead host.',12,0,100,0,0,0, 'Argent Confessor Paletress',34264),
+(@ENTRY,28,0,'This tournament is helping to form a strong, concerted force, though it may not appear obvious. When we''re ready, the eyes of the Crusade and all its champions will turn towards Icecrown.',12,0,100,0,0,0, 'Argent Confessor Paletress',34265),
+(@ENTRY,29,0,'We will bring the might of all races to the Lich King, and he will be defeated.',12,0,100,0,0,0, 'Argent Confessor Paletress',34266),
+(@ENTRY,30,0,'I know this does not seem like the obvious path to you, but it will bring you closer to the Light. Fight well, brother.',12,0,100,0,0,0, 'Argent Confessor Paletress',34267),
+(@ENTRY,31,0,'Oh, my. Do you feel remorseful, at least?',12,0,100,0,0,0, 'Argent Confessor Paletress',34254),
+(33462,0,0,'I don''t know if I can compete! Everyone is so much bigger!',12,0,100,0,0,0, 'Gnomeregan Champion',34246),
+(33462,1,0,'I''ve calculated the probability of my success, and it''s distressingly low!',12,0,100,0,0,0, 'Gnomeregan Champion',34247),
+(33462,2,0,'I can''t accurately assess the mathematics behind the charge of my turbostrider while keeping hold of my lance at the precise angle needed and keeping my shield in the exact location for maximum protection at any given second!',12,0,100,0,0,0, 'Gnomeregan Champion',34248),
+(33462,3,0,'...and some of those mounts can trample me!',12,0,100,0,0,0, 'Gnomeregan Champion',34249),
+(33480,0,0,'Lass, I''ve a confession to make to ya.',12,0,100,0,0,0, 'Ironforge Champion',34255),
+(33480,1,0,'I''ve been feelin''... urges.',12,0,100,0,0,0, 'Ironforge Champion',34256),
+(33480,2,0,'It was a powerful feelin'' while I was listenin'' to yer sermon, and it''s drivin'' me nuts!',12,0,100,0,0,0, 'Ironforge Champion',34257),
+(33480,3,0,'...I NEED A DRINK!',12,0,100,0,0,0, 'Ironforge Champion',34258),
+(33459,0,0,'This isn''t honorable combat. I long to face my opponents in battle with my axe in hand!',12,0,100,0,0,0, 'Orgrimmar Champion',34269),
+(33459,1,0,'These are my enemies. YOU would be my enemy in battle! Your king has declared war on my kind!',12,0,100,0,0,0, 'Orgrimmar Champion',34270),
+(33459,2,0,'But instead of fighting as my people would, as my people should, I find myself with a long, unwieldy pole, attempting to coax my wolf into charging my opponent without attacking.',12,0,100,0,0,0, 'Orgrimmar Champion',34271),
+(33459,3,0,'This is not how orcs fight! My duty to the Warchief wars with my personal honor. I hold no faith in your Light, but as you seem an advisor, I would hear your words.',12,0,100,0,0,0, 'Orgrimmar Champion',34272),
+(33467,0,0,'This fighting is endless. I''m not certain how much more of it I can stand.',12,0,100,0,0,0, 'Silvermoon Champion',34289),
+(33467,1,0,'All of this posturing, all of this dancing about in rings... it seems pointless. What''s the use?',12,0,100,0,0,0, 'Silvermoon Champion',34290),
+(33467,2,0,'And I''m beginning to get HELMET HAIR. This is a travesty!',12,0,100,0,0,0, 'Silvermoon Champion',34291),
+(33477,0,0,'My heart hangs heavier with each passing day, Confessor.',12,0,100,0,0,0, 'Stormwind Champion',34260),
+(33477,1,0,'I have been ordered here, and here I stay and fight under the banner of Stormwind. But everything I do here is empty.',12,0,100,0,0,0, 'Stormwind Champion',34261),
+(33477,2,0,'Beyond these reaches, the Scourge continue their work, destroying more and more of what we''ve built. The fight should be there. I should be there.',12,0,100,0,0,0, 'Stormwind Champion',34262),
+(33477,3,0,'How can I justify jousting while people die without my protection?',12,0,100,0,0,0, 'Stormwind Champion',34263),
+(33465,0,0,'I punched a penguin on my way in here.',12,0,100,0,0,0, 'Undercity Champion',34252),
+(33465,1,0,'Nah, not really. I just wanted to see the look on your face.',12,0,100,0,0,0, 'Undercity Champion',34253);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_02_world.sql
new file mode 100644
index 00000000000..caaa229b9c3
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_02_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `smart_scripts` SET `event_param1`=2000, `event_param2`=3000, `event_param3`=13000, `event_param4`=15000, `action_param1`=7357, `action_param2`=0, COMMENT="Murloc Scout - In Combat - Cast 'Poisonous Stab'" WHERE `entryorguid`IN (578) AND `source_type`=0 AND `id`=0;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_02_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_02_00_world.sql
new file mode 100644
index 00000000000..6f3e168dbbb
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_02_00_world.sql
@@ -0,0 +1,30 @@
+--
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (7143, 8172);
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (7139) AND `id`=3;
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`, `OptionBroadcastTextID`, `option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES
+(7143,0,0,"Help you with what situation?",18420,1,1,8172),
+(8172,0,0,"Big ones?",18421,1,1,8171),
+(7139,3,0,"Please transport me to the Guardian's Library.",20519,1,1,0);
+
+UPDATE `gossip_menu_option` SET `action_menu_id`=8167 WHERE `menu_id`=7139 AND `id`=0;
+UPDATE `gossip_menu_option` SET `action_menu_id`=8168 WHERE `menu_id`=7139 AND `id`=1;
+UPDATE `gossip_menu_option` SET `action_menu_id`=8169 WHERE `menu_id`=7139 AND `id`=2;
+
+UPDATE `creature_template` SET `gossip_menu_id`=8173 WHERE `entry`=16426;
+DELETE FROM `gossip_menu` WHERE `entry`=8173 AND `text_id`=10120;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (8173, 10120);
+
+UPDATE `creature_template` SET `gossip_menu_id`=8175 WHERE `entry`=16806;
+DELETE FROM `gossip_menu` WHERE `entry`=8175 AND `text_id`=10123;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (8175, 10123);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=7139;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, 7139, 3, 0, 0, 13, 1, 7, 3, 0, 0, 0, 0, '', 'Show options for gossip only if ARAN done');
+
+UPDATE `creature_template` SET `ScriptName`='', `AIName`='SmartAI' WHERE `entry`=16153;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (16153) 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
+(16153,0,0,1,62,0,100,0,7139,3,0,0,85,39567,0,0,0,0,0,7,0,0,0,0,0,0,0,"Berthold - On gossip select - cast spell"),
+(16153,0,1,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Berthold - On gossip select - Close gossip");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_02_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_02_01_world.sql
new file mode 100644
index 00000000000..95f91cd5938
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_02_01_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `trinity_string` WHERE `entry` = 11010;
+INSERT INTO `trinity_string` VALUES
+(11010, 'You had cooldowns before starting the duel, so your cooldowns haven\'t been reset.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_00_world.sql
new file mode 100644
index 00000000000..090111be95b
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_00_world.sql
@@ -0,0 +1,21 @@
+--
+-- Razormaw SAI
+SET @ENTRY := 17592;
+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,3000,3000,5000,11,31279,64,0,0,0,0,2,0,0,0,0,0,0,0,"Razormaw - In Combat - Cast 'Swipe'"),
+(@ENTRY,0,1,0,0,0,100,0,8000,12000,6000,8000,11,8873,64,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - In Combat - Cast 'Flame Breath'"),
+(@ENTRY,0,2,0,2,0,50,1,0,50,0,0,11,14100,64,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - Between 0-50% Health - Cast 'Terrifying Roar' (No Repeat)"),
+(@ENTRY,0,3,11,11,0,100,0,0,0,0,0,53,1,17592,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Respawn - Start Waypoint"),
+(@ENTRY,0,4,18,40,0,100,0,10,17592,0,0,19,256,0,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Waypoint 10 Reached - Remove Flag Immune To Players"),
+(@ENTRY,0,11,0,61,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Respawn - Set Active On"),
+(@ENTRY,0,14,18,40,0,100,0,9,17592,0,0,91,2,3,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Waypoint 9 Reached - Remove Flag Hover"),
+(@ENTRY,0,18,0,61,0,100,0,10,17592,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Waypoint 10 Reached - Set Reactstate Aggressive"),
+(@ENTRY,0,19,0,40,0,100,0,11,17592,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Waypoint 11 Reached - Set Home Position"),
+(@ENTRY,0,20,23,40,0,100,0,1,17592,0,0,18,256,0,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Waypoint 1 Reached - Set Flag Immune To Players"),
+(@ENTRY,0,21,22,25,0,100,0,0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Reset - Set Reactstate Aggressive"),
+(@ENTRY,0,22,0,61,0,100,0,0,0,0,0,91,2,3,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Reset - Remove Flag Hover"),
+(@ENTRY,0,23,0,61,0,100,0,1,17592,0,0,90,2,3,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Waypoint 1 Reached - Set Flag Hover");
+
+UPDATE `waypoints` SET `position_z` = 96.5391 WHERE `entry`=17592 AND `pointid`=11;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_01_world.sql
new file mode 100644
index 00000000000..150d77b06e5
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_01_world.sql
@@ -0,0 +1,16 @@
+--
+DELETE FROM `creature` WHERE `guid`=71981 AND `id`=20251;
+
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (15241, 21719, 24933, 21497, 20127);
+UPDATE `creature_template` SET `InhabitType`=7 WHERE `entry` IN (20611);
+
+UPDATE `creature_template_addon` SET `bytes1`=33554432 WHERE `entry`=21497;
+UPDATE `creature_template` SET `unit_flags`=512 WHERE `entry` IN (21497);
+UPDATE `smart_scripts` SET `action_param1`=15847, `comment`="Blackscale - In Combat - Cast 'Tail Sweep'" WHERE `entryorguid`=21497 AND `source_Type`=0 AND `id`=2;
+UPDATE `creature` SET `MovementType`=1, `spawndist`=10 WHERE `id` IN (21497, 20611, 20127);
+UPDATE `creature` SET `MovementType`=0, `spawndist`=0 WHERE `id` IN (21639, 20251, 22320);
+
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry` IN (20238);
+DELETE FROM `smart_scripts` WHERE `entryorguid`IN (20238) 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
+(20238,0,0,0,1,0,100,0,1000,3000,3000,7000,11,35063,0,0,0,0,0,19,20251,20,0,0,0,0,0,"Honor Hold Scout - OOC - Cast Shoot Honor Hold Scout Archery Target");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_02_world.sql
new file mode 100644
index 00000000000..53825f25c6d
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_02_world.sql
@@ -0,0 +1,26 @@
+--
+DELETE FROM `gossip_menu` WHERE `entry`=8750 AND `text_id`=11082;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (8750, 11082);
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (8750) AND `id`=2;
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`, `OptionBroadcastTextID`, `option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES
+(8750,2,0,"I'm ready. Take me to the Chamber of Command.",21879,1,1,0);
+
+DELETE FROM `spell_target_position` WHERE `id`=41570;
+INSERT INTO `spell_target_position` (`id`,`MapID`,`PositionX`,`PositionY`,`PositionZ`,`Orientation`) VALUES
+(41570, 564, 603.42, 305.982, 271.9, 0);
+
+UPDATE `creature_template` SET `ScriptName`='', `AIName`='SmartAI' WHERE `entry`=23411;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (23411) 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
+(23411,0,0,1,62,0,100,0,8750,1,0,0,85,41566,0,0,0,0,0,7,0,0,0,0,0,0,0,"Spirit of Olum - On gossip select - cast spell"),
+(23411,0,1,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Spirit of Olum - On gossip select - Close gossip"),
+(23411,0,2,3,62,0,100,0,8750,2,0,0,85,41570,0,0,0,0,0,7,0,0,0,0,0,0,0,"Spirit of Olum - On gossip select - cast spell"),
+(23411,0,3,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 Olum - On gossip select - Close gossip");
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14,15) AND `SourceGroup`=8750;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, 8750, 1, 0, 0, 13, 1, 1, 3, 2, 0, 0, 0, '', 'Show options for gossip only if SUPREMUS done'),
+(15, 8750, 2, 0, 0, 13, 1, 7, 3, 2, 0, 0, 0, '', 'Show options for gossip only if COUNCIL done'),
+(14, 8750, 11082, 0, 0, 13, 1, 1, 3, 2, 1, 0, 0, '', 'Show gossip text only if SUPREMUS not done'),
+(14, 8750, 11081, 0, 0, 13, 1, 1, 3, 2, 0, 0, 0, '', 'Show gossip text only if SUPREMUS done');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_00_world.sql
new file mode 100644
index 00000000000..4a5aedb13d4
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_00_world.sql
@@ -0,0 +1,11 @@
+--
+-- Salanar the Horseman (NPC 28788) say line in Realm of Shadows
+SET @ENTRY := 28788;
+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,'Impressive, death knight. Return to me in the world of the living for your reward.',12,0,100,0,0,0,28835,0,'SALANAR_SAY');
+
+-- Salanar the Horseman (NPC 28653) conditions for the gossip_menu_option to be shown for Into the Realm of Shadows
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9739 AND `ConditionValue1`=12687;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,9739,0,0,0,9,0,12687,0,0,0,0,0,'','Salanar the Horseman - Show gossip option only if player has accepted quest 12687, but not completed it.');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_01_world.sql
new file mode 100644
index 00000000000..9e478ea401a
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_01_world.sql
@@ -0,0 +1,21 @@
+UPDATE `creature_template` SET `npcflag`=1, `gossip_menu_id`=10953 WHERE `entry`=37187;
+
+DELETE FROM `gossip_menu` WHERE `entry` IN (10953, 10952) AND `text_id` IN (15217, 15218);
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(10953, 15217),
+(10952, 15218);
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (10953, 10952);
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`, `OptionBroadcastTextID`, `option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES
+(10953,0,0,"We are ready to go, High Overlord. The Lich King must fall!",37631,1,1,10952),
+(10952,0,0,"Lok'tar ogar! We are ready! Onward, brother orc!",37633,1,1,0);
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (10933, 10934);
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`, `OptionBroadcastTextID`, `option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES
+(10933,0,0,"We're ready, Muradin",37446,1,1,10934),
+(10934,0,0,"We're sure. Let's go!",37448,1,1,0);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14,15) AND `SourceGroup` IN (10933, 10953);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, 10933, 0, 0, 0, 13, 1, 2, 4, 2, 1, 0, 0, '', 'Show gossip option only if Deathbringer Saurfang is not done'),
+(15, 10953, 0, 0, 0, 13, 1, 2, 4, 2, 1, 0, 0, '', 'Show gossip option only if Deathbringer Saurfang is not done');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_02_world.sql
new file mode 100644
index 00000000000..f95cb062b82
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_02_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_template` SET `npcflag`=0 WHERE `entry` IN (37187,37200);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_03_world.sql
new file mode 100644
index 00000000000..680b21f77df
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_03_world.sql
@@ -0,0 +1,7 @@
+--
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (11206,11207);
+INSERT IGNORE 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`) VALUE
+(11206, 0, 0, 'Northrend requires your attention Overlord Hellscream. We will deal with the Lich King and his minions without your aid.', 1, 1, 11207, 0, 0, 0, '', 39416),
+(11207, 0, 0, 'The word is given. The Lich King will die by our hands!', 1, 1, 11208, 0, 0, 0, '', 39415);
+UPDATE `npc_text` SET `text0_0`="You turn away the might of the Warsong Offensive? Has the chaos of battle turned you mad? With my help, victory is at hand! Without my help, your fight will be difficult.", `BroadcastTextID0`=39418 WHERE `id`=15608;
+UPDATE `npc_text` SET `text0_0`="Glory to the Horde!", `BroadcastTextID0`=39419 WHERE `id`=15609;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_04_world.sql
new file mode 100644
index 00000000000..dda9747be6f
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_04_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature` SET `spawndist`=0,`MovementType`=0 WHERE `id`=34319;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_05_world.sql
new file mode 100644
index 00000000000..23635d91054
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_05_world.sql
@@ -0,0 +1,204 @@
+--
+-- Hrothgar Landing Fixups
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=34879;
+
+DELETE FROM `creature` WHERE `guid` IN (52041,52042,52043,53107,53767,12483);
+DELETE FROM `creature_addon` WHERE `guid` IN (52041,52042,52043,53107,53767,12483);
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(52041, 34852, 571, 1, 1, 9990.989, 1252.2, 72.15693, 0, 120, 0, 0),
+(52042, 34852, 571, 1, 1, 9977.433, 1207.604, 56.32283, 0, 120, 0, 0),
+(52043, 34852, 571, 1, 1, 10013.58, 1270.264, 70.93209, 0, 120, 0, 0),
+(53107, 34852, 571, 1, 1, 10051.8, 1186.913, 69.17319, 0, 120, 0, 0),
+(53767, 34852, 571, 1, 1, 10063.12, 1209.752, 73.48428, 0, 120, 0, 0),
+(12483, 34852, 571, 1, 1, 10115.9, 1189.974, 81.12413, 0, 120, 0, 0);
+
+UPDATE `creature` SET `spawndist`=0,`MovementType`=0,`position_x`=10051.27,`position_y`=1216.898,`position_z`=69.68569,`orientation`=2.460914 WHERE `guid`=53109;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=0,`position_x`=10110.92,`position_y`=1218.408,`position_z`=78.9978,`orientation`=0.6283185 WHERE `guid`=53113;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=0,`position_x`=10096.75,`position_y`=1190.5,`position_z`=79.6442,`orientation`=6.195919 WHERE `guid`=53041;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=0,`position_x`=9951.683,`position_y`=1201.502,`position_z`=52.69936,`orientation`=5.585053 WHERE `guid`=53114;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=0,`position_x`=9928.953,`position_y`=1172.898,`position_z`=51.50733,`orientation`=3.054326 WHERE `guid`=53224;
+
+DELETE FROM `creature_addon` WHERE `guid` IN (53041,53114,53109,53113);
+INSERT INTO `creature_addon` (`guid`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (53041,0,256,0, ''),(53114,1,1,0, ''),(53109,0,1,234, ''),(53113,0,256,0, '');
+
+-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT'
+SET @NPC := 52038;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=10347.37,`position_y`=803.1042,`position_z`=77.75536 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,10347.37,803.1042,77.75536,0,0,0,0,100,0),
+(@PATH,2,10367.6,818.8438,84.29758,0,0,0,0,100,0),
+(@PATH,3,10383.35,834.6024,92.76371,0,0,0,0,100,0),
+(@PATH,4,10395.81,846.125,99.77592,0,0,0,0,100,0),
+(@PATH,5,10405.93,863.6893,107.7268,0,0,0,0,100,0),
+(@PATH,6,10405.98,875.375,111.8353,0,0,0,0,100,0),
+(@PATH,7,10408.97,888.6285,116.7162,0,0,0,0,100,0),
+(@PATH,8,10414.13,900.0261,121.0533,0,0,0,0,100,0),
+(@PATH,9,10415.96,910.5504,123.9247,0,0,0,0,100,0),
+(@PATH,10,10414.13,900.0261,121.0533,0,0,0,0,100,0),
+(@PATH,11,10408.97,888.6285,116.7162,0,0,0,0,100,0),
+(@PATH,12,10405.98,875.375,111.8353,0,0,0,0,100,0),
+(@PATH,13,10405.93,863.6893,107.7268,0,0,0,0,100,0),
+(@PATH,14,10395.81,846.125,99.77592,0,0,0,0,100,0),
+(@PATH,15,10383.35,834.6024,92.76371,0,0,0,0,100,0),
+(@PATH,16,10367.6,818.8438,84.29758,0,0,0,0,100,0);
+
+-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT'
+SET @NPC := 52039;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=10238.24,`position_y`=782.2483,`position_z`=71.30614 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,10238.24,782.2483,71.30614,0,0,0,0,100,0),
+(@PATH,2,10263.58,779.5504,72.51409,0,0,0,0,100,0),
+(@PATH,3,10288.04,780.6441,74.41165,0,0,0,0,100,0),
+(@PATH,4,10303.06,778.2899,74.40554,0,0,0,0,100,0),
+(@PATH,5,10317.63,777.9688,74.40554,0,0,0,0,100,0),
+(@PATH,6,10330.9,782.1233,74.53054,0,0,0,0,100,0),
+(@PATH,7,10340.32,781.7136,74.69975,0,0,0,0,100,0),
+(@PATH,8,10330.9,782.1233,74.53054,0,0,0,0,100,0),
+(@PATH,9,10317.63,777.9688,74.40554,0,0,0,0,100,0),
+(@PATH,10,10303.06,778.2899,74.40554,0,0,0,0,100,0),
+(@PATH,11,10288.04,780.6441,74.41165,0,0,0,0,100,0),
+(@PATH,12,10263.58,779.5504,72.51409,0,0,0,0,100,0);
+
+-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT'
+SET @NPC := 52604;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=10163.75,`position_y`=843.0364,`position_z`=42.24613 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,10163.75,843.0364,42.24613,0,0,0,0,100,0),
+(@PATH,2,10170.49,831.2708,47.18571,0,0,0,0,100,0),
+(@PATH,3,10181.2,816.316,52.61528,0,0,0,0,100,0),
+(@PATH,4,10192.17,799.5977,57.89101,0,0,0,0,100,0),
+(@PATH,5,10203.03,791.2552,62.39041,0,0,0,0,100,0),
+(@PATH,6,10213.43,785.3785,65.56143,0,0,0,0,100,0),
+(@PATH,7,10224.06,785.1649,68.88577,0,0,0,0,100,0),
+(@PATH,8,10213.43,785.3785,65.56143,0,0,0,0,100,0),
+(@PATH,9,10203.03,791.2552,62.39041,0,0,0,0,100,0),
+(@PATH,10,10192.28,799.4097,57.93019,0,0,0,0,100,0),
+(@PATH,11,10181.2,816.316,52.61528,0,0,0,0,100,0),
+(@PATH,12,10170.49,831.2708,47.18571,0,0,0,0,100,0);
+
+-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT'
+SET @NPC := 52045;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=10151.62,`position_y`=744.2795,`position_z`=66.60175 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,10151.62,744.2795,66.60175,0,0,0,0,100,0),
+(@PATH,2,10160.01,748.9653,66.73127,0,0,0,0,100,0),
+(@PATH,3,10170,758.5295,66.86421,0,0,0,0,100,0),
+(@PATH,4,10177.37,775.2413,63.86098,0,0,0,0,100,0),
+(@PATH,5,10186.68,792.9365,58.51601,0,0,0,0,100,0),
+(@PATH,6,10177.37,775.2413,63.86098,0,0,0,0,100,0),
+(@PATH,7,10170,758.5295,66.86421,0,0,0,0,100,0),
+(@PATH,8,10160.01,748.9653,66.73127,0,0,0,0,100,0);
+
+-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT'
+SET @NPC := 53134;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=10135.21,`position_y`=1210.611,`position_z`=79.11204 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,10135.21,1210.611,79.11204,0,0,0,0,100,0),
+(@PATH,2,10143.43,1207.156,79.93629,0,0,0,0,100,0),
+(@PATH,3,10151.32,1200.924,83.26014,0,0,0,0,100,0),
+(@PATH,4,10160.9,1196.632,81.05866,0,0,0,0,100,0),
+(@PATH,5,10167.02,1193.387,78.56778,0,0,0,0,100,0),
+(@PATH,6,10172.88,1190.09,76.37518,0,0,0,0,100,0),
+(@PATH,7,10167.02,1193.387,78.56778,0,0,0,0,100,0),
+(@PATH,8,10160.9,1196.631,81.06026,0,0,0,0,100,0),
+(@PATH,9,10151.32,1200.924,83.26014,0,0,0,0,100,0),
+(@PATH,10,10143.43,1207.156,79.93629,0,0,0,0,100,0);
+
+-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT'
+SET @NPC := 53108;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=9980.583,`position_y`=1195.92,`position_z`=54.3329 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,9980.583,1195.92,54.3329,0,0,0,0,100,0),
+(@PATH,2,9986.409,1177.829,50.95467,0,0,0,0,100,0),
+(@PATH,3,9977.379,1170.333,47.40315,0,0,0,0,100,0),
+(@PATH,4,9968.799,1153.069,42.6813,0,0,0,0,100,0),
+(@PATH,5,9968.064,1136.25,37.7756,0,0,0,0,100,0),
+(@PATH,6,9967.274,1118.092,32.56385,0,0,0,0,100,0),
+(@PATH,7,9969.733,1107.026,29.42457,0,0,0,0,100,0),
+(@PATH,8,9969.542,1093.946,25.73834,0,0,0,0,100,0),
+(@PATH,9,9969.849,1082.082,23.47699,0,0,0,0,100,0),
+(@PATH,10,9970.052,1073.906,21.76483,0,0,0,0,100,0),
+(@PATH,11,9969.849,1082.082,23.47699,0,0,0,0,100,0),
+(@PATH,12,9969.542,1093.946,25.73834,0,0,0,0,100,0),
+(@PATH,13,9969.732,1106.946,29.36329,0,0,0,0,100,0),
+(@PATH,14,9967.274,1118.092,32.56385,0,0,0,0,100,0),
+(@PATH,15,9968.064,1136.25,37.7756,0,0,0,0,100,0),
+(@PATH,16,9968.799,1153.069,42.6813,0,0,0,0,100,0),
+(@PATH,17,9977.379,1170.333,47.40315,0,0,0,0,100,0),
+(@PATH,18,9986.482,1177.609,51.15157,0,0,0,0,100,0);
+
+-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT'
+SET @NPC := 53099;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=9975.161,`position_y`=1041.323,`position_z`=16.6497 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,9975.161,1041.323,16.6497,0,0,0,0,100,0),
+(@PATH,2,9988.208,1029.54,13.30617,0,0,0,0,100,0),
+(@PATH,3,10005.18,1011.085,9.467186,0,0,0,0,100,0),
+(@PATH,4,10021.29,994.6493,6.951415,0,0,0,0,100,0),
+(@PATH,5,10047,976.625,6.902773,0,0,0,0,100,0),
+(@PATH,6,10066.32,965.4705,10.23769,0,0,0,0,100,0),
+(@PATH,7,10047,976.625,6.902773,0,0,0,0,100,0),
+(@PATH,8,10021.29,994.6493,6.951415,0,0,0,0,100,0),
+(@PATH,9,10005.19,1011.068,9.509178,0,0,0,0,100,0),
+(@PATH,10,9988.272,1029.477,13.34639,0,0,0,0,100,0);
+
+-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT'
+SET @NPC := 53112;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=10003.86,`position_y`=1191.727,`position_z`=58.1468 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,10003.86,1191.727,58.1468,0,0,0,0,100,0),
+(@PATH,2,10019.43,1197.052,61.09853,0,0,0,0,100,0),
+(@PATH,3,10034.4,1198.321,64.06003,0,0,0,0,100,0),
+(@PATH,4,10053.43,1195.531,69.2673,0,0,0,0,100,0),
+(@PATH,5,10066.09,1187.489,73.69296,0,0,0,0,100,0),
+(@PATH,6,10071.19,1179.259,75.82832,0,0,0,0,100,0),
+(@PATH,7,10066.11,1187.476,73.49924,0,0,0,0,100,0),
+(@PATH,8,10053.45,1195.518,69.44296,0,0,0,0,100,0),
+(@PATH,9,10034.4,1198.321,64.06003,0,0,0,0,100,0),
+(@PATH,10,10019.43,1197.052,61.09853,0,0,0,0,100,0);
+
+-- Kvaldir Reaver SAI
+SET @ENTRY := 34838;
+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,9000,11000,11,49922,0,0,0,0,0,2,0,0,0,0,0,0,0,"Kvaldir Reaver - In Combat - Cast 'Wave Crash'");
+
+-- Kvaldir Mist Binder SAI
+SET @ENTRY := 34839;
+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,6000,6000,12000,15000,11,49816,0,0,0,0,0,2,0,0,0,0,0,0,0,"Kvaldir Mist Binder - In Combat - Cast 'Mist of Strangulation'");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_05_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_05_00_world.sql
new file mode 100644
index 00000000000..5f17920a9f5
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_05_00_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `quest_request_items` SET `CompletionText` = 'Did you find Fizzle, $N? He, and rest of the Burning Blade, must be scoured from our lands!' WHERE `ID` = 806;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_05_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_05_01_world.sql
new file mode 100644
index 00000000000..b2c4f43997f
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_05_01_world.sql
@@ -0,0 +1,9 @@
+--
+DELETE FROM `creature_template_addon` WHERE `Entry`=38058;
+INSERT INTO `creature_template_addon` (`entry`, `bytes1`, `bytes2`) VALUES (38058,50331648,1);
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=38058;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=36725 AND `source_type`=0 AND `id`>4;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(36725,0,5,0,4,0,100,31,0,0,0,0,11,69887,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nerub'ar Broodkeeper - On aggro - Cast Web Beam"),
+(36725,0,6,0,0,0,100,31,4000,4000,0,0,91,2,3,0,0,0,0,1,0,0,0,0,0,0,0,"Nerub'ar Broodkeeper - In combat no repeat - Remove Flag Hover");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_06_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_06_00_world.sql
new file mode 100644
index 00000000000..0850b15fbb4
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_06_00_world.sql
@@ -0,0 +1,31 @@
+--
+SET @ENTRY := 37230;
+SET @CGUID := 45827;
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+3;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, @ENTRY, 631, 3, 1, -368.000, 2316.687, 234.047, 2.792558, 7200, 0, 0),
+(@CGUID+1, @ENTRY, 631, 3, 1, -511.493, 2318.217, 234.045, 0.483487, 7200, 0, 0),
+(@CGUID+2, @ENTRY, 631, 3, 1, -516.336, 2108.577, 234.049, 5.733871, 7200, 0, 0),
+(@CGUID+3, @ENTRY, 631, 3, 1, -353.894, 2111.659, 234.043, 3.711472, 7200, 0, 0);
+
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (@ENTRY, 38444);
+DELETE FROM `creature_template_addon` WHERE `entry` IN (@ENTRY, 38444);
+INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES
+(@ENTRY, 0, 0x3000000, 0x1, ''),
+(38444, 0, 0x3000000, 0x1, '');
+
+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,30,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Spire Frostwyrm - on Reset - Set invisible"),
+(@ENTRY,0,1,2,10,0,100,31,0,100,1000,1000,47,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Spire Frostwyrm - OOC_LOS - SET visible"),
+(@ENTRY,0,2,0,61,0,100,31,0,0,0,0,49,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Spire Frostwyrm - OOC_LOS - Start Attack"),
+(@ENTRY,0,3,0,4,0,100,30,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Spire Frostwyrm - On aggro - Say text"),
+(@ENTRY,0,4,0,33,0,100,31,100,30000,0,0,91,2,3,0,0,0,0,1,0,0,0,0,0,0,0,"Spire Frostwyrm - On target damaged - Remove Flag Hover"),
+(@ENTRY,0,5,0,0,0,100,30,10000,13000,13000,16000,11,70362,0,0,0,0,0,5,0,0,0,0,0,0,0,"Spire Frostwyrm - IC - Cast Blizzard"),
+(@ENTRY,0,6,0,0,0,100,30,8000,10000,3000,6000,11,70361,0,0,0,0,0,2,0,0,0,0,0,0,0,"Spire Frostwyrm - IC - Cast Cleave"),
+(@ENTRY,0,7,0,0,0,100,30,13000,15000,6000,9000,11,70116,0,0,0,0,0,2,0,0,0,0,0,0,0,"Spire Frostwyrm - IC - Cast Frost Breath");
+
+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, 'A screeching cry pierces the air above!', 41, 0, 100, 0, 0, 0, 37161, 1, 'Spire Frostwyrm to Player');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_06_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_06_01_world.sql
new file mode 100644
index 00000000000..385c5f019bf
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_06_01_world.sql
@@ -0,0 +1,31 @@
+-- Sheddle Glossgleam
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=194115;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=29703;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (194115) AND `source_type`=1;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (29703) AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (2970300, 19411500) 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
+(194115, 1, 0, 0, 64, 0, 100, 0, 0, 0, 0, 0, 80, 19411500, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Shoeshine Seat - On Gossip hello - Action list'),
+(19411500, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Shoeshine Seat - Action list - Store target'),
+(19411500, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 19, 29703, 20, 0, 0, 0, 0, 0, 'Shoeshine Seat - Action list - Send Target'),
+(19411500, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 29703, 20, 0, 0, 0, 0, 0, 'Shoeshine Seat - Action list - Set Data'),
+(29703, 0, 0, 0, 38, 0, 100, 0, 1, 1, 13000, 13000, 80, 2970300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sheddle Glossgleam - On Data set - Action list'),
+(2970300, 9, 0, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Sheddle Glossgleam - Action list - Say text'),
+(2970300, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sheddle Glossgleam - Action list - Set run off'),
+(2970300, 9, 2, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 5810.110, 676.122, 658.0285, 5.002982, 'Sheddle Glossgleam- Action list - Move to pos'),
+(2970300, 9, 3, 0, 0, 0, 100, 0, 1200, 1200, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 5810.110, 676.122, 658.0285, 5.002982, 'Sheddle Glossgleam - Action list - Set Orientation'),
+(2970300, 9, 4, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 11, 68442, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sheddle Glossgleam - Action list - Cast Kneel'),
+(2970300, 9, 5, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 28, 68442, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sheddle Glossgleam - Action list - Remove Kneel aura'),
+(2970300, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 62089, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Sheddle Glossgleam - Action list - Cast Shiny Shoes'),
+(2970300, 9, 7, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Sheddle Glossgleam - Action list - Say text'),
+(2970300, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 5812.08, 676.872, 658.112, 3.071780, 'Sheddle Glossgleam - Action list - Move to pos'),
+(2970300, 9, 9, 0, 0, 0, 100, 0, 1200, 1200, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 5812.08, 676.872, 658.112, 3.071780, 'Sheddle Glossgleam - Action list - Set Orientation');
+
+DELETE FROM `creature_text` WHERE `entry` IN (29703);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES
+(29703,0,0,'Need a shoeshine, $c?',12,0,100,0,0,0, 'Sheddle Glossgleam',33178),
+(29703,0,1,'One shoeshine coming up!',12,0,100,0,0,0, 'Sheddle Glossgleam',33180),
+(29703,0,2,'Let me shine your shoes, $c.',12,0,100,0,0,0, 'Sheddle Glossgleam',33181),
+(29703,1,0,'Take care of that shine, $c.',12,0,100,0,0,0, 'Sheddle Glossgleam',33179),
+(29703,1,1,'Shiny!',12,0,100,0,0,0, 'Sheddle Glossgleam',33182),
+(29703,1,2,'Another shiny, happy person. Take care, $c!',12,0,100,0,0,0, 'Sheddle Glossgleam',33183);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_08_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_08_00_world.sql
new file mode 100644
index 00000000000..633ade27863
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_08_00_world.sql
@@ -0,0 +1,21 @@
+-- Pathing for Anub'ar Warrior Entry: 28732 'TDB FORMAT'
+SET @NPC := 127230;
+SET @NPC1 := 127339;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=536.2838,`position_y`=747.2582,`position_z`=790.701 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=534.9068,`position_y`=742.6521,`position_z`=789.386 WHERE `guid`=@NPC1;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC1);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''),(@NPC1,@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,536.2838,747.2582,790.701,0,0,0,0,100,0),
+(@PATH,2,553.5668,733.7203,777.5034,0,0,0,0,100,0),
+(@PATH,3,536.2838,747.2582,790.701,0,0,0,0,100,0),
+(@PATH,4,507.5956,755.1626,808.8735,0,0,0,0,100,0),
+(@PATH,5,488.8975,758.9921,818.0986,0,0,0,0,100,0),
+(@PATH,6,507.5956,755.1626,808.8735,0,0,0,0,100,0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@NPC1,4,90,2,2,5);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_08_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_08_01_world.sql
new file mode 100644
index 00000000000..6b162ee4393
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_08_01_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `gameobject_template` SET `faction`=0 WHERE `entry`=177219;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_00_world.sql
new file mode 100644
index 00000000000..c26303006b7
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_00_world.sql
@@ -0,0 +1,9 @@
+--
+UPDATE `creature_text` SET `probability`=20 WHERE `entry`=15954 AND `groupid`=2;
+
+DELETE FROM `creature_text` WHERE `entry`=15954 AND `groupid` in (4,5,6,7);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
+(15954,4,0,"%s summons forth Skeletal Warriors!",41,100,32974,3,"Noth EMOTE_SUMMON"),
+(15954,5,0,"%s raises more skeletons!",41,100,32977,3,"Noth EMOTE_SUMMON_WAVE"),
+(15954,6,0,"%s teleports to the balcony above!",41,100,32331,3,"Noth EMOTE_TELEPORT_1"),
+(15954,7,0,"%s teleports back into the battle!",41,100,32976,3,"Noth EMOTE_TELEPORT_2");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_01_world.sql
new file mode 100644
index 00000000000..4088a33b837
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_01_world.sql
@@ -0,0 +1,7 @@
+--
+UPDATE `creature_text` SET `probability`=20 WHERE `entry`=15936 AND `groupid`=1;
+
+DELETE FROM `creature_text` WHERE `entry`=15936 AND `groupid` IN (4,5);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
+(15936,4,0,"%s teleports and begins to channel a spell!",41,100,32332,3,"Heigan EMOTE_DANCE"),
+(15936,5,0,"%s rushes to attack once more!",41,100,32333,3,"Heigan EMOTE_DANCE_END");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_02_world.sql
new file mode 100644
index 00000000000..068255d4e0c
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_02_world.sql
@@ -0,0 +1,12 @@
+--
+DELETE FROM `smart_scripts` WHERE `entryorguid`=16286 AND `source_type`=0;
+UPDATE `creature_template` SET `AIName`="" WHERE `entry`=16286;
+
+DELETE FROM `spell_script_names` WHERE `spell_id` IN (29865,55053);
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(29865,"spell_loatheb_deathbloom"),
+(55053,"spell_loatheb_deathbloom");
+
+DELETE FROM `spelldifficulty_dbc` WHERE `id` IN (55594);
+INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`) VALUES
+(55594,55594,55601);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_03_world.sql
new file mode 100644
index 00000000000..57dc5a2f29b
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_03_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `locales_quest` SET `Title_loc2` = "Le nettoyage du camp des kobolds", `Title_loc3` = "Säuberung im Koboldlager", `Title_loc7` = "La Limpieza del Campamento Kóbold", `Title_loc8` = "Нападение на лагерь кобольдов" WHERE `Id` = 7;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_04_world.sql
new file mode 100644
index 00000000000..b1bab808d96
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_04_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=344 AND `id`=1;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_05_world.sql
new file mode 100644
index 00000000000..5a552b76e64
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_05_world.sql
@@ -0,0 +1,4 @@
+DELETE FROM `trinity_string` WHERE `entry` IN (5057, 5058);
+INSERT INTO `trinity_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES
+(5057, 'Boss id %i state is now set to %i (%s).', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+(5058, 'Boss id %i state is %i (%s).', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_00_world.sql
new file mode 100644
index 00000000000..dbad0438ed3
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_00_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (29865,-29865,55053,-55053);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_01_world.sql
new file mode 100644
index 00000000000..678e03a31e3
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_01_world.sql
@@ -0,0 +1,96 @@
+DROP TABLE IF EXISTS `skill_perfect_item_template`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `skill_perfect_item_template` (
+ `spellId` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'SpellId of the item creation spell',
+ `requiredSpecialization` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'Specialization spell id',
+ `perfectCreateChance` float NOT NULL DEFAULT '0' COMMENT 'chance to create the perfect item instead',
+ `perfectItemType` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'perfect item type to create instead',
+ PRIMARY KEY (`spellId`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Crafting Perfection System';
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+LOCK TABLES `skill_perfect_item_template` WRITE;
+/*!40000 ALTER TABLE `skill_perfect_item_template` DISABLE KEYS */;
+INSERT INTO `skill_perfect_item_template` (`spellId`, `requiredSpecialization`, `perfectCreateChance`, `perfectItemType`)
+VALUES
+/* Bloodstone */
+(53831,55534,20,41432), -- Bold
+(53835,55534,20,41433), -- Bright
+(53832,55534,20,41434), -- Delicate
+(53844,55534,20,41435), -- Flashing
+(53845,55534,20,41436), -- Fractured
+(54017,55534,20,41437), -- Precise
+(53834,55534,20,41438), -- Runed
+(53843,55534,20,41439), -- Subtle
+/* Sun Crystal */
+(53852,55534,20,41444), -- Brilliant
+(53857,55534,20,41445), -- Mystic
+(53856,55534,20,41446), -- Quick
+(53854,55534,20,41447), -- Rigid
+(53853,55534,20,41448), -- Smooth
+(53855,55534,20,41449), -- Thick
+/* Chalcedony */
+(53941,55534,20,41440), -- Lustrous
+(53934,55534,20,41441), -- Solid
+(53940,55534,20,41442), -- Sparkling
+(53943,55534,20,41443), -- Stormy
+/* Dark Jade */
+(53926,55534,20,41463), -- Dazzling
+(53918,55534,20,41464), -- Enduring
+(53930,55534,20,41465), -- Energized
+(53920,55534,20,41466), -- Forceful
+(53925,55534,20,41467), -- Intricate
+(53916,55534,20,41468), -- Jagged
+(53928,55534,20,41469), -- Lambent
+(53922,55534,20,41470), -- Misty
+(53929,55534,20,41471), -- Opaque
+(53931,55534,20,41472), -- Radiant
+(53921,55534,20,41473), -- Seer's
+(53933,55534,20,41474), -- Shattered
+(53923,55534,20,41475), -- Shining
+(53919,55534,20,41476), -- Steady
+(53927,55534,20,41477), -- Sundered
+(53932,55534,20,41478), -- Tense
+(53894,55534,20,41479), -- Timeless
+(53924,55534,20,41480), -- Turbid
+(53917,55534,20,41481), -- Vivid
+/* Huge Citrine */
+(53886,55534,20,41429), -- Wicked
+(53892,55534,20,41482), -- Accurate
+(53874,55534,20,41483), -- Champion's
+(53877,55534,20,41484), -- Deadly
+(53880,55534,20,41485), -- Deft
+(53884,55534,20,41486), -- Durable
+(53888,55534,20,41487), -- Empowered
+(53873,55534,20,41488), -- Etched
+(53876,55534,20,41489), -- Fierce
+(53891,55534,20,41490), -- Glimmering
+(53878,55534,20,41491), -- Glinting
+(53872,55534,20,41492), -- Inscribed
+(53879,55534,20,41493), -- Lucent
+(53881,55534,20,41494), -- Luminous
+(53882,55534,20,41495), -- Potent
+(53887,55534,20,41496), -- Pristine
+(53885,55534,20,41497), -- Reckless
+(53893,55534,20,41498), -- Resolute
+(53875,55534,20,41499), -- Resplendent
+(53890,55534,20,41500), -- Stalwart
+(53889,55534,20,41501), -- Stark
+(53883,55534,20,41502), -- Veiled
+/* Shadow Crystal */
+(53866,55534,20,41450), -- Balanced
+(53869,55534,20,41451), -- Defender's
+(53862,55534,20,41452), -- Glowing
+(53871,55534,20,41453), -- Guardian's
+(53867,55534,20,41454), -- Infused
+(53865,55534,20,41455), -- Mysterious
+(53870,55534,20,41456), -- Puissant
+(53863,55534,20,41457), -- Purified
+(53868,55534,20,41458), -- Regal
+(53864,55534,20,41459), -- Royal
+(53860,55534,20,41460), -- Shifting
+(53859,55534,20,41461), -- Sovereign
+(53861,55534,20,41462); -- Tenuous
+/*!40000 ALTER TABLE `skill_perfect_item_template` ENABLE KEYS */;
+UNLOCK TABLES;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_02_world.sql
new file mode 100644
index 00000000000..0a9d014d762
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_02_world.sql
@@ -0,0 +1,20 @@
+-- Gameobject list for Molten Core
+SET @OGUID := 56280;
+DELETE FROM `gameobject` WHERE `guid` IN (43162,43163,43164,43165,35665);
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID AND @OGUID+14;
+INSERT INTO `gameobject` (`guid`,`id`,`map`,`zoneId`,`areaId`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
+(@OGUID+0,176951,409,2717,0,1,1,601.6724,-1174.613,-196.0725,3.141593,0,0,-1,0,120,255,1), -- Rune of Koro
+(@OGUID+1,176952,409,2717,0,1,1,748.8392,-985.1598,-178.2831,3.141593,0,0,-1,0,120,255,1), -- Rune of Zeth
+(@OGUID+2,176953,409,2717,0,1,1,583.7003,-806.7377,-204.9614,3.141593,0,0,-1,0,120,255,1), -- Rune of Mazj
+(@OGUID+3,176954,409,2717,0,1,1,795.5356,-974.2527,-207.7883,3.141593,0,0,-1,0,120,255,1), -- Rune of Theri
+(@OGUID+4,176955,409,2717,0,1,1,694.2289,-495.5984,-214.3294,3.141593,0,0,-1,0,120,255,1), -- Rune of Blaz
+(@OGUID+5,176956,409,2717,0,1,1,1132.106,-1017.273,-186.4936,3.141593,0,0,-1,0,120,255,1), -- Rune of Kress
+(@OGUID+6,176957,409,2717,0,1,1,897.0577,-551.5464,-203.9534,3.141593,0,0,-1,0,120,255,1), -- Rune of Mohn
+(@OGUID+7,177000,409,2717,0,1,1,736.6626,-1176.569,-119.7984,3.141593,0,0,-1,0,120,255,1), -- Hot Coal
+(@OGUID+8,178187,409,2717,0,1,1,601.6724,-1174.613,-196.0725,3.141593,0,0,-1,0,120,255,1), -- Molten Core Circle SULFURON
+(@OGUID+9,178188,409,2717,0,1,1,748.8392,-985.1598,-178.2831,3.141593,0,0,-1,0,120,255,1), -- Molten Core Circle BARON
+(@OGUID+10,178189,409,2717,0,1,1,583.7003,-806.7377,-204.9614,3.141593,0,0,-1,0,120,255,1), -- Molten Core Circle SHAZZRAH
+(@OGUID+11,178190,409,2717,0,1,1,795.5356,-974.2527,-207.7883,3.141593,0,0,-1,0,120,255,1), -- Molten Core Circle GOLEMAGG
+(@OGUID+12,178191,409,2717,0,1,1,694.2289,-495.5984,-214.3294,3.141593,0,0,-1,0,120,255,1), -- Molten Core Circle GARR
+(@OGUID+13,178192,409,2717,0,1,1,1132.106,-1017.273,-186.4936,3.141593,0,0,-1,0,120,255,1), -- Molten Core Circle MAGMADAR
+(@OGUID+14,178193,409,2717,0,1,1,897.0577,-551.5464,-203.9534,3.141593,0,0,-1,0,120,255,1); -- Molten Core Circle GEHENNAS
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_03_world.sql
new file mode 100644
index 00000000000..16306b08235
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_03_world.sql
@@ -0,0 +1,786 @@
+-- Add missing Firesworn spawn
+SET @CGUID := 16399;
+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, 12099, 409, 1, 1, 698.831, -507.815, -214.691, 1.832596, 7200, 0, 0);
+
+-- Garr movement/formation fixup
+UPDATE `creature` SET `spawndist`=10,`MovementType`=1 WHERE `guid`=56609;
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (56609);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(56609,56609,0,0,2,0,0),
+(56609,56610,10,45,2,0,0),
+(56609,56616,10,90,2,0,0),
+(56609,56619,10,135,2,0,0),
+(56609,56620,10,180,2,0,0),
+(56609,56622,10,225,2,0,0),
+(56609,56626,10,270,2,0,0),
+(56609,56628,10,315,2,0,0),
+(56609,@CGUID,10,360,2,0,0);
+
+-- Pathing for Core Hound Entry: 11673 'TDB FORMAT'
+SET @NPC := 56742;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=619.3152,`position_y`=-1131.169,`position_z`=-201.6246 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, '18950');
+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,619.3152,-1131.169,-201.6246,0,0,0,0,100,0),
+(@PATH,2,635.5156,-1094.704,-196.7484,0,0,0,0,100,0),
+(@PATH,3,637.1269,-1060.913,-199.2417,0,0,0,0,100,0),
+(@PATH,4,635.5156,-1094.704,-196.7484,0,0,0,0,100,0),
+(@PATH,5,619.3152,-1131.169,-201.6246,0,0,0,0,100,0),
+(@PATH,6,610.0372,-1155.73,-198.8285,0,0,0,0,100,0);
+
+-- Pathing for Core Hound Entry: 11673 'TDB FORMAT'
+SET @NPC := 56743;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1039.667,`position_y`=-791.0968,`position_z`=-151.0096 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, '18950');
+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,1039.667,-791.0968,-151.0096,0,0,0,0,100,0),
+(@PATH,2,1026.315,-767.8003,-156.6493,0,0,0,0,100,0),
+(@PATH,3,1038.774,-761.6977,-152.658,0,0,0,0,100,0),
+(@PATH,4,1064.627,-748.9409,-151.7516,0,0,0,0,100,0),
+(@PATH,5,1038.774,-761.6977,-152.658,0,0,0,0,100,0),
+(@PATH,6,1026.315,-767.8003,-156.6493,0,0,0,0,100,0),
+(@PATH,7,1039.641,-791.0518,-150.9892,0,0,0,0,100,0),
+(@PATH,8,1051.314,-799.6896,-151.9713,0,0,0,0,100,0),
+(@PATH,9,1040.764,-815.1115,-152.1656,0,0,0,0,100,0),
+(@PATH,10,1051.314,-799.6896,-151.9713,0,0,0,0,100,0);
+
+-- Pathing for Core Hound Entry: 11673 'TDB FORMAT'
+SET @NPC := 56744;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=862.4832,`position_y`=-1025.388,`position_z`=-193.7729 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, '18950');
+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,862.4832,-1025.388,-193.7729,0,0,0,0,100,0),
+(@PATH,2,837.9779,-1005.705,-203.4326,0,0,0,0,100,0),
+(@PATH,3,811.0497,-995.4718,-207.7699,0,0,0,0,100,0),
+(@PATH,4,837.9779,-1005.705,-203.4326,0,0,0,0,100,0),
+(@PATH,5,862.4832,-1025.388,-193.7729,0,0,0,0,100,0),
+(@PATH,6,867.8922,-1050.318,-187.0417,0,0,0,0,100,0),
+(@PATH,7,872.7313,-1072.91,-180.5435,0,0,0,0,100,0),
+(@PATH,8,866.1934,-1092.763,-172.8487,0,0,0,0,100,0),
+(@PATH,9,852.0717,-1110.005,-164.8026,0,0,0,0,100,0),
+(@PATH,10,839.597,-1126.927,-156.889,0,0,0,0,100,0),
+(@PATH,11,809.0994,-1147.87,-152.4792,0,0,0,0,100,0),
+(@PATH,12,797.6674,-1151.59,-151.2095,0,0,0,0,100,0),
+(@PATH,13,786.1231,-1142.027,-149.5751,0,0,0,0,100,0),
+(@PATH,14,751.8342,-1124.252,-144.3583,0,0,0,0,100,0),
+(@PATH,15,726.2703,-1123.733,-140.4308,0,0,0,0,100,0),
+(@PATH,16,705.0751,-1129.982,-137.4043,0,0,0,0,100,0),
+(@PATH,17,688.8096,-1145.377,-132.6487,0,0,0,0,100,0),
+(@PATH,18,681.356,-1157.213,-129.4221,0,0,0,0,100,0),
+(@PATH,19,678.912,-1171.258,-124.9925,0,0,0,0,100,0),
+(@PATH,20,687.782,-1186.916,-122.3317,0,0,0,0,100,0),
+(@PATH,21,702.4774,-1195.069,-120.2255,0,0,0,0,100,0),
+(@PATH,22,687.7936,-1186.922,-122.3323,0,0,0,0,100,0),
+(@PATH,23,678.912,-1171.258,-124.9925,0,0,0,0,100,0),
+(@PATH,24,681.356,-1157.213,-129.4221,0,0,0,0,100,0),
+(@PATH,25,688.8096,-1145.377,-132.6487,0,0,0,0,100,0),
+(@PATH,26,705.0751,-1129.982,-137.4043,0,0,0,0,100,0),
+(@PATH,27,726.2703,-1123.733,-140.4308,0,0,0,0,100,0),
+(@PATH,28,751.8342,-1124.252,-144.3583,0,0,0,0,100,0),
+(@PATH,29,786.1231,-1142.027,-149.5751,0,0,0,0,100,0),
+(@PATH,30,797.6674,-1151.59,-151.2095,0,0,0,0,100,0),
+(@PATH,31,809.0994,-1147.87,-152.4792,0,0,0,0,100,0),
+(@PATH,32,839.597,-1126.927,-156.889,0,0,0,0,100,0),
+(@PATH,33,852.0717,-1110.005,-164.8026,0,0,0,0,100,0),
+(@PATH,34,866.1934,-1092.763,-172.8487,0,0,0,0,100,0),
+(@PATH,35,872.7313,-1072.91,-180.5435,0,0,0,0,100,0),
+(@PATH,36,867.8922,-1050.318,-187.0417,0,0,0,0,100,0);
+
+-- Pathing for Core Hound Entry: 11673 'TDB FORMAT'
+SET @NPC := 56745;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=820.8864,`position_y`=-1133.536,`position_z`=-153.9561 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, '18950');
+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,820.8864,-1133.536,-153.9561,0,0,0,0,100,0),
+(@PATH,2,811.4623,-1112.419,-155.1721,0,0,0,0,100,0),
+(@PATH,3,791.674,-1098.377,-157.4893,0,0,0,0,100,0),
+(@PATH,4,756.4903,-1086.385,-165.0273,0,0,0,0,100,0),
+(@PATH,5,713.1385,-1077.042,-178.4627,0,0,0,0,100,0),
+(@PATH,6,666.2255,-1071.984,-188.5744,0,0,0,0,100,0),
+(@PATH,7,713.1385,-1077.042,-178.4627,0,0,0,0,100,0),
+(@PATH,8,756.4903,-1086.385,-165.0273,0,0,0,0,100,0),
+(@PATH,9,791.674,-1098.377,-157.4893,0,0,0,0,100,0),
+(@PATH,10,811.4623,-1112.419,-155.1721,0,0,0,0,100,0),
+(@PATH,11,820.8864,-1133.536,-153.9561,0,0,0,0,100,0),
+(@PATH,12,807.4134,-1143.589,-152.2109,0,0,0,0,100,0),
+(@PATH,13,788.3813,-1136.843,-150.0572,0,0,0,0,100,0),
+(@PATH,14,774.8284,-1122.117,-148.7992,0,0,0,0,100,0),
+(@PATH,15,753.0598,-1112.579,-145.9724,0,0,0,0,100,0),
+(@PATH,16,723.3937,-1111.516,-142.1575,0,0,0,0,100,0),
+(@PATH,17,692.8207,-1125.591,-137.05,0,0,0,0,100,0),
+(@PATH,18,670.802,-1153.978,-128.2815,0,0,0,0,100,0),
+(@PATH,19,669.009,-1180.974,-123.0805,0,0,0,0,100,0),
+(@PATH,20,670.802,-1153.978,-128.2815,0,0,0,0,100,0),
+(@PATH,21,692.8207,-1125.591,-137.05,0,0,0,0,100,0),
+(@PATH,22,723.3937,-1111.516,-142.1575,0,0,0,0,100,0),
+(@PATH,23,753.0598,-1112.579,-145.9724,0,0,0,0,100,0),
+(@PATH,24,774.8284,-1122.117,-148.7992,0,0,0,0,100,0),
+(@PATH,25,788.3813,-1136.843,-150.0572,0,0,0,0,100,0),
+(@PATH,26,807.4134,-1143.589,-152.2109,0,0,0,0,100,0);
+
+-- Pathing for Core Hound Entry: 11673 'TDB FORMAT'
+SET @NPC := 56746;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=706.5988,`position_y`=-608.756,`position_z`=-209.7862 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, '18950');
+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,706.5988,-608.756,-209.7862,0,0,0,0,100,0),
+(@PATH,2,694.3823,-643.1285,-209.7859,0,0,0,0,100,0),
+(@PATH,3,691.9941,-667.7454,-209.6549,0,0,0,0,100,0),
+(@PATH,4,712.6238,-699.4688,-209.7263,0,0,0,0,100,0),
+(@PATH,5,696.8894,-727.3798,-209.4279,0,0,0,0,100,0),
+(@PATH,6,672.7046,-770.8894,-209.0702,0,0,0,0,100,0),
+(@PATH,7,696.8894,-727.3798,-209.4279,0,0,0,0,100,0),
+(@PATH,8,712.6238,-699.4688,-209.7263,0,0,0,0,100,0),
+(@PATH,9,691.9941,-667.7454,-209.6549,0,0,0,0,100,0),
+(@PATH,10,694.3823,-643.1285,-209.7859,0,0,0,0,100,0);
+
+-- Pathing for Core Hound Entry: 11673 'TDB FORMAT'
+SET @NPC := 56667;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=716.2954,`position_y`=-563.1713,`position_z`=-215.2122 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, '18950');
+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,716.2954,-563.1713,-215.2122,0,0,0,0,100,0),
+(@PATH,2,730.72,-541.2038,-216.5207,0,0,0,0,100,0),
+(@PATH,3,751.7352,-537.1676,-215.0087,0,0,0,0,100,0),
+(@PATH,4,782.8221,-568.6121,-213.2396,0,0,0,0,100,0),
+(@PATH,5,826.4692,-557.4173,-206.1204,0,0,0,0,100,0),
+(@PATH,6,862.7628,-559.3347,-203.8248,0,0,0,0,100,0),
+(@PATH,7,897.3094,-575.2031,-203.7624,0,0,0,0,100,0),
+(@PATH,8,928.274,-599.9254,-203.4944,0,0,0,0,100,0),
+(@PATH,9,976.9997,-588.0521,-203.566,0,0,0,0,100,0),
+(@PATH,10,1013.348,-611.7108,-198.8222,0,0,0,0,100,0),
+(@PATH,11,1031.784,-628.6943,-189.8679,0,0,0,0,100,0),
+(@PATH,12,1054.582,-638.4258,-174.0191,0,0,0,0,100,0),
+(@PATH,13,1082.93,-658.8265,-159.5947,0,0,0,0,100,0),
+(@PATH,14,1102.016,-688.0265,-153.0321,0,0,0,0,100,0),
+(@PATH,15,1095.611,-709.971,-151.2729,0,0,0,0,100,0),
+(@PATH,16,1102.016,-688.0265,-153.0321,0,0,0,0,100,0),
+(@PATH,17,1082.93,-658.8265,-159.5947,0,0,0,0,100,0),
+(@PATH,18,1054.582,-638.4258,-174.0191,0,0,0,0,100,0),
+(@PATH,19,1031.784,-628.6943,-189.8679,0,0,0,0,100,0),
+(@PATH,20,1013.348,-611.7108,-198.8222,0,0,0,0,100,0),
+(@PATH,21,976.9997,-588.0521,-203.566,0,0,0,0,100,0),
+(@PATH,22,928.274,-599.9254,-203.4944,0,0,0,0,100,0),
+(@PATH,23,897.3094,-575.2031,-203.7624,0,0,0,0,100,0),
+(@PATH,24,862.7628,-559.3347,-203.8248,0,0,0,0,100,0),
+(@PATH,25,826.4692,-557.4173,-206.1204,0,0,0,0,100,0),
+(@PATH,26,782.8221,-568.6121,-213.2396,0,0,0,0,100,0),
+(@PATH,27,751.7352,-537.1676,-215.0087,0,0,0,0,100,0),
+(@PATH,28,730.72,-541.2038,-216.5207,0,0,0,0,100,0),
+(@PATH,29,716.2954,-563.1713,-215.2122,0,0,0,0,100,0),
+(@PATH,30,710.9113,-588.9549,-211.3497,0,0,0,0,100,0);
+
+-- Pathing for Core Hound Entry: 11673 'TDB FORMAT'
+SET @NPC := 56668;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=746.1315,`position_y`=-1006.086,`position_z`=-177.4375 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, '18950');
+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,746.1315,-1006.086,-177.4375,0,0,0,0,100,0),
+(@PATH,2,733.2838,-1027.083,-177.5541,0,0,0,0,100,0),
+(@PATH,3,695.6022,-1035.41,-182.9091,0,0,0,0,100,0),
+(@PATH,4,652.9347,-1047.064,-195.1933,0,0,0,0,100,0),
+(@PATH,5,695.6022,-1035.41,-182.9091,0,0,0,0,100,0),
+(@PATH,6,733.2838,-1027.083,-177.5541,0,0,0,0,100,0);
+
+-- Pathing for Core Hound Entry: 11673 'TDB FORMAT'
+SET @NPC := 56669;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=819.1058,`position_y`=-631.4754,`position_z`=-202.4386 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, '18950');
+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,819.1058,-631.4754,-202.4386,0,0,0,0,100,0),
+(@PATH,2,842.2988,-620.2899,-203.6502,0,0,0,0,100,0),
+(@PATH,3,863.2007,-606.6663,-201.9657,0,0,0,0,100,0),
+(@PATH,4,880.7169,-589.9871,-203.5187,0,0,0,0,100,0),
+(@PATH,5,891.5865,-563.1656,-204.1768,0,0,0,0,100,0),
+(@PATH,6,880.7169,-589.9871,-203.5187,0,0,0,0,100,0),
+(@PATH,7,863.2007,-606.6663,-201.9657,0,0,0,0,100,0),
+(@PATH,8,842.2988,-620.2899,-203.6502,0,0,0,0,100,0),
+(@PATH,9,819.1058,-631.4754,-202.4386,0,0,0,0,100,0),
+(@PATH,10,801.1528,-637.2293,-203.2919,0,0,0,0,100,0);
+
+-- Pathing for Core Hound Entry: 11673 'TDB FORMAT'
+SET @NPC := 56670;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=640.3456,`position_y`=-838.7157,`position_z`=-208.4006 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, '18950');
+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,640.3456,-838.7157,-208.4006,0,0,0,0,100,0),
+(@PATH,2,606.3914,-839.9142,-207.404,0,0,0,0,100,0),
+(@PATH,3,580.7532,-839.1719,-206.0227,0,0,0,0,100,0),
+(@PATH,4,571.1739,-823.5732,-206.9356,0,0,0,0,100,0),
+(@PATH,5,568.275,-805.6725,-206.7511,0,0,0,0,100,0),
+(@PATH,6,574.7719,-784.4373,-207.1243,0,0,0,0,100,0),
+(@PATH,7,568.275,-805.6725,-206.7511,0,0,0,0,100,0),
+(@PATH,8,571.1739,-823.5732,-206.9356,0,0,0,0,100,0),
+(@PATH,9,580.7532,-839.1719,-206.0227,0,0,0,0,100,0),
+(@PATH,10,606.3914,-839.9142,-207.404,0,0,0,0,100,0);
+
+-- Pathing for Core Hound Entry: 11673 'TDB FORMAT'
+SET @NPC := 56671;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=693.7902,`position_y`=-895.4052,`position_z`=-199.3317 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, '18950');
+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,693.7902,-895.4052,-199.3317,0,0,0,0,100,0),
+(@PATH,2,676.3041,-859.0721,-207.3966,0,0,0,0,100,0),
+(@PATH,3,660.5331,-846.3304,-208.582,0,0,0,0,100,0),
+(@PATH,4,676.3041,-859.0721,-207.3966,0,0,0,0,100,0),
+(@PATH,5,693.7902,-895.4052,-199.3317,0,0,0,0,100,0),
+(@PATH,6,709.7253,-933.0809,-191.2163,0,0,0,0,100,0);
+
+-- Pathing for Core Hound Entry: 11673 'TDB FORMAT'
+SET @NPC := 56672;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=708.7521,`position_y`=-494.4869,`position_z`=-213.9441 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, '18950');
+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,708.7521,-494.4869,-213.9441,0,0,0,0,100,0),
+(@PATH,2,706.8069,-515.2225,-215.4603,0,0,0,0,100,0),
+(@PATH,3,695.7981,-526.2382,-214.3069,0,0,0,0,100,0),
+(@PATH,4,671.7322,-532.863,-210.5322,0,0,0,0,100,0),
+(@PATH,5,695.7981,-526.2382,-214.3069,0,0,0,0,100,0),
+(@PATH,6,706.8069,-515.2225,-215.4603,0,0,0,0,100,0),
+(@PATH,7,708.7521,-494.4869,-213.9441,0,0,0,0,100,0),
+(@PATH,8,706.4074,-474.3789,-211.1673,0,0,0,0,100,0);
+
+-- Pathing for Core Hound Entry: 11673 'TDB FORMAT'
+SET @NPC := 56673;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=723.8314,`position_y`=-518.3099,`position_z`=-217.6104 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, '18950');
+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,723.8314,-518.3099,-217.6104,0,0,0,0,100,0),
+(@PATH,2,706.7125,-535.8472,-216.7189,0,0,0,0,100,0),
+(@PATH,3,685.7861,-543.6451,-211.2004,0,0,0,0,100,0),
+(@PATH,4,667.6307,-538.1242,-209.9916,0,0,0,0,100,0),
+(@PATH,5,685.7861,-543.6451,-211.2004,0,0,0,0,100,0),
+(@PATH,6,706.7125,-535.8472,-216.7189,0,0,0,0,100,0),
+(@PATH,7,723.8314,-518.3099,-217.6104,0,0,0,0,100,0),
+(@PATH,8,728.2719,-487.4919,-212.95,0,0,0,0,100,0);
+
+-- Pathing for Core Hound Entry: 11673 'TDB FORMAT'
+SET @NPC := 56674;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=831.386,`position_y`=-627.8932,`position_z`=-203.1487 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, '18950');
+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,831.386,-627.8932,-203.1487,0,0,0,0,100,0),
+(@PATH,2,856.4564,-617.9056,-202.1571,0,0,0,0,100,0),
+(@PATH,3,899.6118,-613.5433,-202.2377,0,0,0,0,100,0),
+(@PATH,4,936.2535,-612.5002,-203.6217,0,0,0,0,100,0),
+(@PATH,5,975.1815,-641.0467,-201.5775,0,0,0,0,100,0),
+(@PATH,6,1002.311,-661.9902,-194.1922,0,0,0,0,100,0),
+(@PATH,7,1024.067,-684.3118,-173.4296,0,0,0,0,100,0),
+(@PATH,8,1042.016,-695.8206,-163.7581,0,0,0,0,100,0),
+(@PATH,9,1058.163,-706.0782,-156.6107,0,0,0,0,100,0),
+(@PATH,10,1068.566,-742.8318,-151.7328,0,0,0,0,100,0),
+(@PATH,11,1117.097,-744.479,-145.6289,0,0,0,0,100,0),
+(@PATH,12,1149.458,-726.4506,-133.8044,0,0,0,0,100,0),
+(@PATH,13,1175.513,-702.1757,-130.9873,0,0,0,0,100,0),
+(@PATH,14,1200.504,-670.9343,-128.5453,0,0,0,0,100,0),
+(@PATH,15,1202.953,-639.3985,-126.1688,0,0,0,0,100,0),
+(@PATH,16,1188.303,-614.0296,-121.8816,0,0,0,0,100,0),
+(@PATH,17,1164.196,-595.4036,-115.7764,0,0,0,0,100,0),
+(@PATH,18,1155.213,-574.8707,-113.3766,0,0,0,0,100,0),
+(@PATH,19,1164.196,-595.4036,-115.7764,0,0,0,0,100,0),
+(@PATH,20,1188.303,-614.0296,-121.8816,0,0,0,0,100,0),
+(@PATH,21,1202.953,-639.3985,-126.1688,0,0,0,0,100,0),
+(@PATH,22,1200.504,-670.9343,-128.5453,0,0,0,0,100,0),
+(@PATH,23,1175.589,-702.0806,-130.9749,0,0,0,0,100,0),
+(@PATH,24,1149.458,-726.4506,-133.8044,0,0,0,0,100,0),
+(@PATH,25,1117.097,-744.479,-145.6289,0,0,0,0,100,0),
+(@PATH,26,1068.566,-742.8318,-151.7328,0,0,0,0,100,0),
+(@PATH,27,1058.163,-706.0782,-156.6107,0,0,0,0,100,0),
+(@PATH,28,1042.016,-695.8206,-163.7581,0,0,0,0,100,0),
+(@PATH,29,1024.226,-684.4753,-173.2943,0,0,0,0,100,0),
+(@PATH,30,1002.311,-661.9902,-194.1922,0,0,0,0,100,0),
+(@PATH,31,975.1815,-641.0467,-201.5775,0,0,0,0,100,0),
+(@PATH,32,936.2535,-612.5002,-203.6217,0,0,0,0,100,0),
+(@PATH,33,899.6118,-613.5433,-202.2377,0,0,0,0,100,0),
+(@PATH,34,856.4564,-617.9056,-202.1571,0,0,0,0,100,0),
+(@PATH,35,831.386,-627.8932,-203.1487,0,0,0,0,100,0),
+(@PATH,36,816.5816,-641.0675,-203.8891,0,0,0,0,100,0);
+
+-- Pathing for Core Hound Entry: 11673 'TDB FORMAT'
+SET @NPC := 56675;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1144.05,`position_y`=-662.6844,`position_z`=-131.4626 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, '18950');
+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,1144.05,-662.6844,-131.4626,0,0,0,0,100,0),
+(@PATH,2,1160.286,-696.8795,-132.4863,0,0,0,0,100,0),
+(@PATH,3,1129.031,-721.049,-139.5804,0,0,0,0,100,0),
+(@PATH,4,1118.512,-712.1383,-144.2585,0,0,0,0,100,0),
+(@PATH,5,1104.687,-722.1303,-146.9832,0,0,0,0,100,0),
+(@PATH,6,1090.824,-731.3634,-149.9868,0,0,0,0,100,0),
+(@PATH,7,1070.791,-717.5623,-153.4831,0,0,0,0,100,0),
+(@PATH,8,1080.754,-681.5721,-159.8726,0,0,0,0,100,0),
+(@PATH,9,1081.626,-681.3043,-159.6755,0,12000,0,0,100,0),
+(@PATH,10,1079.369,-678.5401,-160.8983,0,10000,0,0,100,0),
+(@PATH,11,1081.374,-680.3018,-159.9551,0,1000,0,0,100,0),
+(@PATH,12,1080.824,-681.4283,-159.8819,0,2000,0,0,100,0),
+(@PATH,13,1081.491,-679.0739,-160.1742,0,1000,0,0,100,0),
+(@PATH,14,1079.343,-678.3975,-160.9352,0,5000,0,0,100,0),
+(@PATH,15,1081.436,-676.3215,-160.7577,0,8000,0,0,100,0),
+(@PATH,16,1080.754,-681.5721,-159.8726,0,1000,0,0,100,0),
+(@PATH,17,1077.228,-678.6388,-161.4971,0,1000,0,0,100,0),
+(@PATH,18,1077.687,-678.7886,-161.3334,0,1000,0,0,100,0),
+(@PATH,19,1079.716,-679.3854,-160.6235,0,10000,0,0,100,0),
+(@PATH,20,1081.338,-682.8629,-159.4373,0,10000,0,0,100,0),
+(@PATH,21,1079.463,-680.3129,-160.5056,0,1000,0,0,100,0),
+(@PATH,22,1080.754,-681.5721,-159.8726,0,1000,0,0,100,0),
+(@PATH,23,1080.708,-679.2873,-160.3567,0,1000,0,0,100,0),
+(@PATH,24,1082.191,-681.9566,-159.3777,0,9000,0,0,100,0),
+(@PATH,25,1079.69,-678.5046,-160.8126,0,8000,0,0,100,0),
+(@PATH,26,1080.177,-679.1766,-160.5332,0,1000,0,0,100,0),
+(@PATH,27,1078.341,-677.3896,-161.4327,0,9000,0,0,100,0),
+(@PATH,28,1079.791,-676.366,-161.2243,0,1000,0,0,100,0),
+(@PATH,29,1078.341,-677.3896,-161.4327,0,1000,0,0,100,0),
+(@PATH,30,1081.163,-683.5833,-159.3395,0,7000,0,0,100,0),
+(@PATH,31,1080.636,-682.1011,-159.7975,0,1000,0,0,100,0),
+(@PATH,32,1081.985,-678.5395,-160.1417,0,2000,0,0,100,0),
+(@PATH,33,1081.526,-679.8784,-159.9983,0,1000,0,0,100,0),
+(@PATH,34,1080.778,-681.3652,-159.9082,0,1000,0,0,100,0),
+(@PATH,35,1079.221,-677.4147,-161.1729,0,1000,0,0,100,0),
+(@PATH,36,1079.501,-678.1235,-160.946,0,2000,0,0,100,0),
+(@PATH,37,1080.827,-681.6636,-159.8325,0,6000,0,0,100,0),
+(@PATH,38,1085.063,-680.338,-158.8806,0,8000,0,0,100,0),
+(@PATH,39,1079.092,-677.261,-161.242,0,1000,0,0,100,0),
+(@PATH,40,1079.541,-677.6991,-161.0217,0,1000,0,0,100,0),
+(@PATH,41,1081.284,-682.4361,-159.5412,0,2000,0,0,100,0),
+(@PATH,42,1080.757,-681.0048,-159.9885,0,1000,0,0,100,0),
+(@PATH,43,1083.066,-680.2807,-159.4699,0,6000,0,0,100,0),
+(@PATH,44,1081.552,-677.1035,-160.5629,0,1000,0,0,100,0),
+(@PATH,45,1081.611,-680.4688,-159.852,0,11000,0,0,100,0),
+(@PATH,46,1080.048,-679.4224,-160.5198,0,7000,0,0,100,0),
+(@PATH,47,1082.761,-681.9189,-159.2203,0,11000,0,0,100,0),
+(@PATH,48,1078.952,-678.8635,-160.9521,0,8000,0,0,100,0),
+(@PATH,49,1081.18,-681.5133,-159.7614,0,1000,0,0,100,0),
+(@PATH,50,1080.676,-681.3997,-159.9307,0,11000,0,0,100,0),
+(@PATH,51,1078.617,-679.6107,-160.8951,0,1000,0,0,100,0),
+(@PATH,52,1081.279,-680.4371,-159.9548,0,1000,0,0,100,0),
+(@PATH,53,1078.764,-677.3422,-161.3203,0,1000,0,0,100,0),
+(@PATH,54,1080.66,-681.4279,-159.9294,0,2000,0,0,100,0),
+(@PATH,55,1080.101,-708.452,-154.2289,0,1000,0,0,100,0),
+(@PATH,56,1084.528,-731.8951,-151.0118,0,0,0,0,100,0),
+(@PATH,57,1093.696,-748.0836,-149.2619,0,0,0,0,100,0),
+(@PATH,58,1110.641,-738.1426,-146.5005,0,0,0,0,100,0),
+(@PATH,59,1115.694,-716.585,-144.6347,0,0,0,0,100,0),
+(@PATH,60,1148.22,-713.5815,-132.988,0,0,0,0,100,0),
+(@PATH,61,1161.699,-694.4932,-132.2003,0,0,0,0,100,0),
+(@PATH,62,1149.113,-669.7729,-130.3396,0,0,0,0,100,0),
+(@PATH,63,1142.684,-647.411,-131.9233,0,0,0,0,100,0),
+(@PATH,64,1142.684,-647.411,-131.9233,1.53589,60000,0,0,100,0);
+
+-- Pathing for Core Hound Entry: 11673 'TDB FORMAT'
+SET @NPC := 56676;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=820.1378,`position_y`=-991.096,`position_z`=-207.1345 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, '18950');
+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,820.1378,-991.096,-207.1345,0,0,0,0,100,0),
+(@PATH,2,815.0589,-979.8468,-208.6176,0,0,0,0,100,0),
+(@PATH,3,820.1378,-991.096,-207.1345,0,0,0,0,100,0),
+(@PATH,4,837.5117,-1001.866,-203.9284,0,0,0,0,100,0),
+(@PATH,5,875.2714,-1009.17,-195.7951,0,0,0,0,100,0),
+(@PATH,6,884.1406,-1024.13,-192.9333,0,0,0,0,100,0),
+(@PATH,7,875.2714,-1009.17,-195.7951,0,0,0,0,100,0),
+(@PATH,8,837.5117,-1001.866,-203.9284,0,0,0,0,100,0);
+
+-- Pathing for Baron Geddon Entry: 12056 'TDB FORMAT'
+SET @NPC := 56655;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=747.5466,`position_y`=-981.676,`position_z`=-178.401 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,747.5466,-981.676,-178.401,0,0,1,0,100,0),
+(@PATH,2,739.986,-953.2151,-185.7548,0,0,1,0,100,0),
+(@PATH,3,716.3201,-910.8809,-193.1546,0,0,1,0,100,0),
+(@PATH,4,701.403,-887.8356,-199.5063,0,0,1,0,100,0),
+(@PATH,5,675.8235,-847.7932,-208.2585,0,0,1,0,100,0),
+(@PATH,6,639.0753,-830.6404,-208.4202,0,0,1,0,100,0),
+(@PATH,7,611.1107,-828.0424,-207.401,0,0,1,0,100,0),
+(@PATH,8,591.2252,-811.5459,-205.4029,0,0,1,0,100,0),
+(@PATH,9,608.8426,-787.6771,-207.4771,0,0,1,0,100,0),
+(@PATH,10,643.6417,-778.0462,-208.7169,0,0,1,0,100,0),
+(@PATH,11,664.3234,-786.412,-208.9517,0,0,1,0,100,0),
+(@PATH,12,661.6707,-816.6882,-208.705,0,0,1,0,100,0),
+(@PATH,13,678.5975,-847.099,-208.2891,0,0,1,0,100,0),
+(@PATH,14,699.6382,-878.082,-201.5386,0,0,1,0,100,0),
+(@PATH,15,718.3248,-907.4992,-193.3159,0,0,1,0,100,0),
+(@PATH,16,740.3997,-949.3792,-186.3494,0,0,1,0,100,0),
+(@PATH,17,746.6027,-966.5585,-181.5636,0,0,1,0,100,0);
+
+-- Pathing for Shazzrah Entry: 12264 'TDB FORMAT'
+SET @NPC := 56608;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=587.3033,`position_y`=-801.9748,`position_z`=-205.1575 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,587.3033,-801.9748,-205.1575,0,0,0,0,100,0),
+(@PATH,2,588.8104,-806.2665,-205.0612,0,0,0,0,100,0),
+(@PATH,3,587.384,-811.3304,-205.1067,0,0,0,0,100,0),
+(@PATH,4,583.1524,-811.6958,-205.1573,0,0,0,0,100,0),
+(@PATH,5,579.2105,-806.6736,-205.2536,0,0,0,0,100,0),
+(@PATH,6,579.0768,-804.3456,-205.2396,0,0,0,0,100,0),
+(@PATH,7,580.0167,-800.6034,-205.4058,0,0,0,0,100,0),
+(@PATH,8,583.49,-799.7552,-205.3562,0,0,0,0,100,0);
+
+-- Pathing for Lucifron Entry: 12118 'TDB FORMAT'
+SET @NPC := 56605;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1037.022,`position_y`=-986.3419,`position_z`=-181.5163 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,1037.022,-986.3419,-181.5163,0,0,0,0,100,0),
+(@PATH,2,1053.15,-990.7546,-182.6615,0,0,0,0,100,0),
+(@PATH,3,1070.411,-1006.765,-185.5444,0,0,0,0,100,0),
+(@PATH,4,1053.299,-990.8936,-182.7192,0,0,0,0,100,0),
+(@PATH,5,1037.022,-986.3419,-181.5163,0,0,0,0,100,0),
+(@PATH,6,1014.705,-978.6508,-181.182,0,0,0,0,100,0),
+(@PATH,7,1007.782,-958.0884,-180.174,0,0,0,0,100,0),
+(@PATH,8,1000.203,-955.4069,-179.5825,0,0,0,0,100,0),
+(@PATH,9,1007.782,-958.0884,-180.174,0,0,0,0,100,0),
+(@PATH,10,1014.45,-978.5632,-181.1854,0,0,0,0,100,0);
+-- Lucifron formation fixup
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (56605);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(56605,56605,0,0,2,0,0),
+(56605,56606,4,90,2,3,8),
+(56605,56607,4,270,2,3,8);
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1035.672,`position_y`=-989.7419,`position_z`=-181.7763 WHERE `guid`=56606;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1038.512,`position_y`=-982.9519,`position_z`=-181.2578 WHERE `guid`=56607;
+DELETE FROM `waypoint_data` WHERE `id` IN (566060,566070);
+
+-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT'
+SET @NPC := 56656;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1028.491,`position_y`=-908.0417,`position_z`=-161.3687 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,1028.491,-908.0417,-161.3687,0,0,1,0,100,0),
+(@PATH,2,1041.238,-888.9818,-158.3343,0,0,1,0,100,0),
+(@PATH,3,1061.057,-900.0848,-159.2599,0,0,1,0,100,0),
+(@PATH,4,1071.243,-893.1624,-156.4947,0,0,1,0,100,0),
+(@PATH,5,1041.238,-888.9818,-158.3343,0,0,1,0,100,0),
+(@PATH,6,1028.491,-908.0417,-161.3687,0,0,1,0,100,0),
+(@PATH,7,1008.565,-890.0919,-165.3463,0,0,1,0,100,0),
+(@PATH,8,980.3823,-904.361,-171.1376,0,0,1,0,100,0),
+(@PATH,9,966.753,-899.8453,-175.7252,0,0,1,0,100,0),
+(@PATH,10,957.4196,-885.538,-173.7588,0,0,1,0,100,0),
+(@PATH,11,980.3823,-904.361,-171.1376,0,0,1,0,100,0),
+(@PATH,12,1008.565,-890.0919,-165.3463,0,0,1,0,100,0);
+
+-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT'
+SET @NPC := 56657;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=748.5151,`position_y`=-725.4263,`position_z`=-211.9395 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,748.5151,-725.4263,-211.9395,0,0,1,0,100,0),
+(@PATH,2,739.7422,-763.3509,-218.9724,0,0,1,0,100,0),
+(@PATH,3,737.3899,-809.9995,-225.6305,0,0,1,0,100,0),
+(@PATH,4,745.2436,-850.8501,-223.6281,0,0,1,0,100,0),
+(@PATH,5,737.3899,-809.9995,-225.6305,0,0,1,0,100,0),
+(@PATH,6,739.7422,-763.3509,-218.9724,0,0,1,0,100,0),
+(@PATH,7,748.5151,-725.4263,-211.9395,0,0,1,0,100,0),
+(@PATH,8,764.8676,-686.4996,-212.5972,0,0,1,0,100,0);
+
+-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT'
+SET @NPC := 56658;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=975.5094,`position_y`=-589.3787,`position_z`=-203.781 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,975.5094,-589.3787,-203.781,0,0,1,0,100,0),
+(@PATH,2,958.4057,-595.7327,-203.9931,0,0,1,0,100,0),
+(@PATH,3,950.7159,-608.6719,-202.882,0,0,1,0,100,0),
+(@PATH,4,957.0149,-625.9316,-203.259,0,0,1,0,100,0),
+(@PATH,5,980.0177,-632.2986,-203.5142,0,0,1,0,100,0),
+(@PATH,6,990.2437,-625.777,-200.7675,0,0,1,0,100,0),
+(@PATH,7,998.6928,-609.5692,-202.0619,0,0,1,0,100,0),
+(@PATH,8,989.8893,-595.9269,-203.2261,0,0,1,0,100,0);
+
+-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT'
+SET @NPC := 56659;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=864.6398,`position_y`=-983.1211,`position_z`=-199.6699 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,864.6398,-983.1211,-199.6699,0,0,1,0,100,0),
+(@PATH,2,875.8871,-1014.841,-194.9043,0,0,1,0,100,0),
+(@PATH,3,891.3988,-1050.081,-187.1399,0,0,1,0,100,0),
+(@PATH,4,891.1622,-1067.062,-182.6621,0,0,1,0,100,0),
+(@PATH,5,883.1496,-1090.733,-176.0342,0,0,1,0,100,0),
+(@PATH,6,870.0406,-1110.407,-169.6678,0,0,1,0,100,0),
+(@PATH,7,855.7172,-1121.873,-161.9807,0,0,1,0,100,0),
+(@PATH,8,839.0113,-1128.492,-156.5452,0,0,1,0,100,0),
+(@PATH,9,819.8719,-1143.5,-153.6145,0,0,1,0,100,0),
+(@PATH,10,809.326,-1150.683,-152.5631,0,0,1,0,100,0),
+(@PATH,11,791.812,-1152.45,-150.4214,0,0,1,0,100,0),
+(@PATH,12,787.2233,-1123.192,-150.5524,0,0,1,0,100,0),
+(@PATH,13,757.2313,-1129.672,-145.1273,0,0,1,0,100,0),
+(@PATH,14,723.393,-1106.211,-143.0938,0,0,1,0,100,0),
+(@PATH,15,701.5763,-1137.426,-135.6903,0,0,1,0,100,0),
+(@PATH,16,666.1591,-1162.693,-126.0165,0,0,1,0,100,0),
+(@PATH,17,693.4008,-1186.742,-120.9137,0,0,1,0,100,0),
+(@PATH,18,717.1637,-1193.438,-118.9491,0,0,1,0,100,0),
+(@PATH,19,736.2715,-1211.634,-118.8998,0,0,1,0,100,0),
+(@PATH,20,759.3818,-1228.879,-119.2757,0,0,1,0,100,0),
+(@PATH,21,736.2715,-1211.634,-118.8998,0,0,1,0,100,0),
+(@PATH,22,717.1637,-1193.438,-118.9491,0,0,1,0,100,0),
+(@PATH,23,693.4008,-1186.742,-120.9137,0,0,1,0,100,0),
+(@PATH,24,666.1591,-1162.693,-126.0165,0,0,1,0,100,0),
+(@PATH,25,701.5763,-1137.426,-135.6903,0,0,1,0,100,0),
+(@PATH,26,723.393,-1106.211,-143.0938,0,0,1,0,100,0),
+(@PATH,27,757.2313,-1129.672,-145.1273,0,0,1,0,100,0),
+(@PATH,28,787.2233,-1123.192,-150.5524,0,0,1,0,100,0),
+(@PATH,29,791.812,-1152.45,-150.4214,0,0,1,0,100,0),
+(@PATH,30,809.326,-1150.683,-152.5631,0,0,1,0,100,0),
+(@PATH,31,819.8719,-1143.5,-153.6145,0,0,1,0,100,0),
+(@PATH,32,839.0113,-1128.492,-156.5452,0,0,1,0,100,0),
+(@PATH,33,855.7172,-1121.873,-161.9807,0,0,1,0,100,0),
+(@PATH,34,870.0406,-1110.407,-169.6678,0,0,1,0,100,0),
+(@PATH,35,883.1496,-1090.733,-176.0342,0,0,1,0,100,0),
+(@PATH,36,891.1622,-1067.062,-182.6621,0,0,1,0,100,0),
+(@PATH,37,891.3988,-1050.081,-187.1399,0,0,1,0,100,0),
+(@PATH,38,875.8871,-1014.841,-194.9043,0,0,1,0,100,0),
+(@PATH,39,864.6398,-983.1211,-199.6699,0,0,1,0,100,0);
+
+-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT'
+SET @NPC := 56660;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=912.38,`position_y`=-812.9961,`position_z`=-227.3731 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,912.38,-812.9961,-227.3731,0,0,1,0,100,0),
+(@PATH,2,917.8469,-848.5494,-219.4701,0,0,1,0,100,0),
+(@PATH,3,913.7874,-875.5369,-214.22,0,0,1,0,100,0),
+(@PATH,4,890.5936,-905.0054,-222.0683,0,0,1,0,100,0),
+(@PATH,5,860.6026,-921.1229,-225.7609,0,0,1,0,100,0),
+(@PATH,6,816.981,-920.8954,-225.8454,0,0,1,0,100,0),
+(@PATH,7,782.662,-911.1868,-222.6471,0,0,1,0,100,0),
+(@PATH,8,816.9766,-920.8942,-225.8542,0,0,1,0,100,0),
+(@PATH,9,860.6026,-921.1229,-225.7609,0,0,1,0,100,0),
+(@PATH,10,890.5936,-905.0054,-222.0683,0,0,1,0,100,0),
+(@PATH,11,913.7874,-875.5369,-214.22,0,0,1,0,100,0),
+(@PATH,12,917.8469,-848.5494,-219.4701,0,0,1,0,100,0),
+(@PATH,13,912.38,-812.9961,-227.3731,0,0,1,0,100,0),
+(@PATH,14,909.2687,-788.947,-226.9377,0,0,1,0,100,0),
+(@PATH,15,895.7159,-764.4568,-224.3548,0,0,1,0,100,0),
+(@PATH,16,879.3519,-761.3517,-224.0491,0,0,1,0,100,0),
+(@PATH,17,865.0396,-765.1099,-224.75,0,0,1,0,100,0),
+(@PATH,18,884.0205,-803.6951,-226.6926,0,0,1,0,100,0),
+(@PATH,19,889.6862,-825.1835,-227.3351,0,0,1,0,100,0),
+(@PATH,20,865.6118,-779.7151,-225.9819,0,0,1,0,100,0),
+(@PATH,21,865.0396,-765.1099,-224.75,0,0,1,0,100,0),
+(@PATH,22,879.3519,-761.3517,-224.0491,0,0,1,0,100,0),
+(@PATH,23,895.7159,-764.4568,-224.3548,0,0,1,0,100,0),
+(@PATH,24,909.2687,-788.947,-226.9377,0,0,1,0,100,0);
+
+-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT'
+SET @NPC := 56661;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1031.916,`position_y`=-889.574,`position_z`=-160.0134 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,1031.916,-889.574,-160.0134,0,0,1,0,100,0),
+(@PATH,2,1069.734,-893.855,-156.7931,0,0,1,0,100,0),
+(@PATH,3,1031.916,-889.574,-160.0134,0,0,1,0,100,0),
+(@PATH,4,996.8139,-897.9012,-168.1947,0,0,1,0,100,0),
+(@PATH,5,962.845,-884.6795,-173.6825,0,0,1,0,100,0),
+(@PATH,6,987.062,-893.2951,-169.7379,0,0,1,0,100,0),
+(@PATH,7,1001.684,-886.9771,-167.0547,0,0,1,0,100,0),
+(@PATH,8,1008.282,-863.9785,-164.7876,0,0,1,0,100,0),
+(@PATH,9,987.062,-893.2951,-169.7379,0,0,1,0,100,0),
+(@PATH,10,962.845,-884.6795,-173.6825,0,0,1,0,100,0),
+(@PATH,11,996.8139,-897.9012,-168.1947,0,0,1,0,100,0);
+
+-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT'
+SET @NPC := 56662;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1068.962,`position_y`=-696.559,`position_z`=-157.781 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,1068.962,-696.559,-157.781,0,0,1,0,100,0),
+(@PATH,2,1053.966,-737.0459,-151.7794,0,0,1,0,100,0),
+(@PATH,3,1059.624,-760.5685,-151.586,0,0,1,0,100,0),
+(@PATH,4,1084.683,-739.8831,-150.7728,0,0,1,0,100,0),
+(@PATH,5,1099.292,-778.5201,-151.1692,0,0,1,0,100,0),
+(@PATH,6,1125.305,-739.6833,-142.7612,0,0,1,0,100,0),
+(@PATH,7,1159.508,-719.2535,-133.2384,0,0,1,0,100,0),
+(@PATH,8,1192.168,-686.1762,-128.7967,0,0,1,0,100,0),
+(@PATH,9,1211.332,-653.7628,-127.9139,0,0,1,0,100,0),
+(@PATH,10,1187.516,-611.0389,-121.1588,0,0,1,0,100,0),
+(@PATH,11,1148.847,-599.9906,-114.898,0,0,1,0,100,0),
+(@PATH,12,1187.516,-611.0389,-121.1588,0,0,1,0,100,0),
+(@PATH,13,1211.332,-653.7628,-127.9139,0,0,1,0,100,0),
+(@PATH,14,1192.168,-686.1762,-128.7967,0,0,1,0,100,0),
+(@PATH,15,1159.508,-719.2535,-133.2384,0,0,1,0,100,0),
+(@PATH,16,1125.392,-739.6312,-142.7302,0,0,1,0,100,0),
+(@PATH,17,1099.292,-778.5201,-151.1692,0,0,1,0,100,0),
+(@PATH,18,1084.683,-739.8831,-150.7728,0,0,1,0,100,0),
+(@PATH,19,1059.654,-760.5442,-151.592,0,0,1,0,100,0),
+(@PATH,20,1053.966,-737.0459,-151.7794,0,0,1,0,100,0),
+(@PATH,21,1068.962,-696.559,-157.781,0,0,1,0,100,0),
+(@PATH,22,1046.413,-674.9515,-169.5157,0,0,1,0,100,0),
+(@PATH,23,1023.84,-646.451,-189.8513,0,0,1,0,100,0),
+(@PATH,24,1046.413,-674.9515,-169.5157,0,0,1,0,100,0);
+
+-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT'
+SET @NPC := 56664;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=759.9225,`position_y`=-689.7131,`position_z`=-212.5623 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,759.9225,-689.7131,-212.5623,0,0,1,0,100,0),
+(@PATH,2,779.0322,-680.1849,-213.9095,0,0,1,0,100,0),
+(@PATH,3,800.4368,-665.5578,-208.9407,0,0,1,0,100,0),
+(@PATH,4,807.4164,-656.269,-206.1155,0,0,1,0,100,0),
+(@PATH,5,779.0322,-680.1849,-213.9095,0,0,1,0,100,0),
+(@PATH,6,759.9225,-689.7131,-212.5623,0,0,1,0,100,0),
+(@PATH,7,753.9745,-704.1632,-211.753,0,0,1,0,100,0),
+(@PATH,8,758.8966,-684.4725,-212.381,0,0,1,0,100,0),
+(@PATH,9,780.8896,-669.565,-211.4591,0,0,1,0,100,0),
+(@PATH,10,791.4582,-652.981,-207.6324,0,0,1,0,100,0),
+(@PATH,11,758.8966,-684.4725,-212.381,0,0,1,0,100,0),
+(@PATH,12,753.9745,-704.1632,-211.753,0,0,1,0,100,0);
+
+-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT'
+SET @NPC := 56665;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1035.173,`position_y`=-854.7958,`position_z`=-158.8589 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,1035.173,-854.7958,-158.8589,0,0,1,0,100,0),
+(@PATH,2,1057.385,-862.5274,-159.6177,0,0,1,0,100,0),
+(@PATH,3,995.0676,-853.4235,-165.4317,0,0,1,0,100,0);
+
+-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT'
+SET @NPC := 56740;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=667.9337,`position_y`=-1066.047,`position_z`=-188.3889 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,667.9337,-1066.047,-188.3889,0,0,1,0,100,0),
+(@PATH,2,619.8726,-1066.64,-199.7958,0,0,1,0,100,0),
+(@PATH,3,613.3337,-1099.887,-198.7582,0,0,1,0,100,0),
+(@PATH,4,591.3667,-1135.207,-200.2088,0,0,1,0,100,0),
+(@PATH,5,578.8029,-1173.733,-194.7558,0,0,1,0,100,0),
+(@PATH,6,591.5503,-1192.438,-195.7943,0,0,1,0,100,0),
+(@PATH,7,608.195,-1194.054,-195.7651,0,0,1,0,100,0),
+(@PATH,8,623.8442,-1186.21,-195.8348,0,0,1,0,100,0),
+(@PATH,9,628.4896,-1171.869,-194.5435,0,0,1,0,100,0),
+(@PATH,10,628.3709,-1151.011,-197.0152,0,0,1,0,100,0),
+(@PATH,11,626.806,-1131.724,-200.8709,0,0,1,0,100,0),
+(@PATH,12,645.6395,-1106.676,-196.4797,0,0,1,0,100,0);
+
+-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT'
+SET @NPC := 56741;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1055.823,`position_y`=-833.2653,`position_z`=-154.468 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,1055.823,-833.2653,-154.468,0,0,0,0,100,0),
+(@PATH,2,1032.143,-826.1788,-154.2626,0,0,0,0,100,0),
+(@PATH,3,1015.666,-808.7546,-148.7213,0,0,0,0,100,0),
+(@PATH,4,1032.143,-826.1788,-154.2626,0,0,0,0,100,0);
+
+-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT'
+SET @NPC := 56789;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=679.1953,`position_y`=-847.3836,`position_z`=-208.2482 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,679.1953,-847.3836,-208.2482,0,0,1,0,100,0),
+(@PATH,2,676.7046,-829.8509,-208.8353,0,0,1,0,100,0),
+(@PATH,3,665.002,-813.2372,-208.774,0,0,1,0,100,0),
+(@PATH,4,681.6021,-776.7833,-209.1657,0,0,1,0,100,0),
+(@PATH,5,686.1985,-738.5436,-209.2948,0,0,1,0,100,0),
+(@PATH,6,707.9111,-711.0708,-209.5187,0,0,1,0,100,0),
+(@PATH,7,708.2624,-692.8405,-209.5718,0,0,1,0,100,0),
+(@PATH,8,690.2739,-662.6287,-209.6574,0,0,1,0,100,0),
+(@PATH,9,708.2625,-692.8368,-209.5175,0,0,1,0,100,0),
+(@PATH,10,707.9111,-711.0708,-209.5187,0,0,1,0,100,0),
+(@PATH,11,686.1985,-738.5436,-209.2948,0,0,1,0,100,0),
+(@PATH,12,681.6021,-776.7833,-209.1657,0,0,1,0,100,0),
+(@PATH,13,665.002,-813.2372,-208.774,0,0,1,0,100,0),
+(@PATH,14,676.7046,-829.8509,-208.8353,0,0,1,0,100,0),
+(@PATH,15,679.1953,-847.3836,-208.2482,0,0,1,0,100,0),
+(@PATH,16,696.5482,-855.4606,-206.0954,0,0,1,0,100,0),
+(@PATH,17,710.7119,-882.6242,-198.953,0,0,1,0,100,0),
+(@PATH,18,714.8118,-907.6405,-193.7685,0,0,1,0,100,0),
+(@PATH,19,735.3042,-937.3447,-188.4066,0,0,1,0,100,0),
+(@PATH,20,714.8118,-907.6405,-193.7685,0,0,1,0,100,0),
+(@PATH,21,710.7119,-882.6242,-198.953,0,0,1,0,100,0),
+(@PATH,22,697.0541,-866.1818,-204.0854,0,0,1,0,100,0);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_04_world.sql
new file mode 100644
index 00000000000..17664992c98
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_04_world.sql
@@ -0,0 +1,2 @@
+-- Lothos Riftwaker SAI Spell fix
+UPDATE `smart_scripts` SET `action_param2`=2 WHERE `entryorguid`=14387;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_12_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_12_00_world.sql
new file mode 100644
index 00000000000..d169863a95b
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_12_00_world.sql
@@ -0,0 +1,16 @@
+--
+DELETE FROM `gameobject` WHERE `guid` IN (5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528);
+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
+(5514, 191517, 571, 0, 0, 1, 1, 6255.64, -1185.84, 425.924, 2.12057, 0, 0, 0, 1, 300, 100, 1, 0),
+(5515, 1732, 0, 0, 0, 1, 1, -9255, -2735, 89.702, 0.436, 0, 0, 0.216439, 0.976296, 900, 100, 1, 0),
+(5516, 1732, 0, 0, 0, 1, 1, -3149, -3275, 63.632, 0.262, 0, 0, 0, 0, 900, 100, 1, 0),
+(5518, 1732, 0, 0, 0, 1, 1, -9853.86, 1406.45, 38.028, 1.826, 0, 0, 0.95848, 0.285161, 900, 100, 1, 0),
+(5519, 1732, 0, 0, 0, 1, 1, -9835.8, 1394.81, 38.405, 0.106, 0, 0, 0, 0, 900, 100, 1, 0),
+(5520, 1732, 0, 0, 0, 1, 1, -9854.17, 1391.69, 38.7294, 3.244, 0, 0, 0, 0, 900, 100, 1, 0),
+(5522, 1732, 1, 0, 0, 1, 1, -1521, 1964.46, 67.374, 1.85, 0, 0, 0.798635, 0.601815, 900, 100, 1, 0),
+(5523, 1732, 0, 0, 0, 1, 1, -9847.12, 1399.89, 37.1306, 3.397, 0, 0, 0.95848, 0.285161, 900, 100, 1, 0),
+(5524, 1732, 0, 0, 0, 1, 1, -1123, -1277, 66.215, 3.817, 0, 0, 0.943491, -0.331398, 900, 100, 1, 0),
+(5525, 1732, 1, 0, 0, 1, 1, 2508.13, -1446, 172.044, -2, 0, 0, 0, 0, 900, 100, 1, 0),
+(5526, 2054, 0, 0, 0, 1, 1, -8850, -1905, 125.96, 4.143, 0, 0, 0, 0, 900, 100, 1, 0),
+(5527, 1732, 0, 0, 0, 1, 1, -9828, 1415.7, 37.242, 2.663, 0, 0, 0, 0, 900, 100, 1, 0),
+(5528, 1732, 0, 0, 0, 1, 1, -9843, 1386.87, 39.012, 4.783, 0, 0, 0, 0, 900, 100, 1, 0);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_13_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_13_00_world_335.sql
new file mode 100644
index 00000000000..c861f4d1771
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_13_00_world_335.sql
@@ -0,0 +1,12 @@
+--
+DELETE FROM `game_event_creature` WHERE `guid` IN (87734,87736,87877);
+DELETE FROM `game_event_creature` WHERE `guid` IN (28797,28798,28799);
+INSERT INTO `game_event_creature` (`eventEntry`,`guid`) VALUES
+(24,28797),(24,28798),(24,28799);
+
+DELETE FROM `creature` WHERE `guid` IN (87734,87736,87877);
+DELETE FROM `creature` WHERE `guid` IN (28797,28798,28799);
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(28797,24497,1,1,1,1279.69,-4411.26,26.4771,1.97222,43200,0,0),
+(28798,24484,1,1,1,1329.54,-4360.52,27.8138,0.940035,450,0,0),
+(28799,24484,1,1,1,1332.88,-4360.04,28.1824,1.73972,450,0,0);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_00_world.sql
new file mode 100644
index 00000000000..0679dbd96a3
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_00_world.sql
@@ -0,0 +1,990 @@
+-- Remove spawned Vexniss Borer
+DELETE FROM `creature` WHERE `guid` BETWEEN 87654 AND 87670;
+DELETE FROM `creature_addon` WHERE `guid` BETWEEN 87654 AND 87670;
+-- Remove spawned Vauj Brood
+DELETE FROM `creature` WHERE `guid` BETWEEN 88068 AND 88071;
+DELETE FROM `creature_addon` WHERE `guid` BETWEEN 88068 AND 88071;
+-- Remove overspawned Vexniss Warrior
+DELETE FROM `creature` WHERE `guid` BETWEEN 87614 AND 87616;
+DELETE FROM `creature_addon` WHERE `guid` BETWEEN 87614 AND 87616;
+DELETE FROM `creature` WHERE `guid` BETWEEN 87645 AND 87647;
+DELETE FROM `creature_addon` WHERE `guid` BETWEEN 87645 AND 87647;
+-- Remove overspawned Vexniss Guardian
+DELETE FROM `creature` WHERE `guid` BETWEEN 87639 AND 87644;
+DELETE FROM `creature_addon` WHERE `guid` BETWEEN 87639 AND 87644;
+DELETE FROM `creature` WHERE `guid`=87671;
+DELETE FROM `creature_addon` WHERE `guid`=87671;
+
+SET @CGUID := 87564;
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+7;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 15264, 531, 1, 1, -8321.975, 2142.675, 118.266, 0.6283185, 7200, 0, 0),
+(@CGUID+1, 15264, 531, 1, 1, -8156.46, 2119.579, 129.2029, 3.577925, 7200, 0, 0),
+(@CGUID+2, 15264, 531, 1, 1, -8288.92, 2054.495, 118.3005, 0.5235988, 7200, 0, 0),
+(@CGUID+3, 15264, 531, 1, 1, -8159.368, 2144.159, 129.5639, 4.08407, 7200, 0, 0),
+(@CGUID+4, 15264, 531, 1, 1, -8297.351, 2075.668, 118.2692, 0.6108652, 7200, 0, 0),
+(@CGUID+5, 15264, 531, 1, 1, -8182.612, 2166.212, 129.6401, 4.642576, 7200, 0, 0),
+(@CGUID+6, 15264, 531, 1, 1, -8314.339, 2119.221, 118.2629, 0.541052, 7200, 0, 0),
+(@CGUID+7, 15264, 531, 1, 1, -8206.177, 2164.815, 129.4669, 5.026548, 7200, 0, 0);
+
+DELETE FROM `creature` WHERE `guid` IN (88075,87527,87528,87529,87652,87653,87595,87596,87597,87598,87599,87600,87601,87602);
+DELETE FROM `creature` WHERE `guid` BETWEEN 87604 AND 87638;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(88075, 15263, 531, 1, 1, -8346.052, 2080.981, 125.7325, 0.4014257, 7200, 0, 0),
+(87527, 15502, 531, 1, 1, -8496.147, 1932.62, 135.7384, 1.308997, 7200, 0, 0),
+(87529, 15503, 531, 1, 1, -8500.15, 1937.377, 135.7554, 0.4712389, 7200, 0, 0),
+(87528, 15504, 531, 1, 1, -8499.575, 1933.64, 135.7087, 0.9773844, 7200, 0, 0),
+(87652, 15262, 531, 1, 1, -8281.484, 2087.381, 118.3001, 4.957793, 7200, 0, 0),
+(87653, 15262, 531, 1, 1, -8327.386, 2080.153, 125.6371, 5.012831, 7200, 0, 0),
+(87595, 15233, 531, 1, 1, -8404.733, 2070.303, 116.2127, 3.647738, 7200, 0, 0),
+(87596, 15233, 531, 1, 1, -8396.88, 2051.316, 116.2118, 3.385939, 7200, 0, 0),
+(87597, 15247, 531, 1, 1, -8391.906, 2063.48, 116.2034, 3.508112, 7200, 0, 0),
+(87598, 15247, 531, 1, 1, -8592.574, 1976.949, -1.209995, 6.091199, 7200, 0, 0),
+(87599, 15233, 531, 1, 1, -8586.837, 1985.7, -1.542133, 1.894589, 7200, 5, 1),
+(87600, 15233, 531, 1, 1, -8581.488, 1970.878, -1.458955, 4.427207, 7200, 5, 1),
+(87608, 15233, 531, 1, 1, -8593.99, 1964.035, -1.260533, 1.852829, 7200, 5, 1),
+(87601, 15543, 531, 1, 1, -8587.962, 2174.209, -4.147823, 4.939282, 7200, 0, 0),
+(87602, 15511, 531, 1, 1, -8566.884, 2177.171, -3.978982, 4.223697, 7200, 0, 0),
+(87604, 15247, 531, 1, 1, -8548.23, 2130.356, -2.730221, 4.485496, 7200, 0, 0),
+(87605, 15247, 531, 1, 1, -8551.39, 2118.207, -1.737938, 1.22173, 7200, 0, 0),
+(87606, 15247, 531, 1, 1, -8623.282, 2108.951, -2.676475, 3.787364, 7200, 0, 0),
+(87607, 15247, 531, 1, 1, -8631.831, 2101.618, -1.330519, 0.5061455, 7200, 0, 0),
+(87609, 15233, 531, 1, 1, -8541.605, 2134.76, -2.544568, 1.736609, 7200, 0, 0),
+(87610, 15233, 531, 1, 1, -8550.414, 2110.023, -0.8794384, 5.872046, 7200, 0, 0),
+(87611, 15233, 531, 1, 1, -8544.825, 2124.616, -1.830906, 5.065909, 7200, 0, 0),
+(87612, 15233, 531, 1, 1, -8620.168, 2093.819, -1.801619, 5.462881, 7200, 0, 0),
+(87613, 15233, 531, 1, 1, -8633.741, 2112.304, -1.909737, 1.784077, 7200, 0, 0),
+(87614, 15233, 531, 1, 1, -8636.268, 2090.388, -1.370589, 1.34908, 7200, 0, 0),
+(87615, 15233, 531, 1, 1, -8369.455, 2060.384, 9.630878, 5.041036, 7200, 0, 0),
+(87616, 15233, 531, 1, 1, -8368.543, 2035.741, 9.288624, 2.589778, 7200, 0, 0),
+(87617, 15233, 531, 1, 1, -8397.211, 2058.122, 9.618873, 1.057295, 7200, 0, 0),
+(87618, 15233, 531, 1, 1, -8385.495, 2044.833, 9.216681, 0.1224109, 7200, 0, 0),
+(87619, 15233, 531, 1, 1, -8393.083, 2075.153, 9.179768, 5.667883, 7200, 0, 0),
+(87620, 15233, 531, 1, 1, -8378.618, 2070.816, 8.844448, 1.763804, 7200, 0, 0),
+(87621, 15233, 531, 1, 1, -8326.908, 1891.109, -1.837783, 5.856318, 7200, 0, 0),
+(87622, 15233, 531, 1, 1, -8339.306, 1800.288, -1.517404, 3.040907, 7200, 0, 0),
+(87623, 15233, 531, 1, 1, -8351.284, 1805.48, -1.233535, 0.5619113, 7200, 0, 0),
+(87624, 15233, 531, 1, 1, -8344.919, 1919.037, -2.500755, 3.838682, 7200, 0, 0),
+(87625, 15233, 531, 1, 1, -8402.613, 1914.386, 3.142937, 2.031992, 7200, 0, 0),
+(87626, 15233, 531, 1, 1, -8351.182, 1921.119, -2.540841, 3.627775, 7200, 0, 0),
+(87627, 15233, 531, 1, 1, -8328.894, 1876.641, -2.246095, 4.796616, 7200, 0, 0),
+(87628, 15233, 531, 1, 1, -8401.165, 1932.269, 2.618013, 5.465084, 7200, 0, 0),
+(87629, 15233, 531, 1, 1, -8350.329, 1814.966, 0.02815836, 0.622449, 7200, 0, 0),
+(87630, 15233, 531, 1, 1, -8339.517, 1890.658, -2.486081, 2.180425, 7200, 0, 0),
+(87631, 15233, 531, 1, 1, -8393.705, 1924.228, 3.221893, 2.51069, 7200, 0, 0),
+(87632, 15233, 531, 1, 1, -8357.022, 1822.796, 0.3194859, 6.032223, 7200, 0, 0),
+(87633, 15233, 531, 1, 1, -8395.523, 1942.848, 4.020818, 5.754907, 7200, 0, 0),
+(87634, 15233, 531, 1, 1, -8341.861, 1906.819, -2.410278, 5.228793, 7200, 0, 0),
+(87635, 15233, 531, 1, 1, -8390.899, 1914.458, 3.005651, 2.863161, 7200, 0, 0),
+(87636, 15233, 531, 1, 1, -8408.117, 1938.302, 3.825733, 2.332423, 7200, 0, 0),
+(87637, 15233, 531, 1, 1, -8348.093, 1790.437, -2.233759, 2.154297, 7200, 0, 0),
+(87638, 15233, 531, 1, 1, -8363.572, 1811.677, 1.227631, 5.535646, 7200, 0, 0);
+
+DELETE FROM `creature` WHERE `id` IN (15962,15630);
+
+SET @CGUID := 87678;
+DELETE FROM `creature` WHERE `guid` BETWEEN 87678 AND 87900;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 15300, 531, 1, 1, -7892.548, 1435.668, -65.22711, 0.03490658, 7200, 5, 1),
+(@CGUID+1, 15300, 531, 1, 1, -7892.569, 1422.789, -64.86232, 0.03490658, 7200, 5, 1),
+(@CGUID+2, 15300, 531, 1, 1, -7893.518, 1410.414, -63.56542, 0.06981317, 7200, 5, 1),
+(@CGUID+3, 15300, 531, 1, 1, -7898.467, 1467.742, -63.57774, 0.9599311, 7200, 5, 1),
+(@CGUID+4, 15300, 531, 1, 1, -7902.507, 1379.252, -64.91041, 5.602507, 7200, 5, 1),
+(@CGUID+5, 15300, 531, 1, 1, -7903.237, 1475.595, -62.51829, 0.1745329, 7200, 5, 1),
+(@CGUID+6, 15300, 531, 1, 1, -7904.257, 1483.905, -61.91321, 0.1919862, 7200, 5, 1),
+(@CGUID+7, 15300, 531, 1, 1, -7905.727, 1397.53, -65.67427, 1.689209, 7200, 5, 1),
+(@CGUID+8, 15300, 531, 1, 1, -7908.201, 1441.5, -67.67268, 1.965443, 7200, 5, 1),
+(@CGUID+9, 15300, 531, 1, 1, -7909.212, 1453.823, -66.71354, 5.388192, 7200, 5, 1),
+(@CGUID+10, 15300, 531, 1, 1, -7909.227, 1432.98, -68.22237, 2.530727, 7200, 5, 1),
+(@CGUID+11, 15300, 531, 1, 1, -7909.395, 1408.309, -66.57648, 2.094395, 7200, 5, 1),
+(@CGUID+12, 15300, 531, 1, 1, -7911.222, 1360.079, -75.37612, 5.811946, 7200, 5, 1),
+(@CGUID+13, 15300, 531, 1, 1, -7911.51, 1433.753, -68.01991, 2.973195, 7200, 5, 1),
+(@CGUID+14, 15300, 531, 1, 1, -7912.08, 1399.684, -68.01915, 4.38238, 7200, 5, 1),
+(@CGUID+15, 15300, 531, 1, 1, -7912.685, 1392.55, -68.86684, 4.433136, 7200, 5, 1),
+(@CGUID+16, 15300, 531, 1, 1, -7915.495, 1391.565, -68.96242, 0.1829643, 7200, 5, 1),
+(@CGUID+17, 15300, 531, 1, 1, -7916.698, 1452.717, -66.98033, 3.176499, 7200, 5, 1),
+(@CGUID+18, 15300, 531, 1, 1, -7919.031, 1399.421, -65.47141, 0.8203048, 7200, 5, 1),
+(@CGUID+19, 15300, 531, 1, 1, -7919.174, 1450.881, -66.86721, 3.781995, 7200, 5, 1),
+(@CGUID+20, 15300, 531, 1, 1, -7919.538, 1503.975, -60.7916, 0.6806784, 7200, 5, 1),
+(@CGUID+21, 15300, 531, 1, 1, -7919.866, 1441.265, -66.96127, 0.03490658, 7200, 5, 1),
+(@CGUID+22, 15300, 531, 1, 1, -7921.188, 1485.365, -64.48227, 3.437477, 7200, 5, 1),
+(@CGUID+23, 15300, 531, 1, 1, -7923.026, 1477.876, -65.64141, 3.438299, 7200, 5, 1),
+(@CGUID+24, 15300, 531, 1, 1, -7925.117, 1421.922, -65.61559, 3.193953, 7200, 5, 1),
+(@CGUID+25, 15300, 531, 1, 1, -7926.443, 1354.812, -83.58868, 3.46605, 7200, 5, 1),
+(@CGUID+26, 15300, 531, 1, 1, -7926.561, 1411.766, -65.3652, 2.740167, 7200, 5, 1),
+(@CGUID+27, 15300, 531, 1, 1, -7926.702, 1518.368, -59.68728, 0.5585054, 7200, 5, 1),
+(@CGUID+28, 15300, 531, 1, 1, -7927.257, 1493.96, -64.12371, 2.336106, 7200, 5, 1),
+(@CGUID+29, 15300, 531, 1, 1, -7927.331, 1328.951, -89.86474, 5.759586, 7200, 5, 1),
+(@CGUID+30, 15300, 531, 1, 1, -7927.374, 1365.604, -79.83042, 6.056293, 7200, 5, 1),
+(@CGUID+31, 15300, 531, 1, 1, -7927.462, 1472.604, -65.65568, 1.799682, 7200, 5, 1),
+(@CGUID+32, 15300, 531, 1, 1, -7927.478, 1389.667, -69.12563, 2.949606, 7200, 5, 1),
+(@CGUID+33, 15300, 531, 1, 1, -7929.896, 1484.513, -65.13245, 2.539029, 7200, 5, 1),
+(@CGUID+34, 15300, 531, 1, 1, -7930.548, 1320.507, -90.37265, 5.707227, 7200, 5, 1),
+(@CGUID+35, 15300, 531, 1, 1, -7931.007, 1349.313, -86.4936, 4.62881, 7200, 5, 1),
+(@CGUID+36, 15300, 531, 1, 1, -7932.876, 1453.155, -65.91177, 3.333579, 7200, 5, 1),
+(@CGUID+37, 15300, 531, 1, 1, -7933.675, 1528.835, -59.21246, 0.6283185, 7200, 5, 1),
+(@CGUID+38, 15300, 531, 1, 1, -7933.889, 1378.917, -75.02083, 3.036873, 7200, 5, 1),
+(@CGUID+39, 15300, 531, 1, 1, -7935.543, 1492.749, -64.42677, 5.602507, 7200, 5, 1),
+(@CGUID+40, 15300, 531, 1, 1, -7936.098, 1496.016, -64.40736, 3.071736, 7200, 5, 1),
+(@CGUID+41, 15300, 531, 1, 1, -7937.946, 1461.595, -65.50119, 3.804818, 7200, 5, 1),
+(@CGUID+42, 15300, 531, 1, 1, -7938.33, 1348.699, -87.84061, 3.572022, 7200, 5, 1),
+(@CGUID+43, 15300, 531, 1, 1, -7938.882, 1372.345, -78.70309, 2.199115, 7200, 5, 1),
+(@CGUID+44, 15300, 531, 1, 1, -7939.133, 1356.648, -86.10828, 1.623156, 7200, 5, 1),
+(@CGUID+45, 15300, 531, 1, 1, -7940.602, 1337.277, -91.03973, 2.722714, 7200, 5, 1),
+(@CGUID+46, 15300, 531, 1, 1, -7949.532, 1525.042, -62.28769, 2.129302, 7200, 5, 1),
+(@CGUID+47, 15300, 531, 1, 1, -7949.806, 1486.382, -63.61917, 3.525565, 7200, 5, 1),
+(@CGUID+48, 15300, 531, 1, 1, -7950.41, 1317.311, -89.45904, 1.911877, 7200, 5, 1),
+(@CGUID+49, 15300, 531, 1, 1, -7950.723, 1521.167, -62.74979, 2.950145, 7200, 5, 1),
+(@CGUID+50, 15300, 531, 1, 1, -7954.241, 1559.81, -59.11872, 0.715585, 7200, 5, 1),
+(@CGUID+51, 15300, 531, 1, 1, -7954.718, 1540.167, -60.00118, 4.363323, 7200, 5, 1),
+(@CGUID+52, 15300, 531, 1, 1, -7954.768, 1345.852, -91.36903, 3.124139, 7200, 5, 1),
+(@CGUID+53, 15300, 531, 1, 1, -7955.768, 1568.089, -60.09465, 0.2268928, 7200, 5, 1),
+(@CGUID+54, 15300, 531, 1, 1, -7955.857, 1498.233, -62.65005, 3.665191, 7200, 5, 1),
+(@CGUID+55, 15300, 531, 1, 1, -7955.873, 1284.801, -75.54648, 5.8294, 7200, 5, 1),
+(@CGUID+56, 15300, 531, 1, 1, -7957.664, 1340.282, -92.26547, 2.286381, 7200, 5, 1),
+(@CGUID+57, 15300, 531, 1, 1, -7958.491, 1528.291, -61.77398, 3.857317, 7200, 5, 1),
+(@CGUID+58, 15300, 531, 1, 1, -7959.439, 1320.096, -89.41815, 0.8552113, 7200, 5, 1),
+(@CGUID+59, 15300, 531, 1, 1, -7960.226, 1307.606, -83.07062, 5.003528, 7200, 5, 1),
+(@CGUID+60, 15300, 531, 1, 1, -7961.386, 1279.918, -73.73505, 5.375614, 7200, 5, 1),
+(@CGUID+61, 15300, 531, 1, 1, -7961.915, 1338.292, -92.40445, 2.234021, 7200, 5, 1),
+(@CGUID+62, 15300, 531, 1, 1, -7967.022, 1274.792, -72.16002, 5.044002, 7200, 5, 1),
+(@CGUID+63, 15300, 531, 1, 1, -7967.221, 1524.411, -60.57605, 5.270895, 7200, 5, 1),
+(@CGUID+64, 15300, 531, 1, 1, -7967.628, 1313.647, -85.22298, 5.323254, 7200, 5, 1),
+(@CGUID+65, 15300, 531, 1, 1, -7967.866, 1536.324, -62.04499, 5.916666, 7200, 5, 1),
+(@CGUID+66, 15300, 531, 1, 1, -7970.926, 1297.65, -76.17361, 3.368485, 7200, 5, 1),
+(@CGUID+67, 15300, 531, 1, 1, -7971.198, 1302.062, -78.52887, 2.688358, 7200, 5, 1),
+(@CGUID+68, 15300, 531, 1, 1, -7978.03, 1568.925, -61.93628, 2.338741, 7200, 5, 1),
+(@CGUID+69, 15300, 531, 1, 1, -7979.314, 1537.99, -61.21902, 3.211406, 7200, 5, 1),
+(@CGUID+70, 15300, 531, 1, 1, -7982.532, 1274.688, -72.87275, 4.817109, 7200, 5, 1),
+(@CGUID+71, 15300, 531, 1, 1, -7984.055, 1544.057, -61.72084, 3.560472, 7200, 5, 1),
+(@CGUID+72, 15300, 531, 1, 1, -7984.721, 1306.54, -76.8012, 2.356194, 7200, 5, 1),
+(@CGUID+73, 15300, 531, 1, 1, -7988.979, 1555.543, -62.07476, 3.560472, 7200, 5, 1),
+(@CGUID+74, 15300, 531, 1, 1, -7989.688, 1580.115, -62.092, 6.125817, 7200, 5, 1),
+(@CGUID+75, 15300, 531, 1, 1, -7990.045, 1297.59, -74.12374, 3.123379, 7200, 5, 1),
+(@CGUID+76, 15300, 531, 1, 1, -7990.39, 1272.209, -73.56954, 2.932153, 7200, 5, 1),
+(@CGUID+77, 15300, 531, 1, 1, -7990.807, 1284.74, -73.15822, 2.827433, 7200, 5, 1),
+(@CGUID+78, 15300, 531, 1, 1, -7991.841, 1299.617, -73.96005, 2.129302, 7200, 5, 1),
+(@CGUID+79, 15300, 531, 1, 1, -7992.515, 1592.58, -60.09307, 0.526886, 7200, 5, 1),
+(@CGUID+80, 15300, 531, 1, 1, -7999.318, 1278.983, -73.69726, 4.537856, 7200, 5, 1),
+(@CGUID+81, 15300, 531, 1, 1, -8000.123, 1602.627, -58.32988, 0.2268928, 7200, 5, 1),
+(@CGUID+82, 15300, 531, 1, 1, -8002.065, 1595.297, -60.0018, 1.451103, 7200, 5, 1),
+(@CGUID+83, 15300, 531, 1, 1, -8003.662, 1273.239, -75.26857, 0.2094395, 7200, 5, 1),
+(@CGUID+84, 15300, 531, 1, 1, -8004.083, 1619.394, -55.74008, 0.2443461, 7200, 5, 1),
+(@CGUID+85, 15300, 531, 1, 1, -8005.251, 1585.535, -61.27219, 0.2546086, 7200, 5, 1),
+(@CGUID+86, 15300, 531, 1, 1, -8006.769, 1543.797, -67.10904, 5.218534, 7200, 5, 1),
+(@CGUID+87, 15300, 531, 1, 1, -8010.409, 1557.02, -66.04092, 6.091199, 7200, 5, 1),
+(@CGUID+88, 15300, 531, 1, 1, -8010.659, 1253.649, -79.13587, 1.675516, 7200, 5, 1),
+(@CGUID+89, 15300, 531, 1, 1, -8011.024, 1629.752, -55.88325, 0.6283185, 7200, 5, 1),
+(@CGUID+90, 15300, 531, 1, 1, -8015.45, 1614.308, -58.71272, 1.978479, 7200, 5, 1),
+(@CGUID+91, 15300, 531, 1, 1, -8017.145, 1536.662, -68.31948, 5.113815, 7200, 5, 1),
+(@CGUID+92, 15300, 531, 1, 1, -8017.821, 1614.39, -59.06019, 0.715585, 7200, 5, 1),
+(@CGUID+93, 15300, 531, 1, 1, -8021.231, 1552.841, -67.07516, 5.462881, 7200, 5, 1),
+(@CGUID+94, 15300, 531, 1, 1, -8026.983, 1601.135, -59.09586, 3.839724, 7200, 5, 1),
+(@CGUID+95, 15300, 531, 1, 1, -8028.739, 1230.844, -85.93344, 5.5676, 7200, 5, 1),
+(@CGUID+96, 15300, 531, 1, 1, -8030.674, 1534.738, -67.83488, 3.595378, 7200, 5, 1),
+(@CGUID+97, 15300, 531, 1, 1, -8030.963, 1190.392, -88.7235, 1.48353, 7200, 5, 1),
+(@CGUID+98, 15300, 531, 1, 1, -8033.078, 1644.174, -58.82825, 4.17972, 7200, 5, 1),
+(@CGUID+99, 15300, 531, 1, 1, -8033.252, 1610.343, -58.87102, 3.560472, 7200, 5, 1),
+(@CGUID+100, 15300, 531, 1, 1, -8037.915, 1551.607, -65.29885, 4.206244, 7200, 5, 1),
+(@CGUID+101, 15300, 531, 1, 1, -8038.434, 1617.541, -58.87218, 4.153883, 7200, 5, 1),
+(@CGUID+102, 15300, 531, 1, 1, -8043.782, 1637.505, -59.37272, 3.199285, 7200, 5, 1),
+(@CGUID+103, 15300, 531, 1, 1, -8045.612, 1583.694, -62.98385, 0.9790034, 7200, 5, 1),
+(@CGUID+104, 15300, 531, 1, 1, -8050.1, 1645.168, -58.91573, 4.224158, 7200, 5, 1),
+(@CGUID+105, 15300, 531, 1, 1, -8052.96, 1648.648, -58.46545, 0.3665192, 7200, 5, 1),
+(@CGUID+106, 15300, 531, 1, 1, -8057.072, 1658.566, -56.45635, 0.8377581, 7200, 5, 1),
+(@CGUID+107, 15300, 531, 1, 1, -8057.798, 1593.25, -61.41485, 3.272068, 7200, 5, 1),
+(@CGUID+108, 15300, 531, 1, 1, -8058.555, 1573.006, -61.56964, 3.92076, 7200, 5, 1),
+(@CGUID+109, 15300, 531, 1, 1, -8059.333, 1586.706, -61.1738, 5.235988, 7200, 5, 1),
+(@CGUID+110, 15300, 531, 1, 1, -8060.234, 1604.707, -60.46527, 4.956735, 7200, 5, 1),
+(@CGUID+111, 15300, 531, 1, 1, -8065.966, 1589.98, -60.27099, 0.8203048, 7200, 5, 1),
+(@CGUID+112, 15300, 531, 1, 1, -8066.036, 1645.905, -56.94833, 3.00077, 7200, 5, 1),
+(@CGUID+113, 15300, 531, 1, 1, -8073.205, 1670.581, -51.66552, 1.500983, 7200, 5, 1),
+(@CGUID+114, 15300, 531, 1, 1, -8078.903, 1239.604, -91.37767, 1.066351, 7200, 5, 1),
+(@CGUID+115, 15300, 531, 1, 1, -8082.463, 1673.083, -49.71113, 1.029744, 7200, 5, 1),
+(@CGUID+116, 15300, 531, 1, 1, -8082.638, 1645.959, -53.69846, 4.45059, 7200, 5, 1),
+(@CGUID+117, 15300, 531, 1, 1, -8082.839, 1626.916, -55.887, 0.8028514, 7200, 5, 1),
+(@CGUID+118, 15300, 531, 1, 1, -8084.041, 1154.17, -92.02991, 1.797689, 7200, 5, 1),
+(@CGUID+119, 15300, 531, 1, 1, -8087.102, 1594.794, -56.22529, 3.612832, 7200, 5, 1),
+(@CGUID+120, 15300, 531, 1, 1, -8091.706, 1660.421, -51.86389, 1.884956, 7200, 5, 1),
+(@CGUID+121, 15300, 531, 1, 1, -8092.724, 1633.168, -54.13385, 0.3490658, 7200, 5, 1),
+(@CGUID+122, 15300, 531, 1, 1, -8093.48, 1646.51, -51.53661, 4.939282, 7200, 5, 1),
+(@CGUID+123, 15300, 531, 1, 1, -8098.15, 1677.546, -46.38687, 1.43117, 7200, 5, 1),
+(@CGUID+124, 15300, 531, 1, 1, -8102.48, 1600.465, -52.38706, 4.310963, 7200, 5, 1),
+(@CGUID+125, 15300, 531, 1, 1, -8103.642, 1634.176, -51.76759, 1.58825, 7200, 5, 1),
+(@CGUID+126, 15300, 531, 1, 1, -8105.175, 1616.933, -52.51282, 3.246312, 7200, 5, 1),
+(@CGUID+127, 15300, 531, 1, 1, -8110, 1654.932, -47.85446, 6.178465, 7200, 5, 1),
+(@CGUID+128, 15300, 531, 1, 1, -8110.333, 1194.992, -91.69107, 1.570796, 7200, 5, 1),
+(@CGUID+129, 15300, 531, 1, 1, -8183.295, 1625.464, -38.23788, 3.455752, 7200, 5, 1),
+(@CGUID+130, 15300, 531, 1, 1, -8110.5, 1665.461, -47.72958, 0.418879, 7200, 5, 1),
+(@CGUID+131, 15300, 531, 1, 1, -8117.023, 1671.853, -45.05032, 6.038839, 7200, 5, 1),
+(@CGUID+132, 15300, 531, 1, 1, -8121.577, 1659.169, -44.89305, 5.5676, 7200, 5, 1),
+(@CGUID+133, 15300, 531, 1, 1, -8122.221, 1622.481, -49.14006, 0.8982115, 7200, 5, 1),
+(@CGUID+134, 15300, 531, 1, 1, -8123.377, 1655.844, -44.69468, 3.455752, 7200, 5, 1),
+(@CGUID+135, 15300, 531, 1, 1, -8124.208, 1665.759, -44.58142, 1.099557, 7200, 5, 1),
+(@CGUID+136, 15300, 531, 1, 1, -8135.342, 1631.169, -46.52505, 5.67232, 7200, 5, 1),
+(@CGUID+137, 15300, 531, 1, 1, -8135.99, 1614.041, -45.35197, 4.270462, 7200, 5, 1),
+(@CGUID+138, 15300, 531, 1, 1, -8140.333, 1653.827, -40.98864, 3.769911, 7200, 5, 1),
+(@CGUID+139, 15300, 531, 1, 1, -8141.307, 1619.113, -44.39598, 1.029744, 7200, 5, 1),
+(@CGUID+140, 15300, 531, 1, 1, -8144.391, 1680.055, -36.83066, 1.361357, 7200, 5, 1),
+(@CGUID+141, 15300, 531, 1, 1, -8146.426, 1631.036, -44.10762, 4.729842, 7200, 5, 1),
+(@CGUID+142, 15300, 531, 1, 1, -8147.207, 1655.39, -38.81593, 5.51524, 7200, 5, 1),
+(@CGUID+143, 15300, 531, 1, 1, -8151.949, 1683.398, -35.01212, 0.8028514, 7200, 5, 1),
+(@CGUID+144, 15300, 531, 1, 1, -8154.279, 1613.235, -40.65197, 4.607669, 7200, 5, 1),
+(@CGUID+145, 15300, 531, 1, 1, -8155.774, 1674.52, -36.2891, 2.181224, 7200, 5, 1),
+(@CGUID+146, 15300, 531, 1, 1, -8156.148, 1656.466, -36.48287, 4.694936, 7200, 5, 1),
+(@CGUID+147, 15300, 531, 1, 1, -8156.426, 1625.304, -41.49326, 2.059489, 7200, 5, 1),
+(@CGUID+148, 15300, 531, 1, 1, -8160.91, 1643.194, -38.99018, 1.867502, 7200, 5, 1),
+(@CGUID+149, 15300, 531, 1, 1, -8167.602, 1671.222, -34.59419, 4.433136, 7200, 5, 1),
+(@CGUID+150, 15300, 531, 1, 1, -8170.387, 1639.527, -37.48939, 1.884956, 7200, 5, 1),
+(@CGUID+151, 15300, 531, 1, 1, -8170.757, 1613.131, -37.4205, 3.926991, 7200, 5, 1);
+
+-- Pathing for Vekniss Soldier Entry: 15229 'TDB FORMAT'
+SET @NPC := 87901;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8015.134,`position_y`=1258.724,`position_z`=-79.72564 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,-8015.134,1258.724,-79.72564,0,0,1,0,100,0),
+(@PATH,2,-7971.334,1280.292,-73.27785,0,0,1,0,100,0),
+(@PATH,3,-7954.62,1323.919,-90.7532,0,0,1,0,100,0),
+(@PATH,4,-7970.993,1280.664,-73.33447,0,0,1,0,100,0);
+
+-- Pathing for Vekniss Soldier Entry: 15229 'TDB FORMAT'
+SET @NPC := 87902;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8043.788,`position_y`=1645.192,`position_z`=-59.28296 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,-8043.788,1645.192,-59.28296,0,0,1,0,100,0),
+(@PATH,2,-8020.601,1616.473,-59.27552,0,0,1,0,100,0),
+(@PATH,3,-8043.788,1645.192,-59.28296,0,0,1,0,100,0),
+(@PATH,4,-8073.597,1660.363,-54.66129,0,0,1,0,100,0),
+(@PATH,5,-8111.89,1663.297,-47.55686,0,0,1,0,100,0),
+(@PATH,6,-8157.463,1669.077,-36.71965,0,0,1,0,100,0),
+(@PATH,7,-8111.89,1663.297,-47.55686,0,0,1,0,100,0),
+(@PATH,8,-8073.597,1660.363,-54.66129,0,0,1,0,100,0);
+
+-- Pathing for Vekniss Soldier Entry: 15229 'TDB FORMAT'
+SET @NPC := 87903;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-7902.709,`position_y`=1410.921,`position_z`=-66.08652 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,-7902.709,1410.921,-66.08652,0,0,1,0,100,0),
+(@PATH,2,-7927.595,1369.56,-78.29517,0,0,1,0,100,0),
+(@PATH,3,-7938.981,1323.41,-92.47753,0,0,1,0,100,0),
+(@PATH,4,-7927.595,1369.56,-78.29517,0,0,1,0,100,0);
+
+-- Pathing for Vekniss Soldier Entry: 15229 'TDB FORMAT'
+SET @NPC := 87904;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-7938.296,`position_y`=1489.504,`position_z`=-64.33451 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,-7938.296,1489.504,-64.33451,0,0,1,0,100,0),
+(@PATH,2,-7902.537,1456.171,-65.55414,0,0,1,0,100,0),
+(@PATH,3,-7915.813,1414.564,-66.10455,0,0,1,0,100,0),
+(@PATH,4,-7902.476,1455.991,-65.56479,0,0,1,0,100,0);
+
+-- Pathing for Vekniss Soldier Entry: 15229 'TDB FORMAT'
+SET @NPC := 87905;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8164.897,`position_y`=1624.758,`position_z`=-40.04349 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,-8164.897,1624.758,-40.04349,0,0,1,0,100,0),
+(@PATH,2,-8130.617,1623.805,-47.28335,0,0,1,0,100,0),
+(@PATH,3,-8087.561,1611.887,-56.31141,0,0,1,0,100,0),
+(@PATH,4,-8054.685,1585.599,-61.79655,0,0,1,0,100,0),
+(@PATH,5,-8028.956,1551.455,-66.53555,0,0,1,0,100,0),
+(@PATH,6,-8054.685,1585.599,-61.79655,0,0,1,0,100,0),
+(@PATH,7,-8087.561,1611.887,-56.31141,0,0,1,0,100,0),
+(@PATH,8,-8130.617,1623.805,-47.28335,0,0,1,0,100,0);
+
+-- Pathing for Vekniss Soldier Entry: 15229 'TDB FORMAT'
+SET @NPC := 87906;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-7925.455,`position_y`=1500.005,`position_z`=-63.07186 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,-7925.455,1500.005,-63.07186,0,0,1,0,100,0),
+(@PATH,2,-7966.281,1527.871,-61.1781,0,0,1,0,100,0),
+(@PATH,3,-7976.614,1572.205,-61.79373,0,0,1,0,100,0),
+(@PATH,4,-7966.281,1527.871,-61.1781,0,0,1,0,100,0);
+
+DELETE FROM `creature` WHERE `guid`=87907;
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (15233,15247);
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (15233,0,1,0, '18950'),(15247,0,1,0, '18950');
+
+-- Pathing for Obsidian Eradicator Entry: 15262 'TDB FORMAT'
+SET @NPC := 88074;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8181.452,`position_y`=2105.019,`position_z`=129.1963 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, '19818');
+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,-8181.452,2105.019,129.1963,0,0,0,0,100,0),
+(@PATH,2,-8191.375,2086.593,129.1963,0,0,0,0,100,0),
+(@PATH,3,-8181.452,2105.019,129.1963,0,0,0,0,100,0),
+(@PATH,4,-8185.167,2123.686,129.1963,0,0,0,0,100,0),
+(@PATH,5,-8202.72,2136.731,129.3353,0,0,0,0,100,0),
+(@PATH,6,-8233.334,2128.125,131.1751,0,0,0,0,100,0),
+(@PATH,7,-8242.226,2125.75,127.5347,0,0,0,0,100,0),
+(@PATH,8,-8256.743,2124.262,120.2957,0,0,0,0,100,0),
+(@PATH,9,-8242.226,2125.75,127.5347,0,0,0,0,100,0),
+(@PATH,10,-8234.375,2128.125,130.8001,0,0,0,0,100,0),
+(@PATH,11,-8202.72,2136.731,129.3353,0,0,0,0,100,0),
+(@PATH,12,-8185.167,2123.686,129.1963,0,0,0,0,100,0);
+
+-- Pathing for Obsidian Eradicator Entry: 15262 'TDB FORMAT'
+SET @NPC := 87652;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8282.951,`position_y`=2093.236,`position_z`=118.3001 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, '19818');
+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,-8282.951,2093.236,118.3001,0,0,0,0,100,0),
+(@PATH,2,-8273.953,2106.067,118.3001,0,0,0,0,100,0),
+(@PATH,3,-8277.969,2116.79,118.3001,0,0,0,0,100,0),
+(@PATH,4,-8292.524,2119.098,118.3001,0,0,0,0,100,0),
+(@PATH,5,-8307.771,2141.695,118.3659,0,0,0,0,100,0),
+(@PATH,6,-8292.524,2119.098,118.3001,0,0,0,0,100,0),
+(@PATH,7,-8277.969,2116.79,118.3001,0,0,0,0,100,0),
+(@PATH,8,-8273.953,2106.067,118.3001,0,0,0,0,100,0),
+(@PATH,9,-8282.951,2093.236,118.3001,0,0,0,0,100,0),
+(@PATH,10,-8277.297,2070.659,118.3001,0,0,0,0,100,0);
+
+-- Pathing for Obsidian Eradicator Entry: 15262 'TDB FORMAT'
+SET @NPC := 87653;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8325.952,`position_y`=2055.939,`position_z`=133.0548 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, '19818');
+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,-8325.952,2055.939,133.0548,0,0,0,0,100,0),
+(@PATH,2,-8332.794,2047.068,133.1227,0,0,0,0,100,0),
+(@PATH,3,-8338.969,2041.953,136.5257,0,0,0,0,100,0),
+(@PATH,4,-8347.218,2036.589,142.4718,0,0,0,0,100,0),
+(@PATH,5,-8357.45,2041.958,144.8221,0,0,0,0,100,0),
+(@PATH,6,-8368.557,2053.296,144.8487,0,0,0,0,100,0),
+(@PATH,7,-8378.51,2073.499,144.8015,0,0,0,0,100,0),
+(@PATH,8,-8383.191,2096.747,144.8261,0,0,0,0,100,0),
+(@PATH,9,-8379.467,2113.167,143.6545,0,0,0,0,100,0),
+(@PATH,10,-8368.374,2117.771,136.2442,0,0,0,0,100,0),
+(@PATH,11,-8356.403,2116.523,133.1008,0,0,0,0,100,0),
+(@PATH,12,-8342.338,2116.063,133.0911,0,0,0,0,100,0),
+(@PATH,13,-8338.457,2108.827,132.6952,0,0,0,0,100,0),
+(@PATH,14,-8331.443,2092.253,125.627,0,0,0,0,100,0),
+(@PATH,15,-8323.716,2093.625,125.6041,0,0,0,0,100,0),
+(@PATH,16,-8316.983,2095.258,122.4067,0,0,0,0,100,0),
+(@PATH,17,-8311.382,2097.501,118.8619,0,0,0,0,100,0),
+(@PATH,18,-8302.849,2107.911,118.3001,0,0,0,0,100,0),
+(@PATH,19,-8292.684,2108.071,118.3001,0,0,0,0,100,0),
+(@PATH,20,-8289.837,2100.808,118.3001,0,0,0,0,100,0),
+(@PATH,21,-8297.129,2093.869,118.3001,0,0,0,0,100,0),
+(@PATH,22,-8310.037,2094.395,118.7956,0,0,0,0,100,0),
+(@PATH,23,-8315.771,2092.706,122.2935,0,0,0,0,100,0),
+(@PATH,24,-8322.37,2089.841,125.615,0,0,0,0,100,0),
+(@PATH,25,-8328.958,2085.229,125.6326,0,0,0,0,100,0),
+(@PATH,26,-8326.164,2076.209,126.8105,0,0,0,0,100,0),
+(@PATH,27,-8321.34,2065.851,133.0319,0,0,0,0,100,0);
+
+-- Pathing for Vekniss Warrior Entry: 15230 'TDB FORMAT'
+SET @NPC := 87672;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8578.048,`position_y`=1940.539,`position_z`=-0.06545047 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8581.048,`position_y`=1940.539,`position_z`=-0.06545047 WHERE `guid`=@NPC+1;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8586.048,`position_y`=1940.539,`position_z`=-0.06545047 WHERE `guid`=@NPC+2;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@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,-8578.048,1940.539,-0.06545047,0,0,1,0,100,0),
+(@PATH,2,-8549.408,1941.299,5.823864,0,0,1,0,100,0),
+(@PATH,3,-8531.94,1962.451,11.77114,0,0,1,0,100,0),
+(@PATH,4,-8536.534,1991.978,20.64153,0,0,1,0,100,0),
+(@PATH,5,-8511.746,1997.704,21.69398,0,0,1,0,100,0),
+(@PATH,6,-8469.14,2013.381,16.1259,0,0,1,0,100,0),
+(@PATH,7,-8433.611,2039.519,8.550707,0,0,1,0,100,0),
+(@PATH,8,-8401.688,2057.265,9.581982,0,0,1,0,100,0),
+(@PATH,9,-8407.505,2014.451,8.3922,0,0,1,0,100,0),
+(@PATH,10,-8405.526,1984.281,2.559676,0,0,1,0,100,0),
+(@PATH,11,-8389.834,1963.352,2.570214,0,0,1,0,100,0),
+(@PATH,12,-8405.526,1984.281,2.559676,0,0,1,0,100,0),
+(@PATH,13,-8407.505,2014.451,8.3922,0,0,1,0,100,0),
+(@PATH,14,-8401.688,2057.265,9.581982,0,0,1,0,100,0),
+(@PATH,15,-8433.611,2039.519,8.550707,0,0,1,0,100,0),
+(@PATH,16,-8469.14,2013.381,16.1259,0,0,1,0,100,0),
+(@PATH,17,-8511.746,1997.704,21.69398,0,0,1,0,100,0),
+(@PATH,18,-8536.534,1991.978,20.64153,0,0,1,0,100,0),
+(@PATH,19,-8531.94,1962.451,11.77114,0,0,1,0,100,0),
+(@PATH,20,-8549.408,1941.299,5.823864,0,0,1,0,100,0),
+(@PATH,21,-8578.048,1940.539,-0.06545047,0,0,1,0,100,0),
+(@PATH,22,-8581.254,1985.698,-1.939677,0,0,1,0,100,0),
+(@PATH,23,-8580,2032.773,-2.74892,0,0,1,0,100,0),
+(@PATH,24,-8594.974,2078.681,-1.559797,0,0,1,0,100,0),
+(@PATH,25,-8592.876,2114.829,-7.230148,0,0,1,0,100,0),
+(@PATH,26,-8594.974,2078.681,-1.559797,0,0,1,0,100,0),
+(@PATH,27,-8580,2032.773,-2.74892,0,0,1,0,100,0),
+(@PATH,28,-8581.254,1985.698,-1.939677,0,0,1,0,100,0);
+
+-- Vekniss Warrior formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@NPC+1,4,360,2,0,0),
+(@NPC,@NPC+2,8,360,2,0,0);
+
+-- Pathing for Vekniss Warrior Entry: 15230 'TDB FORMAT'
+SET @NPC := 87675;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8406.916,`position_y`=1940.698,`position_z`=3.540012 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8406.916,`position_y`=1940.698,`position_z`=3.540012 WHERE `guid`=@NPC+1;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8406.916,`position_y`=1940.698,`position_z`=3.540012 WHERE `guid`=@NPC+2;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@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,-8406.916,1940.698,3.540012,0,0,1,0,100,0),
+(@PATH,2,-8394.013,1898.244,2.764256,0,0,1,0,100,0),
+(@PATH,3,-8379.354,1860.681,2.642385,0,0,1,0,100,0),
+(@PATH,4,-8355.81,1840.051,0.444995,0,0,1,0,100,0),
+(@PATH,5,-8327.183,1855.611,-3.365049,0,0,1,0,100,0),
+(@PATH,6,-8336.607,1904.446,-2.144968,0,0,1,0,100,0),
+(@PATH,7,-8351.146,1947.595,-1.962911,0,0,1,0,100,0),
+(@PATH,8,-8356.023,1966.897,-2.996279,0,0,1,0,100,0),
+(@PATH,9,-8336.607,1904.446,-2.144968,0,0,1,0,100,0),
+(@PATH,10,-8327.183,1855.611,-3.365049,0,0,1,0,100,0),
+(@PATH,11,-8355.81,1840.051,0.444995,0,0,1,0,100,0),
+(@PATH,12,-8379.354,1860.681,2.642385,0,0,1,0,100,0),
+(@PATH,13,-8394.013,1898.244,2.764256,0,0,1,0,100,0),
+(@PATH,14,-8406.916,1940.698,3.540012,0,0,1,0,100,0),
+(@PATH,15,-8391.783,1963.953,2.740874,0,0,1,0,100,0),
+(@PATH,16,-8363.329,1968.659,-2.484006,0,0,1,0,100,0),
+(@PATH,17,-8358.553,1942.278,-2.137602,0,0,1,0,100,0),
+(@PATH,18,-8338.893,1911.847,-2.365611,0,0,1,0,100,0),
+(@PATH,19,-8321.089,1875.853,-1.947007,0,0,1,0,100,0),
+(@PATH,20,-8327.794,1850.802,-3.493851,0,0,1,0,100,0),
+(@PATH,21,-8307.335,1833.033,-4.333048,0,0,1,0,100,0),
+(@PATH,22,-8320.271,1866.489,-2.442684,0,0,1,0,100,0),
+(@PATH,23,-8334.945,1892.853,-2.193387,0,0,1,0,100,0),
+(@PATH,24,-8350.508,1929.607,-2.263634,0,0,1,0,100,0),
+(@PATH,25,-8356.683,1963.76,-2.672498,0,0,1,0,100,0),
+(@PATH,26,-8382.319,1966.879,1.677073,0,0,1,0,100,0),
+(@PATH,27,-8404.743,1959.304,3.478677,0,0,1,0,100,0),
+(@PATH,28,-8397.587,1920.886,2.367266,0,0,1,0,100,0),
+(@PATH,29,-8381.415,1878.202,2.439208,0,0,1,0,100,0),
+(@PATH,30,-8357.64,1836.641,0.5241066,0,0,1,0,100,0),
+(@PATH,31,-8344.722,1792.031,-2.582653,0,0,1,0,100,0),
+(@PATH,32,-8363.003,1837.87,0.9091408,0,0,1,0,100,0),
+(@PATH,33,-8376.87,1866.093,2.108701,0,0,1,0,100,0),
+(@PATH,34,-8392.19,1902.458,2.388478,0,0,1,0,100,0),
+(@PATH,35,-8402.383,1950.098,3.546199,0,0,1,0,100,0),
+(@PATH,36,-8406.804,1977.574,3.235986,0,0,1,0,100,0),
+(@PATH,37,-8408.774,2021.132,9.192656,0,0,1,0,100,0),
+(@PATH,38,-8407.785,1997.445,5.142398,0,0,1,0,100,0),
+(@PATH,39,-8398.694,1969.258,3.159751,0,0,1,0,100,0),
+(@PATH,40,-8378.146,1965.434,0.9081311,0,0,1,0,100,0),
+(@PATH,41,-8357.106,1958.744,-2.32515,0,0,1,0,100,0),
+(@PATH,42,-8343.271,1916.817,-2.434541,0,0,1,0,100,0),
+(@PATH,43,-8332.095,1888.039,-2.186295,0,0,1,0,100,0),
+(@PATH,44,-8323.842,1855.49,-3.38597,0,0,1,0,100,0),
+(@PATH,45,-8346.259,1845.706,-0.4906869,0,0,1,0,100,0),
+(@PATH,46,-8357.015,1829.12,0.3158551,0,0,1,0,100,0),
+(@PATH,47,-8347.274,1799.175,-1.778138,0,0,1,0,100,0),
+(@PATH,48,-8339.567,1780.459,-4.878539,0,0,1,0,100,0),
+(@PATH,49,-8335.18,1767.381,-6.044283,0,0,1,0,100,0),
+(@PATH,50,-8347.274,1799.175,-1.778138,0,0,1,0,100,0),
+(@PATH,51,-8357.015,1829.12,0.3158551,0,0,1,0,100,0),
+(@PATH,52,-8346.259,1845.706,-0.4906869,0,0,1,0,100,0),
+(@PATH,53,-8323.842,1855.49,-3.38597,0,0,1,0,100,0),
+(@PATH,54,-8332.095,1888.039,-2.186295,0,0,1,0,100,0),
+(@PATH,55,-8343.271,1916.817,-2.434541,0,0,1,0,100,0),
+(@PATH,56,-8357.106,1958.744,-2.32515,0,0,1,0,100,0),
+(@PATH,57,-8378.146,1965.434,0.9081311,0,0,1,0,100,0),
+(@PATH,58,-8398.694,1969.258,3.159751,0,0,1,0,100,0),
+(@PATH,59,-8407.783,1997.389,5.136318,0,0,1,0,100,0),
+(@PATH,60,-8408.774,2021.132,9.192656,0,0,1,0,100,0),
+(@PATH,61,-8406.804,1977.574,3.235986,0,0,1,0,100,0),
+(@PATH,62,-8402.383,1950.098,3.546199,0,0,1,0,100,0),
+(@PATH,63,-8392.19,1902.458,2.388478,0,0,1,0,100,0),
+(@PATH,64,-8376.87,1866.093,2.108701,0,0,1,0,100,0),
+(@PATH,65,-8363.003,1837.87,0.9091408,0,0,1,0,100,0),
+(@PATH,66,-8344.722,1792.031,-2.582653,0,0,1,0,100,0),
+(@PATH,67,-8357.583,1836.447,0.5609013,0,0,1,0,100,0),
+(@PATH,68,-8381.415,1878.202,2.439208,0,0,1,0,100,0),
+(@PATH,69,-8397.587,1920.886,2.367266,0,0,1,0,100,0),
+(@PATH,70,-8404.743,1959.304,3.478677,0,0,1,0,100,0),
+(@PATH,71,-8382.319,1966.879,1.677073,0,0,1,0,100,0),
+(@PATH,72,-8356.683,1963.76,-2.672498,0,0,1,0,100,0),
+(@PATH,73,-8350.508,1929.607,-2.263634,0,0,1,0,100,0),
+(@PATH,74,-8334.945,1892.853,-2.193387,0,0,1,0,100,0),
+(@PATH,75,-8320.302,1866.569,-2.461329,0,0,1,0,100,0),
+(@PATH,76,-8307.335,1833.033,-4.333048,0,0,1,0,100,0),
+(@PATH,77,-8327.794,1850.802,-3.493851,0,0,1,0,100,0),
+(@PATH,78,-8321.089,1875.853,-1.947007,0,0,1,0,100,0),
+(@PATH,79,-8338.786,1911.682,-2.312635,0,0,1,0,100,0),
+(@PATH,80,-8358.553,1942.278,-2.137602,0,0,1,0,100,0),
+(@PATH,81,-8363.329,1968.659,-2.484006,0,0,1,0,100,0),
+(@PATH,82,-8391.783,1963.953,2.740874,0,0,1,0,100,0);
+
+-- Vekniss Warrior formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@NPC+1,4,360,2,0,0),
+(@NPC,@NPC+2,8,360,2,0,0);
+
+-- Pathing for Vem Entry: 15544 'TDB FORMAT'
+SET @NPC := 87603;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8598.536,`position_y`=2165.304,`position_z`=-4.016909 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,-8598.536,2165.304,-4.016909,0,0,1,0,100,0),
+(@PATH,2,-8570.547,2154.366,-7.216968,0,0,1,0,100,0),
+(@PATH,3,-8556.566,2155.94,-5.39525,0,0,1,0,100,0),
+(@PATH,4,-8548.769,2163.426,-3.609193,0,0,1,0,100,0),
+(@PATH,5,-8558.276,2162.482,-4.689288,0,0,1,0,100,0),
+(@PATH,6,-8573.464,2159.948,-6.644062,0,0,1,0,100,0),
+(@PATH,7,-8591.517,2159.22,-6.108228,0,0,1,0,100,0),
+(@PATH,8,-8597.023,2159.045,-5.198315,0,0,1,0,100,0),
+(@PATH,9,-8584.803,2161.023,-6.455252,0,0,1,0,100,0),
+(@PATH,10,-8577.727,2169.429,-4.657184,0,0,1,0,100,0),
+(@PATH,11,-8555.971,2160.376,-4.63052,0,0,1,0,100,0),
+(@PATH,12,-8541.419,2166.771,-3.432642,0,0,1,0,100,0),
+(@PATH,13,-8571.241,2162.583,-5.917914,0,0,1,0,100,0),
+(@PATH,14,-8577.813,2157.56,-7.250329,0,0,1,0,100,0),
+(@PATH,15,-8597.023,2159.045,-5.198315,0,0,1,0,100,0),
+(@PATH,16,-8591.517,2159.22,-6.108228,0,0,1,0,100,0),
+(@PATH,17,-8582.77,2155.171,-7.513537,0,0,1,0,100,0),
+(@PATH,18,-8565.398,2161.521,-5.813965,0,0,1,0,100,0),
+(@PATH,19,-8548.237,2167.902,-3.599379,0,0,1,0,100,0),
+(@PATH,20,-8556.566,2155.94,-5.39525,0,0,1,0,100,0),
+(@PATH,21,-8577.118,2156.268,-7.330427,0,0,1,0,100,0),
+(@PATH,22,-8590.432,2156.978,-6.771957,0,0,1,0,100,0);
+
+-- Pathing for Battleguard Sartura Entry: 15516 'TDB FORMAT'
+SET @NPC := 87648;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8302.484,`position_y`=1657.664,`position_z`=-29.81326 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8302.484,`position_y`=1657.664,`position_z`=-29.81326 WHERE `guid`=@NPC+1;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8302.484,`position_y`=1657.664,`position_z`=-29.81326 WHERE `guid`=@NPC+2;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8302.484,`position_y`=1657.664,`position_z`=-29.81326 WHERE `guid`=@NPC+3;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@PATH,0,0,1,0, ''),(@NPC+3,@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,-8302.484,1657.664,-29.81326,0,0,1,0,100,0),
+(@PATH,2,-8322.1,1681.196,-23.77903,0,0,1,0,100,0),
+(@PATH,3,-8337.48,1695.275,-20.64655,0,0,1,0,100,0),
+(@PATH,4,-8308.396,1705.129,-20.57656,0,0,1,0,100,0),
+(@PATH,5,-8276.452,1706.471,-21.82398,0,0,1,0,100,0),
+(@PATH,6,-8251.389,1708.836,-25.76576,0,0,1,0,100,0),
+(@PATH,7,-8224.531,1711.219,-27.28119,0,0,1,0,100,0),
+(@PATH,8,-8261.439,1684.329,-28.35187,0,0,1,0,100,0),
+(@PATH,9,-8286.062,1662.657,-29.58469,0,0,1,0,100,0),
+(@PATH,10,-8321.049,1634.691,-32.09647,0,0,1,0,100,0),
+(@PATH,11,-8299.077,1670.921,-27.83419,0,0,1,0,100,0),
+(@PATH,12,-8281.883,1688.65,-25.09606,0,0,1,0,100,0),
+(@PATH,13,-8277.175,1719.16,-18.75556,0,0,1,0,100,0),
+(@PATH,14,-8264.544,1744.857,-15.06134,0,0,1,0,100,0),
+(@PATH,15,-8256.176,1706.132,-25.62639,0,0,1,0,100,0),
+(@PATH,16,-8260.745,1661.01,-30.71562,0,0,1,0,100,0),
+(@PATH,17,-8261.763,1630.783,-35.8319,0,0,1,0,100,0),
+(@PATH,18,-8281.746,1643.871,-32.61421,0,0,1,0,100,0);
+
+-- Battleguard Sartura formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@NPC+1,3,180,2,0,0),
+(@NPC,@NPC+2,3,60,2,0,0),
+(@NPC,@NPC+3,3,300,2,0,0);
+
+-- Pathing for Anubisath Defender Entry: 15277 'TDB FORMAT'
+SET @NPC := 88015;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8824.772,`position_y`=1504.369,`position_z`=-94.81835 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,-8824.772,1504.369,-94.81835,0,0,0,0,100,0),
+(@PATH,2,-8827.692,1516.268,-95.1673,0,0,0,0,100,0),
+(@PATH,3,-8847.614,1538.224,-95.33534,0,0,0,0,100,0),
+(@PATH,4,-8879.378,1544.877,-94.70975,0,0,0,0,100,0),
+(@PATH,5,-8908.75,1537.785,-95.42508,0,0,0,0,100,0),
+(@PATH,6,-8928.812,1526.368,-94.99846,0,0,0,0,100,0),
+(@PATH,7,-8940.877,1502.948,-92.83627,0,0,0,0,100,0),
+(@PATH,8,-8949.911,1469.664,-92.77494,0,0,0,0,100,0),
+(@PATH,9,-8948.604,1447.861,-92.23408,0,0,0,0,100,0),
+(@PATH,10,-8929.873,1441.007,-92.37372,0,0,0,0,100,0),
+(@PATH,11,-8912.088,1436.755,-93.20541,0,0,0,0,100,0),
+(@PATH,12,-8885.823,1430.602,-90.09874,0,0,0,0,100,0),
+(@PATH,13,-8870.321,1430.479,-91.59385,0,0,0,0,100,0),
+(@PATH,14,-8864.462,1438.929,-91.28598,0,0,0,0,100,0),
+(@PATH,15,-8852.853,1467.848,-91.95611,0,0,0,0,100,0),
+(@PATH,16,-8836.742,1489.87,-93.61978,0,0,0,0,100,0);
+
+-- Pathing for Anubisath Defender Entry: 15277 'TDB FORMAT'
+SET @NPC := 88016;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8775.906,`position_y`=1617.338,`position_z`=-87.98548 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,-8775.906,1617.338,-87.98548,0,0,0,0,100,0),
+(@PATH,2,-8756.48,1631.175,-83.78447,0,0,0,0,100,0),
+(@PATH,3,-8722.348,1652.832,-84.65975,0,0,0,0,100,0),
+(@PATH,4,-8756.48,1631.175,-83.78447,0,0,0,0,100,0),
+(@PATH,5,-8775.906,1617.338,-87.98548,0,0,0,0,100,0),
+(@PATH,6,-8805.615,1592.723,-93.64745,0,0,0,0,100,0),
+(@PATH,7,-8830.067,1567.62,-95.89575,0,0,0,0,100,0),
+(@PATH,8,-8834.922,1551.61,-95.44115,0,0,0,0,100,0),
+(@PATH,9,-8827.188,1534.668,-96.41103,0,0,0,0,100,0),
+(@PATH,10,-8810.128,1530.688,-95.44586,0,0,0,0,100,0),
+(@PATH,11,-8792.012,1541.508,-95.1269,0,0,0,0,100,0),
+(@PATH,12,-8775.249,1557.799,-92.72282,0,0,0,0,100,0),
+(@PATH,13,-8761.716,1573.43,-89.71658,0,0,0,0,100,0),
+(@PATH,14,-8775.249,1557.799,-92.72282,0,0,0,0,100,0),
+(@PATH,15,-8791.755,1541.662,-95.08477,0,0,0,0,100,0),
+(@PATH,16,-8810.128,1530.688,-95.44586,0,0,0,0,100,0),
+(@PATH,17,-8827.188,1534.668,-96.41103,0,0,0,0,100,0),
+(@PATH,18,-8834.922,1551.61,-95.44115,0,0,0,0,100,0),
+(@PATH,19,-8830.067,1567.62,-95.89575,0,0,0,0,100,0),
+(@PATH,20,-8805.615,1592.723,-93.64745,0,0,0,0,100,0);
+
+-- Pathing for Anubisath Defender Entry: 15277 'TDB FORMAT'
+SET @NPC := 88017;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8850.698,`position_y`=1524.024,`position_z`=-95.07934 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,-8850.698,1524.024,-95.07934,0,0,0,0,100,0),
+(@PATH,2,-8839.276,1512.111,-94.61455,0,0,0,0,100,0),
+(@PATH,3,-8841.783,1499.33,-93.90066,0,0,0,0,100,0),
+(@PATH,4,-8849.356,1486.96,-93.27434,0,0,0,0,100,0),
+(@PATH,5,-8858.664,1470.628,-92.28557,0,0,0,0,100,0),
+(@PATH,6,-8868.028,1456.196,-91.08892,0,0,0,0,100,0),
+(@PATH,7,-8878.98,1438.545,-90.00536,0,0,0,0,100,0),
+(@PATH,8,-8901.879,1442.889,-92.06799,0,0,0,0,100,0),
+(@PATH,9,-8912.693,1447.352,-92.27155,0,0,0,0,100,0),
+(@PATH,10,-8939.51,1457.284,-91.9281,0,0,0,0,100,0),
+(@PATH,11,-8944.809,1468.24,-92.68608,0,0,0,0,100,0),
+(@PATH,12,-8942.858,1479.536,-93.14706,0,0,0,0,100,0),
+(@PATH,13,-8934.113,1498.147,-93.81955,0,0,0,0,100,0),
+(@PATH,14,-8921.667,1516.135,-94.55971,0,0,0,0,100,0),
+(@PATH,15,-8905.804,1530.124,-94.62666,0,0,0,0,100,0),
+(@PATH,16,-8889.152,1531.822,-94.14017,0,0,0,0,100,0),
+(@PATH,17,-8870.22,1529.641,-95.36583,0,0,0,0,100,0);
+
+-- Pathing for Anubisath Defender Entry: 15277 'TDB FORMAT'
+SET @NPC := 88018;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8887.567,`position_y`=1503.212,`position_z`=-94.07798 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,-8887.567,1503.212,-94.07798,0,0,0,0,100,0),
+(@PATH,2,-8873.922,1517.935,-94.89435,0,0,0,0,100,0),
+(@PATH,3,-8887.567,1503.212,-94.07798,0,0,0,0,100,0),
+(@PATH,4,-8894.092,1484.492,-92.96038,0,0,0,0,100,0),
+(@PATH,5,-8904.106,1462.815,-92.10182,0,0,0,0,100,0),
+(@PATH,6,-8894.092,1484.492,-92.96038,0,0,0,0,100,0);
+
+-- Pathing for Anubisath Defender Entry: 15277 'TDB FORMAT'
+SET @NPC := 88019;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8909.747,`position_y`=1378.045,`position_z`=-101.7986 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,-8909.747,1378.045,-101.7986,0,0,0,0,100,0),
+(@PATH,2,-8918.701,1364.768,-104.2538,0,0,0,0,100,0),
+(@PATH,3,-8909.747,1378.045,-101.7986,0,0,0,0,100,0),
+(@PATH,4,-8901.399,1392.455,-99.42863,0,0,0,0,100,0),
+(@PATH,5,-8901.083,1400.452,-98.34517,0,0,0,0,100,0),
+(@PATH,6,-8906.459,1429.929,-93.87345,0,0,0,0,100,0),
+(@PATH,7,-8901.083,1400.452,-98.34517,0,0,0,0,100,0),
+(@PATH,8,-8901.399,1392.455,-99.42863,0,0,0,0,100,0);
+
+DELETE FROM `creature` WHERE `guid`=88063;
+
+-- Pathing for Vekniss Drone Entry: 15300 'TDB FORMAT'
+SET @NPC := 87782;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8047.272,`position_y`=1647.506,`position_z`=-58.86852 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,-8047.272,1647.506,-58.86852,0,0,1,0,100,0),
+(@PATH,2,-8078.599,1666.187,-52.86737,0,0,1,0,100,0),
+(@PATH,3,-8104.689,1660.787,-49.11528,0,0,1,0,100,0),
+(@PATH,4,-8078.599,1666.187,-52.86737,0,0,1,0,100,0),
+(@PATH,5,-8047.272,1647.506,-58.86852,0,0,1,0,100,0),
+(@PATH,6,-8019.708,1624.168,-58.74899,0,0,1,0,100,0),
+(@PATH,7,-8004.919,1589.924,-60.78511,0,0,1,0,100,0),
+(@PATH,8,-8015.494,1565.506,-64.88443,0,0,1,0,100,0),
+(@PATH,9,-8022.754,1552.338,-67.08372,0,0,1,0,100,0),
+(@PATH,10,-8036.019,1571.532,-64.49551,0,0,1,0,100,0),
+(@PATH,11,-8068.761,1599.027,-59.67414,0,0,1,0,100,0),
+(@PATH,12,-8091.299,1622.772,-55.47946,0,0,1,0,100,0),
+(@PATH,13,-8129.723,1618.528,-47.06943,0,0,1,0,100,0),
+(@PATH,14,-8157.688,1629.017,-41.62284,0,0,1,0,100,0),
+(@PATH,15,-8180.13,1626.174,-38.51837,0,0,1,0,100,0),
+(@PATH,16,-8157.688,1629.017,-41.62284,0,0,1,0,100,0),
+(@PATH,17,-8129.723,1618.528,-47.06943,0,0,1,0,100,0),
+(@PATH,18,-8091.299,1622.772,-55.47946,0,0,1,0,100,0),
+(@PATH,19,-8068.761,1599.027,-59.67414,0,0,1,0,100,0),
+(@PATH,20,-8036.019,1571.532,-64.49551,0,0,1,0,100,0),
+(@PATH,21,-8022.85,1552.261,-67.08212,0,0,1,0,100,0),
+(@PATH,22,-8015.494,1565.506,-64.88443,0,0,1,0,100,0),
+(@PATH,23,-8004.919,1589.924,-60.78511,0,0,1,0,100,0),
+(@PATH,24,-8019.708,1624.168,-58.74899,0,0,1,0,100,0);
+
+-- Pathing for Vekniss Drone Entry: 15300 'TDB FORMAT'
+SET @NPC := 87717;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-7959.943,`position_y`=1511.205,`position_z`=-61.94479 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,-7959.943,1511.205,-61.94479,0,0,1,0,100,0),
+(@PATH,2,-7969.066,1530.94,-61.9753,0,0,1,0,100,0),
+(@PATH,3,-7959.073,1548.518,-60.69316,0,0,1,0,100,0),
+(@PATH,4,-7973.308,1580.152,-61.10556,0,0,1,0,100,0),
+(@PATH,5,-7959.008,1548.632,-60.67959,0,0,1,0,100,0),
+(@PATH,6,-7969.134,1531.086,-61.98817,0,0,1,0,100,0),
+(@PATH,7,-7960.104,1511.377,-61.92974,0,0,1,0,100,0),
+(@PATH,8,-7946.518,1496.745,-63.51249,0,0,1,0,100,0),
+(@PATH,9,-7928.649,1495.495,-64.09904,0,0,1,0,100,0),
+(@PATH,10,-7930.104,1470.892,-65.47607,0,0,1,0,100,0),
+(@PATH,11,-7916.759,1457.218,-66.95297,0,0,1,0,100,0),
+(@PATH,12,-7900.108,1454.012,-65.35246,0,0,1,0,100,0),
+(@PATH,13,-7916.759,1457.218,-66.95297,0,0,1,0,100,0),
+(@PATH,14,-7930.104,1470.892,-65.47607,0,0,1,0,100,0),
+(@PATH,15,-7928.649,1495.495,-64.09904,0,0,1,0,100,0),
+(@PATH,16,-7946.518,1496.745,-63.51249,0,0,1,0,100,0);
+
+-- Pathing for Vekniss Drone Entry: 15300 'TDB FORMAT'
+SET @NPC := 87688;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-7917.924,`position_y`=1443.211,`position_z`=-67.16397 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,-7917.924,1443.211,-67.16397,0,0,1,0,100,0),
+(@PATH,2,-7909.153,1417.411,-67.2205,0,0,1,0,100,0),
+(@PATH,3,-7923.03,1402.219,-65.58526,0,0,1,0,100,0),
+(@PATH,4,-7930.945,1379.339,-74.47357,0,0,1,0,100,0),
+(@PATH,5,-7923.883,1369.651,-77.58849,0,0,1,0,100,0),
+(@PATH,6,-7915.488,1351.216,-81.1413,0,0,1,0,100,0),
+(@PATH,7,-7923.883,1369.651,-77.58849,0,0,1,0,100,0),
+(@PATH,8,-7930.945,1379.339,-74.47357,0,0,1,0,100,0),
+(@PATH,9,-7923.03,1402.219,-65.58526,0,0,1,0,100,0),
+(@PATH,10,-7909.153,1417.411,-67.2205,0,0,1,0,100,0),
+(@PATH,11,-7917.924,1443.211,-67.16397,0,0,1,0,100,0),
+(@PATH,12,-7927.112,1444.966,-66.48512,0,0,1,0,100,0),
+(@PATH,13,-7901.919,1463.738,-64.63509,0,0,1,0,100,0),
+(@PATH,14,-7909.403,1491.503,-61.68564,0,0,1,0,100,0),
+(@PATH,15,-7929.077,1499.48,-63.57971,0,0,1,0,100,0),
+(@PATH,16,-7927.155,1514.873,-60.485,0,0,1,0,100,0),
+(@PATH,17,-7929.077,1499.48,-63.57971,0,0,1,0,100,0),
+(@PATH,18,-7909.403,1491.503,-61.68564,0,0,1,0,100,0),
+(@PATH,19,-7901.919,1463.738,-64.63509,0,0,1,0,100,0),
+(@PATH,20,-7927.112,1444.966,-66.48512,0,0,1,0,100,0);
+
+-- Pathing for Vekniss Drone Entry: 15300 'TDB FORMAT'
+SET @NPC := 87810;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8182.791,`position_y`=1672.963,`position_z`=-31.65287 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,-8182.791,1672.963,-31.65287,0,0,1,0,100,0),
+(@PATH,2,-8161.917,1683.302,-33.64119,0,0,1,0,100,0),
+(@PATH,3,-8144.854,1658.909,-39.02008,0,0,1,0,100,0),
+(@PATH,4,-8112.538,1648.41,-48.56252,0,0,1,0,100,0),
+(@PATH,5,-8099.015,1661.896,-50.44419,0,0,1,0,100,0),
+(@PATH,6,-8073.55,1670.37,-51.79721,0,0,1,0,100,0),
+(@PATH,7,-8047.324,1647.833,-58.80652,0,0,1,0,100,0),
+(@PATH,8,-8023.915,1630.05,-58.94074,0,0,1,0,100,0),
+(@PATH,9,-8007.258,1617.836,-56.80342,0,0,1,0,100,0),
+(@PATH,10,-8007.498,1581.44,-61.93605,0,0,1,0,100,0),
+(@PATH,11,-8024.588,1566.902,-65.47791,0,0,1,0,100,0),
+(@PATH,12,-8026.689,1536.815,-68.19724,0,0,1,0,100,0),
+(@PATH,13,-8024.588,1566.902,-65.47791,0,0,1,0,100,0),
+(@PATH,14,-8007.498,1581.44,-61.93605,0,0,1,0,100,0),
+(@PATH,15,-8007.258,1617.836,-56.80342,0,0,1,0,100,0),
+(@PATH,16,-8023.915,1630.05,-58.94074,0,0,1,0,100,0),
+(@PATH,17,-8047.324,1647.833,-58.80652,0,0,1,0,100,0),
+(@PATH,18,-8073.55,1670.37,-51.79721,0,0,1,0,100,0),
+(@PATH,19,-8099.015,1661.896,-50.44419,0,0,1,0,100,0),
+(@PATH,20,-8112.538,1648.41,-48.56252,0,0,1,0,100,0),
+(@PATH,21,-8144.854,1658.909,-39.02008,0,0,1,0,100,0),
+(@PATH,22,-8161.917,1683.302,-33.64119,0,0,1,0,100,0);
+
+UPDATE `creature` SET `spawndist`=10,`MovementType`=1 WHERE `guid`=87911;
+
+-- Remove Vekniss Hive Crawler overspawn
+DELETE FROM `creature` WHERE `guid` BETWEEN 87945 AND 87961;
+
+-- Pathing for Vekniss Hive Crawler Entry: 15240 'TDB FORMAT'
+SET @NPC := 87939;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8290.739,`position_y`=1337.271,`position_z`=-79.84545 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8294.739,`position_y`=1332.271,`position_z`=-79.84545 WHERE `guid`=@NPC+1;
+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,-8290.739,1337.271,-79.84545,0,0,0,0,100,0),
+(@PATH,2,-8248.099,1339.004,-85.39378,0,0,0,0,100,0),
+(@PATH,3,-8238.928,1292.994,-87.8344,0,0,0,0,100,0),
+(@PATH,4,-8202.383,1264.173,-92.27186,0,0,0,0,100,0),
+(@PATH,5,-8192.835,1226.339,-92.15359,0,0,0,0,100,0),
+(@PATH,6,-8169.127,1230.136,-92.5405,0,0,0,0,100,0),
+(@PATH,7,-8192.835,1226.339,-92.15359,0,0,0,0,100,0),
+(@PATH,8,-8202.383,1264.173,-92.27186,0,0,0,0,100,0),
+(@PATH,9,-8238.928,1292.994,-87.8344,0,0,0,0,100,0),
+(@PATH,10,-8248.099,1339.004,-85.39378,0,0,0,0,100,0);
+
+-- Vekniss Hive Crawler formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@NPC+1,7,90,2,1,6);
+
+-- Pathing for Vekniss Hive Crawler Entry: 15240 'TDB FORMAT'
+SET @NPC := 87941;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8255.963,`position_y`=1349.651,`position_z`=-84.4174 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8255.963,`position_y`=1349.651,`position_z`=-84.4174 WHERE `guid`=@NPC+1;
+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,-8255.963,1349.651,-84.4174,0,0,0,0,100,0),
+(@PATH,2,-8293.042,1364.945,-77.56605,0,0,0,0,100,0),
+(@PATH,3,-8320.49,1334.739,-72.65111,0,0,0,0,100,0),
+(@PATH,4,-8355.71,1359.734,-65.14333,0,0,0,0,100,0),
+(@PATH,5,-8320.678,1334.872,-72.67966,0,0,0,0,100,0),
+(@PATH,6,-8293.042,1364.945,-77.56605,0,0,0,0,100,0),
+(@PATH,7,-8255.963,1349.651,-84.4174,0,0,0,0,100,0),
+(@PATH,8,-8233.676,1320.495,-86.60672,0,0,0,0,100,0),
+(@PATH,9,-8230.803,1281.079,-89.86937,0,0,0,0,100,0),
+(@PATH,10,-8203.98,1271.184,-91.95763,0,0,0,0,100,0),
+(@PATH,11,-8197.017,1230.331,-92.32941,0,0,0,0,100,0),
+(@PATH,12,-8203.98,1271.184,-91.95763,0,0,0,0,100,0),
+(@PATH,13,-8230.538,1280.981,-89.9477,0,0,0,0,100,0),
+(@PATH,14,-8233.676,1320.495,-86.60672,0,0,0,0,100,0);
+
+-- Vekniss Hive Crawler formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@NPC+1,7,90,2,4,11);
+
+-- Pathing for Vekniss Hive Crawler Entry: 15240 'TDB FORMAT'
+SET @NPC := 87943;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8526.7,`position_y`=1385.158,`position_z`=-58.87769 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8526.7,`position_y`=1385.158,`position_z`=-58.87769 WHERE `guid`=@NPC+1;
+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,-8526.7,1385.158,-58.87769,0,0,0,0,100,0),
+(@PATH,2,-8514.655,1377.609,-59.3903,0,0,0,0,100,0),
+(@PATH,3,-8489.994,1376.669,-59.29538,0,0,0,0,100,0),
+(@PATH,4,-8465.505,1376.563,-58.49561,0,0,0,0,100,0),
+(@PATH,5,-8458.902,1363.877,-60.13142,0,0,0,0,100,0),
+(@PATH,6,-8473.567,1356.557,-59.07343,0,0,0,0,100,0),
+(@PATH,7,-8498.528,1361.103,-60.34806,0,0,0,0,100,0),
+(@PATH,8,-8519.738,1370.179,-61.29987,0,0,0,0,100,0),
+(@PATH,9,-8546.015,1380.145,-60.98241,0,0,0,0,100,0),
+(@PATH,10,-8573.124,1395.751,-64.01164,0,0,0,0,100,0),
+(@PATH,11,-8568.937,1404.801,-61.96235,0,0,0,0,100,0),
+(@PATH,12,-8557.207,1408.638,-58.67739,0,0,0,0,100,0),
+(@PATH,13,-8541.95,1393.287,-59.30177,0,0,0,0,100,0);
+
+-- Vekniss Hive Crawler formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@NPC+1,7,90,2,0,0);
+
+-- Pathing for Princess Huhuran Entry: 15509 'TDB FORMAT'
+SET @NPC := 88014;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8515.803,`position_y`=1693.652,`position_z`=-90.48472 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,-8515.803,1693.652,-90.48472,0,0,0,0,100,0),
+(@PATH,2,-8512.993,1728.714,-91.76323,0,0,0,0,100,0),
+(@PATH,3,-8514.034,1751.632,-91.8007,0,0,0,0,100,0),
+(@PATH,4,-8535.463,1765.799,-90.55943,0,0,0,0,100,0),
+(@PATH,5,-8555.29,1770.428,-90.79091,0,0,0,0,100,0),
+(@PATH,6,-8575.839,1788.965,-91.80469,0,0,0,0,100,0),
+(@PATH,7,-8605.888,1785.042,-89.97934,0,0,0,0,100,0),
+(@PATH,8,-8631.052,1766.135,-91.00841,0,0,0,0,100,0),
+(@PATH,9,-8656.294,1757.134,-91.79616,0,0,0,0,100,0),
+(@PATH,10,-8631.057,1766.133,-91.00929,0,0,0,0,100,0),
+(@PATH,11,-8605.888,1785.042,-89.97934,0,0,0,0,100,0),
+(@PATH,12,-8575.839,1788.965,-91.80469,0,0,0,0,100,0),
+(@PATH,13,-8555.29,1770.428,-90.79091,0,0,0,0,100,0),
+(@PATH,14,-8535.463,1765.799,-90.55943,0,0,0,0,100,0),
+(@PATH,15,-8514.142,1751.703,-91.84047,0,0,0,0,100,0),
+(@PATH,16,-8512.993,1728.714,-91.76323,0,0,0,0,100,0);
+
+-- The Prophet Skeram respawn linking
+DELETE FROM `linked_respawn` WHERE `linkedGuid`=88075;
+INSERT INTO `linked_respawn` (`guid`,`linkedGuid`,`linkType`) VALUES
+(87564,88075,0),(87565,88075,0),(87566,88075,0),(87567,88075,0),(87568,88075,0),(87569,88075,0),
+(87570,88075,0),(87571,88075,0),(87652,88075,0),(87653,88075,0),(88074,88075,0);
+
+-- Battleguard Sartura respawn linking
+DELETE FROM `linked_respawn` WHERE `linkedGuid`=87648;
+INSERT INTO `linked_respawn` (`guid`,`linkedGuid`,`linkType`) VALUES
+(87597,87648,0),(87598,87648,0),(87604,87648,0),(87605,87648,0),(87606,87648,0),(87607,87648,0),
+(87672,87648,0),(87673,87648,0),(87674,87648,0),(87675,87648,0),(87676,87648,0),(87677,87648,0),
+(87595,87648,0),(87596,87648,0),(87599,87648,0),(87600,87648,0),(87608,87648,0),(87609,87648,0),
+(87610,87648,0),(87611,87648,0),(87612,87648,0),(87613,87648,0),(87614,87648,0),(87615,87648,0),
+(87616,87648,0),(87617,87648,0),(87618,87648,0),(87619,87648,0),(87620,87648,0),(87621,87648,0),
+(87622,87648,0),(87623,87648,0),(87624,87648,0),(87625,87648,0),(87626,87648,0),(87627,87648,0),
+(87628,87648,0),(87629,87648,0),(87630,87648,0),(87631,87648,0),(87632,87648,0),(87633,87648,0),
+(87634,87648,0),(87635,87648,0),(87636,87648,0),(87637,87648,0),(87638,87648,0),(87649,87648,0),
+(87650,87648,0),(87651,87648,0);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_01_world.sql
new file mode 100644
index 00000000000..5b72a9af236
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_01_world.sql
@@ -0,0 +1,34 @@
+-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT'
+SET @NPC := 56666;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=679.1953,`position_y`=-847.3836,`position_z`=-208.2482 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,679.1953,-847.3836,-208.2482,0,0,1,0,100,0),
+(@PATH,2,676.7046,-829.8509,-208.8353,0,0,1,0,100,0),
+(@PATH,3,665.002,-813.2372,-208.774,0,0,1,0,100,0),
+(@PATH,4,681.6021,-776.7833,-209.1657,0,0,1,0,100,0),
+(@PATH,5,686.1985,-738.5436,-209.2948,0,0,1,0,100,0),
+(@PATH,6,707.9111,-711.0708,-209.5187,0,0,1,0,100,0),
+(@PATH,7,708.2624,-692.8405,-209.5718,0,0,1,0,100,0),
+(@PATH,8,690.2739,-662.6287,-209.6574,0,0,1,0,100,0),
+(@PATH,9,708.2625,-692.8368,-209.5175,0,0,1,0,100,0),
+(@PATH,10,707.9111,-711.0708,-209.5187,0,0,1,0,100,0),
+(@PATH,11,686.1985,-738.5436,-209.2948,0,0,1,0,100,0),
+(@PATH,12,681.6021,-776.7833,-209.1657,0,0,1,0,100,0),
+(@PATH,13,665.002,-813.2372,-208.774,0,0,1,0,100,0),
+(@PATH,14,676.7046,-829.8509,-208.8353,0,0,1,0,100,0),
+(@PATH,15,679.1953,-847.3836,-208.2482,0,0,1,0,100,0),
+(@PATH,16,696.5482,-855.4606,-206.0954,0,0,1,0,100,0),
+(@PATH,17,710.7119,-882.6242,-198.953,0,0,1,0,100,0),
+(@PATH,18,714.8118,-907.6405,-193.7685,0,0,1,0,100,0),
+(@PATH,19,735.3042,-937.3447,-188.4066,0,0,1,0,100,0),
+(@PATH,20,714.8118,-907.6405,-193.7685,0,0,1,0,100,0),
+(@PATH,21,710.7119,-882.6242,-198.953,0,0,1,0,100,0),
+(@PATH,22,697.0541,-866.1818,-204.0854,0,0,1,0,100,0);
+
+UPDATE `creature` SET `spawndist`=0,`MovementType`=0,`position_x`=696.6885,`position_y`=-852.352,`position_z`=-206.5962,`orientation`=3.674797 WHERE `guid`=56789;
+DELETE FROM `creature_addon` WHERE `guid`=56789;
+DELETE FROM `waypoint_data` WHERE `id`=567890;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_02_world.sql
new file mode 100644
index 00000000000..44b00fceb04
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_02_world.sql
@@ -0,0 +1,5 @@
+--
+DELETE FROM `creature_addon` WHERE `guid` IN (56606,56607);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(56606,566050,0,0,1,0, ''),
+(56607,566050,0,0,1,0, '');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_03_world.sql
new file mode 100644
index 00000000000..e91d340d043
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_03_world.sql
@@ -0,0 +1,7 @@
+--
+-- Fix up some errors in Vekniss Hive Crawler Entry: 15240 pathing
+UPDATE `creature` SET `position_x`=-8259.721,`position_y`=1343.373,`position_z`=-84.4428 WHERE `guid`=87942;
+UPDATE `creature` SET `position_x`=-8524.316,`position_y`=1389.612,`position_z`=-57.2656 WHERE `guid`=87944;
+DELETE FROM `creature_addon` WHERE `guid` IN (87940,87942,87944);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(87940,879390,0,0,1,0, ''),(87942,879410,0,0,1,0, ''),(87944,879430,0,0,1,0, '');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_04_world.sql
new file mode 100644
index 00000000000..ec17ef1061a
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_04_world.sql
@@ -0,0 +1,778 @@
+--
+-- Add missing critters to AQ40
+SET @CGUID := 87830;
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+62;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 4076, 531, 1, 1, -7993.61, 1277.031, -73.53455, 1.856409, 7200, 5, 1),
+(@CGUID+1, 4076, 531, 1, 1, -8071.965, 1231.468, -91.46188, 1.903564, 7200, 5, 1),
+(@CGUID+2, 4076, 531, 1, 1, -8308.057, 1858.822, -1.610428, 5.606663, 7200, 5, 1),
+(@CGUID+3, 4076, 531, 1, 1, -8414.608, 2051.612, 9.279689, 3.343741, 7200, 5, 1),
+(@CGUID+4, 4076, 531, 1, 1, -8416.188, 2076.555, 116.1282, 2.943876, 7200, 5, 1),
+(@CGUID+5, 4076, 531, 1, 1, -8430.81, 2030.658, 116.1034, 4.016187, 7200, 5, 1),
+(@CGUID+6, 4076, 531, 1, 1, -8693.907, 1563.222, -80.14254, 3.734258, 7200, 5, 1),
+(@CGUID+7, 4076, 531, 1, 1, -8710.091, 1659.989, -84.65031, 5.40056, 7200, 5, 1),
+(@CGUID+8, 4076, 531, 1, 1, -8855.175, 1535.051, -95.46984, 1.537807, 7200, 5, 1),
+(@CGUID+9, 4076, 531, 1, 1, -8869.176, 1416.73, -93.07328, 5.271091, 7200, 5, 1),
+(@CGUID+10, 4076, 531, 1, 1, -8904.052, 1863.421, -21.88551, 1.61788, 7200, 5, 1),
+(@CGUID+11, 4076, 531, 1, 1, -9068.005, 1884.902, -43.82254, 2.850689, 7200, 5, 1),
+(@CGUID+12, 4076, 531, 1, 1, -9117.436, 1379.472, -106.4541, 5.968285, 7200, 5, 1),
+(@CGUID+13, 4076, 531, 1, 1, -9174.12, 2027.797, -60.80634, 0.08407046, 7200, 5, 1),
+(@CGUID+14, 4076, 531, 1, 1, -9184.257, 1699.096, -50.83805, 3.615798, 7200, 5, 1),
+(@CGUID+15, 15475, 531, 1, 1, -7914.396, 1445.457, -67.39938, 3.58752, 7200, 5, 1),
+(@CGUID+16, 15475, 531, 1, 1, -7953.215, 1524.226, -62.41693, 3.258193, 7200, 5, 1),
+(@CGUID+17, 15475, 531, 1, 1, -8012.04, 1604.964, -59.16104, 1.007754, 7200, 5, 1),
+(@CGUID+18, 15475, 531, 1, 1, -8034.017, 1565.151, -65.11945, 1.29113, 7200, 5, 1),
+(@CGUID+19, 15475, 531, 1, 1, -8039.968, 1175.328, -90.4319, 1.981047, 7200, 5, 1),
+(@CGUID+20, 15475, 531, 1, 1, -8101.441, 1152.044, -90.54535, 1.581657, 7200, 5, 1),
+(@CGUID+21, 15475, 531, 1, 1, -8108.146, 1662.778, -48.41492, 3.097694, 7200, 5, 1),
+(@CGUID+22, 15475, 531, 1, 1, -8298.537, 1722.821, -16.17212, 4.068121, 7200, 5, 1),
+(@CGUID+23, 15475, 531, 1, 1, -8371.146, 2061.964, 9.355958, 0.2580761, 7200, 5, 1),
+(@CGUID+24, 15475, 531, 1, 1, -8386.911, 1898.422, 2.752187, 6.2749, 7200, 5, 1),
+(@CGUID+25, 15475, 531, 1, 1, -8432.691, 2079.264, 116.1293, 0.4680386, 7200, 5, 1),
+(@CGUID+26, 15475, 531, 1, 1, -8492.966, 1962.474, 62.38858, 4.436271, 7200, 5, 1),
+(@CGUID+27, 15475, 531, 1, 1, -8557.565, 2140.73, -6.423177, 1.536374, 7200, 5, 1),
+(@CGUID+28, 15475, 531, 1, 1, -8558.164, 1398.536, -61.02413, 1.319915, 7200, 5, 1),
+(@CGUID+29, 15475, 531, 1, 1, -8586.941, 1998.362, -1.80591, 3.095486, 7200, 5, 1),
+(@CGUID+30, 15475, 531, 1, 1, -8606.187, 1636.149, -89.51112, 2.737563, 7200, 5, 1),
+(@CGUID+31, 15475, 531, 1, 1, -8627.807, 1908.553, 108.5656, 3.843493, 7200, 5, 1),
+(@CGUID+32, 15475, 531, 1, 1, -8943.605, 1438.669, -92.41223, 3.784467, 7200, 5, 1),
+(@CGUID+33, 15475, 531, 1, 1, -9096.328, 2109.297, -60.5332, 5.777769, 7200, 5, 1),
+(@CGUID+34, 15475, 531, 1, 1, -9116.301, 1796.602, -42.21427, 1.827075, 7200, 5, 1),
+(@CGUID+35, 15475, 531, 1, 1, -9118.708, 2143.711, -62.06357, 2.151066, 7200, 5, 1),
+(@CGUID+36, 15475, 531, 1, 1, -9142.719, 2103.468, -65.14211, 1.267552, 7200, 5, 1),
+(@CGUID+37, 15475, 531, 1, 1, -9180.303, 1493.747, -94.91629, 0.3170593, 7200, 5, 1),
+(@CGUID+38, 15475, 531, 1, 1, -9196.674, 2084.258, -63.99967, 2.517623, 7200, 5, 1),
+(@CGUID+39, 15475, 531, 1, 1, -9234.575, 2114.615, -66.58328, 3.193953, 7200, 5, 1),
+(@CGUID+40, 15476, 531, 1, 1, -7921.302, 1372.589, -75.91825, 4.972216, 7200, 5, 1),
+(@CGUID+41, 15476, 531, 1, 1, -8125.222, 1185.706, -90.46516, 3.404643, 7200, 5, 1),
+(@CGUID+42, 15476, 531, 1, 1, -8136.203, 1621.301, -45.78866, 0.4527432, 7200, 5, 1),
+(@CGUID+43, 15476, 531, 1, 1, -8219.493, 1287.494, -90.73062, 5.135323, 7200, 5, 1),
+(@CGUID+44, 15476, 531, 1, 1, -8231.996, 1730.547, -23.7835, 1.56798, 7200, 5, 1),
+(@CGUID+45, 15476, 531, 1, 1, -8282.225, 1654.54, -30.92528, 3.785695, 7200, 5, 1),
+(@CGUID+46, 15476, 531, 1, 1, -8343.887, 1800.739, -1.62698, 0.4436055, 7200, 5, 1),
+(@CGUID+47, 15476, 531, 1, 1, -8354.889, 1950.469, -1.990107, 2.945138, 7200, 5, 1),
+(@CGUID+48, 15476, 531, 1, 1, -8402.777, 2032.242, 116.1043, 1.83938, 7200, 5, 1),
+(@CGUID+49, 15476, 531, 1, 1, -8530.837, 1987.527, 19.45868, 1.684378, 7200, 5, 1),
+(@CGUID+50, 15476, 531, 1, 1, -8571.373, 1981.646, -2.622002, 1.976356, 7200, 5, 1),
+(@CGUID+51, 15476, 531, 1, 1, -8584.706, 2161.053, -6.459295, 1.208772, 7200, 5, 1),
+(@CGUID+52, 15476, 531, 1, 1, -8604.21, 2111.618, -5.873696, 1.306837, 7200, 5, 1),
+(@CGUID+53, 15476, 531, 1, 1, -8786.167, 1550.577, -94.0428, 4.411382, 7200, 5, 1),
+(@CGUID+54, 15476, 531, 1, 1, -8795.048, 1985.752, -20.00344, 4.738873, 7200, 5, 1),
+(@CGUID+55, 15476, 531, 1, 1, -8902.53, 1530.709, -94.36566, 4.301609, 7200, 5, 1),
+(@CGUID+56, 15476, 531, 1, 1, -9003.465, 1871.428, -42.74734, 5.304233, 7200, 5, 1),
+(@CGUID+57, 15476, 531, 1, 1, -9087.258, 1473.547, -105.3523, 0.5530397, 7200, 5, 1),
+(@CGUID+58, 15476, 531, 1, 1, -9107.258, 2057.86, -61.6295, 2.819984, 7200, 5, 1),
+(@CGUID+59, 15476, 531, 1, 1, -9163.185, 2056.463, -63.7112, 3.981431, 7200, 5, 1),
+(@CGUID+60, 15476, 531, 1, 1, -9207.206, 2138.979, -67.99921, 3.086965, 7200, 5, 1),
+(@CGUID+61, 15476, 531, 1, 1, -9223.008, 2041.489, -62.08887, 0.8683821, 7200, 5, 1),
+(@CGUID+62, 15476, 531, 1, 1, -9243.944, 2079.562, -64.68581, 1.411943, 7200, 5, 1);
+
+-- Ahn'Qiraj Trigger
+SET @CGUID := 87639;
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+6;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 15426, 531, 1, 1, -8336.388, 2176.261, 127.9972, 2.129302, 7200, 0, 0),
+(@CGUID+1, 15426, 531, 1, 1, -8163.713, 2179.064, 130.4213, 5.51524, 7200, 0, 0),
+(@CGUID+2, 15426, 531, 1, 1, -8313.152, 2045.799, 137.8285, 4.18879, 7200, 0, 0),
+(@CGUID+3, 15426, 531, 1, 1, -8651.198, 2071.601, 20.505, 2.495821, 7200, 0, 0),
+(@CGUID+4, 15426, 531, 1, 1, -8337.532, 1731.16, 31.24248, 5.951573, 7200, 0, 0),
+(@CGUID+5, 15426, 531, 1, 1, -7994.346, 1000.059, 2.599343, 2.600541, 7200, 0, 0),
+(@CGUID+6, 15426, 531, 1, 1, -8983.974, 1392.379, -82.83119, 3.630285, 7200, 0, 0);
+
+-- OLDWorld Trigger (DO NOT DELETE)
+SET @CGUID := 87646;
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+1;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 15384, 531, 1, 1, -8546.249, 1987.516, -96.43676, 0.3316126, 7200, 0, 0),
+(@CGUID+1, 15384, 531, 1, 1, -8576.694, 1987.583, 100.3037, 0.4712389, 7200, 0, 0);
+
+-- Anubisath Warder
+SET @CGUID := 87654;
+DELETE FROM `creature` WHERE `guid` IN (88020,88021,88064);
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+3;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 15311, 531, 1, 1, -8909.497, 1860.686, -22.37387, 3.176499, 7200, 0, 0),
+(@CGUID+1, 15311, 531, 1, 1, -8997.906, 1920.162, -43.96503, 4.29351, 7200, 0, 0),
+(@CGUID+2, 15311, 531, 1, 1, -9083.562, 1767.909, -42.79126, 3.228859, 7200, 0, 0),
+(@CGUID+3, 15311, 531, 1, 1, -9133.911, 1813.15, -42.73888, 5.131268, 7200, 0, 0);
+
+-- Obsidian Nullifier
+SET @CGUID := 88022;
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+7;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 15312, 531, 1, 1, -8913.266, 1875.202, -22.02199, 3.176499, 7200, 0, 0),
+(@CGUID+1, 15312, 531, 1, 1, -8918.995, 1846.376, -23.08899, 2.617994, 7200, 0, 0),
+(@CGUID+2, 15312, 531, 1, 1, -8995.444, 1903.269, -41.87885, 3.752458, 7200, 0, 0),
+(@CGUID+3, 15312, 531, 1, 1, -9016.395, 1920.327, -44.30135, 4.572762, 7200, 0, 0),
+(@CGUID+4, 15312, 531, 1, 1, -9087.13, 1781.5, -42.47464, 3.577925, 7200, 0, 0),
+(@CGUID+5, 15312, 531, 1, 1, -9090.95, 1755.96, -41.99282, 2.86234, 7200, 0, 0),
+(@CGUID+6, 15312, 531, 1, 1, -9122.171, 1809.711, -42.50865, 4.433136, 7200, 0, 0),
+(@CGUID+7, 15312, 531, 1, 1, -9140.379, 1802.046, -42.01139, 5.480334, 7200, 0, 0);
+
+-- Pathing for OLDWorld Trigger (DO NOT DELETE) Entry: 15384 'TDB FORMAT'
+SET @NPC := 87647;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8577.317,`position_y`=1988.112,`position_z`=101.2204 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,-8577.317,1988.112,101.2204,0,0,0,0,100,0),
+(@PATH,2,-8578.001,1987.128,101.2204,0,0,0,0,100,0);
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (15312);
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (15312,0,1,0, '19818');
+
+UPDATE `creature` SET `spawntimesecs`=0 WHERE `id`=15300;
+
+-- Remove over spawned Vekniss Stinger
+DELETE FROM `creature` WHERE `guid` IN (88006,88007,88011,88012,88013);
+-- Remove over spawned Vekniss Wasp
+DELETE FROM `creature` WHERE `guid` BETWEEN 87977 AND 87989;
+DELETE FROM `creature` WHERE `guid` IN (88000,88001,88004,88005,88009,88010);
+-- Remove over spawned Anubisath Swarmguard
+DELETE FROM `creature` WHERE `guid` IN (87999,88002,88003,88008);
+
+UPDATE `creature_template` SET `InhabitType`=7 WHERE `entry` IN (15235,15236,15249);
+-- Anubisath Swarmguard spawns should be Qiraji Lasher
+UPDATE `creature` SET `id`=15249 WHERE `guid` IN (87994,87995,87996);
+
+-- Pathing for Vekniss Stinger Entry: 15235 'TDB FORMAT'
+SET @NPC := 87990;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8563.52,`position_y`=1739.6,`position_z`=-90.46359 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8563.52,`position_y`=1739.6,`position_z`=-90.46359 WHERE `guid`=87962; -- Vekniss Wasp
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8563.52,`position_y`=1739.6,`position_z`=-90.46359 WHERE `guid`=87963; -- Vekniss Wasp
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8563.52,`position_y`=1739.6,`position_z`=-90.46359 WHERE `guid`=87994; -- Qiraji Lasher
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,87962,87963,87994);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(87962,@PATH,0,0,1,0, ''),(87963,@PATH,0,0,1,0, ''),(87994,@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,-8563.52,1739.6,-90.46359,0,0,1,0,100,0),
+(@PATH,2,-8548.448,1731.575,-91.82451,0,0,1,0,100,0),
+(@PATH,3,-8542.137,1699.376,-90.39761,0,0,1,0,100,0),
+(@PATH,4,-8558.685,1666.235,-90.69133,0,0,1,0,100,0),
+(@PATH,5,-8585.775,1654.991,-89.79728,0,0,1,0,100,0),
+(@PATH,6,-8613.518,1668.712,-90.51443,0,0,1,0,100,0),
+(@PATH,7,-8622.457,1691.902,-91.26654,0,0,1,0,100,0),
+(@PATH,8,-8645.388,1710.061,-90.06686,0,0,1,0,100,0),
+(@PATH,9,-8635.841,1744.949,-91.82065,0,0,1,0,100,0),
+(@PATH,10,-8617.822,1770.243,-90.46841,0,0,1,0,100,0),
+(@PATH,11,-8635.841,1744.949,-91.82065,0,0,1,0,100,0),
+(@PATH,12,-8645.388,1710.061,-90.06686,0,0,1,0,100,0),
+(@PATH,13,-8622.457,1691.902,-91.26654,0,0,1,0,100,0),
+(@PATH,14,-8613.518,1668.712,-90.51443,0,0,1,0,100,0),
+(@PATH,15,-8585.775,1654.991,-89.79728,0,0,1,0,100,0),
+(@PATH,16,-8558.685,1666.235,-90.69133,0,0,1,0,100,0),
+(@PATH,17,-8542.137,1699.376,-90.39761,0,0,1,0,100,0),
+(@PATH,18,-8548.448,1731.575,-91.82451,0,0,1,0,100,0),
+(@PATH,19,-8563.52,1739.6,-90.46359,0,0,1,0,100,0),
+(@PATH,20,-8580.759,1732.139,-91.39182,0,0,1,0,100,0),
+(@PATH,21,-8595.639,1703.542,-91.69364,0,0,1,0,100,0),
+(@PATH,22,-8598.313,1670.841,-90.63684,0,0,1,0,100,0),
+(@PATH,23,-8596.669,1642.029,-89.56214,0,0,1,0,100,0),
+(@PATH,24,-8602.972,1615.217,-88.6513,0,0,1,0,100,0),
+(@PATH,25,-8605.679,1582.754,-82.176,0,0,1,0,100,0),
+(@PATH,26,-8617.505,1563.513,-79.12038,0,0,1,0,100,0),
+(@PATH,27,-8621.844,1547.022,-76.55392,0,0,1,0,100,0),
+(@PATH,28,-8617.5,1516.144,-70.19933,0,0,1,0,100,0),
+(@PATH,29,-8625.505,1479.613,-68.04492,0,0,1,0,100,0),
+(@PATH,30,-8614.832,1443.637,-66.69106,0,0,1,0,100,0),
+(@PATH,31,-8600.255,1422.463,-65.39139,0,0,1,0,100,0),
+(@PATH,32,-8611.4,1385.665,-69.80731,0,0,1,0,100,0),
+(@PATH,33,-8623.595,1364.614,-69.91782,0,0,1,0,100,0),
+(@PATH,34,-8604.512,1328.141,-69.94511,0,0,1,0,100,0),
+(@PATH,35,-8589.592,1311.021,-69.10871,0,0,1,0,100,0),
+(@PATH,36,-8604.512,1328.141,-69.94511,0,0,1,0,100,0),
+(@PATH,37,-8623.595,1364.614,-69.91782,0,0,1,0,100,0),
+(@PATH,38,-8611.4,1385.665,-69.80731,0,0,1,0,100,0),
+(@PATH,39,-8600.255,1422.463,-65.39139,0,0,1,0,100,0),
+(@PATH,40,-8614.832,1443.637,-66.69106,0,0,1,0,100,0),
+(@PATH,41,-8625.505,1479.613,-68.04492,0,0,1,0,100,0),
+(@PATH,42,-8617.5,1516.144,-70.19933,0,0,1,0,100,0),
+(@PATH,43,-8621.844,1547.022,-76.55392,0,0,1,0,100,0),
+(@PATH,44,-8617.505,1563.513,-79.12038,0,0,1,0,100,0),
+(@PATH,45,-8605.679,1582.754,-82.176,0,0,1,0,100,0),
+(@PATH,46,-8602.972,1615.217,-88.6513,0,0,1,0,100,0),
+(@PATH,47,-8596.669,1642.029,-89.56214,0,0,1,0,100,0),
+(@PATH,48,-8598.313,1670.841,-90.63684,0,0,1,0,100,0),
+(@PATH,49,-8595.639,1703.542,-91.69364,0,0,1,0,100,0),
+(@PATH,50,-8580.759,1732.139,-91.39182,0,0,1,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,87962,6,90,2,10,35),
+(@NPC,87963,6,270,2,10,35),
+(@NPC,87994,6,360,2,0,0);
+
+-- Pathing for Vekniss Stinger Entry: 15235 'TDB FORMAT'
+SET @NPC := 87991;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8635.931,`position_y`=1406.936,`position_z`=-69.83319 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8635.931,`position_y`=1406.936,`position_z`=-69.83319 WHERE `guid`=87964; -- Vekniss Wasp
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8635.931,`position_y`=1406.936,`position_z`=-69.83319 WHERE `guid`=87965; -- Vekniss Wasp
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8635.931,`position_y`=1406.936,`position_z`=-69.83319 WHERE `guid`=87966; -- Vekniss Wasp
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,87964,87965,87966);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(87964,@PATH,0,0,1,0, ''),(87965,@PATH,0,0,1,0, ''),(87966,@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,-8635.931,1406.936,-69.83319,0,0,1,0,100,0),
+(@PATH,2,-8663.641,1389.05,-69.89677,0,0,1,0,100,0),
+(@PATH,3,-8685.819,1364.188,-69.32112,0,0,1,0,100,0),
+(@PATH,4,-8654.888,1363.939,-69.89539,0,0,1,0,100,0),
+(@PATH,5,-8628.978,1372.13,-69.89567,0,0,1,0,100,0),
+(@PATH,6,-8610.717,1381.386,-69.89604,0,0,1,0,100,0),
+(@PATH,7,-8594.859,1388.721,-68.43361,0,0,1,0,100,0),
+(@PATH,8,-8570.96,1400.338,-62.98791,0,0,1,0,100,0),
+(@PATH,9,-8592.089,1370.82,-68.49156,0,0,1,0,100,0),
+(@PATH,10,-8597.555,1344.224,-69.9974,0,0,1,0,100,0),
+(@PATH,11,-8601.242,1313.158,-69.77949,0,0,1,0,100,0),
+(@PATH,12,-8600.213,1300.66,-68.76534,0,0,1,0,100,0),
+(@PATH,13,-8601.242,1313.158,-69.77949,0,0,1,0,100,0),
+(@PATH,14,-8597.555,1344.224,-69.9974,0,0,1,0,100,0),
+(@PATH,15,-8592.089,1370.82,-68.49156,0,0,1,0,100,0),
+(@PATH,16,-8570.96,1400.338,-62.98791,0,0,1,0,100,0),
+(@PATH,17,-8594.859,1388.721,-68.43361,0,0,1,0,100,0),
+(@PATH,18,-8610.717,1381.386,-69.89604,0,0,1,0,100,0),
+(@PATH,19,-8628.978,1372.13,-69.89567,0,0,1,0,100,0),
+(@PATH,20,-8654.888,1363.939,-69.89539,0,0,1,0,100,0),
+(@PATH,21,-8685.696,1364.187,-69.33382,0,0,1,0,100,0),
+(@PATH,22,-8663.641,1389.05,-69.89677,0,0,1,0,100,0),
+(@PATH,23,-8635.931,1406.936,-69.83319,0,0,1,0,100,0),
+(@PATH,24,-8618.646,1426.418,-67.81181,0,0,1,0,100,0),
+(@PATH,25,-8609.056,1445.661,-65.29099,0,0,1,0,100,0),
+(@PATH,26,-8629.429,1440.835,-68.46561,0,0,1,0,100,0),
+(@PATH,27,-8650.575,1437.557,-69.80312,0,0,1,0,100,0),
+(@PATH,28,-8680.427,1427.707,-69.89879,0,0,1,0,100,0),
+(@PATH,29,-8711.025,1419.595,-69.8176,0,0,1,0,100,0),
+(@PATH,30,-8712.949,1440.549,-69.93085,0,0,1,0,100,0),
+(@PATH,31,-8684.471,1454.425,-69.90324,0,0,1,0,100,0),
+(@PATH,32,-8667.691,1471.393,-69.88974,0,0,1,0,100,0),
+(@PATH,33,-8638.46,1491.58,-69.76362,0,0,1,0,100,0),
+(@PATH,34,-8621.95,1510.354,-69.86166,0,0,1,0,100,0),
+(@PATH,35,-8649.152,1507.348,-68.94562,0,0,1,0,100,0),
+(@PATH,36,-8685.408,1502.433,-69.90717,0,0,1,0,100,0),
+(@PATH,37,-8724.848,1499.006,-68.85789,0,0,1,0,100,0),
+(@PATH,38,-8685.408,1502.433,-69.90717,0,0,1,0,100,0),
+(@PATH,39,-8649.152,1507.348,-68.94562,0,0,1,0,100,0),
+(@PATH,40,-8621.95,1510.354,-69.86166,0,0,1,0,100,0),
+(@PATH,41,-8638.389,1491.629,-69.73217,0,0,1,0,100,0),
+(@PATH,42,-8667.691,1471.393,-69.88974,0,0,1,0,100,0),
+(@PATH,43,-8684.471,1454.425,-69.90324,0,0,1,0,100,0),
+(@PATH,44,-8712.949,1440.549,-69.93085,0,0,1,0,100,0),
+(@PATH,45,-8711.025,1419.595,-69.8176,0,0,1,0,100,0),
+(@PATH,46,-8680.427,1427.707,-69.89879,0,0,1,0,100,0),
+(@PATH,47,-8650.575,1437.557,-69.80312,0,0,1,0,100,0),
+(@PATH,48,-8629.429,1440.835,-68.46561,0,0,1,0,100,0),
+(@PATH,49,-8609.056,1445.661,-65.29099,0,0,1,0,100,0),
+(@PATH,50,-8618.646,1426.418,-67.81181,0,0,1,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,87964,6,90,2,12,37),
+(@NPC,87965,6,270,2,12,37),
+(@NPC,87966,6,360,2,0,0);
+
+-- Pathing for Vekniss Stinger Entry: 15235 'TDB FORMAT'
+SET @NPC := 87992;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8623.98,`position_y`=1334.81,`position_z`=-69.86489 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8623.98,`position_y`=1334.81,`position_z`=-69.86489 WHERE `guid`=87967; -- Vekniss Wasp
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8623.98,`position_y`=1334.81,`position_z`=-69.86489 WHERE `guid`=87968; -- Vekniss Wasp
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8623.98,`position_y`=1334.81,`position_z`=-69.86489 WHERE `guid`=87969; -- Vekniss Wasp
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,87967,87968,87969);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(87967,@PATH,0,0,1,0, ''),(87968,@PATH,0,0,1,0, ''),(87969,@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,-8623.98,1334.81,-69.86489,0,0,1,0,100,0),
+(@PATH,2,-8634.258,1313.449,-68.89619,0,0,1,0,100,0),
+(@PATH,3,-8623.98,1334.81,-69.86489,0,0,1,0,100,0),
+(@PATH,4,-8609.494,1363.034,-69.90972,0,0,1,0,100,0),
+(@PATH,5,-8586.571,1399.059,-66.1879,0,0,1,0,100,0),
+(@PATH,6,-8578.356,1419.405,-61.01471,0,0,1,0,100,0),
+(@PATH,7,-8597.195,1413.111,-66.22318,0,0,1,0,100,0),
+(@PATH,8,-8624.466,1398.803,-69.8503,0,0,1,0,100,0),
+(@PATH,9,-8649.411,1383.114,-69.89638,0,0,1,0,100,0),
+(@PATH,10,-8670.308,1369.943,-69.89581,0,0,1,0,100,0),
+(@PATH,11,-8689.218,1363.772,-68.88567,0,0,1,0,100,0),
+(@PATH,12,-8680.373,1391.337,-69.88323,0,0,1,0,100,0),
+(@PATH,13,-8667.099,1414.957,-69.89799,0,0,1,0,100,0),
+(@PATH,14,-8650.532,1430.125,-69.78033,0,0,1,0,100,0),
+(@PATH,15,-8628.963,1440.418,-68.43501,0,0,1,0,100,0),
+(@PATH,16,-8603.716,1459.491,-63.19542,0,0,1,0,100,0),
+(@PATH,17,-8634.405,1457.036,-68.30659,0,0,1,0,100,0),
+(@PATH,18,-8659.28,1457.645,-69.87594,0,0,1,0,100,0),
+(@PATH,19,-8685.762,1457.884,-69.90578,0,0,1,0,100,0),
+(@PATH,20,-8710.759,1451.817,-70.05974,0,0,1,0,100,0),
+(@PATH,21,-8733.675,1458.389,-69.94682,0,0,1,0,100,0),
+(@PATH,22,-8711.259,1475.931,-69.84384,0,0,1,0,100,0),
+(@PATH,23,-8684.056,1485.012,-69.90536,0,0,1,0,100,0),
+(@PATH,24,-8658.634,1491.176,-70.00501,0,0,1,0,100,0),
+(@PATH,25,-8643.371,1495.58,-69.92625,0,0,1,0,100,0),
+(@PATH,26,-8628.882,1499.146,-68.3502,0,0,1,0,100,0),
+(@PATH,27,-8652.819,1508.739,-68.82653,0,0,1,0,100,0),
+(@PATH,28,-8680.034,1515.398,-69.43343,0,0,1,0,100,0),
+(@PATH,29,-8713.806,1523.833,-70.50439,0,0,1,0,100,0),
+(@PATH,30,-8680.034,1515.398,-69.43343,0,0,1,0,100,0),
+(@PATH,31,-8652.98,1508.779,-68.82138,0,0,1,0,100,0),
+(@PATH,32,-8628.882,1499.146,-68.3502,0,0,1,0,100,0),
+(@PATH,33,-8643.371,1495.58,-69.92625,0,0,1,0,100,0),
+(@PATH,34,-8658.634,1491.176,-70.00501,0,0,1,0,100,0),
+(@PATH,35,-8684.056,1485.012,-69.90536,0,0,1,0,100,0),
+(@PATH,36,-8711.231,1475.952,-69.84595,0,0,1,0,100,0),
+(@PATH,37,-8733.675,1458.389,-69.94682,0,0,1,0,100,0),
+(@PATH,38,-8710.759,1451.817,-70.05974,0,0,1,0,100,0),
+(@PATH,39,-8685.762,1457.884,-69.90578,0,0,1,0,100,0),
+(@PATH,40,-8659.28,1457.645,-69.87594,0,0,1,0,100,0),
+(@PATH,41,-8634.405,1457.036,-68.30659,0,0,1,0,100,0),
+(@PATH,42,-8603.716,1459.491,-63.19542,0,0,1,0,100,0),
+(@PATH,43,-8628.963,1440.418,-68.43501,0,0,1,0,100,0),
+(@PATH,44,-8650.532,1430.125,-69.78033,0,0,1,0,100,0),
+(@PATH,45,-8667.099,1414.957,-69.89799,0,0,1,0,100,0),
+(@PATH,46,-8680.373,1391.337,-69.88323,0,0,1,0,100,0),
+(@PATH,47,-8689.218,1363.772,-68.88567,0,0,1,0,100,0),
+(@PATH,48,-8670.308,1369.943,-69.89581,0,0,1,0,100,0),
+(@PATH,49,-8649.411,1383.114,-69.89638,0,0,1,0,100,0),
+(@PATH,50,-8624.466,1398.803,-69.8503,0,0,1,0,100,0),
+(@PATH,51,-8597.195,1413.111,-66.22318,0,0,1,0,100,0),
+(@PATH,52,-8578.356,1419.405,-61.01471,0,0,1,0,100,0),
+(@PATH,53,-8586.571,1399.059,-66.1879,0,0,1,0,100,0),
+(@PATH,54,-8609.494,1363.034,-69.90972,0,0,1,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,87967,6,90,2,2,29),
+(@NPC,87968,6,270,2,2,29),
+(@NPC,87969,6,360,2,0,0);
+
+-- Pathing for Vekniss Stinger Entry: 15235 'TDB FORMAT'
+SET @NPC := 87993;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8627.878,`position_y`=1556.896,`position_z`=-77.69943 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8627.878,`position_y`=1556.896,`position_z`=-77.69943 WHERE `guid`=87970; -- Vekniss Wasp
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8627.878,`position_y`=1556.896,`position_z`=-77.69943 WHERE `guid`=87971; -- Vekniss Wasp
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8627.878,`position_y`=1556.896,`position_z`=-77.69943 WHERE `guid`=87995; -- Qiraji Lasher
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,87970,87971,87995);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(87970,@PATH,0,0,1,0, ''),(87971,@PATH,0,0,1,0, ''),(87995,@PATH,0,0,1,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,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,-8627.878,1556.896,-77.69943,0,0,1,0,100,0),
+(@PATH,2,-8605.357,1575.12,-80.19345,0,0,1,0,100,0),
+(@PATH,3,-8612.334,1613.268,-88.55583,0,0,1,0,100,0),
+(@PATH,4,-8586.318,1634.416,-89.21418,0,0,1,0,100,0),
+(@PATH,5,-8576.596,1669.095,-90.36967,0,0,1,0,100,0),
+(@PATH,6,-8584.211,1701.455,-91.66071,0,0,1,0,100,0),
+(@PATH,7,-8570.804,1737.575,-90.75662,0,0,1,0,100,0),
+(@PATH,8,-8581.879,1760.92,-91.87544,0,0,1,0,100,0),
+(@PATH,9,-8589.551,1734.61,-90.93699,0,0,1,0,100,0),
+(@PATH,10,-8588.171,1710.714,-91.73016,0,0,1,0,100,0),
+(@PATH,11,-8596.261,1697.514,-91.66012,0,0,1,0,100,0),
+(@PATH,12,-8605.489,1655.251,-89.98928,0,0,1,0,100,0),
+(@PATH,13,-8632.322,1660.238,-89.734,0,0,1,0,100,0),
+(@PATH,14,-8677.901,1675.274,-88.18523,0,0,1,0,100,0),
+(@PATH,15,-8718.77,1662.168,-84.18893,0,0,1,0,100,0),
+(@PATH,16,-8690.873,1675.741,-85.92585,0,0,1,0,100,0),
+(@PATH,17,-8653.208,1690.787,-90.23106,0,0,1,0,100,0),
+(@PATH,18,-8620.695,1704.375,-90.88026,0,0,1,0,100,0),
+(@PATH,19,-8593.161,1708.36,-91.68605,0,0,1,0,100,0),
+(@PATH,20,-8571.983,1710.358,-91.63534,0,0,1,0,100,0),
+(@PATH,21,-8537.26,1707.522,-90.49876,0,0,1,0,100,0),
+(@PATH,22,-8571.903,1710.365,-91.61901,0,0,1,0,100,0),
+(@PATH,23,-8593.161,1708.36,-91.68605,0,0,1,0,100,0),
+(@PATH,24,-8620.695,1704.375,-90.88026,0,0,1,0,100,0),
+(@PATH,25,-8653.208,1690.787,-90.23106,0,0,1,0,100,0),
+(@PATH,26,-8690.873,1675.741,-85.92585,0,0,1,0,100,0),
+(@PATH,27,-8718.77,1662.168,-84.18893,0,0,1,0,100,0),
+(@PATH,28,-8677.901,1675.274,-88.18523,0,0,1,0,100,0),
+(@PATH,29,-8632.322,1660.238,-89.734,0,0,1,0,100,0),
+(@PATH,30,-8605.489,1655.251,-89.98928,0,0,1,0,100,0),
+(@PATH,31,-8596.261,1697.514,-91.66012,0,0,1,0,100,0),
+(@PATH,32,-8588.171,1710.714,-91.73016,0,0,1,0,100,0),
+(@PATH,33,-8589.551,1734.61,-90.93699,0,0,1,0,100,0),
+(@PATH,34,-8581.879,1760.92,-91.87544,0,0,1,0,100,0),
+(@PATH,35,-8570.804,1737.575,-90.75662,0,0,1,0,100,0),
+(@PATH,36,-8584.211,1701.455,-91.66071,0,0,1,0,100,0),
+(@PATH,37,-8576.596,1669.095,-90.36967,0,0,1,0,100,0),
+(@PATH,38,-8586.318,1634.416,-89.21418,0,0,1,0,100,0),
+(@PATH,39,-8612.334,1613.268,-88.55583,0,0,1,0,100,0),
+(@PATH,40,-8605.357,1575.12,-80.19345,0,0,1,0,100,0),
+(@PATH,41,-8627.878,1556.896,-77.69943,0,0,1,0,100,0),
+(@PATH,42,-8615.41,1527.631,-72.21809,0,0,1,0,100,0),
+(@PATH,43,-8621.278,1502.706,-68.84049,0,0,1,0,100,0),
+(@PATH,44,-8613.856,1468.638,-65.51812,0,0,1,0,100,0),
+(@PATH,45,-8611.396,1441.914,-66.07516,0,0,1,0,100,0),
+(@PATH,46,-8648.351,1425.724,-69.76824,0,0,1,0,100,0),
+(@PATH,47,-8690.109,1425.443,-69.89849,0,0,1,0,100,0),
+(@PATH,48,-8688.043,1466.35,-69.90285,0,0,1,0,100,0),
+(@PATH,49,-8686.704,1491.772,-69.90602,0,0,1,0,100,0),
+(@PATH,50,-8703.396,1513.316,-68.86869,0,0,1,0,100,0),
+(@PATH,51,-8699.363,1545.228,-73.52942,0,0,1,0,100,0),
+(@PATH,52,-8696.403,1571.755,-83.60843,0,0,1,0,100,0),
+(@PATH,53,-8705.782,1534.327,-70.82861,0,0,1,0,100,0),
+(@PATH,54,-8684.076,1503.377,-69.9073,0,0,1,0,100,0),
+(@PATH,55,-8677.442,1474.101,-69.88051,0,0,1,0,100,0),
+(@PATH,56,-8685.396,1458.496,-69.90556,0,0,1,0,100,0),
+(@PATH,57,-8672.833,1442.362,-69.90025,0,0,1,0,100,0),
+(@PATH,58,-8671.919,1416.88,-69.89809,0,0,1,0,100,0),
+(@PATH,59,-8658.405,1396.628,-69.89714,0,0,1,0,100,0),
+(@PATH,60,-8652.979,1366.002,-69.89549,0,0,1,0,100,0),
+(@PATH,61,-8631.563,1350.226,-69.90196,0,0,1,0,100,0),
+(@PATH,62,-8621.747,1329.126,-69.84866,0,0,1,0,100,0),
+(@PATH,63,-8600.984,1321.89,-69.9459,0,0,1,0,100,0),
+(@PATH,64,-8581.273,1314.304,-68.56961,0,0,1,0,100,0),
+(@PATH,65,-8600.984,1321.89,-69.9459,0,0,1,0,100,0),
+(@PATH,66,-8621.747,1329.126,-69.84866,0,0,1,0,100,0),
+(@PATH,67,-8631.563,1350.226,-69.90196,0,0,1,0,100,0),
+(@PATH,68,-8652.979,1366.002,-69.89549,0,0,1,0,100,0),
+(@PATH,69,-8658.405,1396.628,-69.89714,0,0,1,0,100,0),
+(@PATH,70,-8671.919,1416.88,-69.89809,0,0,1,0,100,0),
+(@PATH,71,-8672.833,1442.362,-69.90025,0,0,1,0,100,0),
+(@PATH,72,-8685.396,1458.496,-69.90556,0,0,1,0,100,0),
+(@PATH,73,-8677.442,1474.101,-69.88051,0,0,1,0,100,0),
+(@PATH,74,-8684.076,1503.377,-69.9073,0,0,1,0,100,0),
+(@PATH,75,-8705.782,1534.327,-70.82861,0,0,1,0,100,0),
+(@PATH,76,-8696.403,1571.755,-83.60843,0,0,1,0,100,0),
+(@PATH,77,-8699.363,1545.228,-73.52942,0,0,1,0,100,0),
+(@PATH,78,-8703.396,1513.316,-68.86869,0,0,1,0,100,0),
+(@PATH,79,-8686.704,1491.772,-69.90602,0,0,1,0,100,0),
+(@PATH,80,-8688.043,1466.35,-69.90285,0,0,1,0,100,0),
+(@PATH,81,-8690.109,1425.443,-69.89849,0,0,1,0,100,0),
+(@PATH,82,-8648.351,1425.724,-69.76824,0,0,1,0,100,0),
+(@PATH,83,-8611.396,1441.914,-66.07516,0,0,1,0,100,0),
+(@PATH,84,-8613.856,1468.638,-65.51812,0,0,1,0,100,0),
+(@PATH,85,-8621.252,1502.585,-68.85918,0,0,1,0,100,0),
+(@PATH,86,-8615.41,1527.631,-72.21809,0,0,1,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,87970,6,90,2,21,64),
+(@NPC,87971,6,270,2,21,64),
+(@NPC,87995,6,360,2,0,0);
+
+-- Pathing for Vekniss Stinger Entry: 15235 'TDB FORMAT'
+SET @NPC := 87997;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8632.927,`position_y`=1329.29,`position_z`=-69.79494 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8632.927,`position_y`=1329.29,`position_z`=-69.79494 WHERE `guid`=87972; -- Vekniss Wasp
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8632.927,`position_y`=1329.29,`position_z`=-69.79494 WHERE `guid`=87973; -- Vekniss Wasp
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8632.927,`position_y`=1329.29,`position_z`=-69.79494 WHERE `guid`=87996; -- Qiraji Lasher
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,87972,87973,87996);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(87972,@PATH,0,0,1,0, ''),(87973,@PATH,0,0,1,0, ''),(87996,@PATH,0,0,1,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,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,-8632.927,1329.29,-69.79494,0,0,1,0,100,0),
+(@PATH,2,-8652.701,1333.004,-68.40736,0,0,1,0,100,0),
+(@PATH,3,-8680.63,1356.865,-69.12091,0,0,1,0,100,0),
+(@PATH,4,-8665.341,1388.947,-69.89678,0,0,1,0,100,0),
+(@PATH,5,-8671.486,1426.792,-69.89878,0,0,1,0,100,0),
+(@PATH,6,-8697.307,1425.366,-69.90847,0,0,1,0,100,0),
+(@PATH,7,-8717.54,1450.804,-70.15675,0,0,1,0,100,0),
+(@PATH,8,-8685.707,1480.185,-69.88573,0,0,1,0,100,0),
+(@PATH,9,-8687.312,1502.292,-69.90711,0,0,1,0,100,0),
+(@PATH,10,-8710.659,1518.567,-69.73161,0,0,1,0,100,0),
+(@PATH,11,-8706.653,1553.953,-76.87526,0,0,1,0,100,0),
+(@PATH,12,-8693.664,1593.24,-87.52875,0,0,1,0,100,0),
+(@PATH,13,-8682.797,1563.556,-79.95404,0,0,1,0,100,0),
+(@PATH,14,-8670.129,1531.131,-69.25419,0,0,1,0,100,0),
+(@PATH,15,-8650.239,1513.957,-68.97311,0,0,1,0,100,0),
+(@PATH,16,-8628.124,1493.124,-68.32035,0,0,1,0,100,0),
+(@PATH,17,-8614.616,1451.34,-66.25972,0,0,1,0,100,0),
+(@PATH,18,-8606.941,1423.058,-66.755,0,0,1,0,100,0),
+(@PATH,19,-8578.108,1397.931,-64.62989,0,0,1,0,100,0),
+(@PATH,20,-8581,1380.874,-67.55366,0,0,1,0,100,0),
+(@PATH,21,-8606.554,1354.503,-69.90284,0,0,1,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,87972,6,90,2,0,0),
+(@NPC,87973,6,270,2,0,0),
+(@NPC,87996,6,360,2,0,0);
+
+-- Pathing for Vekniss Stinger Entry: 15235 'TDB FORMAT'
+SET @NPC := 87998;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8602.222,`position_y`=1420.14,`position_z`=-66.16376 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8602.222,`position_y`=1420.14,`position_z`=-66.16376 WHERE `guid`=87974; -- Vekniss Wasp
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8602.222,`position_y`=1420.14,`position_z`=-66.16376 WHERE `guid`=87975; -- Vekniss Wasp
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8602.222,`position_y`=1420.14,`position_z`=-66.16376 WHERE `guid`=87976; -- Vekniss Wasp
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,87974,87975,87976);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(87974,@PATH,0,0,1,0, ''),(87975,@PATH,0,0,1,0, ''),(87976,@PATH,0,0,1,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,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,-8602.222,1420.14,-66.16376,0,0,1,0,100,0),
+(@PATH,2,-8600.822,1382.153,-68.87067,0,0,1,0,100,0),
+(@PATH,3,-8579.124,1346.505,-68.48977,0,0,1,0,100,0),
+(@PATH,4,-8572.202,1326.875,-67.66993,0,0,1,0,100,0),
+(@PATH,5,-8585.142,1302.318,-68.76385,0,0,1,0,100,0),
+(@PATH,6,-8619.394,1300.438,-68.81915,0,0,1,0,100,0),
+(@PATH,7,-8646.751,1323.468,-68.54993,0,0,1,0,100,0),
+(@PATH,8,-8662.735,1341.994,-68.51302,0,0,1,0,100,0),
+(@PATH,9,-8690.161,1374.271,-69.59505,0,0,1,0,100,0),
+(@PATH,10,-8711.819,1409.641,-69.78663,0,0,1,0,100,0),
+(@PATH,11,-8720.594,1446.922,-70.16204,0,0,1,0,100,0),
+(@PATH,12,-8720.908,1475.034,-69.86876,0,0,1,0,100,0),
+(@PATH,13,-8716.834,1490.991,-69.79664,0,0,1,0,100,0),
+(@PATH,14,-8692.722,1513.566,-69.40113,0,0,1,0,100,0),
+(@PATH,15,-8657.146,1508.662,-69.40543,0,0,1,0,100,0),
+(@PATH,16,-8636.427,1495.452,-69.00857,0,0,1,0,100,0),
+(@PATH,17,-8608.235,1466.913,-64.1589,0,0,1,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,87974,6,90,2,0,0),
+(@NPC,87975,6,270,2,0,0),
+(@NPC,87976,6,360,2,0,0);
+
+-- Fankriss the Unyielding respawn linking
+DELETE FROM `linked_respawn` WHERE `linkedGuid`=87911;
+INSERT INTO `linked_respawn` (`guid`,`linkedGuid`,`linkType`) VALUES
+(87901,87911,0),(87902,87911,0),(87903,87911,0),(87904,87911,0),(87905,87911,0),(87906,87911,0),
+(87678,87911,0),(87679,87911,0),(87680,87911,0),(87681,87911,0),(87682,87911,0),(87683,87911,0),
+(87685,87911,0),(87686,87911,0),(87687,87911,0),(87688,87911,0),(87689,87911,0),(87690,87911,0),
+(87692,87911,0),(87694,87911,0),(87695,87911,0),(87696,87911,0),(87697,87911,0),(87698,87911,0),
+(87699,87911,0),(87700,87911,0),(87702,87911,0),(87703,87911,0),(87704,87911,0),(87705,87911,0),
+(87706,87911,0),(87707,87911,0),(87708,87911,0),(87710,87911,0),(87711,87911,0),(87712,87911,0),
+(87713,87911,0),(87714,87911,0),(87715,87911,0),(87716,87911,0),(87717,87911,0),(87718,87911,0),
+(87719,87911,0),(87720,87911,0),(87721,87911,0),(87725,87911,0),(87726,87911,0),(87727,87911,0),
+(87728,87911,0),(87729,87911,0),(87730,87911,0),(87731,87911,0),(87732,87911,0),(87733,87911,0),
+(87734,87911,0),(87735,87911,0),(87736,87911,0),(87737,87911,0),(87738,87911,0),(87739,87911,0),
+(87740,87911,0),(87741,87911,0),(87742,87911,0),(87743,87911,0),(87745,87911,0),(87747,87911,0),
+(87748,87911,0),(87749,87911,0),(87750,87911,0),(87751,87911,0),(87752,87911,0),(87753,87911,0),
+(87754,87911,0),(87755,87911,0),(87756,87911,0),(87757,87911,0),(87758,87911,0),(87759,87911,0),
+(87760,87911,0),(87761,87911,0),(87762,87911,0),(87763,87911,0),(87764,87911,0),(87765,87911,0),
+(87767,87911,0),(87770,87911,0),(87772,87911,0),(87774,87911,0),(87776,87911,0),(87777,87911,0),
+(87778,87911,0),(87779,87911,0),(87780,87911,0),(87781,87911,0),(87782,87911,0),(87784,87911,0),
+(87786,87911,0),(87788,87911,0),(87789,87911,0),(87790,87911,0),(87791,87911,0),(87793,87911,0),
+(87794,87911,0),(87795,87911,0),(87797,87911,0),(87799,87911,0),(87800,87911,0),(87801,87911,0),
+(87802,87911,0),(87803,87911,0),(87805,87911,0),(87807,87911,0),(87808,87911,0),(87809,87911,0),
+(87811,87911,0),(87812,87911,0),(87813,87911,0),(87814,87911,0),(87815,87911,0),(87816,87911,0),
+(87817,87911,0),(87818,87911,0),(87819,87911,0),(87820,87911,0),(87821,87911,0),(87822,87911,0),
+(87823,87911,0),(87824,87911,0),(87826,87911,0),(87828,87911,0),(87829,87911,0);
+
+-- Princess Huhuran respawn linking
+DELETE FROM `linked_respawn` WHERE `linkedGuid`=88014;
+INSERT INTO `linked_respawn` (`guid`,`linkedGuid`,`linkType`) VALUES
+(87939,88014,0),(87940,88014,0),(87941,88014,0),(87942,88014,0),(87943,88014,0),(87944,88014,0),
+(87990,88014,0),(87991,88014,0),(87992,88014,0),(87993,88014,0),(87997,88014,0),(87998,88014,0),
+(87962,88014,0),(87963,88014,0),(87964,88014,0),(87965,88014,0),(87966,88014,0),(87967,88014,0),
+(87968,88014,0),(87969,88014,0),(87970,88014,0),(87971,88014,0),(87972,88014,0),(87973,88014,0),
+(87974,88014,0),(87975,88014,0),(87976,88014,0),(87994,88014,0),(87995,88014,0),(87996,88014,0);
+
+-- Remove underspawning of Qiraji Scarab
+DELETE FROM `creature` WHERE `guid` BETWEEN 87572 AND 87594;
+
+-- Qiraji Scarab
+SET @CGUID := 144235;
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+96;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 15316, 531, 1, 1, -8718.273, 1668.985, -83.24529, 6.276577, 7200, 0, 0),
+(@CGUID+1, 15316, 531, 1, 1, -8752.732, 1622.762, -82.50239, 3.85716, 7200, 0, 0),
+(@CGUID+2, 15316, 531, 1, 1, -8848.825, 1543.332, -95.77992, 0.3748086, 7200, 0, 0),
+(@CGUID+3, 15316, 531, 1, 1, -8852.401, 1221.99, -104.3232, 5.082306, 7200, 0, 0),
+(@CGUID+4, 15316, 531, 1, 1, -8856.361, 1231.608, -104.3222, 0.03505083, 7200, 0, 0),
+(@CGUID+5, 15316, 531, 1, 1, -8857.818, 1211.251, -104.301, 1.676702, 7200, 0, 0),
+(@CGUID+6, 15316, 531, 1, 1, -8861.068, 1221.99, -104.3127, 5.777609, 7200, 0, 0),
+(@CGUID+7, 15316, 531, 1, 1, -8861.551, 1424.439, -91.73545, 4.751832, 7200, 0, 0),
+(@CGUID+8, 15316, 531, 1, 1, -8861.7, 1215.009, -104.3096, 4.039688, 7200, 0, 0),
+(@CGUID+9, 15316, 531, 1, 1, -8895.811, 1440.09, -90.5479, 6.037028, 7200, 0, 0),
+(@CGUID+10, 15316, 531, 1, 1, -8903.062, 1233.613, -112.2933, 3.425546, 7200, 0, 0),
+(@CGUID+11, 15316, 531, 1, 1, -8913.198, 1239.525, -112.2094, 5.026548, 7200, 0, 0),
+(@CGUID+12, 15316, 531, 1, 1, -8914.45, 1228.33, -112.2933, 2.326542, 7200, 0, 0),
+(@CGUID+13, 15316, 531, 1, 1, -8915.258, 1169.887, -112.3025, 3.203353, 7200, 0, 0),
+(@CGUID+14, 15316, 531, 1, 1, -8915.822, 1271.88, -112.2893, 5.160469, 7200, 0, 0),
+(@CGUID+15, 15316, 531, 1, 1, -8916.75, 1288.38, -112.2935, 0.1507932, 7200, 0, 0),
+(@CGUID+16, 15316, 531, 1, 1, -8921.445, 1263.286, -112.2916, 1.408914, 7200, 0, 0),
+(@CGUID+17, 15316, 531, 1, 1, -8921.779, 1299.67, -112.2189, 6.108652, 7200, 0, 0),
+(@CGUID+18, 15316, 531, 1, 1, -8922.732, 1187.455, -112.2936, 5.639871, 7200, 0, 0),
+(@CGUID+19, 15316, 531, 1, 1, -8923.949, 1172.429, -112.3033, 5.763388, 7200, 0, 0),
+(@CGUID+20, 15316, 531, 1, 1, -8924.408, 1272.34, -112.2882, 5.481043, 7200, 0, 0),
+(@CGUID+21, 15316, 531, 1, 1, -8926.774, 1237.892, -112.2923, 2.316605, 7200, 0, 0),
+(@CGUID+22, 15316, 531, 1, 1, -8927.355, 1291.111, -112.2965, 2.028318, 7200, 0, 0),
+(@CGUID+23, 15316, 531, 1, 1, -8928.101, 1227.168, -112.2921, 3.446646, 7200, 0, 0),
+(@CGUID+24, 15316, 531, 1, 1, -8928.22, 1368.938, -104.2533, 0.8451178, 7200, 0, 0),
+(@CGUID+25, 15316, 531, 1, 1, -8933.846, 1249.548, -112.2922, 2.21655, 7200, 0, 0),
+(@CGUID+26, 15316, 531, 1, 1, -8935.909, 1189.324, -112.2886, 5.859407, 7200, 0, 0),
+(@CGUID+27, 15316, 531, 1, 1, -8939.716, 1163.848, -112.2995, 0.5001168, 7200, 0, 0),
+(@CGUID+28, 15316, 531, 1, 1, -8942.026, 1261.226, -112.2923, 5.235967, 7200, 0, 0),
+(@CGUID+29, 15316, 531, 1, 1, -8943.135, 1192.366, -112.2916, 5.814977, 7200, 0, 0),
+(@CGUID+30, 15316, 531, 1, 1, -8951.372, 1274.603, -112.2933, 3.105438, 7200, 0, 0),
+(@CGUID+31, 15316, 531, 1, 1, -8960.903, 1280.689, -112.2933, 3.253839, 7200, 0, 0),
+(@CGUID+32, 15316, 531, 1, 1, -8962.061, 1269.011, -112.5005, 4.200222, 7200, 0, 0),
+(@CGUID+33, 15316, 531, 1, 1, -8964.825, 1240.759, -112.6207, 3.0616, 7200, 0, 0),
+(@CGUID+34, 15316, 531, 1, 1, -8966.551, 1207.659, -112.2936, 4.477177, 7200, 0, 0),
+(@CGUID+35, 15316, 531, 1, 1, -8968.729, 1325.82, -104.2429, 3.186054, 7200, 0, 0),
+(@CGUID+36, 15316, 531, 1, 1, -8972.038, 1214.245, -112.2936, 1.164536, 7200, 0, 0),
+(@CGUID+37, 15316, 531, 1, 1, -8972.853, 1276.217, -112.2933, 3.891855, 7200, 0, 0),
+(@CGUID+38, 15316, 531, 1, 1, -8974.806, 1226.225, -112.2935, 1.722429, 7200, 0, 0),
+(@CGUID+39, 15316, 531, 1, 1, -8977.898, 1320.487, -104.2417, 3.175818, 7200, 0, 0),
+(@CGUID+40, 15316, 531, 1, 1, -8981.08, 1223.435, -112.2936, 0.2615982, 7200, 0, 0),
+(@CGUID+41, 15316, 531, 1, 1, -8981.135, 1332.209, -104.2538, 5.953023, 7200, 0, 0),
+(@CGUID+42, 15316, 531, 1, 1, -8982.36, 1235.153, -112.2919, 1.343902, 7200, 0, 0),
+(@CGUID+43, 15316, 531, 1, 1, -8984.571, 1250.385, -112.2913, 5.36409, 7200, 0, 0),
+(@CGUID+44, 15316, 531, 1, 1, -8991.225, 1329.982, -104.2318, 3.062955, 7200, 0, 0),
+(@CGUID+45, 15316, 531, 1, 1, -8992.072, 1319.728, -104.2388, 3.363478, 7200, 0, 0),
+(@CGUID+46, 15316, 531, 1, 1, -9002.667, 1154.327, -104.3145, 6.014025, 7200, 0, 0),
+(@CGUID+47, 15316, 531, 1, 1, -9006.724, 1241.467, -112.2903, 1.948067, 7200, 0, 0),
+(@CGUID+48, 15316, 531, 1, 1, -9011.103, 1167.529, -104.3195, 1.777823, 7200, 0, 0),
+(@CGUID+49, 15316, 531, 1, 1, -9014.963, 1233.01, -112.2952, 3.99794, 7200, 0, 0),
+(@CGUID+50, 15316, 531, 1, 1, -9016.687, 1169.943, -104.3132, 3.21999, 7200, 0, 0),
+(@CGUID+51, 15316, 531, 1, 1, -9019.488, 1151.87, -104.3178, 4.565871, 7200, 0, 0),
+(@CGUID+52, 15316, 531, 1, 1, -9020.327, 1250.439, -112.3019, 3.988241, 7200, 0, 0),
+(@CGUID+53, 15316, 531, 1, 1, -9022.727, 1161.319, -104.2895, 2.878046, 7200, 0, 0),
+(@CGUID+54, 15316, 531, 1, 1, -9026.855, 1240.548, -112.3019, 4.020616, 7200, 0, 0),
+(@CGUID+55, 15316, 531, 1, 1, -9028.263, 1233.39, -112.303, 1.271099, 7200, 0, 0),
+(@CGUID+56, 15316, 531, 1, 1, -9032.163, 1322.912, -104.1445, 2.076942, 7200, 0, 0),
+(@CGUID+57, 15316, 531, 1, 1, -9041.214, 1418.469, -105.3165, 6.056293, 7200, 0, 0),
+(@CGUID+58, 15316, 531, 1, 1, -9043.839, 1352.871, -103.4252, 0.4712389, 7200, 0, 0),
+(@CGUID+59, 15316, 531, 1, 1, -9044.052, 1416.098, -105.2357, 5.078908, 7200, 0, 0),
+(@CGUID+60, 15316, 531, 1, 1, -9052.255, 1412.902, -105.2205, 2.076942, 7200, 0, 0),
+(@CGUID+61, 15316, 531, 1, 1, -9073.752, 1386.457, -107.3353, 0.7195361, 7200, 0, 0),
+(@CGUID+62, 15316, 531, 1, 1, -9075.857, 1399.424, -106.766, 0.1396263, 7200, 0, 0),
+(@CGUID+63, 15316, 531, 1, 1, -9077.962, 1380.42, -106.7133, 2.485329, 7200, 0, 0),
+(@CGUID+64, 15316, 531, 1, 1, -9084.801, 1348.045, -104.9859, 2.426008, 7200, 0, 0),
+(@CGUID+65, 15316, 531, 1, 1, -9085.026, 1341.638, -105.1593, 1.099557, 7200, 0, 0),
+(@CGUID+66, 15316, 531, 1, 1, -9085.651, 1336.603, -104.9917, 2.395166, 7200, 0, 0),
+(@CGUID+67, 15316, 531, 1, 1, -9088.616, 1402.316, -107.2495, 1.026358, 7200, 0, 0),
+(@CGUID+68, 15316, 531, 1, 1, -9091.26, 1510.94, -99.81429, 3.543018, 7200, 0, 0),
+(@CGUID+69, 15316, 531, 1, 1, -9092.019, 1351.04, -105.4157, 4.974188, 7200, 0, 0),
+(@CGUID+70, 15316, 531, 1, 1, -9094.279, 1499.209, -102.2279, 0.6806784, 7200, 0, 0),
+(@CGUID+71, 15316, 531, 1, 1, -9095.951, 1507.988, -100.7126, 4.886922, 7200, 0, 0),
+(@CGUID+72, 15316, 531, 1, 1, -9098.203, 1357.665, -105.5745, 0.7330383, 7200, 0, 0),
+(@CGUID+73, 15316, 531, 1, 1, -9099.199, 1350.561, -105.9741, 6.248279, 7200, 0, 0),
+(@CGUID+74, 15316, 531, 1, 1, -9101.524, 1505.308, -100.3417, 1.174368, 7200, 0, 0),
+(@CGUID+75, 15316, 531, 1, 1, -9102.322, 1446.374, -105.6202, 1.196755, 7200, 0, 0),
+(@CGUID+76, 15316, 531, 1, 1, -9147.428, 1516.564, -94.89061, 1.853269, 7200, 0, 0),
+(@CGUID+77, 15316, 531, 1, 1, -9176.505, 1554.577, -83.83012, 5.850253, 7200, 0, 0),
+(@CGUID+78, 15316, 531, 1, 1, -9178.145, 1483.475, -96.65578, 3.036873, 7200, 0, 0),
+(@CGUID+79, 15316, 531, 1, 1, -9178.386, 1652.744, -64.78233, 4.974188, 7200, 0, 0),
+(@CGUID+80, 15316, 531, 1, 1, -9178.485, 1667.534, -60.37609, 1.297821, 7200, 0, 0),
+(@CGUID+81, 15316, 531, 1, 1, -9178.765, 1479.855, -97.55507, 1.937315, 7200, 0, 0),
+(@CGUID+82, 15316, 531, 1, 1, -9183.195, 1475.588, -98.77051, 2.478368, 7200, 0, 0),
+(@CGUID+83, 15316, 531, 1, 1, -9183.288, 1489.488, -95.63787, 4.425344, 7200, 0, 0),
+(@CGUID+84, 15316, 531, 1, 1, -9188.178, 1471.158, -99.32278, 5.113815, 7200, 0, 0),
+(@CGUID+85, 15316, 531, 1, 1, -9188.786, 1657.487, -64.15721, 4.23883, 7200, 0, 0),
+(@CGUID+86, 15316, 531, 1, 1, -9189.339, 1531.628, -85.89825, 6.195919, 7200, 0, 0),
+(@CGUID+87, 15316, 531, 1, 1, -9191.104, 1521.98, -87.71062, 5.026548, 7200, 0, 0),
+(@CGUID+88, 15316, 531, 1, 1, -9191.532, 1537.507, -84.53267, 5.864306, 7200, 0, 0),
+(@CGUID+89, 15316, 531, 1, 1, -9192.622, 1647.297, -65.36017, 3.023633, 7200, 0, 0),
+(@CGUID+90, 15316, 531, 1, 1, -9197.758, 1667.534, -61.18479, 1.386884, 7200, 0, 0),
+(@CGUID+91, 15316, 531, 1, 1, -9211.669, 1526.513, -86.4464, 3.19899, 7200, 0, 0),
+(@CGUID+92, 15316, 531, 1, 1, -9212.579, 1576.334, -75.70084, 1.349625, 7200, 0, 0),
+(@CGUID+93, 15316, 531, 1, 1, -9218.398, 1574.924, -76.35339, 0.3938427, 7200, 0, 0),
+(@CGUID+94, 15316, 531, 1, 1, -9220.125, 1595.057, -72.45622, 0.8910265, 7200, 0, 0),
+(@CGUID+95, 15316, 531, 1, 1, -9225.136, 1585.159, -74.82648, 4.34335, 7200, 0, 0),
+(@CGUID+96, 15316, 531, 1, 1, -9235.81, 1588.07, -73.63668, 3.152771, 7200, 0, 0);
+
+-- Qiraji Scorpion
+SET @CGUID := 144332;
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+84;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 15317, 531, 1, 1, -8767.857, 1577.66, -89.34533, 6.280417, 7200, 0, 0),
+(@CGUID+1, 15317, 531, 1, 1, -8822.126, 1500.405, -93.85766, 3.89038, 7200, 0, 0),
+(@CGUID+2, 15317, 531, 1, 1, -8863.717, 1188.008, -104.3105, 3.325896, 7200, 0, 0),
+(@CGUID+3, 15317, 531, 1, 1, -8864.533, 1179.054, -104.2634, 3.61623, 7200, 0, 0),
+(@CGUID+4, 15317, 531, 1, 1, -8868.387, 1219.072, -104.3231, 1.470888, 7200, 0, 0),
+(@CGUID+5, 15317, 531, 1, 1, -8874.394, 1204.472, -104.3245, 2.822855, 7200, 0, 0),
+(@CGUID+6, 15317, 531, 1, 1, -8875.634, 1184.706, -104.3149, 1.349733, 7200, 0, 0),
+(@CGUID+7, 15317, 531, 1, 1, -8889.706, 1263.574, -112.2916, 1.86493, 7200, 0, 0),
+(@CGUID+8, 15317, 531, 1, 1, -8896.925, 1271.528, -112.2916, 1.54404, 7200, 0, 0),
+(@CGUID+9, 15317, 531, 1, 1, -8902.623, 1258.208, -112.2916, 1.783228, 7200, 0, 0),
+(@CGUID+10, 15317, 531, 1, 1, -8907.309, 1264.09, -112.2916, 1.616129, 7200, 0, 0),
+(@CGUID+11, 15317, 531, 1, 1, -8907.318, 1215.414, -112.2933, 5.120383, 7200, 0, 0),
+(@CGUID+12, 15317, 531, 1, 1, -8909.942, 1288.731, -112.2903, 2.332356, 7200, 0, 0),
+(@CGUID+13, 15317, 531, 1, 1, -8910.222, 1210.898, -112.2933, 0.9807646, 7200, 0, 0),
+(@CGUID+14, 15317, 531, 1, 1, -8916.438, 1218.511, -112.2933, 1.023647, 7200, 0, 0),
+(@CGUID+15, 15317, 531, 1, 1, -8927.608, 1219.249, -112.2919, 3.29309, 7200, 0, 0),
+(@CGUID+16, 15317, 531, 1, 1, -8931.669, 1478.098, -92.41454, 4.330824, 7200, 0, 0),
+(@CGUID+17, 15317, 531, 1, 1, -8932.62, 1206.902, -112.2916, 1.067478, 7200, 0, 0),
+(@CGUID+18, 15317, 531, 1, 1, -8937.341, 1231.81, -112.293, 1.432786, 7200, 0, 0),
+(@CGUID+19, 15317, 531, 1, 1, -8941.132, 1183.686, -112.289, 6.190642, 7200, 0, 0),
+(@CGUID+20, 15317, 531, 1, 1, -8945.947, 1250.477, -112.2929, 2.542778, 7200, 0, 0),
+(@CGUID+21, 15317, 531, 1, 1, -8948.824, 1331.953, -104.2506, 5.926363, 7200, 0, 0),
+(@CGUID+22, 15317, 531, 1, 1, -8949.483, 1285.587, -112.21, 6.056293, 7200, 0, 0),
+(@CGUID+23, 15317, 531, 1, 1, -8951.337, 1184.432, -112.2916, 5.571285, 7200, 0, 0),
+(@CGUID+24, 15317, 531, 1, 1, -8951.586, 1472.797, -92.3147, 1.302438, 7200, 0, 0),
+(@CGUID+25, 15317, 531, 1, 1, -8951.589, 1211.099, -112.2927, 1.28833, 7200, 0, 0),
+(@CGUID+26, 15317, 531, 1, 1, -8952.454, 1166.542, -112.3003, 0.01904146, 7200, 0, 0),
+(@CGUID+27, 15317, 531, 1, 1, -8953.988, 1344.636, -104.2234, 0.5719893, 7200, 0, 0),
+(@CGUID+28, 15317, 531, 1, 1, -8955.576, 1230.115, -112.6207, 1.36077, 7200, 0, 0),
+(@CGUID+29, 15317, 531, 1, 1, -8958.938, 1321.819, -104.2457, 5.784297, 7200, 0, 0),
+(@CGUID+30, 15317, 531, 1, 1, -8960.115, 1254.93, -112.2935, 5.113963, 7200, 0, 0),
+(@CGUID+31, 15317, 531, 1, 1, -8960.776, 1262.318, -112.2936, 3.113808, 7200, 0, 0),
+(@CGUID+32, 15317, 531, 1, 1, -8961.691, 1200.368, -112.2923, 1.925909, 7200, 0, 0),
+(@CGUID+33, 15317, 531, 1, 1, -8965.124, 1164.983, -112.2994, 0.2619652, 7200, 0, 0),
+(@CGUID+34, 15317, 531, 1, 1, -8965.508, 1178.931, -112.2083, 4.729842, 7200, 0, 0),
+(@CGUID+35, 15317, 531, 1, 1, -8966.613, 1337.695, -104.2513, 2.703376, 7200, 0, 0),
+(@CGUID+36, 15317, 531, 1, 1, -8973.95, 1265.45, -112.2938, 1.584118, 7200, 0, 0),
+(@CGUID+37, 15317, 531, 1, 1, -8977.52, 1266.341, -112.2916, 5.713685, 7200, 0, 0),
+(@CGUID+38, 15317, 531, 1, 1, -8978.57, 1198.204, -112.2933, 2.00547, 7200, 0, 0),
+(@CGUID+39, 15317, 531, 1, 1, -8984.783, 1209.762, -112.2933, 3.727343, 7200, 0, 0),
+(@CGUID+40, 15317, 531, 1, 1, -8989.297, 1202.465, -112.2933, 5.423434, 7200, 0, 0),
+(@CGUID+41, 15317, 531, 1, 1, -8992.732, 1212.768, -112.2933, 6.098367, 7200, 0, 0),
+(@CGUID+42, 15317, 531, 1, 1, -8996.319, 1224.411, -112.2871, 3.1986, 7200, 0, 0),
+(@CGUID+43, 15317, 531, 1, 1, -8996.775, 1272.687, -112.2916, 1.227572, 7200, 0, 0),
+(@CGUID+44, 15317, 531, 1, 1, -9002.565, 1324.533, -104.2338, 2.005882, 7200, 0, 0),
+(@CGUID+45, 15317, 531, 1, 1, -9005.325, 1249.047, -112.2889, 5.861159, 7200, 0, 0),
+(@CGUID+46, 15317, 531, 1, 1, -9009.533, 1273.289, -112.3006, 0.9313107, 7200, 0, 0),
+(@CGUID+47, 15317, 531, 1, 1, -9014.954, 1261.934, -112.3012, 1.054686, 7200, 0, 0),
+(@CGUID+48, 15317, 531, 1, 1, -9020.213, 1262.013, -112.2994, 4.35212, 7200, 0, 0),
+(@CGUID+49, 15317, 531, 1, 1, -9026.252, 1184.02, -104.3176, 2.335238, 7200, 0, 0),
+(@CGUID+50, 15317, 531, 1, 1, -9029.824, 1168.414, -104.2877, 5.261246, 7200, 0, 0),
+(@CGUID+51, 15317, 531, 1, 1, -9034.853, 1195.079, -104.3191, 5.497178, 7200, 0, 0),
+(@CGUID+52, 15317, 531, 1, 1, -9044.638, 1179.075, -104.2623, 4.273608, 7200, 0, 0),
+(@CGUID+53, 15317, 531, 1, 1, -9045.368, 1426.71, -106.2691, 4.956735, 7200, 0, 0),
+(@CGUID+54, 15317, 531, 1, 1, -9045.752, 1189.078, -104.2579, 1.568065, 7200, 0, 0),
+(@CGUID+55, 15317, 531, 1, 1, -9048.547, 1421.894, -106.3411, 0.05235988, 7200, 0, 0),
+(@CGUID+56, 15317, 531, 1, 1, -9054.128, 1419.324, -106.088, 3.316126, 7200, 0, 0),
+(@CGUID+57, 15317, 531, 1, 1, -9063.941, 1432.531, -107.3954, 6.056363, 7200, 0, 0),
+(@CGUID+58, 15317, 531, 1, 1, -9064.931, 1387.491, -106.5863, 4.276057, 7200, 0, 0),
+(@CGUID+59, 15317, 531, 1, 1, -9075.902, 1395.459, -106.8902, 0.5061455, 7200, 0, 0),
+(@CGUID+60, 15317, 531, 1, 1, -9081.571, 1399.585, -107.172, 5.270895, 7200, 0, 0),
+(@CGUID+61, 15317, 531, 1, 1, -9082.262, 1393.761, -107.1919, 0.1741033, 7200, 0, 0),
+(@CGUID+62, 15317, 531, 1, 1, -9086.603, 1497.652, -102.6972, 3.385939, 7200, 0, 0),
+(@CGUID+63, 15317, 531, 1, 1, -9087.264, 1506.401, -100.6753, 2.617994, 7200, 0, 0),
+(@CGUID+64, 15317, 531, 1, 1, -9090.989, 1356.731, -105.0189, 3.124139, 7200, 0, 0),
+(@CGUID+65, 15317, 531, 1, 1, -9091.271, 1492.376, -103.3976, 5.742133, 7200, 0, 0),
+(@CGUID+66, 15317, 531, 1, 1, -9091.804, 1342.174, -105.5085, 5.340707, 7200, 0, 0),
+(@CGUID+67, 15317, 531, 1, 1, -9098.125, 1447.736, -104.3787, 2.112744, 7200, 0, 0),
+(@CGUID+68, 15317, 531, 1, 1, -9098.346, 1364.72, -105.1836, 2.565634, 7200, 0, 0),
+(@CGUID+69, 15317, 531, 1, 1, -9099.76, 1498.805, -101.7028, 1.471863, 7200, 0, 0),
+(@CGUID+70, 15317, 531, 1, 1, -9103.596, 1357.07, -106.0872, 4.729842, 7200, 0, 0),
+(@CGUID+71, 15317, 531, 1, 1, -9105.113, 1363.609, -105.8369, 3.787364, 7200, 0, 0),
+(@CGUID+72, 15317, 531, 1, 1, -9126.784, 1462.199, -104.2633, 0.7992821, 7200, 0, 0),
+(@CGUID+73, 15317, 531, 1, 1, -9172.644, 1542.289, -87.25746, 4.763266, 7200, 0, 0),
+(@CGUID+74, 15317, 531, 1, 1, -9177.08, 1683.528, -54.50222, 0.04849045, 7200, 0, 0),
+(@CGUID+75, 15317, 531, 1, 1, -9183.351, 1644.611, -67.06108, 2.327298, 7200, 0, 0),
+(@CGUID+76, 15317, 531, 1, 1, -9187.728, 1680.688, -57.8031, 5.651324, 7200, 0, 0),
+(@CGUID+77, 15317, 531, 1, 1, -9190.996, 1674.806, -59.74267, 3.410446, 7200, 0, 0),
+(@CGUID+78, 15317, 531, 1, 1, -9193.495, 1691.111, -54.63859, 3.411577, 7200, 0, 0),
+(@CGUID+79, 15317, 531, 1, 1, -9197.91, 1677.646, -59.01847, 5.331757, 7200, 0, 0),
+(@CGUID+80, 15317, 531, 1, 1, -9200.417, 1565.645, -78.08263, 3.682645, 7200, 0, 0),
+(@CGUID+81, 15317, 531, 1, 1, -9215.096, 1566.989, -77.65082, 4.193158, 7200, 0, 0),
+(@CGUID+82, 15317, 531, 1, 1, -9215.519, 1556.678, -79.77057, 3.495375, 7200, 0, 0),
+(@CGUID+83, 15317, 531, 1, 1, -9223.643, 1562.967, -78.591, 0.9200022, 7200, 0, 0),
+(@CGUID+84, 15317, 531, 1, 1, -9231.377, 1566.911, -77.66441, 5.653526, 7200, 0, 0);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_05_world.sql
new file mode 100644
index 00000000000..5029b807055
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_05_world.sql
@@ -0,0 +1,2 @@
+-- Meteorite Crystal
+UPDATE `spell_proc_event` SET `ppmRate`=0 WHERE `entry`=64999;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_06_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_06_world.sql
new file mode 100644
index 00000000000..b3b5b23ea30
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_06_world.sql
@@ -0,0 +1,8 @@
+--
+UPDATE `waypoints` SET `position_z`=489.640110 WHERE `entry`=15491 AND `pointid`=3;
+UPDATE `creature_template` SET `InhabitType`=6 WHERE `entry`=15491;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=15491 AND `source_type`=0 AND `id`>38;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(15491,0,39,0,40,0,100,0,3,15491,0,0,91,2,3,0,0,0,0,1,0,0,0,0,0,0,0,"Eranikus, Tyrant of the Dream - On Waypoint 3 Reached - Remove Flag Hover"),
+(15491,0,40,0,54,0,100,0,0,0,0,0,18,768,0,0,0,0,0,1,0,0,0,0,0,0,0,"Eranikus, Tyrant of the Dream - On Just summoned - Set unitflag"),
+(15491,0,41,0,40,0,100,0,4,15491,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,"Eranikus, Tyrant of the Dream - On Waypoint 4 Reached - Remove unitflag");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_07_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_07_world.sql
new file mode 100644
index 00000000000..2124eec2a41
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_07_world.sql
@@ -0,0 +1,1839 @@
+-- AQ20 Full Respawn, Full Pathing **** 355 & 434 & 6XX ****
+SET @CGUID := 144417;
+DELETE FROM `creature` WHERE `map`=509;
+DELETE FROM `linked_respawn` WHERE `guid` BETWEEN 61988 AND 61993;
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+383;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 4076, 509, 1, 1, -8557.875, 1475.61, 32.09278, 0.3173114, 7200, 10, 1), -- Roach
+(@CGUID+1, 4076, 509, 1, 1, -8578.957, 1562.631, 38.3445, 2.08301, 7200, 10, 1), -- Roach
+(@CGUID+2, 4076, 509, 1, 1, -8670.483, 1374.597, 32.03201, 3.178652, 7200, 10, 1), -- Roach
+(@CGUID+3, 4076, 509, 1, 1, -8764.862, 1637.767, 21.83943, 1.083136, 7200, 10, 1), -- Roach
+(@CGUID+4, 4076, 509, 1, 1, -8839.453, 2198.035, 21.48637, 3.546741, 7200, 10, 1), -- Roach
+(@CGUID+5, 4076, 509, 1, 1, -8879.403, 1635.506, 21.51133, 0.4385682, 7200, 10, 1), -- Roach
+(@CGUID+6, 4076, 509, 1, 1, -8895.27, 1739.468, 21.59288, 3.728892, 7200, 10, 1), -- Roach
+(@CGUID+7, 4076, 509, 1, 1, -8958.73, 1640.258, 29.74357, 3.461734, 7200, 10, 1), -- Roach
+(@CGUID+8, 4076, 509, 1, 1, -8993.171, 2054.444, 24.64812, 0.330403, 7200, 10, 1), -- Roach
+(@CGUID+9, 4076, 509, 1, 1, -9007.328, 1625.977, 31.00255, 2.55359, 7200, 10, 1), -- Roach
+(@CGUID+10, 4076, 509, 1, 1, -9159.453, 1308.013, 21.74607, 0.6927378, 7200, 10, 1), -- Roach
+(@CGUID+11, 4076, 509, 1, 1, -9330.007, 1187.867, 21.52394, 5.304915, 7200, 10, 1), -- Roach
+(@CGUID+12, 4076, 509, 1, 1, -9447.224, 1341.093, 21.44869, 3.252343, 7200, 10, 1), -- Roach
+(@CGUID+13, 15168, 509, 1, 1, -8523.959, 1468.174, 32.73527, 2.546548, 7200, 5, 1), -- Vile Scarab
+(@CGUID+14, 15168, 509, 1, 1, -8556.954, 1410.153, 32.13479, 4.098383, 7200, 5, 1), -- Vile Scarab
+(@CGUID+15, 15168, 509, 1, 1, -8577.19, 1449.547, 32.29018, 0.351546, 7200, 5, 1), -- Vile Scarab
+(@CGUID+16, 15168, 509, 1, 1, -8585.965, 1341.191, 34.02468, 6.263584, 7200, 5, 1), -- Vile Scarab
+(@CGUID+17, 15168, 509, 1, 1, -8605.016, 1599.756, 32.03201, 2.771847, 7200, 5, 1), -- Vile Scarab
+(@CGUID+18, 15168, 509, 1, 1, -8610.068, 1357.368, 32.42776, 6.232846, 7200, 5, 1), -- Vile Scarab
+(@CGUID+19, 15168, 509, 1, 1, -8645.912, 1430.941, 32.48993, 4.987458, 7200, 5, 1), -- Vile Scarab
+(@CGUID+20, 15168, 509, 1, 1, -8659.348, 1666.773, 21.51167, 2.910921, 7200, 5, 1), -- Vile Scarab
+(@CGUID+21, 15168, 509, 1, 1, -8661.099, 1559.783, 32.03201, 5.295803, 7200, 5, 1), -- Vile Scarab
+(@CGUID+22, 15168, 509, 1, 1, -8694.207, 1489.305, 32.14948, 3.348807, 7200, 5, 1), -- Vile Scarab
+(@CGUID+23, 15168, 509, 1, 1, -8732.676, 1399.609, 32.53547, 3.420845, 7200, 5, 1), -- Vile Scarab
+(@CGUID+24, 15168, 509, 1, 1, -8733.768, 1600.124, 21.46972, 3.246312, 7200, 5, 1), -- Vile Scarab
+(@CGUID+25, 15168, 509, 1, 1, -8785.252, 2009.173, 21.46967, 3.001966, 7200, 5, 1), -- Vile Scarab
+(@CGUID+26, 15168, 509, 1, 1, -8792.841, 2131.115, 21.46975, 5.183628, 7200, 5, 1), -- Vile Scarab
+(@CGUID+27, 15168, 509, 1, 1, -8848.906, 1845.958, 21.46968, 2.059489, 7200, 5, 1), -- Vile Scarab
+(@CGUID+28, 15168, 509, 1, 1, -8917.903, 1547.614, 21.46967, 0.9948376, 7200, 5, 1), -- Vile Scarab
+(@CGUID+29, 15168, 509, 1, 1, -8978.44, 2101.632, 21.46971, 0.3665192, 7200, 5, 1), -- Vile Scarab
+(@CGUID+30, 15168, 509, 1, 1, -8994.842, 1916.528, 21.46968, 5.5676, 7200, 5, 1), -- Vile Scarab
+(@CGUID+31, 15168, 509, 1, 1, -9000.707, 1700.101, 21.57215, 4.433136, 7200, 5, 1), -- Vile Scarab
+(@CGUID+32, 15168, 509, 1, 1, -9058.105, 2159.35, 21.46968, 4.363323, 7200, 5, 1), -- Vile Scarab
+(@CGUID+33, 15168, 509, 1, 1, -9066.019, 1733.488, 21.53086, 3.246312, 7200, 5, 1), -- Vile Scarab
+(@CGUID+34, 15168, 509, 1, 1, -9211.341, 1432.979, 21.46969, 4.014257, 7200, 5, 1), -- Vile Scarab
+(@CGUID+35, 15318, 509, 1, 1, -9489.848, 1372.825, 21.59988, 4.380776, 7200, 5, 1), -- Hive'Zara Drone
+(@CGUID+36, 15318, 509, 1, 1, -9524.376, 1383.685, 21.51131, 1.03884, 7200, 5, 1), -- Hive'Zara Drone
+(@CGUID+37, 15318, 509, 1, 1, -9574.348, 1484.254, 22.76791, 1.781548, 7200, 5, 1), -- Hive'Zara Drone
+(@CGUID+38, 15318, 509, 1, 1, -9578.559, 1506.852, 21.73697, 3.014219, 7200, 5, 1), -- Hive'Zara Drone
+(@CGUID+39, 15318, 509, 1, 1, -9580.178, 1381.902, 23.9498, 1.777291, 7200, 5, 1), -- Hive'Zara Drone
+(@CGUID+40, 15318, 509, 1, 1, -9592.439, 1388.404, 25.74436, 2.019479, 7200, 5, 1), -- Hive'Zara Drone
+(@CGUID+41, 15319, 509, 1, 1, -9479.979, 1370.798, 23.41084, 1.989675, 7200, 5, 1), -- Hive'Zara Collector
+(@CGUID+42, 15319, 509, 1, 1, -9511.272, 1386.067, 21.51131, 0.1170127, 7200, 5, 1), -- Hive'Zara Collector
+(@CGUID+43, 15319, 509, 1, 1, -9571.893, 1493.507, 21.54095, 2.293517, 7200, 5, 1), -- Hive'Zara Collector
+(@CGUID+44, 15319, 509, 1, 1, -9580.605, 1480.182, 22.21877, 4.90255, 7200, 5, 1), -- Hive'Zara Collector
+(@CGUID+45, 15319, 509, 1, 1, -9589.697, 1407.815, 21.51132, 0.6980565, 7200, 5, 1), -- Hive'Zara Collector
+(@CGUID+46, 15319, 509, 1, 1, -9592.67, 1425.937, 21.63632, 2.661848, 7200, 5, 1), -- Hive'Zara Collector
+(@CGUID+47, 15320, 509, 1, 1, -9141.966, 1292.707, 21.46963, 1.710423, 7200, 5, 1), -- Hive'Zara Soldier
+(@CGUID+48, 15320, 509, 1, 1, -9149.69, 1284.749, 21.46964, 0.5061455, 7200, 5, 1), -- Hive'Zara Soldier
+(@CGUID+49, 15320, 509, 1, 1, -9187.016, 1463.765, 21.46968, 1.186824, 7200, 5, 1), -- Hive'Zara Soldier
+(@CGUID+50, 15320, 509, 1, 1, -9224.242, 1384.024, 21.46967, 3.193953, 7200, 5, 1), -- Hive'Zara Soldier
+(@CGUID+51, 15320, 509, 1, 1, -9236.348, 1396.04, 21.46967, 2.513274, 7200, 5, 1), -- Hive'Zara Soldier
+(@CGUID+52, 15320, 509, 1, 1, -9315.232, 1380.299, 21.50587, 5.462881, 7200, 5, 1), -- Hive'Zara Soldier
+(@CGUID+53, 15320, 509, 1, 1, -9340.127, 1210.839, 21.4696, 5.340707, 7200, 5, 1), -- Hive'Zara Soldier
+(@CGUID+54, 15320, 509, 1, 1, -9386.74, 1393.283, 21.46968, 2.076942, 7200, 5, 1), -- Hive'Zara Soldier
+(@CGUID+55, 15320, 509, 1, 1, -9395.24, 1388.353, 21.38681, 0.4920194, 7200, 5, 1), -- Hive'Zara Soldier
+(@CGUID+56, 15323, 509, 1, 1, -9154.134, 1292.979, 21.46964, 4.276057, 7200, 5, 1), -- Hive'Zara Sandstalker
+(@CGUID+57, 15323, 509, 1, 1, -9189.154, 1452.477, 21.52919, 2.059489, 7200, 5, 1), -- Hive'Zara Sandstalker
+(@CGUID+58, 15323, 509, 1, 1, -9199.545, 1464.198, 21.48786, 2.70526, 7200, 5, 1), -- Hive'Zara Sandstalker
+(@CGUID+59, 15323, 509, 1, 1, -9231.433, 1386.642, 21.46967, 0.4363323, 7200, 5, 1), -- Hive'Zara Sandstalker
+(@CGUID+60, 15323, 509, 1, 1, -9301.522, 1385.101, 21.46969, 5.67232, 7200, 5, 1), -- Hive'Zara Sandstalker
+(@CGUID+61, 15323, 509, 1, 1, -9311.369, 1389.395, 21.50966, 5.532694, 7200, 5, 1), -- Hive'Zara Sandstalker
+(@CGUID+62, 15323, 509, 1, 1, -9353.457, 1204.119, 21.85404, 4.13643, 7200, 5, 1), -- Hive'Zara Sandstalker
+(@CGUID+63, 15323, 509, 1, 1, -9359.12, 1217.685, 21.46961, 3.124139, 7200, 5, 1), -- Hive'Zara Sandstalker
+(@CGUID+64, 15323, 509, 1, 1, -9379.337, 1401.022, 21.47204, 3.316126, 7200, 5, 1), -- Hive'Zara Sandstalker
+(@CGUID+65, 15324, 509, 1, 1, -8517.444, 1505.661, 33.36475, 0.8377581, 7200, 0, 0), -- Qiraji Gladiator
+(@CGUID+66, 15324, 509, 1, 1, -8531.854, 1515.689, 33.26437, 0.7679449, 7200, 0, 0), -- Qiraji Gladiator
+(@CGUID+67, 15324, 509, 1, 1, -8693.788, 1565.823, 31.99034, 5.358161, 7200, 0, 0), -- Qiraji Gladiator
+(@CGUID+68, 15324, 509, 1, 1, -8706.146, 1552.285, 31.99034, 5.410521, 7200, 0, 0), -- Qiraji Gladiator
+(@CGUID+69, 15324, 509, 1, 1, -9053.818, 1664.356, 22.9385, 3.996804, 7200, 0, 0), -- Qiraji Gladiator
+(@CGUID+70, 15324, 509, 1, 1, -9067.317, 1673.464, 23.0715, 4.310963, 7200, 0, 0), -- Qiraji Gladiator
+(@CGUID+71, 15324, 509, 1, 1, -9148.94, 1510.32, 21.99232, 0.9424778, 7200, 0, 0), -- Qiraji Gladiator
+(@CGUID+72, 15324, 509, 1, 1, -9162.49, 1518.798, 22.7809, 0.2268928, 7200, 0, 0), -- Qiraji Gladiator
+(@CGUID+73, 15325, 509, 1, 1, -8515.021, 1397.78, 32.29177, 4.820597, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+74, 15325, 509, 1, 1, -8524.704, 1395.719, 31.98318, 5.121015, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+75, 15325, 509, 1, 1, -8535.219, 1424.391, 32.03201, 5.229107, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+76, 15325, 509, 1, 1, -8544.961, 1422.634, 32.03201, 5.260347, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+77, 15325, 509, 1, 1, -8639.566, 1345.902, 32.3508, 3.251172, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+78, 15325, 509, 1, 1, -8640.774, 1355.726, 32.31917, 3.251222, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+79, 15325, 509, 1, 1, -8654.444, 1491.354, 32.0958, 1.829467, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+80, 15325, 509, 1, 1, -8660.053, 1491.356, 32.18204, 2.223871, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+81, 15325, 509, 1, 1, -8660.561, 1414.245, 32.65175, 1.890694, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+82, 15325, 509, 1, 1, -8666.813, 1407.651, 32.03201, 2.012179, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+83, 15325, 509, 1, 1, -8695.072, 1455.611, 32.48226, 3.809897, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+84, 15325, 509, 1, 1, -8700.693, 1463.633, 33.78428, 3.815571, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+85, 15325, 509, 1, 1, -8743.022, 1607.379, 21.61758, 3.693705, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+86, 15325, 509, 1, 1, -8747.875, 1615.742, 21.87457, 3.717672, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+87, 15325, 509, 1, 1, -8752.388, 1622.344, 21.76074, 4.628274, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+88, 15325, 509, 1, 1, -8761.905, 1621.611, 21.83998, 4.671357, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+89, 15325, 509, 1, 1, -8773.826, 1640.988, 21.80477, 2.381759, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+90, 15325, 509, 1, 1, -8780.559, 1633.73, 21.72563, 2.381759, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+91, 15325, 509, 1, 1, -8816.079, 1599.633, 21.46869, 3.29854, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+92, 15325, 509, 1, 1, -8817.565, 1609.256, 20.37871, 3.284594, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+93, 15325, 509, 1, 1, -9586.802, 1602.671, 21.51135, 6.242362, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+94, 15325, 509, 1, 1, -9590.834, 1600.473, 21.51135, 0.05669658, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+95, 15325, 509, 1, 1, -9593.194, 1594.593, 21.55599, 1.229132, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+96, 15325, 509, 1, 1, -9606.353, 1571.422, 22.01131, 0.2620987, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+97, 15325, 509, 1, 1, -9607.973, 1606.99, 21.60341, 0.9448448, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+98, 15325, 509, 1, 1, -9608.446, 1563.199, 21.65768, 0.1963355, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+99, 15325, 509, 1, 1, -9609.348, 1615.344, 21.79114, 0.9476151, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+100, 15325, 509, 1, 1, -9610.393, 1610.891, 21.60728, 0.9449909, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+101, 15325, 509, 1, 1, -9649.376, 1648.167, 21.52642, 1.862836, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+102, 15325, 509, 1, 1, -9653.988, 1648.745, 21.59047, 1.866604, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+103, 15325, 509, 1, 1, -9656.947, 1652.301, 21.52642, 1.870413, 7200, 0, 0), -- Hive'Zara Wasp
+(@CGUID+104, 15327, 509, 1, 1, -8521.604, 1377.789, 34.2847, 4.518502, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+105, 15327, 509, 1, 1, -8538.28, 1413.481, 32.03201, 4.890828, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+106, 15327, 509, 1, 1, -8654.492, 1349.237, 32.22055, 0.1095644, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+107, 15327, 509, 1, 1, -8660.443, 1499.997, 32.17234, 2.224768, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+108, 15327, 509, 1, 1, -8667.888, 1419.82, 32.11544, 1.778565, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+109, 15327, 509, 1, 1, -8705.161, 1452.156, 33.72097, 3.983237, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+110, 15327, 509, 1, 1, -8750.896, 1607.642, 22.07515, 3.82532, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+111, 15327, 509, 1, 1, -8758.171, 1609.758, 21.96272, 4.207295, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+112, 15327, 509, 1, 1, -8787.256, 1646.833, 22.81458, 2.358341, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+113, 15327, 509, 1, 1, -8822.804, 1603.601, 21.43074, 3.162875, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+114, 15327, 509, 1, 1, -9578.752, 1590.721, 21.58902, 5.604074, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+115, 15327, 509, 1, 1, -9582.396, 1601.374, 21.63635, 6.097988, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+116, 15327, 509, 1, 1, -9590.949, 1573.593, 21.64739, 0.5360234, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+117, 15327, 509, 1, 1, -9592.131, 1596.068, 21.52306, 0.03750357, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+118, 15327, 509, 1, 1, -9603.499, 1605.943, 21.51134, 0.9452588, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+119, 15327, 509, 1, 1, -9604.769, 1560.449, 21.63631, 0.2232969, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+120, 15327, 509, 1, 1, -9623.114, 1586.583, 21.88172, 0.9226059, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+121, 15327, 509, 1, 1, -9637.552, 1612.699, 21.51152, 1.132231, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+122, 15327, 509, 1, 1, -9643.36, 1625.865, 21.68241, 1.686941, 7200, 0, 0), -- Hive'Zara Stinger
+(@CGUID+123, 15333, 509, 1, 1, -9450.053, 1422.016, 28.19568, 5.704928, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+124, 15333, 509, 1, 1, -9452.668, 1483.815, 22.87595, 1.221858, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+125, 15333, 509, 1, 1, -9454.068, 1451.504, 21.53237, 0.4250475, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+126, 15333, 509, 1, 1, -9483.096, 1476.489, 21.51131, 4.546051, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+127, 15333, 509, 1, 1, -9485.433, 1454.96, 21.51132, 1.341279, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+128, 15333, 509, 1, 1, -9491.116, 1377.249, 21.51131, 4.68092, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+129, 15333, 509, 1, 1, -9491.985, 1360.045, 21.51132, 1.734773, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+130, 15333, 509, 1, 1, -9505.238, 1333.173, 21.51132, 0.5689664, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+131, 15333, 509, 1, 1, -9508.66, 1373.73, 21.58461, 6.189344, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+132, 15333, 509, 1, 1, -9511.469, 1481.016, 22.00921, 1.69612, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+133, 15333, 509, 1, 1, -9512.081, 1354.932, 21.62411, 0.05311435, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+134, 15333, 509, 1, 1, -9520.733, 1456.67, 21.51132, 2.629578, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+135, 15333, 509, 1, 1, -9544.545, 1392.073, 21.51131, 0.8189642, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+136, 15333, 509, 1, 1, -9551.313, 1411.539, 21.51131, 3.517841, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+137, 15333, 509, 1, 1, -9559.898, 1520.136, 21.51131, 3.08167, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+138, 15333, 509, 1, 1, -9576.01, 1517.689, 21.53801, 2.500756, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+139, 15333, 509, 1, 1, -9581.107, 1420.726, 21.51132, 0.9606542, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+140, 15333, 509, 1, 1, -9581.575, 1491.29, 21.51131, 1.228613, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+141, 15333, 509, 1, 1, -9581.714, 1578.228, 21.64806, 3.731387, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+142, 15333, 509, 1, 1, -9582.215, 1391.218, 22.1015, 3.665587, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+143, 15333, 509, 1, 1, -9583.522, 1554.888, 21.58274, 2.520709, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+144, 15333, 509, 1, 1, -9586.859, 1644.306, 21.83975, 5.548194, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+145, 15333, 509, 1, 1, -9588.4, 1609.687, 22.03196, 4.592999, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+146, 15333, 509, 1, 1, -9589.72, 1442.263, 21.63682, 5.89996, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+147, 15333, 509, 1, 1, -9607.79, 1461.607, 22.79347, 3.408359, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+148, 15333, 509, 1, 1, -9610.552, 1614.562, 21.88635, 0.1637974, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+149, 15333, 509, 1, 1, -9612.232, 1582.742, 21.88631, 1.648435, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+150, 15333, 509, 1, 1, -9612.367, 1642.575, 21.51134, 5.734612, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+151, 15333, 509, 1, 1, -9612.531, 1553.086, 21.51131, 5.839962, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+152, 15333, 509, 1, 1, -9645.53, 1619.285, 22.01152, 1.771511, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+153, 15333, 509, 1, 1, -9647.195, 1651.031, 21.65448, 0.9608645, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+154, 15333, 509, 1, 1, -9653.326, 1673.394, 22.09751, 3.574276, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+155, 15333, 509, 1, 1, -9654.614, 1553.397, 21.51586, 3.283447, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+156, 15333, 509, 1, 1, -9656.288, 1585.146, 21.62086, 2.682987, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+157, 15333, 509, 1, 1, -9674.635, 1580.351, 21.51132, 6.094749, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+158, 15333, 509, 1, 1, -9675.218, 1611.29, 21.51152, 4.639176, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+159, 15333, 509, 1, 1, -9675.699, 1652.324, 21.51187, 3.384236, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+160, 15333, 509, 1, 1, -9681.588, 1551.112, 21.56898, 1.922503, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+161, 15333, 509, 1, 1, -9721.058, 1484.207, 21.63279, 4.123934, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+162, 15333, 509, 1, 1, -9740.685, 1486.821, 22.87148, 0.6774856, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+163, 15333, 509, 1, 1, -9746.62, 1514.349, 22.26016, 5.49662, 7200, 10, 1), -- Silicate Feeder
+(@CGUID+164, 15335, 509, 1, 1, -8962.963, 1649.652, 24.11304, 0.4845064, 7200, 0, 0), -- Flesh Hunter
+(@CGUID+165, 15335, 509, 1, 1, -9082.635, 2149.024, 23.20904, 5.902679, 7200, 0, 0), -- Flesh Hunter
+(@CGUID+166, 15335, 509, 1, 1, -9305.492, 1403.459, 25.60786, 2.159173, 7200, 0, 0), -- Flesh Hunter
+(@CGUID+167, 15335, 509, 1, 1, -9456.793, 1296.307, 22.1249, 1.87437, 7200, 0, 0), -- Flesh Hunter
+(@CGUID+168, 15335, 509, 1, 1, -9328.003, 1298.321, -64.24252, 0.2443461, 7200, 5, 1), -- Flesh Hunter
+(@CGUID+169, 15336, 509, 1, 1, -9494.096, 1385.02, 21.46964, 2.268928, 7200, 5, 1), -- Hive'Zara Tail Lasher
+(@CGUID+170, 15336, 509, 1, 1, -9503.87, 1392.831, 21.51751, 0.9250245, 7200, 5, 1), -- Hive'Zara Tail Lasher
+(@CGUID+171, 15336, 509, 1, 1, -9563.056, 1500.709, 22.59851, 4.18879, 7200, 5, 1), -- Hive'Zara Tail Lasher
+(@CGUID+172, 15336, 509, 1, 1, -9592.147, 1496.167, 22.92012, 1.106082, 7200, 5, 1), -- Hive'Zara Tail Lasher
+(@CGUID+173, 15336, 509, 1, 1, -9600.68, 1417.569, 22.99969, 5.747794, 7200, 5, 1), -- Hive'Zara Tail Lasher
+(@CGUID+174, 15336, 509, 1, 1, -9602.287, 1403.74, 24.61112, 1.931395, 7200, 5, 1), -- Hive'Zara Tail Lasher
+(@CGUID+175, 15338, 509, 1, 1, -8786.295, 2107.791, 21.79048, 5.001371, 7200, 0, 0), -- Obsidian Destroyer
+(@CGUID+176, 15338, 509, 1, 1, -8798.089, 1934.021, 21.46238, 4.412516, 7200, 0, 0), -- Obsidian Destroyer
+(@CGUID+177, 15338, 509, 1, 1, -8864.612, 2021.75, 21.64479, 3.131173, 7200, 0, 0), -- Obsidian Destroyer
+(@CGUID+178, 15338, 509, 1, 1, -8868.629, 1877.659, 21.87304, 2.538011, 7200, 0, 0), -- Obsidian Destroyer
+(@CGUID+179, 15338, 509, 1, 1, -8936.657, 1715.272, 21.51128, 4.108858, 7200, 0, 0), -- Obsidian Destroyer
+(@CGUID+180, 15338, 509, 1, 1, -8970.525, 2080.208, 21.51132, 5.018237, 7200, 0, 0), -- Obsidian Destroyer
+(@CGUID+181, 15338, 509, 1, 1, -9014.472, 1711.889, 21.48144, 2.354002, 7200, 0, 0), -- Obsidian Destroyer
+(@CGUID+182, 15338, 509, 1, 1, -9018.842, 1888.04, 21.62847, 4.138173, 7200, 0, 0), -- Obsidian Destroyer
+(@CGUID+183, 15338, 509, 1, 1, -9080.542, 1740.715, 21.51128, 5.577422, 7200, 0, 0), -- Obsidian Destroyer
+(@CGUID+184, 15339, 509, 1, 1, -9502.8, 2042.65, 105.3096, 5.654867, 7200, 0, 0), -- Ossirian the Unscarred
+(@CGUID+185, 15340, 509, 1, 1, -8845.518, 2260.144, 21.46967, 4.642576, 7200, 0, 0), -- Moam
+(@CGUID+186, 15341, 509, 1, 1, -9129.729, 1602.503, 26.54407, 5.532694, 7200, 0, 0), -- General Rajaxx
+(@CGUID+187, 15343, 509, 1, 1, -8595.92, 1447.688, 32.04808, 5.463164, 7200, 0, 0), -- Qiraji Swarmguard
+(@CGUID+188, 15343, 509, 1, 1, -8634.026, 1515.246, 31.96161, 2.593201, 7200, 0, 0), -- Qiraji Swarmguard
+(@CGUID+189, 15343, 509, 1, 1, -8641.496, 1392.684, 32.10234, 5.526043, 7200, 0, 0), -- Qiraji Swarmguard
+(@CGUID+190, 15343, 509, 1, 1, -8642.217, 1445.216, 32.52929, 0.8981247, 7200, 0, 0), -- Qiraji Swarmguard
+(@CGUID+191, 15343, 509, 1, 1, -8647.904, 1430.745, 32.16164, 3.90623, 7200, 0, 0), -- Qiraji Swarmguard
+(@CGUID+192, 15343, 509, 1, 1, -8652.679, 1459.439, 32.04622, 2.591174, 7200, 0, 0), -- Qiraji Swarmguard
+(@CGUID+193, 15344, 509, 1, 1, -8991.146, 1553.998, 21.65394, 2.775074, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+194, 15344, 509, 1, 1, -9003.747, 1536.158, 21.46966, 2.635447, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+195, 15344, 509, 1, 1, -9012.13, 1608.774, 24.86932, 3.141593, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+196, 15344, 509, 1, 1, -9014.358, 1597.683, 21.46967, 3.036873, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+197, 15344, 509, 1, 1, -9020.146, 1586.732, 21.46967, 2.949606, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+198, 15344, 509, 1, 1, -9022.039, 1612.046, 22.80729, 3.159046, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+199, 15344, 509, 1, 1, -9022.71, 1505.878, 21.55961, 2.408554, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+200, 15344, 509, 1, 1, -9029.94, 1498.077, 22.14014, 2.338741, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+201, 15344, 509, 1, 1, -9031.986, 1592.263, 21.46968, 2.984513, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+202, 15344, 509, 1, 1, -9038.44, 1491.037, 23.22957, 2.268928, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+203, 15344, 509, 1, 1, -9070.706, 1634.371, 21.48116, 3.490659, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+204, 15344, 509, 1, 1, -9071.044, 1622.144, 21.46969, 3.333579, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+205, 15344, 509, 1, 1, -9071.757, 1611.277, 21.4721, 3.176499, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+206, 15344, 509, 1, 1, -9076.421, 1530.23, 21.46967, 2.234021, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+207, 15344, 509, 1, 1, -9078.797, 1622.799, 21.46967, 3.368485, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+208, 15344, 509, 1, 1, -9083.137, 1524.759, 21.46966, 2.146755, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+209, 15344, 509, 1, 1, -9091.763, 1519.367, 21.46966, 2.059489, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+210, 15344, 509, 1, 1, -9092.34, 1586.273, 21.46964, 2.687807, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+211, 15344, 509, 1, 1, -9097.289, 1578.36, 21.46964, 2.513274, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+212, 15344, 509, 1, 1, -9102.547, 1569.417, 21.4757, 2.321288, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+213, 15344, 509, 1, 1, -9113.942, 1546.056, 21.46964, 1.954769, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+214, 15344, 509, 1, 1, -9132.825, 1539.097, 21.46964, 1.658063, 7200, 0, 0), -- Swarmguard Needler
+(@CGUID+215, 15348, 509, 1, 1, -8822.197, 1625.819, 19.80574, 3.884628, 7200, 5, 1), -- Kurinnaxx
+(@CGUID+216, 15355, 509, 1, 1, -9161.633, 1893.916, 86.4881, 4.610681, 7200, 0, 0), -- Anubisath Guardian
+(@CGUID+217, 15355, 509, 1, 1, -9182.274, 1935.26, 85.68071, 0.07460589, 7200, 0, 0), -- Anubisath Guardian
+(@CGUID+218, 15355, 509, 1, 1, -9211.516, 1874.948, 85.68073, 5.704421, 7200, 0, 0), -- Anubisath Guardian
+(@CGUID+219, 15355, 509, 1, 1, -9239.259, 1907.01, 85.68074, 4.830944, 7200, 0, 0), -- Anubisath Guardian
+(@CGUID+220, 15355, 509, 1, 1, -9291.042, 1947.945, 85.68074, 5.187096, 7200, 0, 0), -- Anubisath Guardian
+(@CGUID+221, 15355, 509, 1, 1, -9294.917, 1760.814, 85.64307, 5.859818, 7200, 0, 0), -- Anubisath Guardian
+(@CGUID+222, 15355, 509, 1, 1, -9322.551, 1736.57, 85.67474, 0.2409076, 7200, 0, 0), -- Anubisath Guardian
+(@CGUID+223, 15355, 509, 1, 1, -9337.068, 1797.589, 85.67978, 4.818147, 7200, 0, 0), -- Anubisath Guardian
+(@CGUID+224, 15369, 509, 1, 1, -9719.611, 1514.752, 27.55229, 0.7679449, 7200, 0, 0), -- Ayamiss the Hunter
+(@CGUID+225, 15370, 509, 1, 1, -9235.976, 1234.066, -63.65783, 5.899213, 7200, 5, 1), -- Buru the Gorger
+(@CGUID+226, 15384, 509, 1, 1, -9546.693, 1574.15, 25.31675, 2.059489, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE)
+(@CGUID+227, 15384, 509, 1, 1, -9583.222, 1629.951, 23.97154, 0.6283185, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE)
+(@CGUID+228, 15384, 509, 1, 1, -9596.415, 1545.681, 22.6737, 0.5585054, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE)
+(@CGUID+229, 15384, 509, 1, 1, -9632.509, 1587.674, 22.96964, 1.134464, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE)
+(@CGUID+230, 15384, 509, 1, 1, -9675.3, 1693.714, 30.20995, 4.206244, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE)
+(@CGUID+231, 15384, 509, 1, 1, -9698.361, 1637.477, 23.61151, 6.161012, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE)
+(@CGUID+232, 15384, 509, 1, 1, -9704.792, 1523.153, 21.52732, 0.1396263, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE)
+(@CGUID+233, 15384, 509, 1, 1, -9759.329, 1480.819, 28.64592, 3.351032, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE)
+(@CGUID+234, 15385, 509, 1, 1, -9108.294, 1584.171, 21.47101, 2.495821, 7200, 0, 0), -- Colonel Zerran
+(@CGUID+235, 15386, 509, 1, 1, -9085.032, 1622.403, 21.46965, 3.368485, 7200, 0, 0), -- Major Yeggeth
+(@CGUID+236, 15387, 509, 1, 1, -8994.835, 1542.269, 21.64863, 2.70526, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+237, 15387, 509, 1, 1, -8998.049, 1560.147, 22.13081, 2.80998, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+238, 15387, 509, 1, 1, -9001.262, 1549.051, 22.02086, 2.722714, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+239, 15387, 509, 1, 1, -9010.698, 1542.467, 21.46967, 2.6529, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+240, 15387, 509, 1, 1, -9023.852, 1601.583, 21.46967, 3.071779, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+241, 15387, 509, 1, 1, -9030.075, 1512.309, 21.47057, 2.408554, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+242, 15387, 509, 1, 1, -9038.825, 1505.317, 21.59063, 2.338741, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+243, 15387, 509, 1, 1, -9046.502, 1498.264, 22.0108, 2.268928, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+244, 15387, 509, 1, 1, -9066.888, 1521.481, 21.46966, 2.251475, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+245, 15387, 509, 1, 1, -9074.003, 1515.235, 21.46966, 2.164208, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+246, 15387, 509, 1, 1, -9078.066, 1635.034, 21.46967, 3.543018, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+247, 15387, 509, 1, 1, -9080.052, 1612.093, 21.46965, 3.193953, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+248, 15387, 509, 1, 1, -9082.668, 1510.194, 21.51312, 2.076942, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+249, 15387, 509, 1, 1, -9098.183, 1589.878, 21.46998, 2.70526, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+250, 15387, 509, 1, 1, -9102.671, 1581.557, 21.47097, 2.495821, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+251, 15387, 509, 1, 1, -9107.887, 1574.311, 21.48627, 2.303835, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+252, 15387, 509, 1, 1, -9117.37, 1553.283, 21.46964, 1.937315, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+253, 15387, 509, 1, 1, -9123.583, 1541.553, 21.46964, 1.797689, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+254, 15387, 509, 1, 1, -9125.76, 1549.293, 21.46964, 1.780236, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+255, 15387, 509, 1, 1, -9134.138, 1546.722, 21.46964, 1.64061, 7200, 0, 0), -- Qiraji Warrior
+(@CGUID+256, 15388, 509, 1, 1, -9127.978, 1558.543, 21.68785, 1.797689, 7200, 0, 0), -- Major Pakkon
+(@CGUID+257, 15389, 509, 1, 1, -9033.166, 1604.659, 21.46967, 3.089233, 7200, 0, 0), -- Captain Drenn
+(@CGUID+258, 15390, 509, 1, 1, -9087.008, 1530.263, 21.46967, 2.146755, 7200, 0, 0), -- Captain Xurrem
+(@CGUID+259, 15391, 509, 1, 1, -9007.403, 1556.874, 21.6039, 2.75762, 7200, 0, 0), -- Captain Qeez
+(@CGUID+260, 15392, 509, 1, 1, -9041.356, 1512.58, 21.47481, 2.338741, 7200, 0, 0), -- Captain Tuubid
+(@CGUID+261, 15426, 509, 1, 1, -8680.658, 1585.614, 33.19108, 2.548181, 7200, 0, 0), -- Ahn'Qiraj Trigger
+(@CGUID+262, 15428, 509, 1, 1, -9230.038, 1916.913, 85.65411, 4.529287, 7200, 0, 0), -- Sand Vortex
+(@CGUID+263, 15428, 509, 1, 1, -9523.837, 1881.484, 85.64066, 5.181685, 7200, 0, 0), -- Sand Vortex
+(@CGUID+264, 15461, 509, 1, 1, -8777.984, 1946.542, 29.26133, 5.90431, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+265, 15461, 509, 1, 1, -8779.035, 1939.482, 28.63995, 5.916666, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+266, 15461, 509, 1, 1, -8779.128, 1927.207, 27.42442, 2.724261, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+267, 15461, 509, 1, 1, -8784.287, 1915.417, 24.22899, 5.393067, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+268, 15461, 509, 1, 1, -8799.364, 1954.671, 21.51133, 5.978374, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+269, 15461, 509, 1, 1, -8890.03, 1741.545, 21.7629, 1.518436, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+270, 15461, 509, 1, 1, -8900.689, 1727.25, 24.3461, 4.555309, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+271, 15461, 509, 1, 1, -8911.898, 1741.947, 21.96902, 1.021649, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+272, 15461, 509, 1, 1, -8914.18, 1776.939, 21.66511, 3.48624, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+273, 15461, 509, 1, 1, -8931.609, 2026.63, 23.34022, 5.709093, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+274, 15461, 509, 1, 1, -8933.949, 1761.936, 22.19745, 2.513257, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+275, 15461, 509, 1, 1, -8935.758, 1993.071, 22.7103, 3.963199, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+276, 15461, 509, 1, 1, -8936.32, 2034.411, 23.23642, 2.167205, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+277, 15461, 509, 1, 1, -8949.799, 1981.901, 21.69878, 1.727876, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+278, 15461, 509, 1, 1, -8986, 1995.47, 23.65904, 3.566723, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+279, 15461, 509, 1, 1, -9013.021, 1864.727, 22.24529, 6.056293, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+280, 15461, 509, 1, 1, -9021.092, 1856.039, 21.65097, 2.042035, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+281, 15461, 509, 1, 1, -9026.661, 1838.82, 21.46962, 4.590216, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+282, 15461, 509, 1, 1, -9048.649, 1860.379, 22.03692, 5.604976, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+283, 15461, 509, 1, 1, -9052.467, 1873.286, 24.717, 1.431662, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+284, 15461, 509, 1, 1, -9101.366, 2212.7, 21.51138, 2.302702, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+285, 15461, 509, 1, 1, -9102.915, 2204.249, 21.51138, 1.122511, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+286, 15461, 509, 1, 1, -9104.067, 2173.496, 21.51134, 0.5112051, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+287, 15461, 509, 1, 1, -9109.516, 2190.421, 21.51134, 0.7625134, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+288, 15461, 509, 1, 1, -9113.313, 2218.674, 22.06243, 1.520167, 7200, 5, 1), -- Shrieker Scarab
+(@CGUID+289, 15462, 509, 1, 1, -8773.882, 1964.334, 28.00181, 1.714765, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+290, 15462, 509, 1, 1, -8777.861, 1955.941, 27.29991, 1.703948, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+291, 15462, 509, 1, 1, -8792.899, 1944.089, 21.55064, 3.30581, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+292, 15462, 509, 1, 1, -8805.239, 1936.149, 21.46968, 3.455752, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+293, 15462, 509, 1, 1, -8818.191, 1927.24, 22.42108, 5.61996, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+294, 15462, 509, 1, 1, -8879.906, 1771.096, 24.49183, 5.58218, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+295, 15462, 509, 1, 1, -8892.148, 1788.219, 22.04427, 5.124065, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+296, 15462, 509, 1, 1, -8894.619, 1763.474, 21.59097, 0.7297062, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+297, 15462, 509, 1, 1, -8929.951, 1760.378, 21.76128, 0.06232084, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+298, 15462, 509, 1, 1, -8935.928, 1744.146, 21.47835, 5.471159, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+299, 15462, 509, 1, 1, -8938.027, 2012.935, 22.70216, 0.9310265, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+300, 15462, 509, 1, 1, -8945.51, 1986.941, 21.54233, 3.434109, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+301, 15462, 509, 1, 1, -8961.313, 1989.169, 21.99717, 3.973462, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+302, 15462, 509, 1, 1, -8961.39, 2036.786, 21.94052, 5.367473, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+303, 15462, 509, 1, 1, -8986.513, 2005.445, 23.18358, 4.609489, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+304, 15462, 509, 1, 1, -9037.781, 1872.558, 21.83935, 3.590566, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+305, 15462, 509, 1, 1, -9038.259, 1894.863, 22.61593, 4.983107, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+306, 15462, 509, 1, 1, -9039.103, 1826.128, 22.9693, 5.044002, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+307, 15462, 509, 1, 1, -9046.372, 1886.375, 24.54025, 3.335346, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+308, 15462, 509, 1, 1, -9052.063, 1852.845, 22.53534, 1.600288, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+309, 15462, 509, 1, 1, -9077.655, 2199.215, 21.47052, 5.794493, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+310, 15462, 509, 1, 1, -9087.489, 2206.195, 21.49517, 2.583087, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+311, 15462, 509, 1, 1, -9091.026, 2222.007, 22.47916, 0.3574632, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+312, 15462, 509, 1, 1, -9094.922, 2187.126, 21.76134, 4.347096, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+313, 15462, 509, 1, 1, -9115.486, 2203.177, 21.51138, 4.066154, 7200, 5, 1), -- Spitting Scarab
+(@CGUID+314, 15475, 509, 1, 1, -8558.053, 1335.651, 32.23059, 1.330155, 7200, 5, 1), -- Beetle
+(@CGUID+315, 15475, 509, 1, 1, -8580.42, 1653.069, 43.2859, 3.590021, 7200, 5, 1), -- Beetle
+(@CGUID+316, 15475, 509, 1, 1, -8649.051, 1482.82, 32.00608, 6.216755, 7200, 5, 1), -- Beetle
+(@CGUID+317, 15475, 509, 1, 1, -8798.256, 1878.107, 22.0182, 0.3919355, 7200, 5, 1), -- Beetle
+(@CGUID+318, 15475, 509, 1, 1, -8904.351, 1528.15, 21.60996, 2.543734, 7200, 5, 1), -- Beetle
+(@CGUID+319, 15475, 509, 1, 1, -8999.541, 1989.413, 29.24577, 0.1391346, 7200, 5, 1), -- Beetle
+(@CGUID+320, 15475, 509, 1, 1, -9022.933, 1472.28, 33.09048, 4.812155, 7200, 5, 1), -- Beetle
+(@CGUID+321, 15475, 509, 1, 1, -9155.481, 2215.207, 26.00118, 3.855093, 7200, 5, 1), -- Beetle
+(@CGUID+322, 15475, 509, 1, 1, -9200.068, 1430.018, 21.51133, 4.903863, 7200, 5, 1), -- Beetle
+(@CGUID+323, 15475, 509, 1, 1, -9385.35, 1404.552, 21.51134, 4.628578, 7200, 5, 1), -- Beetle
+(@CGUID+324, 15476, 509, 1, 1, -8603.881, 1356.801, 32.0353, 5.992309, 7200, 5, 1), -- Scorpid
+(@CGUID+325, 15476, 509, 1, 1, -8673.53, 1535.038, 31.96736, 5.982349, 7200, 5, 1), -- Scorpid
+(@CGUID+326, 15476, 509, 1, 1, -8770.431, 2134.666, 30.01231, 1.451406, 7200, 5, 1), -- Scorpid
+(@CGUID+327, 15476, 509, 1, 1, -8782.575, 2207.545, 26.37049, 6.040576, 7200, 5, 1), -- Scorpid
+(@CGUID+328, 15476, 509, 1, 1, -9030.191, 1901.198, 21.95046, 0.2293586, 7200, 5, 1), -- Scorpid
+(@CGUID+329, 15476, 509, 1, 1, -9088.795, 1479.958, 29.47734, 4.849589, 7200, 5, 1), -- Scorpid
+(@CGUID+330, 15476, 509, 1, 1, -9121.418, 1772.116, 22.70201, 4.443481, 7200, 5, 1), -- Scorpid
+(@CGUID+331, 15505, 509, 1, 1, -8851.227, 2056.546, 4.849823, 3.996804, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+332, 15505, 509, 1, 1, -8857.7, 2072.103, 4.994012, 0.4886922, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+333, 15505, 509, 1, 1, -8858.738, 2062.827, 4.482691, 1.797689, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+334, 15505, 509, 1, 1, -8865.083, 2083.378, 3.65268, 5.078908, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+335, 15505, 509, 1, 1, -8870.662, 2109.143, 6.556806, 1.151917, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+336, 15505, 509, 1, 1, -8874.804, 1936.475, 6.60746, 1.133057, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+337, 15505, 509, 1, 1, -8874.903, 2058.621, 4.535347, 0, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+338, 15505, 509, 1, 1, -8875.742, 1945.669, 6.486465, 5.31958, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+339, 15505, 509, 1, 1, -8877.209, 2127.847, 7.684945, 1.867502, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+340, 15505, 509, 1, 1, -8877.619, 1959.799, 6.453036, 4.259987, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+341, 15505, 509, 1, 1, -8884.489, 1926.345, 4.517488, 1.902409, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+342, 15505, 509, 1, 1, -8886.457, 2125.595, 5.525422, 5.462881, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+343, 15505, 509, 1, 1, -8889.349, 1931.745, 5.704772, 4.119449, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+344, 15505, 509, 1, 1, -8889.567, 2115.469, 7.099297, 0.7679449, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+345, 15505, 509, 1, 1, -8896.666, 2135.883, 5.975152, 0.2310998, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+346, 15505, 509, 1, 1, -8916.911, 2170.905, 12.31206, 2.958982, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+347, 15505, 509, 1, 1, -8916.97, 2153.477, 5.997731, 3.785432, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+348, 15505, 509, 1, 1, -8918.426, 2159.507, 5.476036, 6.043295, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+349, 15505, 509, 1, 1, -8929.834, 1869.064, 4.986817, 3.717551, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+350, 15505, 509, 1, 1, -8930.449, 2162.486, 5.261242, 0.3141593, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+351, 15505, 509, 1, 1, -8931.279, 1852.244, 4.11584, 3.333579, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+352, 15505, 509, 1, 1, -8937.561, 2177.217, 4.788124, 2.3946, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+353, 15505, 509, 1, 1, -8938.794, 1854.301, 2.765879, 5.864306, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+354, 15505, 509, 1, 1, -8939.113, 1846.925, 2.428802, 4.869469, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+355, 15505, 509, 1, 1, -8947.23, 1868.441, 4.382745, 0.93376, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+356, 15505, 509, 1, 1, -8972.435, 1825.497, 3.846474, 0.122173, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+357, 15505, 509, 1, 1, -8974.198, 1807.207, 1.86357, 5.270895, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+358, 15505, 509, 1, 1, -8981.374, 1815.486, 4.08643, 5.166174, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+359, 15505, 509, 1, 1, -8989.232, 1811.111, 5.656726, 5.794493, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+360, 15505, 509, 1, 1, -8989.631, 1822.99, 6.513769, 0.4712389, 7200, 5, 1), -- Canal Frenzy
+(@CGUID+361, 15514, 509, 1, 1, -9234.326, 1243.826, -63.52806, 3.490659, 7200, 0, 0), -- Buru Egg
+(@CGUID+362, 15514, 509, 1, 1, -9243.427, 1280.498, -63.59377, 3.822271, 7200, 0, 0), -- Buru Egg
+(@CGUID+363, 15514, 509, 1, 1, -9263.014, 1295.236, -63.80813, 1.797689, 7200, 0, 0), -- Buru Egg
+(@CGUID+364, 15514, 509, 1, 1, -9270.393, 1243.896, -63.76731, 2.722714, 7200, 0, 0), -- Buru Egg
+(@CGUID+365, 15514, 509, 1, 1, -9300.067, 1305.085, -63.69709, 4.18879, 7200, 0, 0), -- Buru Egg
+(@CGUID+366, 15514, 509, 1, 1, -9300.189, 1266.665, -63.74272, 0.2617994, 7200, 0, 0), -- Buru Egg
+(@CGUID+367, 15590, 509, 1, 1, -9188.444, 1940.21, 85.63905, 3.176499, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+368, 15590, 509, 1, 1, -9188.444, 1940.21, 85.63905, 3.176499, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+369, 15590, 509, 1, 1, -9244.413, 1808.983, 85.63908, 5.637414, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+370, 15590, 509, 1, 1, -9248.413, 1974.83, 85.63908, 5.899213, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+371, 15590, 509, 1, 1, -9282.08, 1887.34, 85.63908, 2.007129, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+372, 15590, 509, 1, 1, -9282.08, 1887.34, 85.63908, 2.007129, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+373, 15590, 509, 1, 1, -9299.727, 1748.453, 85.63907, 1.448623, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+374, 15590, 509, 1, 1, -9357.861, 1929.079, 85.63907, 1.064651, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+375, 15590, 509, 1, 1, -9357.861, 1929.079, 85.63907, 1.064651, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+376, 15590, 509, 1, 1, -9367.171, 1780.888, 85.63908, 1.902409, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+377, 15590, 509, 1, 1, -9367.171, 1780.888, 85.63908, 1.902409, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+378, 15590, 509, 1, 1, -9383.292, 2012.681, 85.65106, 2.932153, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+379, 15590, 509, 1, 1, -9383.292, 2012.681, 85.65106, 2.932153, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+380, 15590, 509, 1, 1, -9406.096, 1862.376, 85.63908, 6.230825, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+381, 15590, 509, 1, 1, -9407.718, 1960.211, 85.63906, 1.117011, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+382, 15590, 509, 1, 1, -9432.396, 1782.529, 85.63908, 5.864306, 7200, 0, 0), -- Ossirian Crystal Trigger
+(@CGUID+383, 15590, 509, 1, 1, -9506.192, 1865.572, 85.63909, 4.276057, 7200, 0, 0); -- Ossirian Crystal Trigger
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (15324,15335,15387,15505,15339,15341,15385,15428);
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(15324,0,1,0, '18950'),(15335,0,1,0, '18950'),(15387,0,1,0, '18950'),(15505,0,1,0, '18943'),
+(15339,0,1,0, '25176'),(15341,0,1,0, '18943'),(15385,0,1,0, '25462'),(15428,0,1,0, '25160');
+
+-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT'
+SET @NPC := @CGUID+216;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9248.026,`position_y`=1888.945,`position_z`=85.68073 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,-9248.026,1888.945,85.68073,0,0,0,0,100,0),
+(@PATH,2,-9282.023,1855.383,85.5974,0,0,0,0,100,0),
+(@PATH,3,-9311.62,1831.059,84.10042,0,0,0,0,100,0),
+(@PATH,4,-9339.822,1823.54,85.67978,0,0,0,0,100,0),
+(@PATH,5,-9336.083,1788.304,85.67978,0,0,0,0,100,0),
+(@PATH,6,-9373.787,1788.205,85.68073,0,0,0,0,100,0),
+(@PATH,7,-9392.846,1821.798,85.68074,0,0,0,0,100,0),
+(@PATH,8,-9396.511,1850.486,85.68074,0,0,0,0,100,0),
+(@PATH,9,-9409.217,1865.23,85.68074,0,0,0,0,100,0),
+(@PATH,10,-9438.716,1862.457,85.68074,0,0,0,0,100,0),
+(@PATH,11,-9458.922,1889.078,85.68074,0,0,0,0,100,0),
+(@PATH,12,-9451.585,1908.686,85.67978,0,0,0,0,100,0),
+(@PATH,13,-9424.979,1921.917,85.58256,0,0,0,0,100,0),
+(@PATH,14,-9399.763,1928.021,85.64656,0,0,0,0,100,0),
+(@PATH,15,-9383.525,1958.783,85.68073,0,0,0,0,100,0),
+(@PATH,16,-9371.938,1976.018,85.68073,0,0,0,0,100,0),
+(@PATH,17,-9344.856,2007.821,85.68074,0,0,0,0,100,0),
+(@PATH,18,-9315.889,2002.974,85.68073,0,0,0,0,100,0),
+(@PATH,19,-9305.473,1976.09,85.68074,0,0,0,0,100,0),
+(@PATH,20,-9294.416,1948.307,85.68074,0,0,0,0,100,0),
+(@PATH,21,-9259.192,1938.78,85.68074,0,0,0,0,100,0),
+(@PATH,22,-9234.046,1921.629,85.68074,0,0,0,0,100,0);
+
+-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT'
+SET @NPC := @CGUID+217;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9184.5,`position_y`=1854.158,`position_z`=85.68073 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,-9184.5,1854.158,85.68073,0,0,0,0,100,0),
+(@PATH,2,-9216.548,1824.755,85.68074,0,0,0,0,100,0),
+(@PATH,3,-9250.388,1789.818,85.68074,0,0,0,0,100,0),
+(@PATH,4,-9273.942,1769.737,85.67978,0,0,0,0,100,0),
+(@PATH,5,-9287.727,1753.579,85.68074,0,0,0,0,100,0),
+(@PATH,6,-9322.813,1721.81,87.2582,0,0,0,0,100,0),
+(@PATH,7,-9353.575,1722.876,87.03452,0,0,0,0,100,0),
+(@PATH,8,-9361.314,1755.279,85.68076,0,0,0,0,100,0),
+(@PATH,9,-9364.741,1787.446,85.67978,0,0,0,0,100,0),
+(@PATH,10,-9382.464,1800.235,85.68074,0,0,0,0,100,0),
+(@PATH,11,-9383.027,1827.17,86.00362,0,0,0,0,100,0),
+(@PATH,12,-9390.321,1846.647,85.68074,0,0,0,0,100,0),
+(@PATH,13,-9419.723,1858.245,85.57466,0,0,0,0,100,0),
+(@PATH,14,-9449.339,1865.135,85.68074,0,0,0,0,100,0),
+(@PATH,15,-9486.292,1872.536,85.68074,0,0,0,0,100,0),
+(@PATH,16,-9507.497,1867.104,85.68071,0,0,0,0,100,0),
+(@PATH,17,-9527.903,1882.607,85.68071,0,0,0,0,100,0),
+(@PATH,18,-9510.689,1925.589,85.68073,0,0,0,0,100,0),
+(@PATH,19,-9488.487,1946.937,85.67978,0,0,0,0,100,0),
+(@PATH,20,-9459.86,1976.461,85.92978,0,0,0,0,100,0),
+(@PATH,21,-9442.087,1990.908,85.92978,0,0,0,0,100,0),
+(@PATH,22,-9407.938,2024.798,85.93073,0,0,0,0,100,0),
+(@PATH,23,-9380.547,2051.861,85.94083,0,0,0,0,100,0),
+(@PATH,24,-9353.088,2075.302,86.06718,0,0,0,0,100,0),
+(@PATH,25,-9322.948,2076.674,86.80594,0,0,0,0,100,0),
+(@PATH,26,-9315.573,2050.009,85.64993,0,0,0,0,100,0),
+(@PATH,27,-9314.585,2018.313,85.68073,0,0,0,0,100,0),
+(@PATH,28,-9302.906,1992.931,85.68074,0,0,0,0,100,0),
+(@PATH,29,-9307.348,1964.604,85.652,0,0,0,0,100,0),
+(@PATH,30,-9282.028,1949.146,85.68074,0,0,0,0,100,0),
+(@PATH,31,-9252.31,1944.22,85.68074,0,0,0,0,100,0),
+(@PATH,32,-9227.021,1928.589,85.68074,0,0,0,0,100,0),
+(@PATH,33,-9189.054,1932.123,85.68071,0,0,0,0,100,0),
+(@PATH,34,-9158.877,1920.914,86.81694,0,0,0,0,100,0),
+(@PATH,35,-9163.66,1874.253,86.90241,0,0,0,0,100,0);
+
+-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT'
+SET @NPC := @CGUID+218;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9266.736,`position_y`=1785.315,`position_z`=85.67978 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,-9266.736,1785.315,85.67978,0,0,0,0,100,0),
+(@PATH,2,-9254.919,1821.132,85.68074,0,0,0,0,100,0),
+(@PATH,3,-9229.319,1826.478,85.68074,0,0,0,0,100,0),
+(@PATH,4,-9219.66,1845.915,85.68073,0,0,0,0,100,0),
+(@PATH,5,-9229.024,1871.725,85.68073,0,0,0,0,100,0),
+(@PATH,6,-9245.31,1880.665,85.68073,0,0,0,0,100,0),
+(@PATH,7,-9270.313,1884.48,85.68073,0,0,0,0,100,0),
+(@PATH,8,-9290.14,1888.328,85.68073,0,0,0,0,100,0),
+(@PATH,9,-9323.363,1912.306,85.58256,0,0,0,0,100,0),
+(@PATH,10,-9346.232,1921.884,85.67978,0,0,0,0,100,0),
+(@PATH,11,-9365.159,1955.121,85.63752,0,0,0,0,100,0),
+(@PATH,12,-9373.188,1980.685,85.68073,0,0,0,0,100,0),
+(@PATH,13,-9396.845,2005.119,85.68073,0,0,0,0,100,0),
+(@PATH,14,-9424.114,2004.707,85.93073,0,0,0,0,100,0),
+(@PATH,15,-9439.311,1988.515,85.92978,0,0,0,0,100,0),
+(@PATH,16,-9442.091,1961.605,85.23379,0,0,0,0,100,0),
+(@PATH,17,-9430.677,1936.73,85.55478,0,0,0,0,100,0),
+(@PATH,18,-9423.523,1916.457,85.58256,0,0,0,0,100,0),
+(@PATH,19,-9388.256,1899.98,86.93074,0,0,0,0,100,0),
+(@PATH,20,-9365.732,1875.688,85.68073,0,0,0,0,100,0),
+(@PATH,21,-9332.013,1843.525,85.67978,0,0,0,0,100,0),
+(@PATH,22,-9335.819,1822.33,85.5914,0,0,0,0,100,0),
+(@PATH,23,-9333.703,1798.843,84.41318,0,0,0,0,100,0),
+(@PATH,24,-9323.364,1773.62,85.55771,0,0,0,0,100,0),
+(@PATH,25,-9293.272,1760.073,85.68074,0,0,0,0,100,0);
+
+-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT'
+SET @NPC := @CGUID+219;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9252.741,`position_y`=1943.686,`position_z`=85.68074 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,-9252.741,1943.686,85.68074,0,0,0,0,100,0),
+(@PATH,2,-9222.651,1931.318,85.68074,0,0,0,0,100,0),
+(@PATH,3,-9191.619,1942.506,85.68071,0,0,0,0,100,0),
+(@PATH,4,-9170.24,1922.948,85.68071,0,0,0,0,100,0),
+(@PATH,5,-9169.914,1879.729,85.68073,0,0,0,0,100,0),
+(@PATH,6,-9195.714,1851.033,85.68073,0,0,0,0,100,0),
+(@PATH,7,-9223.459,1817.724,85.68074,0,0,0,0,100,0),
+(@PATH,8,-9244.517,1803.858,85.68074,0,0,0,0,100,0),
+(@PATH,9,-9261.152,1787.29,85.68074,0,0,0,0,100,0),
+(@PATH,10,-9284.998,1755.206,85.68074,0,0,0,0,100,0),
+(@PATH,11,-9308.692,1733.549,85.68074,0,0,0,0,100,0),
+(@PATH,12,-9345.574,1727.55,85.65805,0,0,0,0,100,0),
+(@PATH,13,-9378.37,1742.617,85.68076,0,0,0,0,100,0),
+(@PATH,14,-9376.036,1778.404,85.68073,0,0,0,0,100,0),
+(@PATH,15,-9391.478,1813.657,85.68074,0,0,0,0,100,0),
+(@PATH,16,-9395.252,1844.675,85.68074,0,0,0,0,100,0),
+(@PATH,17,-9431.688,1857.969,85.68074,0,0,0,0,100,0),
+(@PATH,18,-9457.778,1865.383,85.68074,0,0,0,0,100,0),
+(@PATH,19,-9490.235,1866.432,85.50545,0,0,0,0,100,0),
+(@PATH,20,-9530.864,1870.682,86.19707,0,0,0,0,100,0),
+(@PATH,21,-9526.759,1911.277,86.01886,0,0,0,0,100,0),
+(@PATH,22,-9496.368,1944.791,85.67978,0,0,0,0,100,0),
+(@PATH,23,-9466.16,1972.771,85.92978,0,0,0,0,100,0),
+(@PATH,24,-9439.001,1997.835,85.92978,0,0,0,0,100,0),
+(@PATH,25,-9406.588,2025.468,85.93073,0,0,0,0,100,0),
+(@PATH,26,-9381.611,2054.042,85.94083,0,0,0,0,100,0),
+(@PATH,27,-9370.005,2074.14,86.93733,0,0,0,0,100,0),
+(@PATH,28,-9326.063,2072.066,86.11478,0,0,0,0,100,0),
+(@PATH,29,-9317.672,2030.484,85.68073,0,0,0,0,100,0),
+(@PATH,30,-9309.036,1982.96,85.68074,0,0,0,0,100,0),
+(@PATH,31,-9290.975,1947.814,85.68074,0,0,0,0,100,0);
+
+-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT'
+SET @NPC := @CGUID+220;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9338.638,`position_y`=1812.094,`position_z`=85.67978 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,-9338.638,1812.094,85.67978,0,0,0,0,100,0),
+(@PATH,2,-9349.664,1779.623,85.67978,0,0,0,0,100,0),
+(@PATH,3,-9367.894,1745.984,85.68076,0,0,0,0,100,0),
+(@PATH,4,-9352.953,1729.101,85.65805,0,0,0,0,100,0),
+(@PATH,5,-9311.624,1739.255,85.68074,0,0,0,0,100,0),
+(@PATH,6,-9327.572,1781.838,85.6329,0,0,0,0,100,0),
+(@PATH,7,-9367.602,1793.721,85.68073,0,0,0,0,100,0),
+(@PATH,8,-9389.63,1822.929,85.68074,0,0,0,0,100,0),
+(@PATH,9,-9375.203,1855.041,85.68074,0,0,0,0,100,0),
+(@PATH,10,-9361.834,1883.146,85.68073,0,0,0,0,100,0),
+(@PATH,11,-9367.618,1915.205,85.68074,0,0,0,0,100,0),
+(@PATH,12,-9369.153,1949.937,85.68073,0,0,0,0,100,0),
+(@PATH,13,-9359.215,1982.555,85.86217,0,0,0,0,100,0),
+(@PATH,14,-9347.963,2014.867,85.68074,0,0,0,0,100,0),
+(@PATH,15,-9367.603,2028.901,85.68073,0,0,0,0,100,0),
+(@PATH,16,-9373.234,2057.752,86.05863,0,0,0,0,100,0),
+(@PATH,17,-9356.573,2072.664,86.02653,0,0,0,0,100,0),
+(@PATH,18,-9327.185,2070.252,86.02213,0,0,0,0,100,0),
+(@PATH,19,-9315.275,2050.388,85.64993,0,0,0,0,100,0),
+(@PATH,20,-9316.94,2021.346,85.68073,0,0,0,0,100,0),
+(@PATH,21,-9309.85,1985.53,85.68074,0,0,0,0,100,0),
+(@PATH,22,-9315.965,1950.781,85.652,0,0,0,0,100,0),
+(@PATH,23,-9321.123,1910.298,85.58256,0,0,0,0,100,0),
+(@PATH,24,-9343.007,1881.461,85.68073,0,0,0,0,100,0),
+(@PATH,25,-9341.981,1844.112,85.15749,0,0,0,0,100,0);
+
+-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT'
+SET @NPC := @CGUID+221;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9373.941,`position_y`=2005.845,`position_z`=85.68073 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,-9373.941,2005.845,85.68073,0,0,0,0,100,0),
+(@PATH,2,-9352.195,2015.95,85.68074,0,0,0,0,100,0),
+(@PATH,3,-9317.304,2017.394,85.68073,0,0,0,0,100,0),
+(@PATH,4,-9306.902,1975.931,85.68074,0,0,0,0,100,0),
+(@PATH,5,-9294.695,1950.731,85.68074,0,0,0,0,100,0),
+(@PATH,6,-9265.143,1937.398,85.68074,0,0,0,0,100,0),
+(@PATH,7,-9240.809,1920.022,85.68074,0,0,0,0,100,0),
+(@PATH,8,-9236.777,1886.178,85.68073,0,0,0,0,100,0),
+(@PATH,9,-9257.813,1873.583,85.68073,0,0,0,0,100,0),
+(@PATH,10,-9285.015,1845.869,85.5974,0,0,0,0,100,0),
+(@PATH,11,-9317.275,1834.302,85.67978,0,0,0,0,100,0),
+(@PATH,12,-9336.368,1823.559,85.67978,0,0,0,0,100,0),
+(@PATH,13,-9338.676,1791.969,85.67978,0,0,0,0,100,0),
+(@PATH,14,-9373.688,1782.111,85.68073,0,0,0,0,100,0),
+(@PATH,15,-9389.025,1814.412,85.68074,0,0,0,0,100,0),
+(@PATH,16,-9392.569,1842.455,85.68074,0,0,0,0,100,0),
+(@PATH,17,-9416.333,1859.258,85.80574,0,0,0,0,100,0),
+(@PATH,18,-9444.572,1859.874,85.68074,0,0,0,0,100,0),
+(@PATH,19,-9468.98,1877.569,85.68074,0,0,0,0,100,0),
+(@PATH,20,-9457.439,1907.662,85.67978,0,0,0,0,100,0),
+(@PATH,21,-9429.858,1935.159,85.55478,0,0,0,0,100,0),
+(@PATH,22,-9406.939,1970.748,86.69244,0,0,0,0,100,0),
+(@PATH,23,-9385.19,1986.798,85.68073,0,0,0,0,100,0);
+
+-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT'
+SET @NPC := @CGUID+222;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9166.672,`position_y`=1901.352,`position_z`=85.68071 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,-9166.672,1901.352,85.68071,0,0,0,0,100,0),
+(@PATH,2,-9180.448,1880.267,85.68073,0,0,0,0,100,0),
+(@PATH,3,-9213.866,1872.235,85.68073,0,0,0,0,100,0),
+(@PATH,4,-9249.758,1884.736,85.68073,0,0,0,0,100,0),
+(@PATH,5,-9278.231,1876.297,85.68073,0,0,0,0,100,0),
+(@PATH,6,-9306.932,1891.425,85.68074,0,0,0,0,100,0),
+(@PATH,7,-9352.966,1877.49,85.68073,0,0,0,0,100,0),
+(@PATH,8,-9377.938,1866.495,85.68074,0,0,0,0,100,0),
+(@PATH,9,-9409.548,1865.281,85.68074,0,0,0,0,100,0),
+(@PATH,10,-9446.503,1862.634,85.68074,0,0,0,0,100,0),
+(@PATH,11,-9485.57,1861.776,86.05574,0,0,0,0,100,0),
+(@PATH,12,-9520.958,1858.505,85.6807,0,0,0,0,100,0),
+(@PATH,13,-9527.915,1885.158,85.68071,0,0,0,0,100,0),
+(@PATH,14,-9480.079,1874.759,85.68074,0,0,0,0,100,0),
+(@PATH,15,-9454.199,1899.666,85.68074,0,0,0,0,100,0),
+(@PATH,16,-9424.421,1915.016,85.58256,0,0,0,0,100,0),
+(@PATH,17,-9382.796,1911.83,85.68074,0,0,0,0,100,0),
+(@PATH,18,-9350.083,1908.802,85.67978,0,0,0,0,100,0),
+(@PATH,19,-9317.604,1914.786,85.90751,0,0,0,0,100,0),
+(@PATH,20,-9294.263,1930.234,85.68073,0,0,0,0,100,0),
+(@PATH,21,-9273.63,1940.642,85.68074,0,0,0,0,100,0),
+(@PATH,22,-9244.164,1935.673,85.68074,0,0,0,0,100,0),
+(@PATH,23,-9217.478,1932.629,85.68074,0,0,0,0,100,0),
+(@PATH,24,-9177.326,1935.63,85.68071,0,0,0,0,100,0);
+
+-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT'
+SET @NPC := @CGUID+223;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9172.666,`position_y`=1878.279,`position_z`=85.68073 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,-9172.666,1878.279,85.68073,0,0,0,0,100,0),
+(@PATH,2,-9174.009,1917.66,85.68071,0,0,0,0,100,0),
+(@PATH,3,-9211.638,1928.865,85.68074,0,0,0,0,100,0),
+(@PATH,4,-9227.843,1913.313,85.68074,0,0,0,0,100,0),
+(@PATH,5,-9260.224,1888.819,85.90156,0,0,0,0,100,0),
+(@PATH,6,-9288.68,1887.306,85.68073,0,0,0,0,100,0),
+(@PATH,7,-9322.48,1900.894,85.58256,0,0,0,0,100,0),
+(@PATH,8,-9350.107,1903.339,85.67978,0,0,0,0,100,0),
+(@PATH,9,-9366.493,1879.411,85.68073,0,0,0,0,100,0),
+(@PATH,10,-9377.524,1841.84,85.68074,0,0,0,0,100,0),
+(@PATH,11,-9384.171,1822.345,85.68074,0,0,0,0,100,0),
+(@PATH,12,-9374.88,1798.042,85.68073,0,0,0,0,100,0),
+(@PATH,13,-9366.794,1776.835,85.68073,0,0,0,0,100,0),
+(@PATH,14,-9339.757,1770.504,86.38388,0,0,0,0,100,0),
+(@PATH,15,-9321.449,1758.749,85.56721,0,0,0,0,100,0),
+(@PATH,16,-9322.691,1729.77,85.69717,0,0,0,0,100,0),
+(@PATH,17,-9349.976,1722.141,87.03061,0,0,0,0,100,0),
+(@PATH,18,-9370.238,1754.357,85.68076,0,0,0,0,100,0),
+(@PATH,19,-9344.755,1789.065,85.67978,0,0,0,0,100,0),
+(@PATH,20,-9337.997,1823.515,85.67978,0,0,0,0,100,0),
+(@PATH,21,-9338.635,1860.298,85.58352,0,0,0,0,100,0),
+(@PATH,22,-9343.844,1902.833,86.33212,0,0,0,0,100,0),
+(@PATH,23,-9356.249,1927.595,85.67978,0,0,0,0,100,0),
+(@PATH,24,-9361.627,1950.974,85.26081,0,0,0,0,100,0),
+(@PATH,25,-9365.068,1978.835,85.56127,0,0,0,0,100,0),
+(@PATH,26,-9370.208,2007.365,85.68073,0,0,0,0,100,0),
+(@PATH,27,-9379.047,2042.119,85.94083,0,0,0,0,100,0),
+(@PATH,28,-9358.38,2067.382,86.02653,0,0,0,0,100,0),
+(@PATH,29,-9326.092,2045.334,85.64993,0,0,0,0,100,0),
+(@PATH,30,-9321.812,2013.535,85.68073,0,0,0,0,100,0),
+(@PATH,31,-9312.634,1989.898,85.68074,0,0,0,0,100,0),
+(@PATH,32,-9320.132,1941.708,85.652,0,0,0,0,100,0),
+(@PATH,33,-9334.301,1916.916,85.67978,0,0,0,0,100,0),
+(@PATH,34,-9363.942,1895.521,85.68073,0,0,0,0,100,0),
+(@PATH,35,-9385.781,1880.747,86.05794,0,0,0,0,100,0),
+(@PATH,36,-9417.543,1860.298,85.97346,0,0,0,0,100,0),
+(@PATH,37,-9446.719,1864.315,85.68074,0,0,0,0,100,0),
+(@PATH,38,-9482.172,1869.57,85.68074,0,0,0,0,100,0),
+(@PATH,39,-9529.659,1878.282,85.84587,0,0,0,0,100,0),
+(@PATH,40,-9513.365,1858.603,85.6807,0,0,0,0,100,0),
+(@PATH,41,-9475.059,1881.233,85.68074,0,0,0,0,100,0),
+(@PATH,42,-9447.695,1905.845,85.67978,0,0,0,0,100,0),
+(@PATH,43,-9414.993,1911.188,85.58256,0,0,0,0,100,0),
+(@PATH,44,-9382.191,1909.415,85.68074,0,0,0,0,100,0),
+(@PATH,45,-9351.412,1910.773,85.67978,0,0,0,0,100,0),
+(@PATH,46,-9310.615,1922.279,85.58256,0,0,0,0,100,0),
+(@PATH,47,-9277.019,1933.476,85.68074,0,0,0,0,100,0),
+(@PATH,48,-9235.7,1928.599,85.68074,0,0,0,0,100,0),
+(@PATH,49,-9224.213,1883.244,85.68073,0,0,0,0,100,0),
+(@PATH,50,-9199.386,1867.022,85.68073,0,0,0,0,100,0);
+
+-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT'
+SET @NPC := @CGUID+175;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9033.357,`position_y`=1700.726,`position_z`=21.50263 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, '19818');
+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,-9033.357,1700.726,21.50263,0,0,0,0,100,0),
+(@PATH,2,-9015.379,1687.783,21.51133,0,0,0,0,100,0),
+(@PATH,3,-8994.662,1677.224,21.51133,0,0,0,0,100,0),
+(@PATH,4,-8978.021,1677.923,21.51133,0,0,0,0,100,0),
+(@PATH,5,-8972.52,1687.417,21.51133,0,0,0,0,100,0),
+(@PATH,6,-8984.521,1701.282,21.51128,0,0,0,0,100,0),
+(@PATH,7,-9001.419,1714.948,21.44322,0,0,0,0,100,0),
+(@PATH,8,-9022.22,1741.963,21.47298,0,0,0,0,100,0),
+(@PATH,9,-9031.46,1752.775,21.47298,0,0,0,0,100,0),
+(@PATH,10,-9055.802,1756.606,21.51128,0,0,0,0,100,0),
+(@PATH,11,-9067.387,1766.724,21.51128,0,0,0,0,100,0),
+(@PATH,12,-9072.949,1783.319,21.51128,0,0,0,0,100,0),
+(@PATH,13,-9081.565,1794.618,21.51128,0,0,0,0,100,0),
+(@PATH,14,-9091.146,1792.92,21.51128,0,0,0,0,100,0),
+(@PATH,15,-9095.299,1779.993,21.51128,0,0,0,0,100,0),
+(@PATH,16,-9094.856,1764.921,21.51128,0,0,0,0,100,0),
+(@PATH,17,-9080.542,1740.715,21.51128,0,0,0,0,100,0),
+(@PATH,18,-9063.872,1726.509,21.50263,0,0,0,0,100,0);
+
+-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT'
+SET @NPC := @CGUID+176;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9042.727,`position_y`=1737.669,`position_z`=21.51128 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, '19818');
+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,-9042.727,1737.669,21.51128,0,0,0,0,100,0),
+(@PATH,2,-9074.525,1763.811,21.63628,0,0,0,0,100,0),
+(@PATH,3,-9042.727,1737.669,21.51128,0,0,0,0,100,0),
+(@PATH,4,-9016.15,1713.575,21.44322,0,0,0,0,100,0),
+(@PATH,5,-8996.683,1694.021,21.88633,0,0,0,0,100,0),
+(@PATH,6,-9016.15,1713.575,21.44322,0,0,0,0,100,0);
+
+-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT'
+SET @NPC := @CGUID+177;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8912.597,`position_y`=1750.176,`position_z`=21.51128 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, '19818');
+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,-8912.597,1750.176,21.51128,0,0,0,0,100,0),
+(@PATH,2,-8887.421,1790.745,21.89122,0,0,0,0,100,0),
+(@PATH,3,-8875.27,1810.156,21.52765,0,0,0,0,100,0),
+(@PATH,4,-8857.879,1833.748,21.51134,0,0,0,0,100,0),
+(@PATH,5,-8875.27,1810.156,21.52765,0,0,0,0,100,0),
+(@PATH,6,-8887.421,1790.745,21.89122,0,0,0,0,100,0),
+(@PATH,7,-8912.597,1750.176,21.51128,0,0,0,0,100,0),
+(@PATH,8,-8939.655,1710.923,21.51128,0,0,0,0,100,0);
+
+-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT'
+SET @NPC := @CGUID+178;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9042.861,`position_y`=1841.39,`position_z`=21.51129 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, '19818');
+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,-9042.861,1841.39,21.51129,0,0,0,0,100,0),
+(@PATH,2,-9068.371,1808.513,21.51134,0,0,0,0,100,0),
+(@PATH,3,-9042.861,1841.39,21.51129,0,0,0,0,100,0),
+(@PATH,4,-9027.129,1875.23,21.73922,0,0,0,0,100,0),
+(@PATH,5,-9010.076,1901.59,21.51132,0,0,0,0,100,0),
+(@PATH,6,-8985.672,1928.493,21.39046,0,0,0,0,100,0),
+(@PATH,7,-9010.076,1901.59,21.51132,0,0,0,0,100,0),
+(@PATH,8,-9027.129,1875.23,21.73922,0,0,0,0,100,0);
+
+-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT'
+SET @NPC := @CGUID+179;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8783.435,`position_y`=2068.937,`position_z`=21.51132 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, '19818');
+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,-8783.435,2068.937,21.51132,0,0,0,0,100,0),
+(@PATH,2,-8783.41,2098.071,21.99277,0,0,0,0,100,0),
+(@PATH,3,-8790.493,2121.913,21.39743,0,0,0,0,100,0),
+(@PATH,4,-8804.847,2146.174,21.5113,0,0,0,0,100,0),
+(@PATH,5,-8816.018,2179.885,21.5113,0,0,0,0,100,0),
+(@PATH,6,-8825.034,2192.031,21.5113,0,0,0,0,100,0),
+(@PATH,7,-8816.018,2179.885,21.5113,0,0,0,0,100,0),
+(@PATH,8,-8804.847,2146.174,21.5113,0,0,0,0,100,0),
+(@PATH,9,-8790.493,2121.913,21.39743,0,0,0,0,100,0),
+(@PATH,10,-8783.41,2098.071,21.99277,0,0,0,0,100,0);
+
+-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT'
+SET @NPC := @CGUID+180;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8973.863,`position_y`=2090.781,`position_z`=21.51132 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, '19818');
+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,-8973.863,2090.781,21.51132,0,0,0,0,100,0),
+(@PATH,2,-8965.227,2063.428,21.51132,0,0,0,0,100,0),
+(@PATH,3,-8973.863,2090.781,21.51132,0,0,0,0,100,0),
+(@PATH,4,-8997.472,2114.756,21.51132,0,0,0,0,100,0),
+(@PATH,5,-9038.394,2142.94,21.51132,0,0,0,0,100,0),
+(@PATH,6,-9071.605,2173.132,21.51134,0,0,0,0,100,0),
+(@PATH,7,-9100.489,2204.315,21.51138,0,0,0,0,100,0),
+(@PATH,8,-9128.889,2235.459,21.51138,0,0,0,0,100,0),
+(@PATH,9,-9100.489,2204.315,21.51138,0,0,0,0,100,0),
+(@PATH,10,-9071.605,2173.132,21.51134,0,0,0,0,100,0),
+(@PATH,11,-9038.394,2142.94,21.51132,0,0,0,0,100,0),
+(@PATH,12,-8997.472,2114.756,21.51132,0,0,0,0,100,0);
+
+-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT'
+SET @NPC := @CGUID+181;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8816.171,`position_y`=1898.789,`position_z`=21.44084 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, '19818');
+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,-8816.171,1898.789,21.44084,0,0,0,0,100,0),
+(@PATH,2,-8839.262,1867.66,21.49597,0,0,0,0,100,0),
+(@PATH,3,-8816.171,1898.789,21.44084,0,0,0,0,100,0),
+(@PATH,4,-8802.058,1921.186,21.51134,0,0,0,0,100,0),
+(@PATH,5,-8793.903,1947.559,21.41075,0,0,0,0,100,0),
+(@PATH,6,-8790.971,1971.102,21.51134,0,0,0,0,100,0),
+(@PATH,7,-8789.137,2003.844,21.50675,0,0,0,0,100,0),
+(@PATH,8,-8786.372,2039.531,21.51132,0,0,0,0,100,0),
+(@PATH,9,-8789.137,2003.844,21.50675,0,0,0,0,100,0),
+(@PATH,10,-8790.971,1971.102,21.51134,0,0,0,0,100,0),
+(@PATH,11,-8793.903,1947.559,21.41075,0,0,0,0,100,0),
+(@PATH,12,-8802.058,1921.186,21.51134,0,0,0,0,100,0);
+
+-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT'
+SET @NPC := @CGUID+182;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8969.802,`position_y`=2023.487,`position_z`=22.20616 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, '19818');
+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,-8969.802,2023.487,22.20616,0,0,0,0,100,0),
+(@PATH,2,-8944.742,2022.87,21.63633,0,0,0,0,100,0),
+(@PATH,3,-8921.641,2023.073,22.70727,0,0,0,0,100,0),
+(@PATH,4,-8898.989,2022.108,20.80474,0,0,0,0,100,0),
+(@PATH,5,-8863.61,2021.74,20.80473,0,0,0,0,100,0),
+(@PATH,6,-8823.653,2020.322,22.78971,0,0,0,0,100,0),
+(@PATH,7,-8779.903,2018.759,21.7045,0,0,0,0,100,0),
+(@PATH,8,-8823.653,2020.322,22.78971,0,0,0,0,100,0),
+(@PATH,9,-8822.38,2017.285,22.79048,0,0,0,0,100,0),
+(@PATH,10,-8863.61,2021.74,21.66928,0,0,0,0,100,0),
+(@PATH,11,-8898.989,2022.108,20.80474,0,0,0,0,100,0),
+(@PATH,12,-8921.641,2023.073,22.70727,0,0,0,0,100,0),
+(@PATH,13,-8944.742,2022.87,21.63633,0,0,0,0,100,0);
+
+-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT'
+SET @NPC := @CGUID+183;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8892.271,`position_y`=1893.26,`position_z`=21.65431 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, '19818');
+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,-8892.271,1893.26,21.65431,0,0,0,0,100,0),
+(@PATH,2,-8920.27,1911.372,21.77089,0,0,0,0,100,0),
+(@PATH,3,-8947.984,1930.219,22.32584,0,0,0,0,100,0),
+(@PATH,4,-8976.198,1948.563,21.51134,0,0,0,0,100,0),
+(@PATH,5,-8947.984,1930.219,22.32584,0,0,0,0,100,0),
+(@PATH,6,-8920.27,1911.372,21.77089,0,0,0,0,100,0),
+(@PATH,7,-8892.271,1893.26,21.77088,0,0,0,0,100,0),
+(@PATH,8,-8868.629,1877.659,21.87304,0,0,0,0,100,0),
+(@PATH,9,-8832.841,1852.986,21.54105,0,0,0,0,100,0),
+(@PATH,10,-8868.629,1877.659,21.87304,0,0,0,0,100,0);
+
+-- Pathing for Flesh Hunter Entry: 15335 'TDB FORMAT'
+SET @NPC := @CGUID+164;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9043.481,`position_y`=2118.309,`position_z`=21.77282 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, '18950');
+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,-9043.481,2118.309,21.77282,0,0,0,0,100,0),
+(@PATH,2,-9015.23,2102.794,22.79501,0,0,0,0,100,0),
+(@PATH,3,-8984.772,2078.662,21.99447,0,0,0,0,100,0),
+(@PATH,4,-8946.997,2073.267,22.66354,0,0,0,0,100,0),
+(@PATH,5,-8946.354,2104.688,23.20453,0,0,0,0,100,0),
+(@PATH,6,-8979.36,2128.562,22.51132,0,0,0,0,100,0),
+(@PATH,7,-9000.776,2157.609,23.0173,0,0,0,0,100,0),
+(@PATH,8,-8997.853,2188.157,24.82291,0,0,0,0,100,0),
+(@PATH,9,-8980.488,2222.645,24.47016,0,0,0,0,100,0),
+(@PATH,10,-8947.694,2247.549,26.53898,0,0,0,0,100,0),
+(@PATH,11,-8925.727,2254.902,22.93172,0,0,0,0,100,0),
+(@PATH,12,-8899.796,2231.063,21.50976,0,0,0,0,100,0),
+(@PATH,13,-8774.992,2122.031,27.18796,0,0,0,0,100,0),
+(@PATH,14,-8788.56,2156.315,22.57724,0,0,0,0,100,0),
+(@PATH,15,-8824.089,2150.349,21.5113,0,0,0,0,100,0),
+(@PATH,16,-8847.282,2160.686,22.8295,0,0,0,0,100,0),
+(@PATH,17,-8878.708,2195.174,24.06134,0,0,0,0,100,0),
+(@PATH,18,-8899.255,2224.002,21.50976,0,0,0,0,100,0),
+(@PATH,19,-8927.709,2249.856,23.44112,0,0,0,0,100,0),
+(@PATH,20,-8943.206,2244.535,26.44963,0,0,0,0,100,0),
+(@PATH,21,-8975.5,2223.893,23.89484,0,0,0,0,100,0),
+(@PATH,22,-8992.835,2203.356,24.46564,0,0,0,0,100,0),
+(@PATH,23,-9000.075,2177.49,24.70543,0,0,0,0,100,0),
+(@PATH,24,-9022.258,2168.586,25.53624,0,0,0,0,100,0),
+(@PATH,25,-9048.837,2191.075,25.16519,0,0,0,0,100,0),
+(@PATH,26,-9067.234,2222.022,23.55216,0,0,0,0,100,0),
+(@PATH,27,-9091.356,2246.307,25.71063,0,0,0,0,100,0),
+(@PATH,28,-9117.254,2253.088,23.81876,0,0,0,0,100,0),
+(@PATH,29,-9142.09,2238.851,22.44915,0,0,0,0,100,0),
+(@PATH,30,-9146.989,2216.528,23.29689,0,0,0,0,100,0),
+(@PATH,31,-9118.285,2185.291,22.93004,0,0,0,0,100,0),
+(@PATH,32,-9102.656,2157.033,21.51134,0,0,0,0,100,0),
+(@PATH,33,-9075.009,2145.98,23.58446,0,0,0,0,100,0);
+
+-- Pathing for Flesh Hunter Entry: 15335 'TDB FORMAT'
+SET @NPC := @CGUID+165;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8937.627,`position_y`=1698.941,`position_z`=21.93345 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, '18950');
+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,-8937.627,1698.941,21.93345,0,0,0,0,100,0),
+(@PATH,2,-8920.532,1729.919,21.51128,0,0,0,0,100,0),
+(@PATH,3,-8908.218,1761.801,21.51128,0,0,0,0,100,0),
+(@PATH,4,-8885.667,1785.599,21.55186,0,0,0,0,100,0),
+(@PATH,5,-8865.728,1829.28,21.51134,0,0,0,0,100,0),
+(@PATH,6,-8873.043,1860.568,24.12182,0,0,0,0,100,0),
+(@PATH,7,-8840.51,1857.832,21.51134,0,0,0,0,100,0),
+(@PATH,8,-8808.15,1884.686,21.48137,0,0,0,0,100,0),
+(@PATH,9,-8789.465,1924.165,21.91466,0,0,0,0,100,0),
+(@PATH,10,-8785.51,1961.738,22.2678,0,0,0,0,100,0),
+(@PATH,11,-8795.169,2004.241,21.50675,0,0,0,0,100,0),
+(@PATH,12,-8785.291,2024.753,21.50675,0,0,0,0,100,0),
+(@PATH,13,-8781.997,2063.416,21.51132,0,0,0,0,100,0),
+(@PATH,14,-8785.409,2085.489,21.51132,0,0,0,0,100,0),
+(@PATH,15,-8800.996,2059.075,21.54108,0,0,0,0,100,0),
+(@PATH,16,-8797.33,2012.523,21.50675,0,0,0,0,100,0),
+(@PATH,17,-8785.368,1995.146,21.51134,0,0,0,0,100,0),
+(@PATH,18,-8796.997,1956.54,21.51133,0,0,0,0,100,0),
+(@PATH,19,-8803.447,1922.115,21.51134,0,0,0,0,100,0),
+(@PATH,20,-8826.821,1891.991,21.44084,0,0,0,0,100,0),
+(@PATH,21,-8853.722,1857.549,21.64537,0,0,0,0,100,0),
+(@PATH,22,-8875.416,1831.338,21.5401,0,0,0,0,100,0),
+(@PATH,23,-8891.538,1801.722,21.40265,0,0,0,0,100,0),
+(@PATH,24,-8913.353,1764.123,21.51128,0,0,0,0,100,0),
+(@PATH,25,-8932.728,1722.069,21.51128,0,0,0,0,100,0),
+(@PATH,26,-8953.999,1702.306,21.51128,0,0,0,0,100,0),
+(@PATH,27,-8971.226,1712.679,22.30425,0,0,0,0,100,0),
+(@PATH,28,-8992.638,1723.895,21.95708,0,0,0,0,100,0),
+(@PATH,29,-9019.508,1750.176,21.47298,0,0,0,0,100,0),
+(@PATH,30,-9050.058,1757.618,21.51128,0,0,0,0,100,0),
+(@PATH,31,-9067.125,1783.419,21.51128,0,0,0,0,100,0),
+(@PATH,32,-9051.433,1827.842,21.51132,0,0,0,0,100,0),
+(@PATH,33,-9017.392,1854.547,21.78888,0,0,0,0,100,0),
+(@PATH,34,-9005.049,1877.975,22.21676,0,0,0,0,100,0),
+(@PATH,35,-9007.448,1920.794,21.51132,0,0,0,0,100,0),
+(@PATH,36,-8989.702,1949.567,22.3109,0,0,0,0,100,0),
+(@PATH,37,-8979.287,1983.77,21.65501,0,0,0,0,100,0),
+(@PATH,38,-8973.602,2011.78,21.51134,0,0,0,0,100,0),
+(@PATH,39,-8968.567,2049.794,21.88634,0,0,0,0,100,0),
+(@PATH,40,-8969.888,2083.404,21.51132,0,0,0,0,100,0),
+(@PATH,41,-8956.057,2078.304,21.806,0,0,0,0,100,0),
+(@PATH,42,-8938.739,2045.659,22.83847,0,0,0,0,100,0),
+(@PATH,43,-8939.479,2009.669,22.33628,0,0,0,0,100,0),
+(@PATH,44,-8953.139,1989.581,21.85654,0,0,0,0,100,0),
+(@PATH,45,-8956.321,1957.073,21.82368,0,0,0,0,100,0),
+(@PATH,46,-8969.141,1927.572,22.15987,0,0,0,0,100,0),
+(@PATH,47,-8989.028,1899.803,21.95286,0,0,0,0,100,0),
+(@PATH,48,-9020.87,1876.037,21.51132,0,0,0,0,100,0),
+(@PATH,49,-9055.008,1842.989,22.47308,0,0,0,0,100,0),
+(@PATH,50,-9084.486,1817.886,25.49034,0,0,0,0,100,0),
+(@PATH,51,-9097.041,1783.97,21.51128,0,0,0,0,100,0),
+(@PATH,52,-9118.29,1753.874,22.52647,0,0,0,0,100,0),
+(@PATH,53,-9093.203,1728.075,24.58226,0,0,0,0,100,0),
+(@PATH,54,-9052.174,1708.394,21.50263,0,0,0,0,100,0),
+(@PATH,55,-9020.147,1686.075,21.61656,0,0,0,0,100,0),
+(@PATH,56,-8986.377,1657.262,22.46316,0,0,0,0,100,0),
+(@PATH,57,-8964.914,1648.625,24.69013,0,0,0,0,100,0),
+(@PATH,58,-8944.825,1659.208,24.58833,0,0,0,0,100,0);
+
+-- Pathing for Flesh Hunter Entry: 15335 'TDB FORMAT'
+SET @NPC := @CGUID+166;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9290.099,`position_y`=1380.387,`position_z`=21.38616 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, '18950');
+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,-9290.099,1380.387,21.38616,0,0,0,0,100,0),
+(@PATH,2,-9266.542,1382.812,21.44118,0,0,0,0,100,0),
+(@PATH,3,-9243.845,1402.906,23.31999,0,0,0,0,100,0),
+(@PATH,4,-9224.515,1442.994,24.32664,0,0,0,0,100,0),
+(@PATH,5,-9206.087,1475.642,25.78873,0,0,0,0,100,0),
+(@PATH,6,-9173.119,1482.051,21.5113,0,0,0,0,100,0),
+(@PATH,7,-9176.457,1441.36,22.84715,0,0,0,0,100,0),
+(@PATH,8,-9192.751,1415.595,22.71139,0,0,0,0,100,0),
+(@PATH,9,-9214.301,1378.276,21.75317,0,0,0,0,100,0),
+(@PATH,10,-9213.823,1340.182,21.47529,0,0,0,0,100,0),
+(@PATH,11,-9186.384,1316.321,21.47732,0,0,0,0,100,0),
+(@PATH,12,-9146.026,1309.063,22.9012,0,0,0,0,100,0),
+(@PATH,13,-9186.384,1316.321,21.47732,0,0,0,0,100,0),
+(@PATH,14,-9213.823,1340.182,21.47529,0,0,0,0,100,0),
+(@PATH,15,-9214.301,1378.276,21.75317,0,0,0,0,100,0),
+(@PATH,16,-9192.751,1415.595,22.71139,0,0,0,0,100,0),
+(@PATH,17,-9176.457,1441.36,22.84715,0,0,0,0,100,0),
+(@PATH,18,-9173.119,1482.051,21.5113,0,0,0,0,100,0),
+(@PATH,19,-9206.087,1475.642,25.78873,0,0,0,0,100,0),
+(@PATH,20,-9224.515,1442.994,24.32664,0,0,0,0,100,0),
+(@PATH,21,-9243.845,1402.906,23.31999,0,0,0,0,100,0),
+(@PATH,22,-9266.542,1382.812,21.44118,0,0,0,0,100,0),
+(@PATH,23,-9290.099,1380.387,21.48297,0,10000,0,0,100,0),
+(@PATH,24,-9305.492,1403.459,25.60786,0,15000,0,0,100,0);
+
+-- Pathing for Flesh Hunter Entry: 15335 'TDB FORMAT'
+SET @NPC := @CGUID+167;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9452.126,`position_y`=1337.869,`position_z`=21.42187 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, '18950');
+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,-9452.126,1337.869,21.42187,0,0,0,0,100,0),
+(@PATH,2,-9417.646,1355.137,22.36102,0,0,0,0,100,0),
+(@PATH,3,-9403.974,1352.924,21.39361,0,0,0,0,100,0),
+(@PATH,4,-9432.193,1352.471,21.55352,0,0,0,0,100,0),
+(@PATH,5,-9457.63,1330.037,21.44484,0,0,0,0,100,0),
+(@PATH,6,-9442.115,1301.084,18.79591,0,0,0,0,100,0),
+(@PATH,7,-9421.976,1294.538,6.835041,0,0,0,0,100,0),
+(@PATH,8,-9395.618,1285.335,-8.039509,0,0,0,0,100,0),
+(@PATH,9,-9381.646,1286.155,-14.88204,0,0,0,0,100,0),
+(@PATH,10,-9364.117,1279.244,-22.36019,0,0,0,0,100,0),
+(@PATH,11,-9341.927,1257.022,-42.71544,0,0,0,0,100,0),
+(@PATH,12,-9358.893,1279.803,-24.58626,0,0,0,0,100,0),
+(@PATH,13,-9378.188,1284.211,-16.61263,0,0,0,0,100,0),
+(@PATH,14,-9402.994,1287.507,-3.193645,0,0,0,0,100,0),
+(@PATH,15,-9429.794,1296.828,10.47188,0,0,0,0,100,0),
+(@PATH,16,-9459.201,1309.284,21.44484,0,0,0,0,100,0),
+(@PATH,17,-9449.167,1266.607,21.47515,0,0,0,0,100,0),
+(@PATH,18,-9420.796,1250.398,21.60155,0,0,0,0,100,0),
+(@PATH,19,-9449.167,1266.607,21.47515,0,0,0,0,100,0),
+(@PATH,20,-9459.201,1309.284,21.44484,0,0,0,0,100,0),
+(@PATH,21,-9429.794,1296.828,10.47188,0,0,0,0,100,0),
+(@PATH,22,-9403.174,1287.535,-3.026531,0,0,0,0,100,0),
+(@PATH,23,-9378.188,1284.211,-16.61263,0,0,0,0,100,0),
+(@PATH,24,-9358.893,1279.803,-24.58626,0,0,0,0,100,0),
+(@PATH,25,-9341.927,1257.022,-42.71544,0,0,0,0,100,0),
+(@PATH,26,-9364.117,1279.244,-22.36019,0,0,0,0,100,0),
+(@PATH,27,-9381.559,1286.167,-14.92842,0,0,0,0,100,0),
+(@PATH,28,-9395.531,1285.347,-8.382038,0,0,0,0,100,0),
+(@PATH,29,-9421.976,1294.538,6.835041,0,0,0,0,100,0),
+(@PATH,30,-9442.115,1301.084,18.79591,0,0,0,0,100,0),
+(@PATH,31,-9457.63,1330.037,21.44484,0,0,0,0,100,0),
+(@PATH,32,-9432.193,1352.471,21.55352,0,0,0,0,100,0),
+(@PATH,33,-9403.974,1352.924,21.39361,0,0,0,0,100,0),
+(@PATH,34,-9417.646,1355.137,22.36102,0,0,0,0,100,0),
+(@PATH,35,-9452.126,1337.869,21.42187,0,0,0,0,100,0),
+(@PATH,36,-9460.447,1307.998,21.44484,0,0,0,0,100,0),
+(@PATH,37,-9451.692,1280.025,21.41385,0,0,0,0,100,0),
+(@PATH,38,-9436.887,1255.127,21.91142,0,0,0,0,100,0),
+(@PATH,39,-9402.084,1241.667,21.54369,0,0,0,0,100,0),
+(@PATH,40,-9382.529,1226.703,21.4241,0,0,0,0,100,0),
+(@PATH,41,-9401.425,1241.072,21.55248,0,0,0,0,100,0),
+(@PATH,42,-9436.887,1255.127,21.91142,0,0,0,0,100,0),
+(@PATH,43,-9451.692,1280.025,21.41385,0,0,0,0,100,0),
+(@PATH,44,-9460.447,1307.998,21.44484,0,0,0,0,100,0);
+
+-- Pathing for Qiraji Swarmguard Entry: 15343 'TDB FORMAT'
+SET @NPC := @CGUID+187;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8715.07,`position_y`=1514.421,`position_z`=32.02237 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,-8715.07,1514.421,32.02237,0,0,0,0,100,0),
+(@PATH,2,-8707.966,1495.304,32.03201,0,0,0,0,100,0),
+(@PATH,3,-8676.498,1465.334,32.03133,0,0,0,0,100,0),
+(@PATH,4,-8674.114,1424.483,32.03201,0,0,0,0,100,0),
+(@PATH,5,-8676.498,1465.334,32.03133,0,0,0,0,100,0),
+(@PATH,6,-8707.966,1495.304,32.03201,0,0,0,0,100,0),
+(@PATH,7,-8715.07,1514.421,32.02237,0,0,0,0,100,0),
+(@PATH,8,-8683.518,1489.15,32.03194,0,0,0,0,100,0),
+(@PATH,9,-8652.897,1459.573,32.03194,0,0,0,0,100,0),
+(@PATH,10,-8624.121,1441.949,32.86404,0,0,0,0,100,0),
+(@PATH,11,-8632.826,1463.566,32.03201,0,0,0,0,100,0),
+(@PATH,12,-8643.889,1475.416,32.00608,0,0,0,0,100,0),
+(@PATH,13,-8605.078,1462.348,32.03201,0,0,0,0,100,0),
+(@PATH,14,-8608.562,1487.01,32.13507,0,0,0,0,100,0),
+(@PATH,15,-8598.64,1521.189,37.2549,0,0,0,0,100,0),
+(@PATH,16,-8624.487,1500.118,31.95148,0,0,0,0,100,0),
+(@PATH,17,-8650.246,1484.845,32.00608,0,0,0,0,100,0),
+(@PATH,18,-8627.65,1525.419,32.07648,0,0,0,0,100,0),
+(@PATH,19,-8658.124,1488.298,32.00608,0,0,0,0,100,0),
+(@PATH,20,-8649.376,1536.51,32.03201,0,0,0,0,100,0),
+(@PATH,21,-8678.199,1552.388,31.96736,0,0,0,0,100,0),
+(@PATH,22,-8649.376,1536.51,32.03201,0,0,0,0,100,0),
+(@PATH,23,-8658.124,1488.298,32.00608,0,0,0,0,100,0),
+(@PATH,24,-8627.65,1525.419,32.07648,0,0,0,0,100,0),
+(@PATH,25,-8650.246,1484.845,32.00608,0,0,0,0,100,0),
+(@PATH,26,-8624.487,1500.118,31.95148,0,0,0,0,100,0),
+(@PATH,27,-8598.64,1521.189,37.2549,0,0,0,0,100,0),
+(@PATH,28,-8608.562,1487.01,32.13507,0,0,0,0,100,0),
+(@PATH,29,-8605.078,1462.348,32.03201,0,0,0,0,100,0),
+(@PATH,30,-8643.889,1475.416,32.00608,0,0,0,0,100,0),
+(@PATH,31,-8632.826,1463.566,32.03201,0,0,0,0,100,0),
+(@PATH,32,-8624.121,1441.949,32.86404,0,0,0,0,100,0),
+(@PATH,33,-8652.897,1459.573,32.03194,0,0,0,0,100,0),
+(@PATH,34,-8683.518,1489.15,32.03194,0,0,0,0,100,0);
+
+-- Pathing for Qiraji Swarmguard Entry: 15343 'TDB FORMAT'
+SET @NPC := @CGUID+188;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8626.872,`position_y`=1393.024,`position_z`=32.11965 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,-8626.872,1393.024,32.11965,0,0,0,0,100,0),
+(@PATH,2,-8612.871,1397.043,32.03201,0,0,0,0,100,0),
+(@PATH,3,-8601.797,1405.588,33.28201,0,0,0,0,100,0),
+(@PATH,4,-8597.448,1422.481,32.04214,0,0,0,0,100,0),
+(@PATH,5,-8602.82,1435.621,32.58205,0,0,0,0,100,0),
+(@PATH,6,-8614.282,1446.714,32.03201,0,0,0,0,100,0),
+(@PATH,7,-8632.753,1445.288,32.78201,0,0,0,0,100,0),
+(@PATH,8,-8648.204,1430.458,32.16177,0,0,0,0,100,0),
+(@PATH,9,-8651.211,1414.462,32.32424,0,0,0,0,100,0),
+(@PATH,10,-8639.497,1397.023,32.03201,0,0,0,0,100,0);
+
+-- Pathing for Qiraji Swarmguard Entry: 15343 'TDB FORMAT'
+SET @NPC := @CGUID+189;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8698.72,`position_y`=1557.427,`position_z`=31.96736 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,-8698.72,1557.427,31.96736,0,0,0,0,100,0),
+(@PATH,2,-8727.424,1587.903,21.51132,0,0,0,0,100,0),
+(@PATH,3,-8745.534,1586.328,21.51132,0,0,0,0,100,0),
+(@PATH,4,-8750.269,1568.49,23.20175,0,0,0,0,100,0),
+(@PATH,5,-8749.061,1555.604,27.10514,0,0,0,0,100,0),
+(@PATH,6,-8745.534,1586.328,21.51132,0,0,0,0,100,0),
+(@PATH,7,-8727.424,1587.903,21.51132,0,0,0,0,100,0),
+(@PATH,8,-8698.72,1557.427,31.96736,0,0,0,0,100,0),
+(@PATH,9,-8677.868,1540.741,31.96736,0,0,0,0,100,0),
+(@PATH,10,-8652.031,1526.245,32.03201,0,0,0,0,100,0),
+(@PATH,11,-8631.435,1513.663,31.95148,0,0,0,0,100,0),
+(@PATH,12,-8620.831,1486.299,31.94367,0,0,0,0,100,0),
+(@PATH,13,-8631.435,1513.663,31.95148,0,0,0,0,100,0),
+(@PATH,14,-8652.031,1526.245,32.03201,0,0,0,0,100,0),
+(@PATH,15,-8677.868,1540.741,31.96736,0,0,0,0,100,0);
+
+-- Pathing for Qiraji Swarmguard Entry: 15343 'TDB FORMAT'
+SET @NPC := @CGUID+190;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8596.261,`position_y`=1445.324,`position_z`=32.03201 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,-8596.261,1445.324,32.03201,0,0,0,0,100,0),
+(@PATH,2,-8579.316,1455.001,32.57644,0,0,0,0,100,0),
+(@PATH,3,-8558.855,1463.694,32.03201,0,0,0,0,100,0),
+(@PATH,4,-8544.131,1479.762,32.15701,0,0,0,0,100,0),
+(@PATH,5,-8534.158,1494.747,32.78201,0,0,0,0,100,0),
+(@PATH,6,-8523.998,1511.022,32.90698,0,0,0,0,100,0),
+(@PATH,7,-8515.556,1523.541,32.28198,0,0,0,0,100,0),
+(@PATH,8,-8501.833,1535.644,32.03198,0,0,0,0,100,0),
+(@PATH,9,-8523.998,1511.022,32.90698,0,0,0,0,100,0),
+(@PATH,10,-8534.158,1494.747,32.78201,0,0,0,0,100,0),
+(@PATH,11,-8544.131,1479.762,32.15701,0,0,0,0,100,0),
+(@PATH,12,-8558.855,1463.694,32.03201,0,0,0,0,100,0),
+(@PATH,13,-8579.316,1455.001,32.57644,0,0,0,0,100,0),
+(@PATH,14,-8596.261,1445.324,32.03201,0,0,0,0,100,0),
+(@PATH,15,-8609.186,1444.716,32.03201,0,0,0,0,100,0),
+(@PATH,16,-8624.747,1453.474,32.03201,0,0,0,0,100,0),
+(@PATH,17,-8648.166,1437.747,32.03194,0,0,0,0,100,0),
+(@PATH,18,-8653.364,1427.667,32.90701,0,0,0,0,100,0),
+(@PATH,19,-8652.444,1412.949,32.52126,0,0,0,0,100,0),
+(@PATH,20,-8635.768,1394.096,32.03201,0,0,0,0,100,0),
+(@PATH,21,-8624.594,1389.992,32.03201,0,0,0,0,100,0),
+(@PATH,22,-8605.42,1395.665,32.03201,0,0,0,0,100,0),
+(@PATH,23,-8594.566,1415.467,32.03201,0,0,0,0,100,0),
+(@PATH,24,-8599.567,1429.468,32.63076,0,0,0,0,100,0),
+(@PATH,25,-8620.474,1447.892,32.03201,0,0,0,0,100,0),
+(@PATH,26,-8632.201,1448.974,32.83376,0,0,0,0,100,0),
+(@PATH,27,-8648.3,1425.739,32.86428,0,0,0,0,100,0),
+(@PATH,28,-8647.554,1415.542,32.81582,0,0,0,0,100,0),
+(@PATH,29,-8634.466,1397.044,32.08352,0,0,0,0,100,0),
+(@PATH,30,-8612.184,1395.429,32.03201,0,0,0,0,100,0),
+(@PATH,31,-8602.937,1404.893,33.18166,0,0,0,0,100,0),
+(@PATH,32,-8606.291,1430.675,33.09939,0,0,0,0,100,0),
+(@PATH,33,-8614.849,1438.85,32.68252,0,0,0,0,100,0),
+(@PATH,34,-8636.876,1442.12,32.39876,0,0,0,0,100,0),
+(@PATH,35,-8642.267,1432.34,32.03201,0,0,0,0,100,0),
+(@PATH,36,-8640.708,1410.744,33.11062,0,0,0,0,100,0),
+(@PATH,37,-8625.944,1401.671,32.70779,0,0,0,0,100,0),
+(@PATH,38,-8607.826,1407.917,32.91775,0,0,0,0,100,0),
+(@PATH,39,-8610.313,1427.698,33.28201,0,0,0,0,100,0),
+(@PATH,40,-8622.624,1437.455,33.24148,0,0,0,0,100,0),
+(@PATH,41,-8629.749,1439.459,32.77468,0,0,0,0,100,0),
+(@PATH,42,-8605.587,1416.063,33.04202,0,0,0,0,100,0),
+(@PATH,43,-8607.826,1407.917,32.91775,0,0,0,0,100,0),
+(@PATH,44,-8625.944,1401.671,32.70779,0,0,0,0,100,0),
+(@PATH,45,-8640.708,1410.744,33.11062,0,0,0,0,100,0),
+(@PATH,46,-8642.267,1432.34,32.03201,0,0,0,0,100,0),
+(@PATH,47,-8623.281,1444.953,32.4501,0,0,0,0,100,0),
+(@PATH,48,-8614.849,1438.85,32.68252,0,0,0,0,100,0),
+(@PATH,49,-8600.551,1419.44,32.26528,0,0,0,0,100,0),
+(@PATH,50,-8602.937,1404.893,33.18166,0,0,0,0,100,0),
+(@PATH,51,-8625.483,1394.269,32.41152,0,0,0,0,100,0),
+(@PATH,52,-8634.466,1397.044,32.08352,0,0,0,0,100,0),
+(@PATH,53,-8647.554,1415.542,32.81582,0,0,0,0,100,0),
+(@PATH,54,-8643.316,1438.734,32.03194,0,0,0,0,100,0),
+(@PATH,55,-8632.201,1448.974,32.83376,0,0,0,0,100,0),
+(@PATH,56,-8608.438,1441.045,32.11904,0,0,0,0,100,0),
+(@PATH,57,-8599.567,1429.468,32.63076,0,0,0,0,100,0),
+(@PATH,58,-8594.566,1415.467,32.03201,0,0,0,0,100,0),
+(@PATH,59,-8605.42,1395.665,32.03201,0,0,0,0,100,0),
+(@PATH,60,-8624.594,1389.992,32.03201,0,0,0,0,100,0),
+(@PATH,61,-8642.364,1400.395,32.03201,0,0,0,0,100,0),
+(@PATH,62,-8652.444,1412.949,32.52126,0,0,0,0,100,0),
+(@PATH,63,-8653.364,1427.667,32.90701,0,0,0,0,100,0),
+(@PATH,64,-8638.11,1450.366,33.01338,0,0,0,0,100,0),
+(@PATH,65,-8624.747,1453.474,32.03201,0,0,0,0,100,0),
+(@PATH,66,-8609.186,1444.716,32.03201,0,0,0,0,100,0);
+
+-- Pathing for Qiraji Swarmguard Entry: 15343 'TDB FORMAT'
+SET @NPC := @CGUID+191;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8554.364,`position_y`=1453.022,`position_z`=32.44558 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,-8554.364,1453.022,32.44558,0,0,0,0,100,0),
+(@PATH,2,-8531.382,1409.837,32.03201,0,0,0,0,100,0),
+(@PATH,3,-8565.742,1422.705,32.03201,0,0,0,0,100,0),
+(@PATH,4,-8597.424,1431.692,32.89761,0,0,0,0,100,0),
+(@PATH,5,-8579.544,1395.944,32.03201,0,0,0,0,100,0),
+(@PATH,6,-8568.221,1369.643,32.03201,0,0,0,0,100,0),
+(@PATH,7,-8550.396,1335.821,32.04605,0,0,0,0,100,0),
+(@PATH,8,-8568.221,1369.643,32.03201,0,0,0,0,100,0),
+(@PATH,9,-8579.544,1395.944,32.03201,0,0,0,0,100,0),
+(@PATH,10,-8597.424,1431.692,32.89761,0,0,0,0,100,0),
+(@PATH,11,-8565.742,1422.705,32.03201,0,0,0,0,100,0),
+(@PATH,12,-8531.382,1409.837,32.03201,0,0,0,0,100,0),
+(@PATH,13,-8554.364,1453.022,32.44558,0,0,0,0,100,0),
+(@PATH,14,-8585.673,1436.706,32.06472,0,0,0,0,100,0),
+(@PATH,15,-8605.817,1458.296,32.03201,0,0,0,0,100,0),
+(@PATH,16,-8571.966,1465.175,32.03201,0,0,0,0,100,0),
+(@PATH,17,-8599.507,1480.402,32.61454,0,0,0,0,100,0),
+(@PATH,18,-8571.966,1465.175,32.03201,0,0,0,0,100,0),
+(@PATH,19,-8605.817,1458.296,32.03201,0,0,0,0,100,0),
+(@PATH,20,-8585.673,1436.706,32.06472,0,0,0,0,100,0);
+
+-- Pathing for Qiraji Swarmguard Entry: 15343 'TDB FORMAT'
+SET @NPC := @CGUID+192;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8601.664,`position_y`=1390.749,`position_z`=32.03201 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,-8601.664,1390.749,32.03201,0,0,0,0,100,0),
+(@PATH,2,-8591.866,1403.699,32.15054,0,0,0,0,100,0),
+(@PATH,3,-8588.45,1414.927,32.03201,0,0,0,0,100,0),
+(@PATH,4,-8586.888,1427.869,33.06387,0,0,0,0,100,0),
+(@PATH,5,-8591.98,1441.59,31.97866,0,0,0,0,100,0),
+(@PATH,6,-8604.068,1451.8,32.03201,0,0,0,0,100,0),
+(@PATH,7,-8622.909,1456.538,32.03201,0,0,0,0,100,0),
+(@PATH,8,-8642.18,1452.721,32.90791,0,0,0,0,100,0),
+(@PATH,9,-8653.962,1444.923,32.03194,0,0,0,0,100,0),
+(@PATH,10,-8662.412,1435.851,32.79219,0,0,0,0,100,0),
+(@PATH,11,-8661.74,1419.056,32.18276,0,0,0,0,100,0),
+(@PATH,12,-8654.638,1405.104,33.02615,0,0,0,0,100,0),
+(@PATH,13,-8639.636,1390.926,32.03201,0,0,0,0,100,0),
+(@PATH,14,-8622.461,1385.466,32.03201,0,0,0,0,100,0);
+
+-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT'
+SET @NPC := @CGUID+104;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8529.958,`position_y`=1364.049,`position_z`=36.8613 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8529.958,`position_y`=1364.049,`position_z`=36.8613 WHERE `guid`=@CGUID+73;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8529.958,`position_y`=1364.049,`position_z`=36.8613 WHERE `guid`=@CGUID+74;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+73,@CGUID+74);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@CGUID+73,@PATH,0,0,1,0, ''),(@CGUID+74,@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,-8529.958,1364.049,36.8613,0,0,0,0,100,0),
+(@PATH,2,-8539.803,1346.646,35.40701,0,0,0,0,100,0),
+(@PATH,3,-8548.704,1332.98,32.31227,0,0,0,0,100,0),
+(@PATH,4,-8558.811,1320.909,33.84633,0,0,0,0,100,0),
+(@PATH,5,-8566.942,1311.42,35.92106,0,0,0,0,100,0),
+(@PATH,6,-8576.419,1309.016,37.23088,0,0,0,0,100,0),
+(@PATH,7,-8584.488,1311.995,38.23796,0,0,0,0,100,0),
+(@PATH,8,-8595.519,1311.563,38.18644,0,0,0,0,100,0),
+(@PATH,9,-8600.222,1319.612,36.98295,0,0,0,0,100,0),
+(@PATH,10,-8607.076,1327.968,35.15849,0,0,0,0,100,0),
+(@PATH,11,-8615.813,1346.86,34.1813,0,0,0,0,100,0),
+(@PATH,12,-8625.896,1351.781,33.83559,0,0,0,0,100,0),
+(@PATH,13,-8640.597,1348.754,32.22292,0,0,0,0,100,0),
+(@PATH,14,-8656.664,1339.812,32.06704,0,0,0,0,100,0),
+(@PATH,15,-8665.035,1340.468,32.31985,0,0,0,0,100,0),
+(@PATH,16,-8675.461,1346.442,32.03201,0,0,0,0,100,0),
+(@PATH,17,-8681.545,1352.296,32.03201,0,0,0,0,100,0),
+(@PATH,18,-8689.306,1363.689,32.03201,0,0,0,0,100,0),
+(@PATH,19,-8689.081,1377.316,32.1592,0,0,0,0,100,0),
+(@PATH,20,-8689.243,1386.516,32.03201,0,0,0,0,100,0),
+(@PATH,21,-8689.553,1391.781,32.03201,0,0,0,0,100,0),
+(@PATH,22,-8696.313,1401.926,32.03201,0,0,0,0,100,0),
+(@PATH,23,-8710.984,1403.616,32.03201,0,0,0,0,100,0),
+(@PATH,24,-8725,1401.026,32.09084,0,0,0,0,100,0),
+(@PATH,25,-8731.581,1405.537,33.48586,0,0,0,0,100,0),
+(@PATH,26,-8734.479,1414.433,36.20397,0,0,0,0,100,0),
+(@PATH,27,-8732.03,1423.297,37.67117,0,0,0,0,100,0),
+(@PATH,28,-8725.299,1431.885,36.10378,0,0,0,0,100,0),
+(@PATH,29,-8707.934,1441.262,33.016,0,0,0,0,100,0),
+(@PATH,30,-8698.775,1448.582,32.44686,0,0,0,0,100,0),
+(@PATH,31,-8689.356,1462.353,32.23666,0,0,0,0,100,0),
+(@PATH,32,-8689.169,1472.879,32.03194,0,0,0,0,100,0),
+(@PATH,33,-8700.186,1486.412,32.03201,0,0,0,0,100,0),
+(@PATH,34,-8713.146,1492.665,32.6149,0,0,0,0,100,0),
+(@PATH,35,-8722.861,1496.83,33.90457,0,0,0,0,100,0),
+(@PATH,36,-8729.367,1504.248,33.60392,0,0,0,0,100,0),
+(@PATH,37,-8722.961,1517.956,31.73966,0,0,0,0,100,0),
+(@PATH,38,-8709.675,1523.971,32.02237,0,0,0,0,100,0),
+(@PATH,39,-8700.321,1534.454,32.01286,0,0,0,0,100,0),
+(@PATH,40,-8695.349,1544.921,31.96736,0,0,0,0,100,0),
+(@PATH,41,-8681.404,1547.222,31.96736,0,0,0,0,100,0),
+(@PATH,42,-8653.026,1542.493,32.03201,0,0,0,0,100,0),
+(@PATH,43,-8647.881,1531.499,32.03201,0,0,0,0,100,0),
+(@PATH,44,-8639.888,1526.415,32.03201,0,0,0,0,100,0),
+(@PATH,45,-8626.61,1527.882,32.1098,0,0,0,0,100,0),
+(@PATH,46,-8615.333,1529.297,33.04889,0,0,0,0,100,0),
+(@PATH,47,-8607.277,1521.799,34.45148,0,0,0,0,100,0),
+(@PATH,48,-8610.157,1511.149,32.29498,0,0,0,0,100,0),
+(@PATH,49,-8613.661,1498.537,31.88141,0,0,0,0,100,0),
+(@PATH,50,-8609.094,1485.39,31.94074,0,0,0,0,100,0),
+(@PATH,51,-8598.721,1477.947,32.41422,0,0,0,0,100,0),
+(@PATH,52,-8582.448,1473.503,32.78202,0,0,0,0,100,0),
+(@PATH,53,-8562.289,1476.467,32.03201,0,0,0,0,100,0),
+(@PATH,54,-8541.956,1473.268,32.03201,0,0,0,0,100,0),
+(@PATH,55,-8537.244,1462.648,32.03201,0,0,0,0,100,0),
+(@PATH,56,-8534.426,1453.312,32.03201,0,0,0,0,100,0),
+(@PATH,57,-8529.186,1446.878,32.46731,0,0,0,0,100,0),
+(@PATH,58,-8521.271,1435.866,32.78323,0,0,0,0,100,0),
+(@PATH,59,-8523.449,1424.432,32.15139,0,0,0,0,100,0),
+(@PATH,60,-8521.978,1406.374,32.03201,0,0,0,0,100,0),
+(@PATH,61,-8518.832,1391.909,33.57486,0,0,0,0,100,0),
+(@PATH,62,-8521.604,1377.789,34.2847,0,0,0,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@CGUID+73,8,315,2,0,0),
+(@NPC,@CGUID+74,8,405,2,0,0);
+
+-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT'
+SET @NPC := @CGUID+105;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8548.863,`position_y`=1386.292,`position_z`=32.03201 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8548.863,`position_y`=1386.292,`position_z`=32.03201 WHERE `guid`=@CGUID+75;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8548.863,`position_y`=1386.292,`position_z`=32.03201 WHERE `guid`=@CGUID+76;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+75,@CGUID+76);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@CGUID+75,@PATH,0,0,1,0, ''),(@CGUID+76,@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,-8548.863,1386.292,32.03201,0,0,0,0,100,0),
+(@PATH,2,-8565.712,1372.886,32.03201,0,0,0,0,100,0),
+(@PATH,3,-8581.622,1367.627,32.03201,0,0,0,0,100,0),
+(@PATH,4,-8606.725,1366.843,32.03201,0,0,0,0,100,0),
+(@PATH,5,-8632.288,1375.482,32.03201,0,0,0,0,100,0),
+(@PATH,6,-8654.506,1394.647,32.03201,0,0,0,0,100,0),
+(@PATH,7,-8671.173,1419.873,32.03201,0,0,0,0,100,0),
+(@PATH,8,-8676.283,1440.234,32.03133,0,0,0,0,100,0),
+(@PATH,9,-8667.241,1453.61,32.03133,0,0,0,0,100,0),
+(@PATH,10,-8646.296,1471.409,32.00608,0,0,0,0,100,0),
+(@PATH,11,-8622.894,1479.165,32.00641,0,0,0,0,100,0),
+(@PATH,12,-8601.697,1470.526,32.00641,0,0,0,0,100,0),
+(@PATH,13,-8572.213,1460.675,32.03201,0,0,0,0,100,0),
+(@PATH,14,-8551.573,1441.729,32.03201,0,0,0,0,100,0),
+(@PATH,15,-8540.968,1428.382,32.03201,0,0,0,0,100,0),
+(@PATH,16,-8537.028,1406.539,32.03201,0,0,0,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@CGUID+75,8,315,2,0,0),
+(@NPC,@CGUID+76,8,405,2,0,0);
+
+-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT'
+SET @NPC := @CGUID+106;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8597.936,`position_y`=1369.124,`position_z`=32.03201 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8597.936,`position_y`=1369.124,`position_z`=32.03201 WHERE `guid`=@CGUID+77;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8597.936,`position_y`=1369.124,`position_z`=32.03201 WHERE `guid`=@CGUID+78;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+77,@CGUID+78);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@CGUID+77,@PATH,0,0,1,0, ''),(@CGUID+78,@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,-8597.936,1369.124,32.03201,0,0,0,0,100,0),
+(@PATH,2,-8597.158,1401.358,32.62844,0,0,0,0,100,0),
+(@PATH,3,-8590.24,1447.263,32.03201,0,0,0,0,100,0),
+(@PATH,4,-8559.169,1456.705,32.03201,0,0,0,0,100,0),
+(@PATH,5,-8590.24,1447.263,32.03201,0,0,0,0,100,0),
+(@PATH,6,-8597.158,1401.358,32.62844,0,0,0,0,100,0),
+(@PATH,7,-8597.936,1369.124,32.03201,0,0,0,0,100,0),
+(@PATH,8,-8623.723,1352.624,33.90456,0,0,0,0,100,0),
+(@PATH,9,-8662.29,1348.379,32.03201,0,0,0,0,100,0),
+(@PATH,10,-8623.723,1352.624,33.90456,0,0,0,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@CGUID+77,8,315,2,0,0),
+(@NPC,@CGUID+78,8,405,2,0,0);
+
+-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT'
+SET @NPC := @CGUID+107;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8676.303,`position_y`=1523.413,`position_z`=32.03201 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8676.303,`position_y`=1523.413,`position_z`=32.03201 WHERE `guid`=@CGUID+79;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8676.303,`position_y`=1523.413,`position_z`=32.03201 WHERE `guid`=@CGUID+80;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+79,@CGUID+80);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@CGUID+79,@PATH,0,0,1,0, ''),(@CGUID+80,@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,-8676.303,1523.413,32.03201,0,0,0,0,100,0),
+(@PATH,2,-8674.751,1532.686,32.03201,0,0,0,0,100,0),
+(@PATH,3,-8666.7,1549.006,31.96736,0,0,0,0,100,0),
+(@PATH,4,-8661.062,1564.438,32.03201,0,0,0,0,100,0),
+(@PATH,5,-8653.452,1584.203,32.00211,0,0,0,0,100,0),
+(@PATH,6,-8635.348,1595.124,32.00211,0,0,0,0,100,0),
+(@PATH,7,-8623.174,1592.671,32.03201,0,0,0,0,100,0),
+(@PATH,8,-8613.221,1590.594,32.03201,0,0,0,0,100,0),
+(@PATH,9,-8601.792,1588.857,32.03201,0,0,0,0,100,0),
+(@PATH,10,-8593.638,1591.012,32.03201,0,0,0,0,100,0),
+(@PATH,11,-8587.351,1597.304,32.03201,0,0,0,0,100,0),
+(@PATH,12,-8587.771,1604.197,31.95384,0,0,0,0,100,0),
+(@PATH,13,-8592.951,1609.818,31.95384,0,0,0,0,100,0),
+(@PATH,14,-8601.403,1614.527,31.92987,0,0,0,0,100,0),
+(@PATH,15,-8609.681,1613.565,31.92987,0,0,0,0,100,0),
+(@PATH,16,-8619.378,1610.386,31.92987,0,0,0,0,100,0),
+(@PATH,17,-8635.724,1600.521,32.01131,0,0,0,0,100,0),
+(@PATH,18,-8654.849,1586.285,32.00211,0,0,0,0,100,0),
+(@PATH,19,-8667.545,1565.508,31.96736,0,0,0,0,100,0),
+(@PATH,20,-8686.157,1545.365,31.96736,0,0,0,0,100,0),
+(@PATH,21,-8700.114,1518.251,32.02237,0,0,0,0,100,0),
+(@PATH,22,-8698.923,1495.54,32.03194,0,0,0,0,100,0),
+(@PATH,23,-8684.854,1482.41,32.03194,0,0,0,0,100,0),
+(@PATH,24,-8671.786,1476.209,32.03194,0,0,0,0,100,0),
+(@PATH,25,-8662.458,1477.07,32.00608,0,0,0,0,100,0),
+(@PATH,26,-8655.018,1486.244,32.00608,0,0,0,0,100,0),
+(@PATH,27,-8657.109,1495.647,32.17112,0,0,0,0,100,0),
+(@PATH,28,-8665.246,1506.262,32.1741,0,0,0,0,100,0),
+(@PATH,29,-8672.817,1514.818,32.03201,0,0,0,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@CGUID+79,8,315,2,0,0),
+(@NPC,@CGUID+80,8,405,2,0,0);
+
+-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT'
+SET @NPC := @CGUID+108;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8658.216,`position_y`=1452.975,`position_z`=32.03194 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8658.216,`position_y`=1452.975,`position_z`=32.03194 WHERE `guid`=@CGUID+81;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8658.216,`position_y`=1452.975,`position_z`=32.03194 WHERE `guid`=@CGUID+82;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+81,@CGUID+82);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@CGUID+81,@PATH,0,0,1,0, ''),(@CGUID+82,@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,-8658.216,1452.975,32.03194,0,0,0,0,100,0),
+(@PATH,2,-8641.388,1466.459,32.03194,0,0,0,0,100,0),
+(@PATH,3,-8621.116,1464.743,32.03201,0,0,0,0,100,0),
+(@PATH,4,-8585.999,1450.884,32.03201,0,0,0,0,100,0),
+(@PATH,5,-8549.127,1432.836,32.03201,0,0,0,0,100,0),
+(@PATH,6,-8542.808,1418.113,32.03201,0,0,0,0,100,0),
+(@PATH,7,-8549.8,1395.085,32.03201,0,0,0,0,100,0),
+(@PATH,8,-8563.838,1378,32.03201,0,0,0,0,100,0),
+(@PATH,9,-8577.313,1367.248,32.03201,0,0,0,0,100,0),
+(@PATH,10,-8597.477,1364.023,32.03201,0,0,0,0,100,0),
+(@PATH,11,-8615.605,1370.76,32.03201,0,0,0,0,100,0),
+(@PATH,12,-8634.19,1381.713,32.03201,0,0,0,0,100,0),
+(@PATH,13,-8665.271,1407.404,32.16384,0,0,0,0,100,0),
+(@PATH,14,-8671.109,1435.101,32.05587,0,0,0,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@CGUID+81,8,315,2,0,0),
+(@NPC,@CGUID+82,8,405,2,0,0);
+
+-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT'
+SET @NPC := @CGUID+109;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8729.304,`position_y`=1429.319,`position_z`=37.32424 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8729.304,`position_y`=1429.319,`position_z`=37.32424 WHERE `guid`=@CGUID+83;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8729.304,`position_y`=1429.319,`position_z`=37.32424 WHERE `guid`=@CGUID+84;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+83,@CGUID+84);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@CGUID+83,@PATH,0,0,1,0, ''),(@CGUID+84,@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,-8729.304,1429.319,37.32424,0,0,0,0,100,0),
+(@PATH,2,-8706.372,1430.352,34.3594,0,0,0,0,100,0),
+(@PATH,3,-8674.178,1445.882,32.03133,0,0,0,0,100,0),
+(@PATH,4,-8669.013,1458.894,32.03133,0,0,0,0,100,0),
+(@PATH,5,-8665.397,1470.97,32.00608,0,0,0,0,100,0),
+(@PATH,6,-8640.486,1471.08,32.00608,0,0,0,0,100,0),
+(@PATH,7,-8599.312,1477.941,32.30228,0,0,0,0,100,0),
+(@PATH,8,-8640.486,1471.08,32.00608,0,0,0,0,100,0),
+(@PATH,9,-8665.397,1470.97,32.00608,0,0,0,0,100,0),
+(@PATH,10,-8669.013,1458.894,32.03133,0,0,0,0,100,0),
+(@PATH,11,-8674.178,1445.882,32.03133,0,0,0,0,100,0),
+(@PATH,12,-8706.372,1430.352,34.3594,0,0,0,0,100,0),
+(@PATH,13,-8729.304,1429.319,37.32424,0,0,0,0,100,0),
+(@PATH,14,-8713.892,1442.385,34.02357,0,0,0,0,100,0),
+(@PATH,15,-8696.722,1461.607,33.19967,0,0,0,0,100,0),
+(@PATH,16,-8671.114,1479.966,32.03194,0,0,0,0,100,0),
+(@PATH,17,-8645.507,1492.281,32.76731,0,0,0,0,100,0),
+(@PATH,18,-8621.361,1512.898,32.07648,0,0,0,0,100,0),
+(@PATH,19,-8645.507,1492.281,32.76731,0,0,0,0,100,0),
+(@PATH,20,-8671.114,1479.966,32.03194,0,0,0,0,100,0),
+(@PATH,21,-8696.722,1461.607,33.19967,0,0,0,0,100,0),
+(@PATH,22,-8713.892,1442.385,34.02357,0,0,0,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@CGUID+83,8,315,2,0,0),
+(@NPC,@CGUID+84,8,405,2,0,0);
+
+-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT'
+SET @NPC := @CGUID+110;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8764.116,`position_y`=1581.645,`position_z`=22.68807 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8764.116,`position_y`=1581.645,`position_z`=22.68807 WHERE `guid`=@CGUID+85;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8764.116,`position_y`=1581.645,`position_z`=22.68807 WHERE `guid`=@CGUID+86;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+85,@CGUID+86);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@CGUID+85,@PATH,0,0,1,0, ''),(@CGUID+86,@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,-8764.116,1581.645,22.68807,0,0,0,0,100,0),
+(@PATH,2,-8753.808,1574.044,22.58163,0,0,0,0,100,0),
+(@PATH,3,-8738.576,1574.061,21.51132,0,0,0,0,100,0),
+(@PATH,4,-8725.54,1586.539,21.51132,0,0,0,0,100,0),
+(@PATH,5,-8721.115,1598.405,21.51132,0,0,0,0,100,0),
+(@PATH,6,-8716.487,1608.771,21.50764,0,0,0,0,100,0),
+(@PATH,7,-8697.559,1617.893,21.50965,0,0,0,0,100,0),
+(@PATH,8,-8689.124,1620.98,21.4054,0,0,0,0,100,0),
+(@PATH,9,-8676.7,1633.637,21.5121,0,0,0,0,100,0),
+(@PATH,10,-8664.844,1651.779,22.2621,0,0,0,0,100,0),
+(@PATH,11,-8658.319,1668.855,21.51167,0,0,0,0,100,0),
+(@PATH,12,-8664.207,1676.173,22.29316,0,0,0,0,100,0),
+(@PATH,13,-8674.647,1676.72,22.07937,0,0,0,0,100,0),
+(@PATH,14,-8683.002,1674.971,23.14468,0,0,0,0,100,0),
+(@PATH,15,-8690.661,1662.559,23.09059,0,0,0,0,100,0),
+(@PATH,16,-8692.645,1651.498,22.43434,0,0,0,0,100,0),
+(@PATH,17,-8701.47,1635.077,22.32766,0,0,0,0,100,0),
+(@PATH,18,-8713.073,1627.768,22.65229,0,0,0,0,100,0),
+(@PATH,19,-8728.455,1620.784,21.50764,0,0,0,0,100,0),
+(@PATH,20,-8742.18,1614.745,21.63534,0,0,0,0,100,0),
+(@PATH,21,-8754.88,1604.404,22.26132,0,0,0,0,100,0),
+(@PATH,22,-8767.513,1589.608,21.55936,0,0,0,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@CGUID+85,8,315,2,0,0),
+(@NPC,@CGUID+86,8,405,2,0,0);
+
+-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT'
+SET @NPC := @CGUID+111;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8767.31,`position_y`=1593.834,`position_z`=21.49979 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8767.31,`position_y`=1593.834,`position_z`=21.49979 WHERE `guid`=@CGUID+87;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8767.31,`position_y`=1593.834,`position_z`=21.49979 WHERE `guid`=@CGUID+88;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+87,@CGUID+88);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@CGUID+87,@PATH,0,0,1,0, ''),(@CGUID+88,@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,-8767.31,1593.834,21.49979,0,0,0,0,100,0),
+(@PATH,2,-8770.036,1585.847,22.46646,0,0,0,0,100,0),
+(@PATH,3,-8768.942,1580.037,24.6282,0,0,0,0,100,0),
+(@PATH,4,-8761.078,1573.96,24.66903,0,0,0,0,100,0),
+(@PATH,5,-8754.317,1573.614,23.1307,0,0,0,0,100,0),
+(@PATH,6,-8749.495,1583.887,21.51132,0,0,0,0,100,0),
+(@PATH,7,-8749.606,1598.333,22.0267,0,0,0,0,100,0),
+(@PATH,8,-8744.066,1615.724,21.68685,0,0,0,0,100,0),
+(@PATH,9,-8738.805,1626.016,22.66122,0,0,0,0,100,0),
+(@PATH,10,-8737.81,1633.883,24.68712,0,0,0,0,100,0),
+(@PATH,11,-8741.979,1643.341,28.25573,0,0,0,0,100,0),
+(@PATH,12,-8748.667,1644.332,26.70861,0,0,0,0,100,0),
+(@PATH,13,-8755.17,1639.595,23.78893,0,0,0,0,100,0),
+(@PATH,14,-8756.532,1629.037,21.51132,0,0,0,0,100,0),
+(@PATH,15,-8755.539,1614.518,21.83163,0,0,0,0,100,0),
+(@PATH,16,-8761.656,1603.455,22.13632,0,0,0,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@CGUID+87,8,315,2,0,0),
+(@NPC,@CGUID+88,8,405,2,0,0);
+
+-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT'
+SET @NPC := @CGUID+112;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8812.028,`position_y`=1669.479,`position_z`=21.51077 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8812.028,`position_y`=1669.479,`position_z`=21.51077 WHERE `guid`=@CGUID+89;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8812.028,`position_y`=1669.479,`position_z`=21.51077 WHERE `guid`=@CGUID+90;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+89,@CGUID+90);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@CGUID+89,@PATH,0,0,1,0, ''),(@CGUID+90,@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,-8812.028,1669.479,21.51077,0,0,0,0,100,0),
+(@PATH,2,-8829.116,1676.292,21.51077,0,0,0,0,100,0),
+(@PATH,3,-8844.153,1674.81,21.51133,0,0,0,0,100,0),
+(@PATH,4,-8862.958,1666.421,21.44188,0,0,0,0,100,0),
+(@PATH,5,-8879.5,1648.462,21.51133,0,0,0,0,100,0),
+(@PATH,6,-8889.997,1630.464,21.74863,0,0,0,0,100,0),
+(@PATH,7,-8881.832,1613.655,21.51133,0,0,0,0,100,0),
+(@PATH,8,-8868.665,1603.683,21.51133,0,0,0,0,100,0),
+(@PATH,9,-8851.86,1597.849,21.51132,0,0,0,0,100,0),
+(@PATH,10,-8825.522,1596.61,21.49979,0,0,0,0,100,0),
+(@PATH,11,-8808.65,1596.895,21.49979,0,0,0,0,100,0),
+(@PATH,12,-8787.695,1598.145,21.49979,0,0,0,0,100,0),
+(@PATH,13,-8771.377,1609.977,21.58078,0,0,0,0,100,0),
+(@PATH,14,-8770.968,1626.16,21.45578,0,0,0,0,100,0),
+(@PATH,15,-8774.21,1634.483,21.43074,0,0,0,0,100,0),
+(@PATH,16,-8783.411,1643.005,23.20686,0,0,0,0,100,0),
+(@PATH,17,-8797.109,1656.653,21.46516,0,0,0,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@CGUID+89,8,315,2,0,0),
+(@NPC,@CGUID+90,8,405,2,0,0);
+
+-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT'
+SET @NPC := @CGUID+113;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8853.164,`position_y`=1601.762,`position_z`=21.43074 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8853.164,`position_y`=1601.762,`position_z`=21.43074 WHERE `guid`=@CGUID+91;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8853.164,`position_y`=1601.762,`position_z`=21.43074 WHERE `guid`=@CGUID+92;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+91,@CGUID+92);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@CGUID+91,@PATH,0,0,1,0, ''),(@CGUID+92,@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,-8853.164,1601.762,21.43074,0,0,0,0,100,0),
+(@PATH,2,-8866.146,1609.803,21.43074,0,0,0,0,100,0),
+(@PATH,3,-8867.712,1619.324,21.51133,0,0,0,0,100,0),
+(@PATH,4,-8869.861,1636.031,21.51133,0,0,0,0,100,0),
+(@PATH,5,-8868.245,1642.404,21.51133,0,0,0,0,100,0),
+(@PATH,6,-8860.811,1651.562,21.44188,0,0,0,0,100,0),
+(@PATH,7,-8846.482,1659.746,21.44188,0,0,0,0,100,0),
+(@PATH,8,-8832.089,1664.295,21.43074,0,0,0,0,100,0),
+(@PATH,9,-8818.774,1664.332,21.43074,0,0,0,0,100,0),
+(@PATH,10,-8804.403,1654.945,21.43074,0,0,0,0,100,0),
+(@PATH,11,-8798.054,1646.651,21.43074,0,0,0,0,100,0),
+(@PATH,12,-8793.324,1634.422,21.43074,0,0,0,0,100,0),
+(@PATH,13,-8790.466,1615.461,21.45578,0,0,0,0,100,0),
+(@PATH,14,-8805.591,1606.401,21.21346,0,0,0,0,100,0),
+(@PATH,15,-8817.363,1603.717,21.43074,0,0,0,0,100,0),
+(@PATH,16,-8839.466,1603.247,21.43074,0,0,0,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@CGUID+91,8,315,2,0,0),
+(@NPC,@CGUID+92,8,405,2,0,0);
+
+-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT'
+SET @NPC := @CGUID+116;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+117;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+95;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+96;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+98;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+117,@CGUID+95,@CGUID+96,@CGUID+98);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@CGUID+117,@PATH,0,0,1,0, ''),(@CGUID+95,@PATH,0,0,1,0, ''),(@CGUID+96,@PATH,0,0,1,0, ''),(@CGUID+98,@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,-9616.939,1598.47,21.51131,0,0,0,0,100,0),
+(@PATH,2,-9644.368,1600.97,21.51152,0,0,0,0,100,0),
+(@PATH,3,-9666.587,1602.68,21.51152,0,0,0,0,100,0),
+(@PATH,4,-9693.127,1615.85,24.8499,0,0,0,0,100,0),
+(@PATH,5,-9666.587,1602.68,21.51152,0,0,0,0,100,0),
+(@PATH,6,-9644.368,1600.97,21.51152,0,0,0,0,100,0),
+(@PATH,7,-9616.939,1598.47,21.51131,0,0,0,0,100,0),
+(@PATH,8,-9593.868,1602.922,21.51135,0,0,0,0,100,0),
+(@PATH,9,-9567.264,1581.447,21.64806,0,0,0,0,100,0),
+(@PATH,10,-9593.868,1602.922,21.51135,0,0,0,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@CGUID+117,7,55,2,4,9),
+(@NPC,@CGUID+95,7,15,2,4,9),
+(@NPC,@CGUID+96,7,345,2,4,9),
+(@NPC,@CGUID+98,7,305,2,4,9);
+
+-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT'
+SET @NPC := @CGUID+119;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+114;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+115;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+93;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+94;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+93,@CGUID+94,@CGUID+114,@CGUID+115);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@CGUID+93,@PATH,0,0,1,0, ''),(@CGUID+94,@PATH,0,0,1,0, ''),(@CGUID+114,@PATH,0,0,1,0, ''),(@CGUID+115,@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,-9590.347,1600.979,21.51135,0,0,0,0,100,0),
+(@PATH,2,-9617.396,1634.867,21.51134,0,0,0,0,100,0),
+(@PATH,3,-9648.472,1660.417,21.77227,0,0,0,0,100,0),
+(@PATH,4,-9672.451,1659.046,21.51187,0,0,0,0,100,0),
+(@PATH,5,-9684.246,1618.948,22.01957,0,0,0,0,100,0),
+(@PATH,6,-9680.485,1588.97,21.73227,0,0,0,0,100,0),
+(@PATH,7,-9686.441,1561.453,21.56898,0,0,0,0,100,0),
+(@PATH,8,-9669.827,1543.189,21.56898,0,0,0,0,100,0),
+(@PATH,9,-9643.708,1556.367,21.51131,0,0,0,0,100,0),
+(@PATH,10,-9611.799,1561.207,21.63631,0,0,0,0,100,0),
+(@PATH,11,-9589.686,1574.344,21.64806,0,0,0,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@CGUID+114,7,55,2,0,0),
+(@NPC,@CGUID+93,7,15,2,0,0),
+(@NPC,@CGUID+94,7,345,2,0,0),
+(@NPC,@CGUID+115,7,305,2,0,0);
+
+-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT'
+SET @NPC := @CGUID+120;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9631.854,`position_y`=1575.044,`position_z`=21.51131 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9631.854,`position_y`=1575.044,`position_z`=21.51131 WHERE `guid`=@CGUID+118;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9631.854,`position_y`=1575.044,`position_z`=21.51131 WHERE `guid`=@CGUID+97;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9631.854,`position_y`=1575.044,`position_z`=21.51131 WHERE `guid`=@CGUID+99;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9631.854,`position_y`=1575.044,`position_z`=21.51131 WHERE `guid`=@CGUID+100;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+118,@CGUID+97,@CGUID+99,@CGUID+100);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@CGUID+118,@PATH,0,0,1,0, ''),(@CGUID+97,@PATH,0,0,1,0, ''),(@CGUID+99,@PATH,0,0,1,0, ''),(@CGUID+100,@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,-9631.854,1575.044,21.51131,0,0,0,0,100,0),
+(@PATH,2,-9665.344,1553.455,21.51131,0,0,0,0,100,0),
+(@PATH,3,-9690.092,1528.433,21.56898,0,0,0,0,100,0),
+(@PATH,4,-9697.1,1511.1,21.57094,0,0,0,0,100,0),
+(@PATH,5,-9716.545,1490.724,22.14614,0,0,0,0,100,0),
+(@PATH,6,-9737.131,1482.494,23.25845,0,0,0,0,100,0),
+(@PATH,7,-9716.545,1490.724,22.14614,0,0,0,0,100,0),
+(@PATH,8,-9697.1,1511.1,21.57094,0,0,0,0,100,0),
+(@PATH,9,-9690.092,1528.433,21.56898,0,0,0,0,100,0),
+(@PATH,10,-9665.344,1553.455,21.51131,0,0,0,0,100,0),
+(@PATH,11,-9631.854,1575.044,21.51131,0,0,0,0,100,0),
+(@PATH,12,-9613.673,1599.045,21.51131,0,0,0,0,100,0),
+(@PATH,13,-9592.846,1628.057,22.5028,0,0,0,0,100,0),
+(@PATH,14,-9613.673,1599.045,21.51131,0,0,0,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@CGUID+118,7,55,2,6,13),
+(@NPC,@CGUID+97,7,15,2,6,13),
+(@NPC,@CGUID+99,7,345,2,6,13),
+(@NPC,@CGUID+100,7,305,2,6,13);
+
+-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT'
+SET @NPC := @CGUID+121;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9641.111,`position_y`=1606.591,`position_z`=21.51152 WHERE `guid`=@NPC;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9641.111,`position_y`=1606.591,`position_z`=21.51152 WHERE `guid`=@CGUID+122;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9641.111,`position_y`=1606.591,`position_z`=21.51152 WHERE `guid`=@CGUID+101;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9641.111,`position_y`=1606.591,`position_z`=21.51152 WHERE `guid`=@CGUID+102;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9641.111,`position_y`=1606.591,`position_z`=21.51152 WHERE `guid`=@CGUID+103;
+DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+122,@CGUID+101,@CGUID+102,@CGUID+103);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(@NPC,@PATH,0,0,1,0, ''),(@CGUID+122,@PATH,0,0,1,0, ''),(@CGUID+101,@PATH,0,0,1,0, ''),(@CGUID+102,@PATH,0,0,1,0, ''),(@CGUID+103,@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,-9641.111,1606.591,21.51152,0,0,0,0,100,0),
+(@PATH,2,-9644.073,1631.978,21.73661,0,0,0,0,100,0),
+(@PATH,3,-9656.497,1670.769,21.86399,0,0,0,0,100,0),
+(@PATH,4,-9644.073,1631.978,21.73661,0,0,0,0,100,0),
+(@PATH,5,-9641.111,1606.591,21.51152,0,0,0,0,100,0),
+(@PATH,6,-9654.327,1587.958,21.51131,0,0,0,0,100,0),
+(@PATH,7,-9649.587,1562.207,21.51131,0,0,0,0,100,0),
+(@PATH,8,-9639.38,1544.195,21.51131,0,0,0,0,100,0),
+(@PATH,9,-9649.587,1562.207,21.51131,0,0,0,0,100,0),
+(@PATH,10,-9654.327,1587.958,21.51131,0,0,0,0,100,0);
+
+-- Vekniss Stinger formation
+DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC);
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES
+(@NPC,@NPC,0,0,2,0,0),
+(@NPC,@CGUID+122,7,55,2,3,8),
+(@NPC,@CGUID+101,7,15,2,3,8),
+(@NPC,@CGUID+102,7,345,2,3,8),
+(@NPC,@CGUID+103,7,305,2,3,8);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_00_world.sql
new file mode 100644
index 00000000000..fcc4e6bf429
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_00_world.sql
@@ -0,0 +1,24 @@
+--
+UPDATE `creature` SET `spawndist`=0,`MovementType`=0 WHERE `guid` IN (87678,87679,87680,87681,87682,87683,87684,87690,87698,87702,87704,87705,87707,87710,87712,87714,87715,87716,87719,87721,87725,87728,87730,87731,87732,87733,87734,87738,87739,87740,87747,87749,87750,87751,87756,87762,87764,87765,87767,87769,87772,87774,87777,87778,87779,87791,87793,87794,87795,87797,87799,87800,87801,87802,87803,87807,87816,87818,87820,87822,87824,87826,87828,87829);
+INSERT INTO `creature_addon` (`guid`,`emote`) (SELECT `guid`, 28 FROM `creature` WHERE `id`=15300 AND `MovementType`=0);
+
+-- Fixing position of some AQ40 spawns
+DELETE FROM `creature` WHERE `guid` IN (87561,87562,87563,4458,87559,87560,88073,88076,88077,88072);
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(87561, 15378, 531, 1, 1, -8652.15, 2020.907, 108.6608, 4.014257, 7200, 0, 0), -- Merithra of the Dream
+(87562, 15379, 531, 1, 1, -8660.591, 2022.339, 108.6608, 4.031711, 7200, 0, 0), -- Caelestrasz
+(87563, 15380, 531, 1, 1, -8663.463, 2029.885, 108.6608, 4.310963, 7200, 0, 0), -- Arygos
+(4458, 15896, 531, 1, 1, -8578.104, 1986.944, 100.3037, 2.303835, 7200, 0, 0), -- C'Thun Portal
+(87559, 15727, 531, 1, 1, -8578.648, 1985.847, 100.3037, 3.490659, 7200, 0, 0), -- C'Thun
+(87560, 15589, 531, 1, 1, -8578.792, 1986.183, 100.3037, 3.508112, 7200, 0, 0), -- Eye of C'Thun
+(88073, 15957, 531, 1, 1, -9173.091, 2107.334, -65.08635 ,1.430085, 7200, 5, 1), -- Ouro should be Ouro Spawner
+(88076, 15275, 531, 1, 1, -9023.666, 1176.24, -104.226, 0.7679449, 7200, 0, 0), -- Emperor Vek'nilash
+(88077, 15276, 531, 1, 1, -8868.309, 1205.966, -104.2311, 2.70526, 7200, 0, 0), -- Emperor Vek'lor
+(88072, 15963, 531, 1, 1, -8953.297, 1233.641, -99.71796, 5.305801, 7200, 0, 0); -- The Master's Eye
+-- Ouro Spawner should spawn Ouro "BOSS" on aggro and despawn self.
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (15589,15957,15963);
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(15589,0,1,0, '18950'),(15957,0,1,0, '26092'),(15963,0,1,0, '18430');
+
+UPDATE `creature_template` SET `InhabitType`=7 WHERE `entry` IN (15963);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_01_world.sql
new file mode 100644
index 00000000000..050d198e94f
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_01_world.sql
@@ -0,0 +1,21 @@
+DELETE FROM `creature_text` WHERE `entry`=34965;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(34965, 0, 0, 'Foolish $c, you cannot stop the Kvaldir!', 12, 0, 100, 0, 0, 0, 35393, 0, 'Mistcaller Yngvar');
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=34965 AND `source_type`=0 AND `id`=4;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(34965, 0, 4, 0, 4, 0, 100, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Mistcaller Yngvar - On Agro - Say');
+
+UPDATE `creature_template` SET `unit_flags`=33555200, `InhabitType`=4 WHERE `entry`=34888;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN(34852,34888) 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
+(34852, 0, 0, 1, 8, 0, 100, 1, 66390, 0, 0, 0, 33, 34852, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Slain Tualiq Villager - On Spellhit \'Read Last Rites\' - Quest Credit \'The Light\'s Mercy\' (No Repeat)'),
+(34852, 0, 1, 2, 61, 0, 100, 1, 0, 0, 0, 0, 11, 66412, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Slain Tualiq Villager - On Spellhit \'Read Last Rites\' - Cast 66412'),
+(34852, 0, 2, 0, 61, 0, 100, 1, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Slain Tualiq Villager - On Spellhit \'Read Last Rites\' - Despawn'),
+(34888, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 90, 33554432, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tualiq Spirit - On Just Summoned - Set Bytes 2'),
+(34888, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 11, 37119, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tualiq Spirit - On Just Summoned - Cast Spirit Particles (Spawn)'),
+(34888, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 11, 64462, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tualiq Spirit - On Just Summoned - Cast Feign and Drown'),
+(34888, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tualiq Spirit - On Just Summoned - Set run off'),
+(34888, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 114, 90, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tualiq Spirit - On Just Summoned - Rise up');
+
+UPDATE `smart_scripts` SET `action_param1`=64100 WHERE `entryorguid`=33429 AND `source_type`=0 AND `id`=6 AND `link`=0;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_02_world.sql
new file mode 100644
index 00000000000..b80f4909a3b
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_02_world.sql
@@ -0,0 +1,119 @@
+--
+-- Darthalia Ebonscorch SAI
+SET @ENTRY := 32679;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Darthalia Ebonscorch - Out of Combat - Play Emote 1");
+
+-- Archmage Tenaj SAI
+SET @ENTRY := 32688;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Archmage Tenaj - Out of Combat - Play Emote 1");
+
+-- Adorean Lew SAI
+SET @ENTRY := 32689;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Adorean Lew - Out of Combat - Play Emote 1");
+
+-- Bitty Frostflinger SAI
+SET @ENTRY := 32690;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bitty Frostflinger - Out of Combat - Play Emote 1");
+
+-- Grindle Firespark SAI
+SET @ENTRY := 32676;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grindle Firespark - Out of Combat - Play Emote 1");
+
+-- Fabioso the Fabulous SAI
+SET @ENTRY := 32680;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Fabioso the Fabulous - Out of Combat - Play Emote 1");
+
+-- Sabriana Sorrowgaze SAI
+SET @ENTRY := 32693;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sabriana Sorrowgaze - Out of Combat - Play Emote 1");
+
+-- Emeline Fizzlefry SAI
+SET @ENTRY := 32678;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Emeline Fizzlefry - Out of Combat - Play Emote 1");
+
+-- Whirt the All-Knowing SAI
+SET @ENTRY := 32677;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Whirt the All-Knowing - Out of Combat - Play Emote 1");
+
+-- Mona Everspring SAI
+SET @ENTRY := 32684;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mona Everspring - Out of Combat - Play Emote 1");
+
+-- The Magnificent Merleaux SAI
+SET @ENTRY := 32681;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"The Magnificent Merleaux - Out of Combat - Play Emote 1");
+
+-- Kitz Proudbreeze SAI
+SET @ENTRY := 32685;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kitz Proudbreeze - Out of Combat - Play Emote 1");
+
+-- Crafticus Mindbender SAI
+SET @ENTRY := 32686;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Crafticus Mindbender - Out of Combat - Play Emote 1");
+
+-- Babagahnoosh the Grumpy SAI
+SET @ENTRY := 32675;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Babagahnoosh the Grumpy - Out of Combat - Play Emote 1");
+
+-- Magus Fansy Goodbringer SAI
+SET @ENTRY := 32691;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Magus Fansy Goodbringer - Out of Combat - Play Emote 1");
+
+-- Arcanist Alec SAI
+SET @ENTRY := 32692;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Arcanist Alec - Out of Combat - Play Emote 1");
+
+-- Linda Ann Kastinglow SAI
+SET @ENTRY := 32687;
+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,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Linda Ann Kastinglow - Out of Combat - Play Emote 1");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_00_world.sql
new file mode 100644
index 00000000000..c519abb709c
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_00_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature` SET `spawnMask`=15 WHERE `id`=37230;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_01_world.sql
new file mode 100644
index 00000000000..f6ddc034e20
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_01_world.sql
@@ -0,0 +1 @@
+DELETE FROM `trinity_string` WHERE `entry` = 11010;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_02_world.sql
new file mode 100644
index 00000000000..1960d33f7d9
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_02_world.sql
@@ -0,0 +1,15 @@
+--
+UPDATE `creature` SET `position_x`=5832.238, `position_y`=564.013611, `position_z`=651.771301, `Orientation`=2.596493 WHERE `guid`=105661;
+UPDATE `creature_addon` SET `auras`=60191 WHERE `guid` IN (105661, 103039);
+DELETE FROM `creature_addon` WHERE `guid` IN (115295, 48251,48252,48253);
+INSERT INTO `creature_addon` (`guid`, `bytes1`, `bytes2`, `auras`) VALUES
+(115295,65536,1,60191),
+(48251,65536,1,60190),
+(48252,65536,1,60190),
+(48253,65536,1,60190);
+
+DELETE FROM `creature` WHERE `guid` IN (48251,48252,48253);
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `Orientation`, `spawntimesecs`) VALUES
+(48251, 31851, 571, 1, 1, 5832.240, 564.0139, 651.77099, 2.596490,300),
+(48252, 32335, 571, 1, 1, 5833.799, 567.3480, 651.92498, 2.460910,300),
+(48253, 32206, 571, 1, 1, 5836.709, 570.0759, 652.10797, 2.146750,300);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_00_world.sql
new file mode 100644
index 00000000000..ed787f90f68
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_00_world.sql
@@ -0,0 +1,12 @@
+-- Gryphoneer Leafbeard - Gossip
+DELETE FROM `gossip_menu_option` WHERE (`menu_id`=8100 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
+(8100, 0, 0, 'Send me to Shatter Point!', 17935, 1, 1, 0, 0, 0, 0, NULL, 0);
+
+-- Gryphoneer Leafbeard SAI
+SET @ENTRY := 20236;
+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,8100,0,0,0,11,35066,2,0,0,0,0,7,0,0,0,0,0,0,0,"Gryphoneer Leafbeard - On Gossip Option 0 Selected - Cast 'Taxi - Hellfire Peninsula - Beach Head to Shatter Point'"),
+(@ENTRY,0,1,0,61,0,100,0,8100,0,0,0,72,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gryphoneer Leafbeard - On Gossip Option 0 Selected - Close Gossip");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_01_world.sql
new file mode 100644
index 00000000000..f2d3e950a90
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_01_world.sql
@@ -0,0 +1,5 @@
+-- Young Thistle Boar - Skinning Loot
+UPDATE `creature_template` SET `skinloot`=1984 WHERE `entry`=1984;
+DELETE FROM `skinning_loot_template` WHERE `Entry`=1984;
+INSERT INTO `skinning_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
+(1984, 2934, 0, 80, 0, 1, 1, 1, 1, NULL);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_02_world.sql
new file mode 100644
index 00000000000..e2211a704ea
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_02_world.sql
@@ -0,0 +1,2 @@
+-- Small Crag Boar - Skinning Loot
+UPDATE `creature_template` SET `skinloot`=0 WHERE `entry`=708;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_03_world.sql
new file mode 100644
index 00000000000..23f7ba806c1
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_03_world.sql
@@ -0,0 +1,6 @@
+-- Thistle Boar - Skinning Loot
+UPDATE `creature_template` SET `skinloot`=1985 WHERE `entry`=1985;
+DELETE FROM `skinning_loot_template` WHERE `Entry`=1985;
+INSERT INTO `skinning_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
+(1985, 2934, 0, 88, 0, 1, 1, 1, 1, NULL),
+(1985, 2318, 0, 10, 0, 1, 1, 1, 1, NULL);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_21_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_21_00_world.sql
new file mode 100644
index 00000000000..d751a6e65bc
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_21_00_world.sql
@@ -0,0 +1,265 @@
+-- Onyxia Add WPs
+SET @NPC := 52051;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-128.604,`position_y`=-135.78,`position_z`=-51.68033 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,-128.604,-135.78,-51.68033,0,0,0,0,100,0),
+(@PATH,2,-127.7581,-135.2467,-51.68033,0,0,0,0,100,0),
+(@PATH,3,-124.1603,-132.1572,-51.38051,0,0,0,0,100,0),
+(@PATH,4,-117.3008,-126.2667,-49.287,0,0,0,0,100,0),
+(@PATH,5,-114.3034,-123.6929,-49.21809,0,0,0,0,100,0),
+(@PATH,6,-110.7887,-120.6747,-48.59732,0,0,0,0,100,0),
+(@PATH,7,-106.7952,-117.2454,-45.67963,0,0,0,0,100,0),
+(@PATH,8,-103.1414,-114.1078,-42.60856,0,0,0,0,100,0),
+(@PATH,9,-103.1414,-114.1078,-42.60856,0,0,0,0,100,0),
+(@PATH,10,-102.9662,-113.9184,-42.13044,0,0,0,0,100,0),
+(@PATH,11,-101.9662,-112.9184,-41.38044,0,0,0,0,100,0),
+(@PATH,12,-97.21623,-108.9184,-39.38044,0,0,0,0,100,0),
+(@PATH,13,-94.21623,-106.4184,-38.38044,0,0,0,0,100,0),
+(@PATH,14,-91.96623,-104.4184,-38.38044,0,0,0,0,100,0),
+(@PATH,15,-87.21623,-100.1684,-36.63044,0,0,0,0,100,0),
+(@PATH,16,-86.88522,-99.955,-36.61054,0,0,0,0,100,0),
+(@PATH,17,-86.13522,-99.705,-36.36054,0,0,0,0,100,0),
+(@PATH,18,-82.63522,-99.205,-35.61054,0,0,0,0,100,0),
+(@PATH,19,-80.88522,-99.205,-35.61054,0,0,0,0,100,0),
+(@PATH,20,-78.38522,-98.955,-35.11054,0,0,0,0,100,0),
+(@PATH,21,-73.38522,-98.455,-34.61054,0,0,0,0,100,0),
+(@PATH,22,-73.4659,-98.32379,-34.65569,0,0,0,0,100,0),
+(@PATH,23,-77.9659,-98.82379,-35.15569,0,0,0,0,100,0),
+(@PATH,24,-80.9659,-98.82379,-35.65569,0,0,0,0,100,0),
+(@PATH,25,-82.7159,-99.07379,-35.65569,0,0,0,0,100,0),
+(@PATH,26,-82.87637,-99.18207,-35.74073,0,0,0,0,100,0),
+(@PATH,27,-86.12637,-99.68207,-36.49073,0,0,0,0,100,0),
+(@PATH,28,-87.12637,-100.1821,-36.49073,0,0,0,0,100,0),
+(@PATH,29,-91.87637,-104.4321,-38.24073,0,0,0,0,100,0),
+(@PATH,30,-93.87637,-106.4321,-38.24073,0,0,0,0,100,0),
+(@PATH,31,-96.87637,-108.6821,-39.24073,0,0,0,0,100,0),
+(@PATH,32,-101.8764,-112.9321,-41.24073,0,0,0,0,100,0),
+(@PATH,33,-102.2544,-113.366,-41.50324,0,0,0,0,100,0),
+(@PATH,34,-103.2544,-114.116,-42.50324,0,0,0,0,100,0),
+(@PATH,35,-106.7544,-117.366,-45.50324,0,0,0,0,100,0),
+(@PATH,36,-110.7544,-120.616,-48.25324,0,0,0,0,100,0),
+(@PATH,37,-114.2544,-123.616,-48.75324,0,0,0,0,100,0),
+(@PATH,38,-117.0044,-126.116,-48.75324,0,0,0,0,100,0),
+(@PATH,39,-123.5044,-131.616,-50.75324,0,0,0,0,100,0),
+(@PATH,40,-127.0044,-134.616,-51.00324,0,0,0,0,100,0),
+(@PATH,41,-127.2775,-134.812,-51.39043,0,0,0,0,100,0),
+(@PATH,42,-127.7775,-135.312,-51.39043,0,0,0,0,100,0),
+(@PATH,43,-129.0275,-136.062,-51.89043,0,0,0,0,100,0),
+(@PATH,44,-135.7775,-140.312,-52.64043,0,0,0,0,100,0),
+(@PATH,45,-136.7775,-141.062,-52.89043,0,0,0,0,100,0),
+(@PATH,46,-144.7775,-145.812,-53.89043,0,0,0,0,100,0),
+(@PATH,47,-147.2775,-147.562,-53.14043,0,0,0,0,100,0),
+(@PATH,48,-147.5882,-147.6326,-53.39889,0,0,0,0,100,0),
+(@PATH,49,-148.3382,-148.3826,-53.14889,0,0,0,0,100,0),
+(@PATH,50,-150.5882,-150.6326,-53.14889,0,0,0,0,100,0),
+(@PATH,51,-151.3382,-151.6326,-53.64889,0,0,0,0,100,0),
+(@PATH,52,-156.5882,-157.6326,-56.39889,0,0,0,0,100,0),
+(@PATH,53,-158.0882,-159.1326,-57.14889,0,0,0,0,100,0),
+(@PATH,54,-162.8382,-164.6326,-58.64889,0,0,0,0,100,0),
+(@PATH,55,-163.5882,-165.3826,-59.64889,0,0,0,0,100,0),
+(@PATH,56,-166.3382,-168.3826,-61.14889,0,0,0,0,100,0),
+(@PATH,57,-166.5622,-168.6543,-61.35694,0,0,0,0,100,0),
+(@PATH,58,-163.5622,-165.4043,-59.60694,0,0,0,0,100,0),
+(@PATH,59,-162.8122,-164.6543,-58.85694,0,0,0,0,100,0),
+(@PATH,60,-158.3122,-159.4043,-57.10694,0,0,0,0,100,0),
+(@PATH,61,-156.8122,-157.6543,-56.35694,0,0,0,0,100,0),
+(@PATH,62,-151.8122,-152.1543,-54.10694,0,0,0,0,100,0),
+(@PATH,63,-150.5622,-150.6543,-53.10694,0,0,0,0,100,0),
+(@PATH,64,-148.4862,-148.2634,-52.81345,0,0,0,0,100,0),
+(@PATH,65,-147.2362,-147.5134,-53.06345,0,0,0,0,100,0),
+(@PATH,66,-144.7362,-146.0134,-53.81345,0,0,0,0,100,0),
+(@PATH,67,-136.9862,-141.0134,-52.81345,0,0,0,0,100,0),
+(@PATH,68,-135.9862,-140.2634,-52.56345,0,0,0,0,100,0),
+(@PATH,69,-129.7362,-136.5134,-52.06345,0,0,0,0,100,0),
+(@PATH,70,-129.596,-136.2151,-51.79766,0,0,0,0,100,0);
+
+SET @NPC := 52049;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-141.0218,`position_y`=-144.2874,`position_z`=-53.78587 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,-141.0218,-144.2874,-53.78587,0,0,0,0,100,0),
+(@PATH,2,-140.2045,-143.7111,-53.78587,0,0,0,0,100,0),
+(@PATH,3,-136.8762,-141.0416,-53.2686,0,0,0,0,100,0),
+(@PATH,4,-135.8708,-140.2352,-53.07284,0,0,0,0,100,0),
+(@PATH,5,-130.4393,-135.8787,-52.2235,0,0,0,0,100,0),
+(@PATH,6,-128.077,-133.984,-51.39751,0,0,0,0,100,0),
+(@PATH,7,-126.1452,-132.4346,-51.30407,0,0,0,0,100,0),
+(@PATH,8,-126.1452,-132.4346,-51.30407,0,0,0,0,100,0),
+(@PATH,9,-127.6748,-133.5728,-51.29497,0,0,0,0,100,0),
+(@PATH,10,-130.4248,-135.8228,-52.04497,0,0,0,0,100,0),
+(@PATH,11,-135.6748,-140.0728,-52.54497,0,0,0,0,100,0),
+(@PATH,12,-136.6748,-140.8228,-52.79497,0,0,0,0,100,0),
+(@PATH,13,-140.2209,-143.5945,-53.65104,0,0,0,0,100,0),
+(@PATH,14,-144.7209,-146.8445,-54.15104,0,0,0,0,100,0),
+(@PATH,15,-147.2209,-148.5945,-53.40104,0,0,0,0,100,0),
+(@PATH,16,-150.2209,-150.5945,-53.15104,0,0,0,0,100,0),
+(@PATH,17,-150.9709,-151.3445,-53.65104,0,0,0,0,100,0),
+(@PATH,18,-152.2209,-152.0945,-54.15104,0,0,0,0,100,0),
+(@PATH,19,-157.7209,-155.8445,-56.40104,0,0,0,0,100,0),
+(@PATH,20,-160.7863,-158.1388,-57.63475,0,0,0,0,100,0),
+(@PATH,21,-162.7863,-162.1388,-58.63475,0,0,0,0,100,0),
+(@PATH,22,-163.7863,-163.8888,-59.13475,0,0,0,0,100,0),
+(@PATH,23,-166.0363,-168.6388,-61.13475,0,0,0,0,100,0),
+(@PATH,24,-168.5363,-173.3888,-62.88475,0,0,0,0,100,0),
+(@PATH,25,-170.4057,-176.7284,-64.06725,0,0,0,0,100,0),
+(@PATH,26,-170.6557,-177.9784,-64.31725,0,0,0,0,100,0),
+(@PATH,27,-171.1557,-178.9784,-64.81725,0,0,0,0,100,0),
+(@PATH,28,-172.6557,-184.2284,-65.56725,0,0,0,0,100,0),
+(@PATH,29,-175.3081,-192.9928,-66.43716,0,0,0,0,100,0),
+(@PATH,30,-171.8081,-197.2428,-66.43716,0,0,0,0,100,0),
+(@PATH,31,-168.8081,-201.2428,-66.18716,0,0,0,0,100,0),
+(@PATH,32,-165.1812,-205.6809,-66.07635,0,0,0,0,100,0),
+(@PATH,33,-160.4312,-207.9309,-66.07635,0,0,0,0,100,0),
+(@PATH,34,-154.1812,-210.9309,-66.32635,0,0,0,0,100,0),
+(@PATH,35,-154.1465,-210.945,-66.31016,0,0,0,0,100,0),
+(@PATH,36,-160.3965,-207.945,-66.06016,0,0,0,0,100,0),
+(@PATH,37,-165.1298,-205.5847,-66.08299,0,0,0,0,100,0),
+(@PATH,38,-168.6298,-201.3347,-66.33299,0,0,0,0,100,0),
+(@PATH,39,-171.8798,-197.3347,-66.58299,0,0,0,0,100,0),
+(@PATH,40,-174.8798,-193.8347,-66.58299,0,0,0,0,100,0),
+(@PATH,41,-174.8037,-193.4657,-66.47095,0,0,0,0,100,0),
+(@PATH,42,-175.3037,-192.7157,-66.47095,0,0,0,0,100,0),
+(@PATH,43,-172.5537,-184.4657,-65.47095,0,0,0,0,100,0),
+(@PATH,44,-171.0537,-179.2157,-64.97095,0,0,0,0,100,0),
+(@PATH,45,-170.8037,-177.9657,-64.22095,0,0,0,0,100,0),
+(@PATH,46,-170.8405,-178.8178,-64.7157,0,0,0,0,100,0),
+(@PATH,47,-170.5905,-177.8178,-63.9657,0,0,0,0,100,0),
+(@PATH,48,-170.0905,-176.5678,-63.7157,0,0,0,0,100,0),
+(@PATH,49,-168.3405,-173.3178,-62.9657,0,0,0,0,100,0),
+(@PATH,50,-166.3405,-169.0678,-61.4657,0,0,0,0,100,0),
+(@PATH,51,-164.0905,-164.5678,-59.7157,0,0,0,0,100,0),
+(@PATH,52,-162.8405,-162.0678,-58.7157,0,0,0,0,100,0),
+(@PATH,53,-160.623,-157.9054,-57.24116,0,0,0,0,100,0),
+(@PATH,54,-157.623,-155.9054,-56.24116,0,0,0,0,100,0),
+(@PATH,55,-152.123,-152.4054,-54.24116,0,0,0,0,100,0),
+(@PATH,56,-151.373,-151.6554,-53.49116,0,0,0,0,100,0),
+(@PATH,57,-150.373,-150.9054,-53.24116,0,0,0,0,100,0),
+(@PATH,58,-147.373,-148.9054,-53.24116,0,0,0,0,100,0),
+(@PATH,59,-144.623,-146.9054,-54.24116,0,0,0,0,100,0);
+
+SET @NPC := 52048;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-117.2994,`position_y`=-214.0461,`position_z`=-72.49876 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,-117.2994,-214.0461,-72.49876,0,0,0,0,100,0),
+(@PATH,2,-121.5494,-213.7961,-71.24876,0,0,0,0,100,0),
+(@PATH,3,-125.0494,-213.5461,-71.24876,0,0,0,0,100,0),
+(@PATH,4,-138.0494,-212.5461,-69.49876,0,0,0,0,100,0),
+(@PATH,5,-141.0494,-212.2961,-68.49876,0,0,0,0,100,0),
+(@PATH,6,-144.2994,-212.0461,-68.49876,0,0,0,0,100,0),
+(@PATH,7,-146.5494,-211.7961,-68.24876,0,0,0,0,100,0),
+(@PATH,8,-153.7994,-211.2961,-66.49876,0,0,0,0,100,0),
+(@PATH,9,-160.8753,-210.4289,-66.45905,0,0,0,0,100,0),
+(@PATH,10,-162.8753,-208.4289,-66.20905,0,0,0,0,100,0),
+(@PATH,11,-165.3753,-205.9289,-66.20905,0,0,0,0,100,0),
+(@PATH,12,-169.3753,-201.6789,-66.20905,0,0,0,0,100,0),
+(@PATH,13,-175.155,-195.7021,-66.3976,0,0,0,0,100,0),
+(@PATH,14,-174.155,-193.2021,-66.3976,0,0,0,0,100,0),
+(@PATH,15,-170.655,-182.9521,-65.3976,0,0,0,0,100,0),
+(@PATH,16,-169.405,-179.2021,-64.6476,0,0,0,0,100,0),
+(@PATH,17,-168.905,-177.7021,-63.8976,0,0,0,0,100,0),
+(@PATH,18,-167.655,-173.9521,-63.1476,0,0,0,0,100,0),
+(@PATH,19,-165.9926,-169.4054,-61.62289,0,0,0,0,100,0),
+(@PATH,20,-163.2426,-166.4054,-59.87289,0,0,0,0,100,0),
+(@PATH,21,-162.2426,-165.4054,-58.62289,0,0,0,0,100,0),
+(@PATH,22,-156.4926,-158.6554,-56.37289,0,0,0,0,100,0),
+(@PATH,23,-152.4926,-153.9054,-54.37289,0,0,0,0,100,0),
+(@PATH,24,-152.2406,-153.7879,-54.28136,0,0,0,0,100,0),
+(@PATH,25,-150.4906,-152.0379,-53.28136,0,0,0,0,100,0),
+(@PATH,26,-147.9906,-150.0379,-53.28136,0,0,0,0,100,0),
+(@PATH,27,-146.7406,-149.0379,-53.28136,0,0,0,0,100,0),
+(@PATH,28,-144.2406,-147.0379,-54.03136,0,0,0,0,100,0),
+(@PATH,29,-136.7406,-141.2879,-52.78136,0,0,0,0,100,0),
+(@PATH,30,-129.9906,-136.2879,-52.03136,0,0,0,0,100,0),
+(@PATH,31,-127.4906,-134.5379,-51.28136,0,0,0,0,100,0),
+(@PATH,32,-124.2406,-131.7879,-51.28136,0,0,0,0,100,0),
+(@PATH,33,-121.0758,-129.5125,-50.05389,0,0,0,0,100,0),
+(@PATH,34,-116.8258,-126.2625,-48.80389,0,0,0,0,100,0),
+(@PATH,35,-113.8258,-123.7625,-48.80389,0,0,0,0,100,0),
+(@PATH,36,-110.5758,-121.0125,-48.30389,0,0,0,0,100,0),
+(@PATH,37,-106.3258,-117.7625,-45.55389,0,0,0,0,100,0),
+(@PATH,38,-101.5758,-114.0125,-41.55389,0,0,0,0,100,0),
+(@PATH,39,-98.82584,-111.7625,-40.30389,0,0,0,0,100,0),
+(@PATH,40,-97.149,-110.4035,-39.23767,0,0,0,0,100,0),
+(@PATH,41,-95.899,-109.6535,-38.73767,0,0,0,0,100,0),
+(@PATH,42,-95.149,-109.1535,-38.48767,0,0,0,0,100,0),
+(@PATH,43,-92.399,-107.6535,-37.73767,0,0,0,0,100,0),
+(@PATH,44,-89.649,-105.9035,-37.73767,0,0,0,0,100,0),
+(@PATH,45,-84.649,-103.1535,-36.23767,0,0,0,0,100,0),
+(@PATH,46,-82.649,-101.9035,-35.73767,0,0,0,0,100,0),
+(@PATH,47,-78.149,-99.15355,-35.23767,0,0,0,0,100,0),
+(@PATH,48,-77.96553,-98.93108,-35.05116,0,0,0,0,100,0),
+(@PATH,49,-75.21553,-97.68108,-34.80116,0,0,0,0,100,0),
+(@PATH,50,-73.21553,-97.68108,-34.80116,0,0,0,0,100,0),
+(@PATH,51,-68.21553,-97.68108,-37.05116,0,0,0,0,100,0),
+(@PATH,52,-63.21553,-97.68108,-38.55116,0,0,0,0,100,0),
+(@PATH,53,-57.46553,-97.68108,-38.30116,0,0,0,0,100,0),
+(@PATH,54,-57.42111,-98.24262,-38.41855,0,0,0,0,100,0),
+(@PATH,55,-63.42111,-98.49262,-38.41855,0,0,0,0,100,0),
+(@PATH,56,-68.17111,-98.49262,-36.91855,0,0,0,0,100,0),
+(@PATH,57,-73.17111,-98.74262,-34.66855,0,0,0,0,100,0),
+(@PATH,58,-73.4623,-98.88531,-34.77631,0,0,0,0,100,0),
+(@PATH,59,-76.2123,-99.13531,-35.02631,0,0,0,0,100,0),
+(@PATH,60,-78.2123,-99.88531,-35.02631,0,0,0,0,100,0),
+(@PATH,61,-82.7123,-101.3853,-35.77631,0,0,0,0,100,0),
+(@PATH,62,-85.2123,-101.8853,-36.27631,0,0,0,0,100,0),
+(@PATH,63,-91.4623,-104.1353,-38.02631,0,0,0,0,100,0),
+(@PATH,64,-91.69406,-104.2236,-38.36034,0,0,0,0,100,0),
+(@PATH,65,-93.44406,-104.7236,-38.11034,0,0,0,0,100,0),
+(@PATH,66,-94.69406,-105.7236,-38.11034,0,0,0,0,100,0),
+(@PATH,67,-97.69406,-108.4736,-39.11034,0,0,0,0,100,0),
+(@PATH,68,-98.69406,-109.4736,-39.86034,0,0,0,0,100,0),
+(@PATH,69,-102.4441,-112.4736,-41.61034,0,0,0,0,100,0),
+(@PATH,70,-106.9441,-116.4736,-45.36034,0,0,0,0,100,0),
+(@PATH,71,-111.2919,-119.9628,-48.522,0,0,0,0,100,0),
+(@PATH,72,-114.7919,-123.2128,-49.022,0,0,0,0,100,0),
+(@PATH,73,-117.5419,-125.9628,-49.022,0,0,0,0,100,0),
+(@PATH,74,-123.5419,-131.4628,-51.022,0,0,0,0,100,0),
+(@PATH,75,-126.7919,-134.7128,-51.022,0,0,0,0,100,0),
+(@PATH,76,-129.2919,-136.7128,-51.772,0,0,0,0,100,0),
+(@PATH,77,-133.0963,-140.5668,-52.85578,0,0,0,0,100,0),
+(@PATH,78,-135.5963,-142.3168,-53.10578,0,0,0,0,100,0),
+(@PATH,79,-143.5963,-147.5668,-54.35578,0,0,0,0,100,0),
+(@PATH,80,-146.3463,-149.3168,-53.35578,0,0,0,0,100,0),
+(@PATH,81,-149.5963,-151.5668,-53.35578,0,0,0,0,100,0),
+(@PATH,82,-151.0963,-152.5668,-53.85578,0,0,0,0,100,0),
+(@PATH,83,-156.1434,-156.1172,-55.97437,0,0,0,0,100,0),
+(@PATH,84,-156.8934,-157.3672,-56.47437,0,0,0,0,100,0),
+(@PATH,85,-159.1434,-159.8672,-57.47437,0,0,0,0,100,0),
+(@PATH,86,-162.8934,-164.8672,-58.97437,0,0,0,0,100,0),
+(@PATH,87,-163.3934,-165.6172,-59.72437,0,0,0,0,100,0),
+(@PATH,88,-165.8934,-168.6172,-61.22437,0,0,0,0,100,0),
+(@PATH,89,-169.1434,-172.8672,-62.72437,0,0,0,0,100,0),
+(@PATH,90,-169.4215,-173.0583,-63.12639,0,0,0,0,100,0),
+(@PATH,91,-170.6715,-175.0583,-63.62639,0,0,0,0,100,0),
+(@PATH,92,-170.9215,-178.0583,-64.37639,0,0,0,0,100,0),
+(@PATH,93,-170.9215,-179.0583,-64.87639,0,0,0,0,100,0),
+(@PATH,94,-170.9215,-183.3083,-65.37639,0,0,0,0,100,0),
+(@PATH,95,-171.4215,-191.8083,-66.12639,0,0,0,0,100,0),
+(@PATH,96,-171.6715,-197.3083,-66.12639,0,0,0,0,100,0),
+(@PATH,97,-171.9399,-201.3128,-66.46771,0,0,0,0,100,0),
+(@PATH,98,-170.4399,-202.0628,-66.21771,0,0,0,0,100,0),
+(@PATH,99,-165.1899,-205.0628,-66.21771,0,0,0,0,100,0),
+(@PATH,100,-160.1899,-207.5628,-66.21771,0,0,0,0,100,0),
+(@PATH,101,-154.1899,-211.0628,-66.46771,0,0,0,0,100,0),
+(@PATH,102,-153.828,-211.3276,-66.49379,0,0,0,0,100,0),
+(@PATH,103,-153.078,-211.8276,-66.74379,0,0,0,0,100,0),
+(@PATH,104,-145.828,-212.8276,-68.49379,0,0,0,0,100,0),
+(@PATH,105,-141.578,-213.0776,-68.74379,0,0,0,0,100,0),
+(@PATH,106,-138.828,-213.5776,-69.24379,0,0,0,0,100,0),
+(@PATH,107,-131.328,-214.5776,-70.24379,0,0,0,0,100,0),
+(@PATH,108,-131.1989,-214.7451,-70.56252,0,0,0,0,100,0),
+(@PATH,109,-129.4489,-214.7451,-70.81252,0,0,0,0,100,0),
+(@PATH,110,-124.6989,-214.7451,-71.56252,0,0,0,0,100,0),
+(@PATH,111,-121.6989,-214.7451,-71.56252,0,0,0,0,100,0),
+(@PATH,112,-117.6989,-214.7451,-72.31252,0,0,0,0,100,0);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_21_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_21_01_world.sql
new file mode 100644
index 00000000000..dd5e289d2c5
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_21_01_world.sql
@@ -0,0 +1,11 @@
+--
+-- Grethok the Controller SAI
+SET @ENTRY := 12557;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=4;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,4,0,6,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grethok the Controller - On Just Died - Say Line 0");
+
+DELETE FROM `creature_text` WHERE `entry`=12557;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `comment`) VALUES
+(12557, 0, 0, 'Intruders have breached the hatchery! Sound the alarm! Protect the eggs at all costs!', 14, 0, 100, 0, 0, 0, 9958, 'Grethok the Controller');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_22_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_22_00_world.sql
new file mode 100644
index 00000000000..8075c4e1b20
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_22_00_world.sql
@@ -0,0 +1,14 @@
+--
+-- Orbaz Bloodbane (NPC 28914) condition for gossip option 9769 to be visible only for quest 12757, Scarlet Armies Approach...
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9769 AND `ConditionValue1`=39654;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,9769,0,0,0,2,0,39654,1,0,0,0,0,'','Orbaz Bloodbane - Show gossip option only if player has received item 39654, The Path of Redemption, from quest 12757');
+
+-- Orbaz Bloodbane SAI
+SET @ENTRY := 28914;
+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,12757,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Orbaz Bloodbane - On Quest 'Scarlet Armies Approach' Taken - Run Script"),
+(@ENTRY,0,1,2,62,0,100,0,9769,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Orbaz Bloodbane - On Gossip Option 0 Selected - Close Gossip"),
+(@ENTRY,0,2,0,61,0,100,0,9769,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Orbaz Bloodbane - On Gossip Option 0 Selected - Run Script");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_22_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_22_01_world.sql
new file mode 100644
index 00000000000..ee7db3024ae
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_22_01_world.sql
@@ -0,0 +1,1006 @@
+-- Pathing for Monstrous Underbelly Rat Entry: 32466 'TDB FORMAT'
+SET @NPC := 115709;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5838.242,`position_y`=727.3474,`position_z`=618.8483 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,5838.242,727.3474,618.8483,0,58000,0,0,100,0), -- 17:24:07
+(@PATH,2,5838.957,727.3331,618.8483,0,0,0,0,100,0), -- 17:25:05
+(@PATH,3,5830.747,726.1935,618.8483,0,0,0,0,100,0), -- 17:25:09
+(@PATH,4,5824.448,723.9514,618.8483,0,20000,0,0,100,0), -- 17:25:11
+(@PATH,5,5824.13,723.7587,618.8483,0,0,0,0,100,0), -- 17:25:31
+(@PATH,6,5831.308,726.0686,618.8483,0,0,0,0,100,0); -- 17:25:33
+
+-- Pathing for Underbelly Rat Entry: 32428 'TDB FORMAT'
+SET @NPC := 112319;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5860.327,`position_y`=704.5416,`position_z`=609.4075 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,5860.327,704.5416,609.4075,0,0,1,0,100,0), -- 17:41:04
+(@PATH,2,5848.26,705.7133,609.4075,0,0,1,0,100,0), -- 17:41:05
+(@PATH,3,5846.842,704.8635,609.5217,0,0,1,0,100,0), -- 17:41:07
+(@PATH,4,5836.342,691.6135,609.5217,0,0,1,0,100,0), -- 17:41:07
+(@PATH,5,5835.342,690.3635,610.0217,0,0,1,0,100,0), -- 17:41:07
+(@PATH,6,5833.592,688.1135,610.0217,0,0,1,0,100,0), -- 17:41:07
+(@PATH,7,5832.342,686.1135,610.0217,0,0,1,0,100,0), -- 17:41:07
+(@PATH,8,5831.625,685.5962,610.1531,0,0,1,0,100,0), -- 17:41:12
+(@PATH,9,5821.625,681.8462,610.1531,0,0,1,0,100,0), -- 17:41:12
+(@PATH,10,5817.857,678.2463,610.1359,0,0,1,0,100,0), -- 17:41:15
+(@PATH,11,5816.357,672.2463,610.1359,0,0,1,0,100,0), -- 17:41:15
+(@PATH,12,5815.969,667.8105,610.1359,0,0,1,0,100,0), -- 17:41:17
+(@PATH,13,5815.969,666.0605,610.1359,0,0,1,0,100,0), -- 17:41:17
+(@PATH,14,5815.719,663.5605,609.6359,0,0,1,0,100,0), -- 17:41:17
+(@PATH,15,5815.719,655.0605,609.6359,0,0,1,0,100,0), -- 17:41:17
+(@PATH,16,5815.719,653.8105,609.8859,0,0,1,0,100,0), -- 17:41:17
+(@PATH,17,5815.234,650.0985,610.0259,0,0,1,0,100,0), -- 17:41:21
+(@PATH,18,5813.234,651.0985,610.0259,0,0,1,0,100,0), -- 17:41:21
+(@PATH,19,5806.553,653.642,610.1359,0,0,1,0,100,0), -- 17:41:23
+(@PATH,20,5797.906,650.6086,610.1359,0,0,1,0,100,0), -- 17:41:24
+(@PATH,21,5793.906,647.1086,610.1359,0,0,1,0,100,0), -- 17:41:24
+(@PATH,22,5791.656,644.8586,610.1359,0,0,1,0,100,0), -- 17:41:24
+(@PATH,23,5790.859,644.0999,610.1359,0,0,1,0,100,0), -- 17:41:27
+(@PATH,24,5790.109,642.5999,610.1359,0,0,1,0,100,0), -- 17:41:27
+(@PATH,25,5787.335,632.4458,609.5217,0,0,1,0,100,0), -- 17:41:29
+(@PATH,26,5786.012,626.2661,609.6223,0,0,1,0,100,0), -- 17:41:30
+(@PATH,27,5785.262,623.5161,609.6223,0,0,1,0,100,0), -- 17:41:30
+(@PATH,28,5785.012,622.0161,610.1223,0,0,1,0,100,0), -- 17:41:30
+(@PATH,29,5784.012,618.7661,610.1223,0,0,1,0,100,0), -- 17:41:30
+(@PATH,30,5766.996,613.3734,610.1359,0,0,1,0,100,0), -- 17:41:37
+(@PATH,31,5764.289,614.7873,610.1359,0,0,1,0,100,0), -- 17:41:41
+(@PATH,32,5761.711,609.0067,610.1359,0,0,1,0,100,0), -- 17:41:43
+(@PATH,33,5762.814,602.2861,610.1359,0,0,1,0,100,0), -- 17:41:44
+(@PATH,34,5769.666,596.1545,610.1359,0,0,1,0,100,0), -- 17:41:47
+(@PATH,35,5779.668,590.0027,610.0217,0,0,1,0,100,0), -- 17:41:48
+(@PATH,36,5780.418,588.7527,609.5217,0,0,1,0,100,0), -- 17:41:48
+(@PATH,37,5782.172,585.9805,609.6359,0,0,1,0,100,0), -- 17:41:50
+(@PATH,38,5784.172,588.9805,609.6359,0,0,1,0,100,0), -- 17:41:50
+(@PATH,39,5784.672,589.7305,609.6359,0,0,1,0,100,0), -- 17:41:50
+(@PATH,40,5786.422,592.7305,610.1359,0,0,1,0,100,0), -- 17:41:50
+(@PATH,41,5788.172,595.2305,610.1359,0,0,1,0,100,0), -- 17:41:50
+(@PATH,42,5789.422,597.2305,610.1359,0,0,1,0,100,0), -- 17:41:50
+(@PATH,43,5791.422,599.9805,610.1359,0,0,1,0,100,0), -- 17:41:50
+(@PATH,44,5792.814,602.571,610.0217,0,0,1,0,100,0), -- 17:41:54
+(@PATH,45,5793.564,605.321,610.0217,0,0,1,0,100,0), -- 17:41:54
+(@PATH,46,5794.814,608.821,610.0217,0,0,1,0,100,0), -- 17:41:54
+(@PATH,47,5795.814,612.571,609.5217,0,0,1,0,100,0), -- 17:41:54
+(@PATH,48,5796.314,614.821,609.5217,0,0,1,0,100,0), -- 17:41:54
+(@PATH,49,5797.296,616.8961,609.5619,0,0,1,0,100,0), -- 17:41:58
+(@PATH,50,5800.046,619.1461,609.5619,0,0,1,0,100,0), -- 17:41:58
+(@PATH,51,5802.796,621.1461,609.5619,0,0,1,0,100,0), -- 17:41:58
+(@PATH,52,5804.796,622.6461,610.0619,0,0,1,0,100,0), -- 17:41:58
+(@PATH,53,5807.046,624.6461,610.0619,0,0,1,0,100,0), -- 17:41:58
+(@PATH,54,5809.546,626.3961,610.0619,0,0,1,0,100,0), -- 17:41:58
+(@PATH,55,5813.885,631.6583,610.1359,0,0,1,0,100,0), -- 17:42:02
+(@PATH,56,5814.885,632.6583,610.1359,0,0,1,0,100,0), -- 17:42:02
+(@PATH,57,5816.79,635.3191,610.0217,0,0,1,0,100,0), -- 17:42:03
+(@PATH,58,5818.29,638.0691,610.0217,0,0,1,0,100,0), -- 17:42:03
+(@PATH,59,5821.54,644.0691,610.0217,0,0,1,0,100,0), -- 17:42:03
+(@PATH,60,5822.54,646.3191,609.5217,0,0,1,0,100,0), -- 17:42:03
+(@PATH,61,5823.54,648.3191,609.5217,0,0,1,0,100,0), -- 17:42:03
+(@PATH,62,5823.962,648.8779,609.6245,0,0,1,0,100,0), -- 17:42:06
+(@PATH,63,5827.962,654.3779,609.6245,0,0,1,0,100,0), -- 17:42:06
+(@PATH,64,5828.962,655.6279,610.1245,0,0,1,0,100,0), -- 17:42:06
+(@PATH,65,5835.354,659.7132,610.0316,0,0,1,0,100,0), -- 17:42:09
+(@PATH,66,5829.279,655.8999,610.0217,0,0,1,0,100,0), -- 17:42:12
+(@PATH,67,5828.279,654.3999,609.5217,0,0,1,0,100,0), -- 17:42:12
+(@PATH,68,5816.525,665.3367,610.0217,0,0,1,0,100,0), -- 17:42:12
+(@PATH,69,5815.275,664.3367,609.5217,0,0,1,0,100,0), -- 17:42:12
+(@PATH,70,5821.443,644.0874,610.0221,0,0,1,0,100,0), -- 17:42:15
+(@PATH,71,5818.443,638.0874,610.0221,0,0,1,0,100,0), -- 17:42:15
+(@PATH,72,5814.938,632.898,610.1369,0,0,1,0,100,0), -- 17:42:17
+(@PATH,73,5814.188,631.898,610.1369,0,0,1,0,100,0), -- 17:42:17
+(@PATH,74,5807.222,624.6782,610.0217,0,0,1,0,100,0), -- 17:42:20
+(@PATH,75,5804.972,622.9282,610.0217,0,0,1,0,100,0), -- 17:42:20
+(@PATH,76,5802.972,621.4282,609.5217,0,0,1,0,100,0), -- 17:42:20
+(@PATH,77,5800.222,619.1782,609.5217,0,0,1,0,100,0), -- 17:42:20
+(@PATH,78,5797.37,616.6953,609.5106,0,0,1,0,100,0), -- 17:42:22
+(@PATH,79,5796.62,614.6953,609.5106,0,0,1,0,100,0), -- 17:42:22
+(@PATH,80,5796.37,613.4453,609.5106,0,0,1,0,100,0), -- 17:42:22
+(@PATH,81,5794.87,609.1953,610.0106,0,0,1,0,100,0), -- 17:42:22
+(@PATH,82,5793.87,605.1953,610.0106,0,0,1,0,100,0), -- 17:42:22
+(@PATH,83,5791.352,600.0093,610.0248,0,0,1,0,100,0), -- 17:42:26
+(@PATH,84,5789.602,597.2593,610.0248,0,0,1,0,100,0), -- 17:42:26
+(@PATH,85,5788.102,595.2593,610.0248,0,0,1,0,100,0), -- 17:42:26
+(@PATH,86,5786.602,592.7593,610.0248,0,0,1,0,100,0), -- 17:42:26
+(@PATH,87,5784.602,589.7593,609.5248,0,0,1,0,100,0), -- 17:42:26
+(@PATH,88,5784.102,589.0093,609.5248,0,0,1,0,100,0), -- 17:42:26
+(@PATH,89,5781.995,586.1212,609.5032,0,0,1,0,100,0), -- 17:42:30
+(@PATH,90,5780.495,588.8712,609.5032,0,0,1,0,100,0), -- 17:42:30
+(@PATH,91,5779.745,590.1212,610.0032,0,0,1,0,100,0), -- 17:42:30
+(@PATH,92,5777.245,594.3712,610.0032,0,0,1,0,100,0), -- 17:42:30
+(@PATH,93,5769.974,595.9542,610.1404,0,0,1,0,100,0), -- 17:42:32
+(@PATH,94,5768.724,595.7042,610.1404,0,0,1,0,100,0), -- 17:42:32
+(@PATH,95,5767.407,595.5968,610.1359,0,0,1,0,100,0), -- 17:42:35
+(@PATH,96,5763.157,601.5968,610.1359,0,0,1,0,100,0), -- 17:42:35
+(@PATH,97,5762.924,602.3074,610.1359,0,0,1,0,100,0), -- 17:42:36
+(@PATH,98,5763.78,614.1101,610.1359,0,0,1,0,100,0), -- 17:42:37
+(@PATH,99,5764.873,615.9689,610.1359,0,0,1,0,100,0), -- 17:42:38
+(@PATH,100,5766.873,613.2189,610.1359,0,0,1,0,100,0), -- 17:42:38
+(@PATH,101,5784.897,621.7813,610.0217,0,0,1,0,100,0), -- 17:42:43
+(@PATH,102,5785.397,623.5313,609.5217,0,0,1,0,100,0), -- 17:42:43
+(@PATH,103,5786.147,626.2813,609.5217,0,0,1,0,100,0), -- 17:42:43
+(@PATH,104,5786.897,629.0313,609.5217,0,0,1,0,100,0), -- 17:42:43
+(@PATH,105,5786.155,626.5582,609.6359,0,0,1,0,100,0), -- 17:42:49
+(@PATH,106,5786.905,629.0582,609.6359,0,0,1,0,100,0), -- 17:42:49
+(@PATH,107,5786.905,629.5582,609.6359,0,0,1,0,100,0), -- 17:42:49
+(@PATH,108,5787.155,632.0582,609.6359,0,0,1,0,100,0), -- 17:42:49
+(@PATH,109,5787.405,634.3082,610.1359,0,0,1,0,100,0), -- 17:42:49
+(@PATH,110,5790,642.3279,609.9437,0,0,1,0,100,0), -- 17:42:52
+(@PATH,111,5794.055,646.8982,610.1359,0,0,1,0,100,0), -- 17:42:53
+(@PATH,112,5797.555,650.6482,610.1359,0,0,1,0,100,0), -- 17:42:53
+(@PATH,113,5799.555,652.6482,610.1359,0,0,1,0,100,0), -- 17:42:53
+(@PATH,114,5801.444,654.5395,610.1359,0,0,1,0,100,0), -- 17:42:56
+(@PATH,115,5806.444,653.7895,610.1359,0,0,1,0,100,0), -- 17:42:56
+(@PATH,116,5807.512,653.4955,610.1359,0,0,1,0,100,0), -- 17:42:57
+(@PATH,117,5812.512,651.2455,610.1359,0,0,1,0,100,0), -- 17:42:57
+(@PATH,118,5815.426,653.1886,610.1359,0,0,1,0,100,0), -- 17:42:59
+(@PATH,119,5815.426,654.9386,609.6359,0,0,1,0,100,0), -- 17:42:59
+(@PATH,120,5815.676,663.6886,609.6359,0,0,1,0,100,0), -- 17:42:59
+(@PATH,121,5815.676,665.9386,610.1359,0,0,1,0,100,0), -- 17:42:59
+(@PATH,122,5815.676,667.6886,610.1359,0,0,1,0,100,0), -- 17:42:59
+(@PATH,123,5816.03,668.0648,610.0238,0,0,1,0,100,0), -- 17:43:03
+(@PATH,124,5816.03,670.0648,610.0238,0,0,1,0,100,0), -- 17:43:03
+(@PATH,125,5816.53,672.0648,610.0238,0,0,1,0,100,0), -- 17:43:03
+(@PATH,126,5817.53,678.0648,610.0238,0,0,1,0,100,0), -- 17:43:03
+(@PATH,127,5821.502,681.4215,610.1359,0,0,1,0,100,0), -- 17:43:05
+(@PATH,128,5835.538,690.3898,610.0217,0,0,1,0,100,0), -- 17:43:08
+(@PATH,129,5836.288,691.6398,609.5217,0,0,1,0,100,0), -- 17:43:08
+(@PATH,130,5849.831,706.8584,609.4108,0,0,1,0,100,0), -- 17:43:13
+(@PATH,131,5855.265,709.8666,609.4075,0,0,1,0,100,0), -- 17:43:15
+(@PATH,132,5866.013,703.9492,609.4075,0,0,1,0,100,0), -- 17:43:16
+(@PATH,133,5873.884,695.3582,609.4075,0,0,1,0,100,0), -- 17:43:19
+(@PATH,134,5874.632,694.2865,609.4949,0,0,1,0,100,0), -- 17:43:20
+(@PATH,135,5874.84,689.0822,609.9387,0,0,1,0,100,0), -- 17:43:21
+(@PATH,136,5874.09,687.0822,610.9387,0,0,1,0,100,0), -- 17:43:21
+(@PATH,137,5873.47,685.0145,610.9896,0,0,1,0,100,0), -- 17:43:23
+(@PATH,138,5871.47,683.0145,610.7396,0,0,1,0,100,0), -- 17:43:23
+(@PATH,139,5866.97,678.2645,610.9896,0,0,1,0,100,0), -- 17:43:23
+(@PATH,140,5865.97,677.2645,610.9896,0,0,1,0,100,0), -- 17:43:23
+(@PATH,141,5864.548,676.2894,610.9425,0,0,1,0,100,0), -- 17:43:25
+(@PATH,142,5863.548,676.5394,610.9425,0,0,1,0,100,0), -- 17:43:25
+(@PATH,143,5859.548,677.2894,610.1925,0,0,1,0,100,0), -- 17:43:25
+(@PATH,144,5848.772,675.0753,610.0875,0,0,1,0,100,0), -- 17:43:28
+(@PATH,145,5847.37,674.7904,610.0217,0,0,1,0,100,0), -- 17:43:29
+(@PATH,146,5844.12,673.7904,610.0217,0,0,1,0,100,0), -- 17:43:29
+(@PATH,147,5839.478,672.2452,610.1381,0,0,1,0,100,0), -- 17:43:30
+(@PATH,148,5839.478,669.2452,610.1381,0,0,1,0,100,0), -- 17:43:30
+(@PATH,149,5839.478,663.7452,610.1381,0,0,1,0,100,0), -- 17:43:30
+(@PATH,150,5839.195,669.4826,610.1359,0,0,1,0,100,0), -- 17:43:34
+(@PATH,151,5843.771,673.7661,610.1359,0,0,1,0,100,0), -- 17:43:35
+(@PATH,152,5846.521,674.7661,610.1359,0,0,1,0,100,0), -- 17:43:35
+(@PATH,153,5847.64,674.8135,610.0217,0,0,1,0,100,0), -- 17:43:36
+(@PATH,154,5848.64,674.8135,610.0217,0,0,1,0,100,0), -- 17:43:36
+(@PATH,155,5849.89,674.8135,609.5217,0,0,1,0,100,0), -- 17:43:36
+(@PATH,156,5866.708,676.1121,609.4492,0,0,1,0,100,0), -- 17:43:39
+(@PATH,157,5866.708,675.6121,609.4492,0,0,1,0,100,0), -- 17:43:39
+(@PATH,158,5864.833,676.2982,610.9387,0,0,1,0,100,0), -- 17:43:41
+(@PATH,159,5865.833,677.2982,610.9387,0,0,1,0,100,0), -- 17:43:41
+(@PATH,160,5866.833,678.2982,610.9387,0,0,1,0,100,0), -- 17:43:41
+(@PATH,161,5871.583,683.0482,610.9387,0,0,1,0,100,0), -- 17:43:41
+(@PATH,162,5874.132,686.8735,610.9503,0,0,1,0,100,0), -- 17:43:44
+(@PATH,163,5874.632,687.8735,610.4503,0,0,1,0,100,0), -- 17:43:44
+(@PATH,164,5875.144,689.2743,609.9451,0,0,1,0,100,0), -- 17:43:45
+(@PATH,165,5876.144,690.5243,609.6951,0,0,1,0,100,0), -- 17:43:45
+(@PATH,166,5874.644,694.2743,609.6951,0,0,1,0,100,0), -- 17:43:45
+(@PATH,167,5873.894,695.0243,609.6951,0,0,1,0,100,0), -- 17:43:45
+(@PATH,168,5866.658,703.6503,609.4075,0,0,1,0,100,0), -- 17:43:47
+(@PATH,169,5860.372,704.5635,609.4075,0,0,1,0,100,0); -- 17:43:50
+
+-- Pathing for Underbelly Rat Entry: 32428 'TDB FORMAT'
+SET @NPC := 112318;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5812.506,`position_y`=725.5436,`position_z`=624.4396 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,5812.506,725.5436,624.4396,0,0,1,0,100,0), -- 17:45:05
+(@PATH,2,5811.401,724.5404,624.3019,0,0,1,0,100,0), -- 17:45:07
+(@PATH,3,5809.651,723.5404,623.8019,0,0,1,0,100,0), -- 17:45:07
+(@PATH,4,5805.687,715.0458,619.4795,0,0,1,0,100,0), -- 17:45:09
+(@PATH,5,5805.306,711.5175,619.0914,0,0,1,0,100,0), -- 17:45:10
+(@PATH,6,5805.056,711.0175,619.0914,0,0,1,0,100,0), -- 17:45:10
+(@PATH,7,5803.806,710.2675,619.3414,0,0,1,0,100,0), -- 17:45:10
+(@PATH,8,5798.439,709.6013,619.4612,0,0,1,0,100,0), -- 17:45:11
+(@PATH,9,5796.939,708.1013,619.7112,0,0,1,0,100,0), -- 17:45:11
+(@PATH,10,5796.189,707.3513,619.7112,0,0,1,0,100,0), -- 17:45:11
+(@PATH,11,5796.251,707.1489,619.6675,0,0,1,0,100,0), -- 17:45:12
+(@PATH,12,5794.501,705.6489,619.6675,0,0,1,0,100,0), -- 17:45:12
+(@PATH,13,5795.787,700.2144,619.2513,0,0,1,0,100,0), -- 17:45:14
+(@PATH,14,5796.287,698.9644,619.2513,0,0,1,0,100,0), -- 17:45:14
+(@PATH,15,5797.537,695.4644,619.0013,0,0,1,0,100,0), -- 17:45:14
+(@PATH,16,5798.287,692.4644,619.0013,0,0,1,0,100,0), -- 17:45:14
+(@PATH,17,5799.037,690.9644,619.2513,0,0,1,0,100,0), -- 17:45:14
+(@PATH,18,5799.537,689.4644,619.2513,0,0,1,0,100,0), -- 17:45:14
+(@PATH,19,5799.536,689.3114,619.3141,0,0,1,0,100,0), -- 17:45:16
+(@PATH,20,5800.036,688.0614,619.3141,0,0,1,0,100,0), -- 17:45:16
+(@PATH,21,5798.786,687.0614,619.3141,0,0,1,0,100,0), -- 17:45:16
+(@PATH,22,5794.159,683.7436,619.2207,0,0,1,0,100,0), -- 17:45:17
+(@PATH,23,5792.909,683.2436,619.2207,0,0,1,0,100,0), -- 17:45:17
+(@PATH,24,5791.659,682.7436,619.2207,0,0,1,0,100,0), -- 17:45:17
+(@PATH,25,5791.753,682.5482,619.214,0,0,1,0,100,0), -- 17:45:19
+(@PATH,26,5791.253,682.2982,618.964,0,0,1,0,100,0), -- 17:45:19
+(@PATH,27,5789.503,680.2982,618.964,0,0,1,0,100,0), -- 17:45:19
+(@PATH,28,5788.781,677.8862,619.2213,0,0,1,0,100,0), -- 17:45:20
+(@PATH,29,5789.031,675.3862,619.2213,0,0,1,0,100,0), -- 17:45:20
+(@PATH,30,5786.781,671.8862,619.2213,0,0,1,0,100,0), -- 17:45:20
+(@PATH,31,5785.09,669.5923,619.22,0,0,1,0,100,0), -- 17:45:21
+(@PATH,32,5782.34,670.0923,619.22,0,0,1,0,100,0), -- 17:45:21
+(@PATH,33,5781.488,670.0141,619.1985,0,0,1,0,100,0), -- 17:45:22
+(@PATH,34,5778.738,667.5141,618.9485,0,0,1,0,100,0), -- 17:45:22
+(@PATH,35,5776.889,665.7174,619.0254,0,0,1,0,100,0), -- 17:45:23
+(@PATH,36,5771.591,666.1527,618.715,0,0,1,0,100,0), -- 17:45:25
+(@PATH,37,5769.591,664.6527,618.715,0,0,1,0,100,0), -- 17:45:25
+(@PATH,38,5764.23,657.7101,618.679,0,0,1,0,100,0), -- 17:45:26
+(@PATH,39,5763.645,656.9364,618.9661,0,0,1,0,100,0), -- 17:45:27
+(@PATH,40,5762.145,655.9364,618.7161,0,0,1,0,100,0), -- 17:45:27
+(@PATH,41,5761.145,654.9364,618.7161,0,0,1,0,100,0), -- 17:45:27
+(@PATH,42,5759.645,653.9364,618.4661,0,0,1,0,100,0), -- 17:45:27
+(@PATH,43,5757.645,652.4364,618.4661,0,0,1,0,100,0), -- 17:45:27
+(@PATH,44,5758.634,650.1743,617.9124,0,0,1,0,100,0), -- 17:45:30
+(@PATH,45,5759.384,649.6743,617.6624,0,0,1,0,100,0), -- 17:45:30
+(@PATH,46,5760.884,648.9243,617.9124,0,0,1,0,100,0), -- 17:45:30
+(@PATH,47,5765.302,645.7458,617.7252,0,0,1,0,100,0), -- 17:45:31
+(@PATH,48,5766.552,645.2458,617.7252,0,0,1,0,100,0), -- 17:45:31
+(@PATH,49,5771.302,643.4958,617.7252,0,0,1,0,100,0), -- 17:45:31
+(@PATH,50,5772.802,642.7458,617.4752,0,0,1,0,100,0), -- 17:45:31
+(@PATH,51,5773.302,642.4958,617.4752,0,0,1,0,100,0), -- 17:45:31
+(@PATH,52,5774.802,640.9958,616.4752,0,0,1,0,100,0), -- 17:45:31
+(@PATH,53,5775.896,637.9182,614.7648,0,0,1,0,100,0), -- 17:45:34
+(@PATH,54,5777.396,635.9182,613.0148,0,0,1,0,100,0), -- 17:45:34
+(@PATH,55,5781.486,634.472,611.2208,0,0,1,0,100,0), -- 17:45:36
+(@PATH,56,5782.236,634.472,610.4708,0,0,1,0,100,0), -- 17:45:36
+(@PATH,57,5783.486,634.472,609.4708,0,0,1,0,100,0), -- 17:45:36
+(@PATH,58,5785.486,634.722,609.4708,0,0,1,0,100,0), -- 17:45:36
+(@PATH,59,5783.877,634.4684,609.5891,0,0,1,0,100,0), -- 17:45:37
+(@PATH,60,5785.627,634.7184,609.5891,0,0,1,0,100,0), -- 17:45:37
+(@PATH,61,5787.377,634.7184,610.3391,0,0,1,0,100,0), -- 17:45:37
+(@PATH,62,5791.627,635.2184,610.3391,0,0,1,0,100,0), -- 17:45:37
+(@PATH,63,5792.804,635.6805,610.0217,0,0,1,0,100,0), -- 17:45:38
+(@PATH,64,5804.054,638.4305,610.0217,0,0,1,0,100,0), -- 17:45:38
+(@PATH,65,5808.587,639.6121,610.1359,0,0,1,0,100,0), -- 17:45:41
+(@PATH,66,5816.692,643.6942,610.1359,0,0,1,0,100,0), -- 17:45:43
+(@PATH,67,5822.68,639.5682,609.7672,0,0,1,0,100,0), -- 17:45:45
+(@PATH,68,5823.43,639.5682,610.0172,0,0,1,0,100,0), -- 17:45:45
+(@PATH,69,5825.18,639.8182,610.0172,0,0,1,0,100,0), -- 17:45:45
+(@PATH,70,5824.43,638.3182,610.0172,0,0,1,0,100,0), -- 17:45:45
+(@PATH,71,5824.57,638.2134,610.1077,0,0,1,0,100,0), -- 17:45:47
+(@PATH,72,5823.57,636.9634,611.1077,0,0,1,0,100,0), -- 17:45:47
+(@PATH,73,5823.57,634.9634,611.6077,0,0,1,0,100,0), -- 17:45:47
+(@PATH,74,5824.07,633.7134,612.3577,0,0,1,0,100,0), -- 17:45:47
+(@PATH,75,5824.662,632.4669,612.8602,0,0,1,0,100,0), -- 17:45:48
+(@PATH,76,5826.162,630.2169,614.1102,0,0,1,0,100,0), -- 17:45:48
+(@PATH,77,5826.912,628.9669,614.8602,0,0,1,0,100,0), -- 17:45:48
+(@PATH,78,5827.492,628.314,614.7683,0,0,1,0,100,0), -- 17:45:49
+(@PATH,79,5828.242,627.314,615.2683,0,0,1,0,100,0), -- 17:45:49
+(@PATH,80,5828.742,626.064,616.0183,0,0,1,0,100,0), -- 17:45:49
+(@PATH,81,5829.492,624.314,616.0183,0,0,1,0,100,0), -- 17:45:49
+(@PATH,82,5830.492,622.564,616.2683,0,0,1,0,100,0), -- 17:45:49
+(@PATH,83,5829.866,624.0173,616.4043,0,0,1,0,100,0), -- 17:45:50
+(@PATH,84,5830.366,622.7673,616.6543,0,0,1,0,100,0), -- 17:45:50
+(@PATH,85,5832.866,624.2673,616.9043,0,0,1,0,100,0), -- 17:45:50
+(@PATH,86,5832.366,622.5173,617.4043,0,0,1,0,100,0), -- 17:45:50
+(@PATH,87,5832.366,621.2673,617.9043,0,0,1,0,100,0), -- 17:45:50
+(@PATH,88,5832.433,621.1912,618.1343,0,0,1,0,100,0), -- 17:45:52
+(@PATH,89,5832.183,618.6912,619.1343,0,0,1,0,100,0), -- 17:45:52
+(@PATH,90,5832.433,615.6912,620.8843,0,0,1,0,100,0), -- 17:45:52
+(@PATH,91,5832.683,614.6912,621.3843,0,0,1,0,100,0), -- 17:45:52
+(@PATH,92,5833.433,611.1912,622.1343,0,0,1,0,100,0), -- 17:45:52
+(@PATH,93,5833.683,609.6912,621.8843,0,0,1,0,100,0), -- 17:45:52
+(@PATH,94,5833.704,609.4901,622.2904,0,0,1,0,100,0), -- 17:45:54
+(@PATH,95,5833.954,607.4901,622.2904,0,0,1,0,100,0), -- 17:45:54
+(@PATH,96,5833.954,606.2401,622.5404,0,0,1,0,100,0), -- 17:45:54
+(@PATH,97,5833.704,600.7401,623.2904,0,0,1,0,100,0), -- 17:45:54
+(@PATH,98,5833.454,599.4901,624.0404,0,0,1,0,100,0), -- 17:45:54
+(@PATH,99,5833.538,598.366,623.9922,0,0,1,0,100,0), -- 17:45:56
+(@PATH,100,5832.038,596.866,624.4922,0,0,1,0,100,0), -- 17:45:56
+(@PATH,101,5830.538,595.116,624.7422,0,0,1,0,100,0), -- 17:45:56
+(@PATH,102,5828.975,593.5865,624.9868,0,0,1,0,100,0), -- 17:45:58
+(@PATH,103,5826.725,591.3365,625.4868,0,0,1,0,100,0), -- 17:45:58
+(@PATH,104,5825.521,588.7355,625.7487,0,0,1,0,100,0), -- 17:45:59
+(@PATH,105,5825.271,587.4855,625.9987,0,0,1,0,100,0), -- 17:45:59
+(@PATH,106,5822.575,582.8594,626.4241,0,0,1,0,100,0), -- 17:46:01
+(@PATH,107,5815.441,579.615,627.5906,0,0,1,0,100,0), -- 17:46:02
+(@PATH,108,5814.441,578.865,627.8406,0,0,1,0,100,0), -- 17:46:02
+(@PATH,109,5812.545,576.4588,628.457,0,0,1,0,100,0), -- 17:46:03
+(@PATH,110,5811.545,574.7088,628.707,0,0,1,0,100,0), -- 17:46:03
+(@PATH,111,5810.408,571.4939,629.276,0,0,1,0,100,0), -- 17:46:04
+(@PATH,112,5804.017,568.0781,629.6204,0,0,1,0,100,0), -- 17:46:06
+(@PATH,113,5803.017,566.5781,629.8704,0,0,1,0,100,0), -- 17:46:06
+(@PATH,114,5803.129,566.3809,629.8486,0,0,1,0,100,0), -- 17:46:07
+(@PATH,115,5801.879,564.8809,629.8486,0,0,1,0,100,0), -- 17:46:07
+(@PATH,116,5801.879,563.1309,629.8486,0,0,1,0,100,0), -- 17:46:07
+(@PATH,117,5801.629,561.8809,629.8486,0,0,1,0,100,0), -- 17:46:07
+(@PATH,118,5801.365,560.2042,630.7414,0,0,1,0,100,0), -- 17:46:08
+(@PATH,119,5796.325,553.0746,634.724,0,0,1,0,100,0), -- 17:46:09
+(@PATH,120,5793.369,549.6201,634.8419,0,0,1,0,100,0), -- 17:46:10
+(@PATH,121,5792.119,548.8701,634.8419,0,0,1,0,100,0), -- 17:46:10
+(@PATH,122,5791.119,548.3701,634.8419,0,0,1,0,100,0), -- 17:46:10
+(@PATH,123,5788.369,546.6201,636.8419,0,0,1,0,100,0), -- 17:46:10
+(@PATH,124,5785.869,545.1201,638.0919,0,0,1,0,100,0), -- 17:46:10
+(@PATH,125,5790.984,548.038,634.9894,0,0,1,0,100,0), -- 17:46:15
+(@PATH,126,5792.234,548.788,634.9894,0,0,1,0,100,0), -- 17:46:15
+(@PATH,127,5792.435,549.0204,634.8621,0,0,1,0,100,0), -- 17:46:17
+(@PATH,128,5793.435,549.7704,634.8621,0,0,1,0,100,0), -- 17:46:17
+(@PATH,129,5795.435,552.0204,634.8621,0,0,1,0,100,0), -- 17:46:17
+(@PATH,130,5796.685,553.2704,635.1121,0,0,1,0,100,0), -- 17:46:17
+(@PATH,131,5796.966,553.6017,634.8666,0,0,1,0,100,0), -- 17:46:18
+(@PATH,132,5797.216,554.1017,634.3666,0,0,1,0,100,0), -- 17:46:18
+(@PATH,133,5801.743,562.6663,630.2207,0,0,1,0,100,0), -- 17:46:20
+(@PATH,134,5801.743,564.9163,630.2207,0,0,1,0,100,0), -- 17:46:20
+(@PATH,135,5802.493,565.9163,630.2207,0,0,1,0,100,0), -- 17:46:20
+(@PATH,136,5804.158,567.8349,629.5902,0,0,1,0,100,0), -- 17:46:21
+(@PATH,137,5810.48,571.2711,629.313,0,0,1,0,100,0), -- 17:46:23
+(@PATH,138,5812.102,575.7954,628.5873,0,0,1,0,100,0), -- 17:46:24
+(@PATH,139,5812.102,576.5454,628.3373,0,0,1,0,100,0), -- 17:46:24
+(@PATH,140,5814.352,578.7954,628.0873,0,0,1,0,100,0), -- 17:46:24
+(@PATH,141,5814.542,578.6766,628.0162,0,0,1,0,100,0), -- 17:46:25
+(@PATH,142,5815.292,579.6766,627.7662,0,0,1,0,100,0), -- 17:46:25
+(@PATH,143,5816.792,579.6766,627.7662,0,0,1,0,100,0), -- 17:46:25
+(@PATH,144,5822.438,582.6847,626.7626,0,0,1,0,100,0), -- 17:46:26
+(@PATH,145,5823.438,583.9347,626.5126,0,0,1,0,100,0), -- 17:46:26
+(@PATH,146,5824.323,584.9958,626.1263,0,0,1,0,100,0), -- 17:46:27
+(@PATH,147,5825.073,587.2458,626.1263,0,0,1,0,100,0), -- 17:46:27
+(@PATH,148,5825.323,588.4958,626.1263,0,0,1,0,100,0), -- 17:46:27
+(@PATH,149,5826.115,590.5767,625.4272,0,0,1,0,100,0), -- 17:46:29
+(@PATH,150,5831.021,605.7319,623.0287,0,0,1,0,100,0), -- 17:46:29
+(@PATH,151,5829.021,599.4819,624.0287,0,0,1,0,100,0), -- 17:46:29
+(@PATH,152,5828.021,595.7319,624.5287,0,0,1,0,100,0), -- 17:46:29
+(@PATH,153,5827.271,592.9819,624.7787,0,0,1,0,100,0), -- 17:46:29
+(@PATH,154,5826.521,590.9819,625.5287,0,0,1,0,100,0), -- 17:46:29
+(@PATH,155,5831.989,596.5863,624.5801,0,0,1,0,100,0), -- 17:46:30
+(@PATH,156,5833.593,600.676,623.2581,0,0,1,0,100,0), -- 17:46:31
+(@PATH,157,5833.843,605.926,622.7581,0,0,1,0,100,0), -- 17:46:31
+(@PATH,158,5833.962,607.8434,622.0533,0,0,1,0,100,0), -- 17:46:32
+(@PATH,159,5833.712,609.3434,621.8033,0,0,1,0,100,0), -- 17:46:32
+(@PATH,160,5833.462,610.3434,622.0533,0,0,1,0,100,0), -- 17:46:32
+(@PATH,161,5832.712,614.5934,621.5533,0,0,1,0,100,0), -- 17:46:32
+(@PATH,162,5832.712,615.5934,621.0533,0,0,1,0,100,0), -- 17:46:32
+(@PATH,163,5832.212,618.0934,619.8033,0,0,1,0,100,0), -- 17:46:32
+(@PATH,164,5832.256,618.2179,619.4556,0,0,1,0,100,0), -- 17:46:35
+(@PATH,165,5832.006,618.7179,619.2056,0,0,1,0,100,0), -- 17:46:35
+(@PATH,166,5832.506,620.9679,618.2056,0,0,1,0,100,0), -- 17:46:35
+(@PATH,167,5832.756,622.4679,617.7056,0,0,1,0,100,0), -- 17:46:35
+(@PATH,168,5832.239,621.2859,617.7874,0,0,1,0,100,0), -- 17:46:36
+(@PATH,169,5832.489,622.5359,617.5374,0,0,1,0,100,0), -- 17:46:36
+(@PATH,170,5832.739,624.2859,617.0374,0,0,1,0,100,0), -- 17:46:36
+(@PATH,171,5832.239,624.5359,616.5374,0,0,1,0,100,0), -- 17:46:36
+(@PATH,172,5830.989,625.5359,616.2874,0,0,1,0,100,0), -- 17:46:36
+(@PATH,173,5829.739,626.7859,616.0374,0,0,1,0,100,0), -- 17:46:36
+(@PATH,174,5828.739,627.5359,615.5374,0,0,1,0,100,0), -- 17:46:36
+(@PATH,175,5826.31,630.0842,614.1038,0,0,1,0,100,0), -- 17:46:38
+(@PATH,176,5825.06,631.8342,613.3538,0,0,1,0,100,0), -- 17:46:38
+(@PATH,177,5824.81,632.0842,613.1038,0,0,1,0,100,0), -- 17:46:38
+(@PATH,178,5824.31,633.3342,612.6038,0,0,1,0,100,0), -- 17:46:38
+(@PATH,179,5824.213,633.7821,612.4078,0,0,1,0,100,0), -- 17:46:40
+(@PATH,180,5823.713,634.7821,611.6578,0,0,1,0,100,0), -- 17:46:40
+(@PATH,181,5824.463,636.7821,611.1578,0,0,1,0,100,0), -- 17:46:40
+(@PATH,182,5823.713,638.2821,610.6578,0,0,1,0,100,0), -- 17:46:40
+(@PATH,183,5825.163,639.6008,610.0427,0,0,1,0,100,0), -- 17:46:41
+(@PATH,184,5823.413,639.3508,610.0427,0,0,1,0,100,0), -- 17:46:41
+(@PATH,185,5822.913,639.3508,609.7927,0,0,1,0,100,0), -- 17:46:41
+(@PATH,186,5821.913,640.8508,610.2927,0,0,1,0,100,0), -- 17:46:41
+(@PATH,187,5821.71,641.128,610.0275,0,0,1,0,100,0), -- 17:46:42
+(@PATH,188,5820.21,642.878,610.0275,0,0,1,0,100,0), -- 17:46:42
+(@PATH,189,5816.96,643.628,610.0275,0,0,1,0,100,0), -- 17:46:42
+(@PATH,190,5813.353,644.3413,610.1364,0,0,1,0,100,0), -- 17:46:43
+(@PATH,191,5804.18,638.688,610.1359,0,0,1,0,100,0), -- 17:46:45
+(@PATH,192,5792.854,635.4862,610.1309,0,0,1,0,100,0), -- 17:46:48
+(@PATH,193,5786.168,634.7509,609.4952,0,0,1,0,100,0), -- 17:46:49
+(@PATH,194,5783.918,634.5009,609.4952,0,0,1,0,100,0), -- 17:46:49
+(@PATH,195,5782.418,634.5009,610.4952,0,0,1,0,100,0), -- 17:46:49
+(@PATH,196,5781.418,634.5009,610.9952,0,0,1,0,100,0), -- 17:46:49
+(@PATH,197,5782.23,634.389,610.3091,0,0,1,0,100,0), -- 17:46:51
+(@PATH,198,5781.23,634.389,611.0591,0,0,1,0,100,0), -- 17:46:51
+(@PATH,199,5779.23,634.389,612.0591,0,0,1,0,100,0), -- 17:46:51
+(@PATH,200,5778.23,635.389,612.5591,0,0,1,0,100,0), -- 17:46:51
+(@PATH,201,5775.73,637.889,614.8091,0,0,1,0,100,0), -- 17:46:51
+(@PATH,202,5773.956,639.8704,616.4454,0,0,1,0,100,0), -- 17:46:53
+(@PATH,203,5772.456,641.3704,616.9454,0,0,1,0,100,0), -- 17:46:53
+(@PATH,204,5772.206,641.6204,617.1954,0,0,1,0,100,0), -- 17:46:53
+(@PATH,205,5771.206,642.3704,617.6954,0,0,1,0,100,0), -- 17:46:53
+(@PATH,206,5766.706,645.1204,617.6954,0,0,1,0,100,0), -- 17:46:53
+(@PATH,207,5761.375,648.278,617.9376,0,0,1,0,100,0), -- 17:46:56
+(@PATH,208,5759.875,649.278,617.6876,0,0,1,0,100,0), -- 17:46:56
+(@PATH,209,5758.625,650.278,617.9376,0,0,1,0,100,0), -- 17:46:56
+(@PATH,210,5757.67,652.2993,618.3185,0,0,1,0,100,0), -- 17:46:58
+(@PATH,211,5759.17,653.2993,618.3185,0,0,1,0,100,0), -- 17:46:58
+(@PATH,212,5760.92,654.5493,618.5685,0,0,1,0,100,0), -- 17:46:58
+(@PATH,213,5762.17,655.5493,618.8185,0,0,1,0,100,0), -- 17:46:58
+(@PATH,214,5763.629,656.9517,618.8355,0,0,1,0,100,0), -- 17:46:59
+(@PATH,215,5765.379,661.2017,618.8355,0,0,1,0,100,0), -- 17:46:59
+(@PATH,216,5769.263,664.3608,618.6702,0,0,1,0,100,0), -- 17:47:01
+(@PATH,217,5773.755,666.7302,618.8483,0,0,1,0,100,0), -- 17:47:02
+(@PATH,218,5774.306,667.0947,618.7543,0,0,1,0,100,0), -- 17:47:03
+(@PATH,219,5776.306,666.0947,618.7543,0,0,1,0,100,0), -- 17:47:03
+(@PATH,220,5776.556,665.8447,619.0043,0,0,1,0,100,0), -- 17:47:03
+(@PATH,221,5778.556,667.5947,619.0043,0,0,1,0,100,0), -- 17:47:03
+(@PATH,222,5781.24,670.0711,619.0645,0,0,1,0,100,0), -- 17:47:04
+(@PATH,223,5786.377,671.8536,619.2012,0,0,1,0,100,0), -- 17:47:06
+(@PATH,224,5788.669,677.6926,619.214,0,0,1,0,100,0), -- 17:47:07
+(@PATH,225,5788.669,678.9426,619.214,0,0,1,0,100,0), -- 17:47:07
+(@PATH,226,5788.923,679.4878,619.0298,0,0,1,0,100,0), -- 17:47:08
+(@PATH,227,5789.673,680.2378,619.0298,0,0,1,0,100,0), -- 17:47:08
+(@PATH,228,5791.423,682.4878,619.0298,0,0,1,0,100,0), -- 17:47:08
+(@PATH,229,5792.423,682.9878,619.2798,0,0,1,0,100,0), -- 17:47:08
+(@PATH,230,5794.02,683.6155,619.2227,0,0,1,0,100,0), -- 17:47:09
+(@PATH,231,5798.77,686.8655,619.2227,0,0,1,0,100,0), -- 17:47:09
+(@PATH,232,5799.506,689.4122,619.0743,0,0,1,0,100,0), -- 17:47:10
+(@PATH,233,5799.006,690.9122,619.0743,0,0,1,0,100,0), -- 17:47:10
+(@PATH,234,5798.506,692.1622,619.0743,0,0,1,0,100,0), -- 17:47:10
+(@PATH,235,5797.256,695.1622,619.0743,0,0,1,0,100,0), -- 17:47:10
+(@PATH,236,5796.256,698.1622,619.0743,0,0,1,0,100,0), -- 17:47:10
+(@PATH,237,5795.756,699.6622,619.3243,0,0,1,0,100,0), -- 17:47:10
+(@PATH,238,5795.712,700.3739,619.2347,0,0,1,0,100,0), -- 17:47:13
+(@PATH,239,5795.462,702.8739,619.2347,0,0,1,0,100,0), -- 17:47:13
+(@PATH,240,5796.152,707.1231,619.7043,0,0,1,0,100,0), -- 17:47:15
+(@PATH,241,5796.652,708.1231,619.7043,0,0,1,0,100,0), -- 17:47:15
+(@PATH,242,5797.652,709.1231,619.4543,0,0,1,0,100,0), -- 17:47:15
+(@PATH,243,5798.298,709.5776,619.3361,0,0,1,0,100,0), -- 17:47:16
+(@PATH,244,5800.298,709.3276,619.3361,0,0,1,0,100,0), -- 17:47:16
+(@PATH,245,5805.703,712.6086,619.0933,0,0,1,0,100,0), -- 17:47:17
+(@PATH,246,5805.453,714.8586,619.0933,0,0,1,0,100,0), -- 17:47:17
+(@PATH,247,5805.453,716.1086,619.0933,0,0,1,0,100,0), -- 17:47:17
+(@PATH,248,5805.642,716.5522,619.5599,0,0,1,0,100,0), -- 17:47:18
+(@PATH,249,5805.642,717.0522,619.5599,0,0,1,0,100,0), -- 17:47:18
+(@PATH,250,5812.082,724.9027,624.3082,0,0,1,0,100,0), -- 17:47:20
+(@PATH,251,5812.286,725.2038,624.2163,0,0,1,0,100,0); -- 17:47:21
+
+-- Pathing for Underbelly Rat Entry: 32428 'TDB FORMAT'
+SET @NPC := 112316;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5650.283,`position_y`=859.0229,`position_z`=571.1886 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,5650.283,859.0229,571.1886,0,0,1,0,100,0), -- 16:14:32
+(@PATH,2,5653.515,856.0323,571.1707,0,0,1,0,100,0), -- 16:14:35
+(@PATH,3,5670.484,841.5376,582.4416,0,0,1,0,100,0), -- 16:14:37
+(@PATH,4,5687.539,826.0508,591.1404,0,0,1,0,100,0), -- 16:14:43
+(@PATH,5,5701.289,812.3008,593.8904,0,0,1,0,100,0), -- 16:14:43
+(@PATH,6,5704.789,808.8008,594.8904,0,0,1,0,100,0), -- 16:14:43
+(@PATH,7,5710.128,803.3888,596.3097,0,0,1,0,100,0), -- 16:14:52
+(@PATH,8,5723.128,792.1388,599.5597,0,0,1,0,100,0), -- 16:14:52
+(@PATH,9,5724.628,790.8888,600.5597,0,0,1,0,100,0), -- 16:14:52
+(@PATH,10,5733.628,782.8888,608.0597,0,0,1,0,100,0), -- 16:14:52
+(@PATH,11,5737.265,778.5158,611.3041,0,0,1,0,100,0), -- 16:14:59
+(@PATH,12,5742.015,772.2658,613.8041,0,0,1,0,100,0), -- 16:14:59
+(@PATH,13,5746.515,766.5158,617.0541,0,0,1,0,100,0), -- 16:14:59
+(@PATH,14,5750.793,762.6057,619.7878,0,0,1,0,100,0), -- 16:15:04
+(@PATH,15,5753.543,760.8557,619.5378,0,0,1,0,100,0), -- 16:15:04
+(@PATH,16,5763.043,755.6057,620.7878,0,0,1,0,100,0), -- 16:15:04
+(@PATH,17,5764.293,755.1057,621.0378,0,0,1,0,100,0), -- 16:15:04
+(@PATH,18,5769.043,752.3557,621.2878,0,0,1,0,100,0), -- 16:15:04
+(@PATH,19,5770.268,751.4404,621.4811,0,0,1,0,100,0), -- 16:15:09
+(@PATH,20,5776.518,745.4404,620.9811,0,0,1,0,100,0), -- 16:15:09
+(@PATH,21,5776.768,744.6904,620.7311,0,0,1,0,100,0), -- 16:15:09
+(@PATH,22,5778.323,743.4258,620.5052,0,0,1,0,100,0), -- 16:15:11
+(@PATH,23,5780.823,741.4258,619.5052,0,0,1,0,100,0), -- 16:15:11
+(@PATH,24,5782.027,740.5856,619.0101,0,0,1,0,100,0), -- 16:15:13
+(@PATH,25,5783.527,742.3356,619.0101,0,0,1,0,100,0), -- 16:15:13
+(@PATH,26,5779.737,745.7886,618.8125,0,0,1,0,100,0), -- 16:15:14
+(@PATH,27,5787.284,745.8883,618.6033,0,0,1,0,100,0), -- 16:15:15
+(@PATH,28,5790.284,743.3883,618.8533,0,0,1,0,100,0), -- 16:15:15
+(@PATH,29,5795.118,739.8246,618.873,0,0,1,0,100,0), -- 16:15:18
+(@PATH,30,5792.629,737.5529,618.8592,0,0,1,0,100,0), -- 16:15:19
+(@PATH,31,5783.301,728.3273,618.8666,0,0,1,0,100,0), -- 16:15:20
+(@PATH,32,5783.337,728.0176,618.8483,0,0,1,0,100,0), -- 16:15:21
+(@PATH,33,5781.837,727.0176,618.8483,0,0,1,0,100,0), -- 16:15:21
+(@PATH,34,5781.337,724.0176,618.8483,0,0,1,0,100,0), -- 16:15:21
+(@PATH,35,5780.837,722.5176,618.8483,0,0,1,0,100,0), -- 16:15:21
+(@PATH,36,5780.337,720.0176,618.8483,0,0,1,0,100,0), -- 16:15:21
+(@PATH,37,5779.337,716.2676,618.8483,0,0,1,0,100,0), -- 16:15:21
+(@PATH,38,5774.164,714.2116,618.8179,0,0,1,0,100,0), -- 16:15:25
+(@PATH,39,5772.414,714.4616,618.8179,0,0,1,0,100,0), -- 16:15:25
+(@PATH,40,5769.005,714.0853,618.8335,0,0,1,0,100,0), -- 16:15:26
+(@PATH,41,5763.755,714.0853,618.5835,0,0,1,0,100,0), -- 16:15:26
+(@PATH,42,5759.819,713.6582,618.7951,0,0,1,0,100,0), -- 16:15:29
+(@PATH,43,5759.069,712.9082,618.7951,0,0,1,0,100,0), -- 16:15:29
+(@PATH,44,5755.638,710.6156,618.8008,0,0,1,0,100,0), -- 16:15:30
+(@PATH,45,5746.335,704.4907,618.808,0,0,1,0,100,0), -- 16:15:31
+(@PATH,46,5750.018,702.1482,618.8112,0,0,1,0,100,0), -- 16:15:32
+(@PATH,47,5758.679,708.1224,618.7933,0,0,1,0,100,0), -- 16:15:35
+(@PATH,48,5760.795,704.0508,618.7969,0,0,1,0,100,0), -- 16:15:36
+(@PATH,49,5761.01,699.34,618.8027,0,0,1,0,100,0), -- 16:15:37
+(@PATH,50,5755.76,692.84,618.8027,0,0,1,0,100,0), -- 16:15:37
+(@PATH,51,5754.76,692.09,618.8027,0,0,1,0,100,0), -- 16:15:37
+(@PATH,52,5753.962,691.2664,618.8077,0,0,1,0,100,0), -- 16:15:40
+(@PATH,53,5748.369,690.7922,618.833,0,0,1,0,100,0), -- 16:15:41
+(@PATH,54,5747.619,690.0422,618.833,0,0,1,0,100,0), -- 16:15:41
+(@PATH,55,5747.197,689.2921,618.8251,0,0,1,0,100,0), -- 16:15:42
+(@PATH,56,5750.266,681.3962,618.9155,0,0,1,0,100,0), -- 16:15:43
+(@PATH,57,5749.266,682.6462,618.9155,0,0,1,0,100,0), -- 16:15:43
+(@PATH,58,5743.016,688.8962,613.9155,0,0,1,0,100,0), -- 16:15:43
+(@PATH,59,5738.654,689.4673,613.6896,0,0,1,0,100,0), -- 16:15:47
+(@PATH,60,5737.154,689.4673,613.6896,0,0,1,0,100,0), -- 16:15:47
+(@PATH,61,5736.978,686.3589,613.4945,0,0,1,0,100,0), -- 16:15:48
+(@PATH,62,5733.56,684.1531,613.4932,0,0,1,0,100,0), -- 16:15:49
+(@PATH,63,5730.135,677.58,613.4932,0,0,1,0,100,0), -- 16:15:51
+(@PATH,64,5726.457,675.5121,613.4932,0,0,1,0,100,0), -- 16:15:52
+(@PATH,65,5724.421,667.7317,613.4932,0,0,1,0,100,0), -- 16:15:53
+(@PATH,66,5727.515,664.7499,613.4932,0,0,1,0,100,0), -- 16:15:54
+(@PATH,67,5734.917,671.2552,613.4932,0,0,1,0,100,0), -- 16:15:57
+(@PATH,68,5749.247,678.9826,613.4949,0,0,1,0,100,0), -- 16:15:59
+(@PATH,69,5751.447,678.4545,613.4927,0,0,1,0,100,0), -- 16:16:02
+(@PATH,70,5751.198,678.1135,613.2466,0,0,1,0,100,0), -- 16:16:05
+(@PATH,71,5746.315,680.7532,613.4939,0,0,1,0,100,0), -- 16:16:07
+(@PATH,72,5743.315,682.0032,613.4939,0,0,1,0,100,0), -- 16:16:07
+(@PATH,73,5743.031,682.0266,613.4927,0,0,1,0,100,0), -- 16:16:08
+(@PATH,74,5742.531,682.2766,613.4927,0,0,1,0,100,0), -- 16:16:08
+(@PATH,75,5734.784,669.1796,613.4932,0,0,1,0,100,0), -- 16:16:12
+(@PATH,76,5724.512,667.5809,613.4932,0,0,1,0,100,0), -- 16:16:14
+(@PATH,77,5722.986,670.8528,613.4932,0,0,1,0,100,0), -- 16:16:15
+(@PATH,78,5728.049,675.2232,613.4932,0,0,1,0,100,0), -- 16:16:16
+(@PATH,79,5729.3,679.3695,613.4932,0,0,1,0,100,0), -- 16:16:18
+(@PATH,80,5733.373,684.2302,613.4932,0,0,1,0,100,0), -- 16:16:19
+(@PATH,81,5737.212,689.38,613.487,0,0,1,0,100,0), -- 16:16:20
+(@PATH,82,5738.462,689.38,613.487,0,0,1,0,100,0), -- 16:16:20
+(@PATH,83,5742.366,689.6543,613.689,0,0,1,0,100,0), -- 16:16:21
+(@PATH,84,5743.116,688.9043,613.939,0,0,1,0,100,0), -- 16:16:21
+(@PATH,85,5749.116,682.6543,618.689,0,0,1,0,100,0), -- 16:16:21
+(@PATH,86,5751.858,684.0981,618.7845,0,0,1,0,100,0), -- 16:16:24
+(@PATH,87,5751.939,684.1434,618.7609,0,0,1,0,100,0), -- 16:16:25
+(@PATH,88,5752.439,685.1434,618.7609,0,0,1,0,100,0), -- 16:16:25
+(@PATH,89,5748.244,690.5693,618.8226,0,0,1,0,100,0), -- 16:16:26
+(@PATH,90,5749.485,692.1129,618.8344,0,0,1,0,100,0), -- 16:16:27
+(@PATH,91,5755.502,692.8773,618.8097,0,0,1,0,100,0), -- 16:16:29
+(@PATH,92,5761.164,699.276,618.8109,0,0,1,0,100,0), -- 16:16:30
+(@PATH,93,5760.932,703.9943,618.8033,0,0,1,0,100,0), -- 16:16:31
+(@PATH,94,5762.46,706.2981,618.8008,0,0,1,0,100,0), -- 16:16:32
+(@PATH,95,5758.46,708.2981,618.8008,0,0,1,0,100,0), -- 16:16:32
+(@PATH,96,5756.85,709.1187,618.791,0,0,1,0,100,0), -- 16:16:34
+(@PATH,97,5750.122,702.084,618.8142,0,0,1,0,100,0), -- 16:16:35
+(@PATH,98,5746.29,704.5815,618.8041,0,0,1,0,100,0), -- 16:16:36
+(@PATH,99,5759.648,713.4418,618.8074,0,0,1,0,100,0), -- 16:16:39
+(@PATH,100,5759.953,713.6576,618.5587,0,0,1,0,100,0), -- 16:16:40
+(@PATH,101,5760.703,714.1576,618.8087,0,0,1,0,100,0), -- 16:16:40
+(@PATH,102,5763.453,714.1576,618.8087,0,0,1,0,100,0), -- 16:16:40
+(@PATH,103,5773.857,714.0711,618.8163,0,0,1,0,100,0), -- 16:16:42
+(@PATH,104,5778.107,714.0711,618.8163,0,0,1,0,100,0), -- 16:16:42
+(@PATH,105,5777.944,714.274,618.8197,0,0,1,0,100,0), -- 16:16:43
+(@PATH,106,5778.444,714.274,618.8197,0,0,1,0,100,0), -- 16:16:43
+(@PATH,107,5778.944,716.274,618.8197,0,0,1,0,100,0), -- 16:16:43
+(@PATH,108,5779.944,720.024,618.8197,0,0,1,0,100,0), -- 16:16:43
+(@PATH,109,5780.444,722.274,618.8197,0,0,1,0,100,0), -- 16:16:43
+(@PATH,110,5780.944,724.024,618.8197,0,0,1,0,100,0), -- 16:16:43
+(@PATH,111,5781.226,724.3087,618.8374,0,0,1,0,100,0), -- 16:16:46
+(@PATH,112,5781.976,727.0587,618.8374,0,0,1,0,100,0), -- 16:16:46
+(@PATH,113,5783.476,728.0587,618.8374,0,0,1,0,100,0), -- 16:16:46
+(@PATH,114,5786.476,730.5587,618.8374,0,0,1,0,100,0), -- 16:16:46
+(@PATH,115,5792.619,737.4194,618.8751,0,0,1,0,100,0), -- 16:16:48
+(@PATH,116,5794.882,739.73,618.8389,0,0,1,0,100,0), -- 16:16:50
+(@PATH,117,5790.382,743.23,618.8389,0,0,1,0,100,0), -- 16:16:50
+(@PATH,118,5787.132,745.98,618.8389,0,0,1,0,100,0), -- 16:16:50
+(@PATH,119,5780.194,747.6804,618.821,0,0,1,0,100,0), -- 16:16:53
+(@PATH,120,5779.756,745.7902,618.8091,0,0,1,0,100,0), -- 16:16:54
+(@PATH,121,5780.814,741.4368,619.417,0,0,1,0,100,0), -- 16:16:56
+(@PATH,122,5779.314,742.9368,620.417,0,0,1,0,100,0), -- 16:16:56
+(@PATH,123,5778.416,743.634,620.3975,0,0,1,0,100,0), -- 16:16:57
+(@PATH,124,5776.916,744.634,620.6475,0,0,1,0,100,0), -- 16:16:57
+(@PATH,125,5764.335,754.9359,620.9836,0,0,1,0,100,0), -- 16:16:59
+(@PATH,126,5763.085,755.6859,620.7336,0,0,1,0,100,0), -- 16:16:59
+(@PATH,127,5753.585,760.9359,619.9836,0,0,1,0,100,0), -- 16:16:59
+(@PATH,128,5750.835,762.4359,619.9836,0,0,1,0,100,0), -- 16:16:59
+(@PATH,129,5746.658,766.3828,617.2808,0,0,1,0,100,0), -- 16:17:04
+(@PATH,130,5742.408,771.8828,614.0308,0,0,1,0,100,0), -- 16:17:04
+(@PATH,131,5737.908,777.6328,612.0308,0,0,1,0,100,0), -- 16:17:04
+(@PATH,132,5723.007,791.8114,599.489,0,0,1,0,100,0), -- 16:17:09
+(@PATH,133,5710.257,803.5614,596.239,0,0,1,0,100,0), -- 16:17:09
+(@PATH,134,5704.813,808.7985,594.8409,0,0,1,0,100,0), -- 16:17:17
+(@PATH,135,5701.313,812.2985,593.8409,0,0,1,0,100,0), -- 16:17:17
+(@PATH,136,5687.563,826.0485,591.3409,0,0,1,0,100,0), -- 16:17:17
+(@PATH,137,5682.813,830.7985,588.5909,0,0,1,0,100,0), -- 16:17:17
+(@PATH,138,5670.488,841.3165,582.2974,0,0,1,0,100,0), -- 16:17:25
+(@PATH,139,5650.221,859.0325,570.9788,0,0,1,0,100,0); -- 16:17:33
+
+-- Pathing for Underbelly Rat Entry: 32428 'TDB FORMAT'
+SET @NPC := 112317;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5932.637,`position_y`=560.9154,`position_z`=609.7726 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,5932.637,560.9154,609.7726,0,0,1,0,100,0), -- 17:52:18
+(@PATH,2,5929.887,559.4154,610.0226,0,0,1,0,100,0), -- 17:52:18
+(@PATH,3,5924.16,562.6399,610.0771,0,0,1,0,100,0), -- 17:52:19
+(@PATH,4,5923.41,563.6399,610.0771,0,0,1,0,100,0), -- 17:52:19
+(@PATH,5,5922.568,564.0256,610.0319,0,0,1,0,100,0), -- 17:52:21
+(@PATH,6,5920.568,563.7756,610.2819,0,0,1,0,100,0), -- 17:52:21
+(@PATH,7,5919.818,563.5256,610.2819,0,0,1,0,100,0), -- 17:52:21
+(@PATH,8,5919.068,562.0256,610.0319,0,0,1,0,100,0), -- 17:52:21
+(@PATH,9,5917.318,559.2756,610.0319,0,0,1,0,100,0), -- 17:52:21
+(@PATH,10,5912.753,557.5631,610.0347,0,0,1,0,100,0), -- 17:52:23
+(@PATH,11,5916.578,562.7064,609.9109,0,0,1,0,100,0), -- 17:52:24
+(@PATH,12,5917.078,563.7064,610.1609,0,0,1,0,100,0), -- 17:52:24
+(@PATH,13,5918.578,565.4564,610.1609,0,0,1,0,100,0), -- 17:52:24
+(@PATH,14,5918.574,565.3858,610.2579,0,0,1,0,100,0), -- 17:52:26
+(@PATH,15,5919.574,566.8858,610.2579,0,0,1,0,100,0), -- 17:52:26
+(@PATH,16,5915.942,569.4524,611.0398,0,0,1,0,100,0), -- 17:52:27
+(@PATH,17,5914.692,570.4524,611.0398,0,0,1,0,100,0), -- 17:52:27
+(@PATH,18,5913.692,571.9524,611.0398,0,0,1,0,100,0), -- 17:52:27
+(@PATH,19,5911.692,574.7024,611.7898,0,0,1,0,100,0), -- 17:52:27
+(@PATH,20,5910.942,575.7024,611.7898,0,0,1,0,100,0), -- 17:52:27
+(@PATH,21,5909.692,577.4524,611.7898,0,0,1,0,100,0), -- 17:52:27
+(@PATH,22,5908.942,578.7024,611.7898,0,0,1,0,100,0), -- 17:52:27
+(@PATH,23,5909.448,577.5765,611.9888,0,0,1,0,100,0), -- 17:52:29
+(@PATH,24,5908.698,578.8265,611.9888,0,0,1,0,100,0), -- 17:52:29
+(@PATH,25,5906.948,580.8265,612.4888,0,0,1,0,100,0), -- 17:52:29
+(@PATH,26,5898.948,586.3265,612.9888,0,0,1,0,100,0), -- 17:52:29
+(@PATH,27,5897.698,587.3265,613.2388,0,0,1,0,100,0), -- 17:52:29
+(@PATH,28,5888.133,593.8323,614.5677,0,0,1,0,100,0), -- 17:52:34
+(@PATH,29,5868.403,608.2256,616.2552,0,0,1,0,100,0), -- 17:52:39
+(@PATH,30,5867.403,608.9756,616.0052,0,0,1,0,100,0), -- 17:52:39
+(@PATH,31,5863.653,611.2256,617.2552,0,0,1,0,100,0), -- 17:52:39
+(@PATH,32,5867.005,608.8441,616.1553,0,0,1,0,100,0), -- 17:52:40
+(@PATH,33,5863.755,611.0941,617.1553,0,0,1,0,100,0), -- 17:52:40
+(@PATH,34,5863.005,611.5941,617.1553,0,0,1,0,100,0), -- 17:52:40
+(@PATH,35,5862.755,610.0941,617.4053,0,0,1,0,100,0), -- 17:52:40
+(@PATH,36,5862.716,609.9548,617.6683,0,0,1,0,100,0), -- 17:52:42
+(@PATH,37,5862.466,607.4548,617.9183,0,0,1,0,100,0), -- 17:52:42
+(@PATH,38,5861.716,605.4548,618.4183,0,0,1,0,100,0), -- 17:52:42
+(@PATH,39,5859.642,601.2751,619.6371,0,0,1,0,100,0), -- 17:52:43
+(@PATH,40,5859.803,596.2305,620.6752,0,0,1,0,100,0), -- 17:52:44
+(@PATH,41,5854.399,592.0137,622.5385,0,0,1,0,100,0), -- 17:52:45
+(@PATH,42,5853.606,591.7081,622.5364,0,0,1,0,100,0), -- 17:52:47
+(@PATH,43,5852.856,590.7081,622.7864,0,0,1,0,100,0), -- 17:52:47
+(@PATH,44,5852.356,590.2081,623.0364,0,0,1,0,100,0), -- 17:52:47
+(@PATH,45,5851.106,589.4581,623.2864,0,0,1,0,100,0), -- 17:52:47
+(@PATH,46,5848.088,586.9359,623.8063,0,0,1,0,100,0), -- 17:52:48
+(@PATH,47,5846.588,585.1859,624.0563,0,0,1,0,100,0), -- 17:52:48
+(@PATH,48,5838.51,583.7482,624.8914,0,0,1,0,100,0), -- 17:52:50
+(@PATH,49,5837.691,585.6058,625.1302,0,0,1,0,100,0), -- 17:52:52
+(@PATH,50,5837.691,586.8558,625.1302,0,0,1,0,100,0), -- 17:52:52
+(@PATH,51,5837.441,588.3558,624.8802,0,0,1,0,100,0), -- 17:52:52
+(@PATH,52,5836.941,589.3558,624.8802,0,0,1,0,100,0), -- 17:52:52
+(@PATH,53,5835.691,591.3558,624.6302,0,0,1,0,100,0), -- 17:52:52
+(@PATH,54,5834.941,592.1058,624.6302,0,0,1,0,100,0), -- 17:52:52
+(@PATH,55,5835.415,591.4377,624.7817,0,0,1,0,100,0), -- 17:52:53
+(@PATH,56,5834.665,592.1877,624.7817,0,0,1,0,100,0), -- 17:52:53
+(@PATH,57,5834.415,592.6877,624.7817,0,0,1,0,100,0), -- 17:52:53
+(@PATH,58,5831.665,592.9377,625.0317,0,0,1,0,100,0), -- 17:52:53
+(@PATH,59,5829.415,592.9377,625.0317,0,0,1,0,100,0), -- 17:52:53
+(@PATH,60,5831.489,593.141,624.9569,0,0,1,0,100,0), -- 17:52:54
+(@PATH,61,5828.989,593.141,624.9569,0,0,1,0,100,0), -- 17:52:54
+(@PATH,62,5827.989,593.391,624.9569,0,0,1,0,100,0), -- 17:52:54
+(@PATH,63,5826.489,594.891,624.7069,0,0,1,0,100,0), -- 17:52:54
+(@PATH,64,5824.989,596.141,624.7069,0,0,1,0,100,0), -- 17:52:54
+(@PATH,65,5823.989,597.141,624.7069,0,0,1,0,100,0), -- 17:52:54
+(@PATH,66,5823.284,602.2316,624.696,0,0,1,0,100,0), -- 17:52:56
+(@PATH,67,5824.034,603.4816,624.446,0,0,1,0,100,0), -- 17:52:56
+(@PATH,68,5825.496,604.9807,624.1569,0,0,1,0,100,0), -- 17:52:58
+(@PATH,69,5832.577,609.1123,622.6941,0,0,1,0,100,0), -- 17:52:59
+(@PATH,70,5832.577,610.3623,622.4441,0,0,1,0,100,0), -- 17:52:59
+(@PATH,71,5832.645,613.0908,621.8396,0,0,1,0,100,0), -- 17:53:00
+(@PATH,72,5833.895,614.5908,621.3396,0,0,1,0,100,0), -- 17:53:00
+(@PATH,73,5834.645,616.0908,620.5896,0,0,1,0,100,0), -- 17:53:00
+(@PATH,74,5835.895,618.0908,620.5896,0,0,1,0,100,0), -- 17:53:00
+(@PATH,75,5836.239,617.9567,620.214,0,0,1,0,100,0), -- 17:53:01
+(@PATH,76,5837.489,620.2067,619.964,0,0,1,0,100,0), -- 17:53:01
+(@PATH,77,5839.739,620.2067,619.464,0,0,1,0,100,0), -- 17:53:01
+(@PATH,78,5841.018,620.4529,619.0253,0,0,1,0,100,0), -- 17:53:03
+(@PATH,79,5842.768,621.4529,618.5253,0,0,1,0,100,0), -- 17:53:03
+(@PATH,80,5847.018,623.7029,617.7753,0,0,1,0,100,0), -- 17:53:03
+(@PATH,81,5850.018,625.4529,617.2753,0,0,1,0,100,0), -- 17:53:03
+(@PATH,82,5853.018,627.2029,616.7753,0,0,1,0,100,0), -- 17:53:03
+(@PATH,83,5855.821,630.0739,616.2969,0,0,1,0,100,0), -- 17:53:06
+(@PATH,84,5856.571,630.8239,616.2969,0,0,1,0,100,0), -- 17:53:06
+(@PATH,85,5857.947,632.9325,616.1628,0,0,1,0,100,0), -- 17:53:07
+(@PATH,86,5862.197,634.6825,615.9128,0,0,1,0,100,0), -- 17:53:07
+(@PATH,87,5863.447,635.9325,615.9128,0,0,1,0,100,0), -- 17:53:07
+(@PATH,88,5865.894,644.5748,615.8455,0,0,1,0,100,0), -- 17:53:10
+(@PATH,89,5865.894,645.5748,615.3455,0,0,1,0,100,0), -- 17:53:10
+(@PATH,90,5865.829,645.791,615.4341,0,0,1,0,100,0), -- 17:53:11
+(@PATH,91,5865.829,646.041,615.4341,0,0,1,0,100,0), -- 17:53:11
+(@PATH,92,5862.829,647.541,615.4341,0,0,1,0,100,0), -- 17:53:11
+(@PATH,93,5861.579,648.041,615.1841,0,0,1,0,100,0), -- 17:53:11
+(@PATH,94,5859.079,644.791,615.1841,0,0,1,0,100,0), -- 17:53:11
+(@PATH,95,5857.829,643.541,614.9341,0,0,1,0,100,0), -- 17:53:11
+(@PATH,96,5856.982,643.02,614.5778,0,0,1,0,100,0), -- 17:53:13
+(@PATH,97,5855.482,644.27,614.0778,0,0,1,0,100,0), -- 17:53:13
+(@PATH,98,5853.982,645.27,614.3278,0,0,1,0,100,0), -- 17:53:13
+(@PATH,99,5848.046,652.5363,610.8051,0,0,1,0,100,0), -- 17:53:15
+(@PATH,100,5847.546,653.0363,610.8051,0,0,1,0,100,0), -- 17:53:15
+(@PATH,101,5843.546,659.2863,609.5551,0,0,1,0,100,0), -- 17:53:15
+(@PATH,102,5842.796,660.2863,610.3051,0,0,1,0,100,0), -- 17:53:15
+(@PATH,103,5842.046,661.2863,610.3051,0,0,1,0,100,0), -- 17:53:15
+(@PATH,104,5842.085,661.6648,609.9584,0,0,1,0,100,0), -- 17:53:18
+(@PATH,105,5840.085,664.4148,609.9584,0,0,1,0,100,0), -- 17:53:18
+(@PATH,106,5843.085,670.6648,609.9584,0,0,1,0,100,0), -- 17:53:18
+(@PATH,107,5842.802,678.5958,610.1359,0,0,1,0,100,0), -- 17:53:21
+(@PATH,108,5839.953,683.5137,610.1359,0,0,1,0,100,0), -- 17:53:22
+(@PATH,109,5834.206,685.7982,610.136,0,0,1,0,100,0), -- 17:53:24
+(@PATH,110,5828.92,685.1238,610.1359,0,0,1,0,100,0), -- 17:53:26
+(@PATH,111,5826.984,682.3601,610.1359,0,0,1,0,100,0), -- 17:53:27
+(@PATH,112,5818.48,668.6338,610.1359,0,0,1,0,100,0), -- 17:53:28
+(@PATH,113,5816.1,665.4202,610.1359,0,0,1,0,100,0), -- 17:53:31
+(@PATH,114,5815.1,664.1702,609.6359,0,0,1,0,100,0), -- 17:53:31
+(@PATH,115,5810.1,657.9202,609.6359,0,0,1,0,100,0), -- 17:53:31
+(@PATH,116,5808.85,656.9202,610.1359,0,0,1,0,100,0), -- 17:53:31
+(@PATH,117,5806.85,653.9202,610.1359,0,0,1,0,100,0), -- 17:53:31
+(@PATH,118,5793.123,634.9679,610.1359,0,0,1,0,100,0), -- 17:53:37
+(@PATH,119,5790.14,631.1789,610.1359,0,0,1,0,100,0), -- 17:53:39
+(@PATH,120,5788.89,630.1789,609.6359,0,0,1,0,100,0), -- 17:53:39
+(@PATH,121,5787.39,628.9289,609.6359,0,0,1,0,100,0), -- 17:53:39
+(@PATH,122,5785.64,627.4289,609.6359,0,0,1,0,100,0), -- 17:53:39
+(@PATH,123,5782.89,625.1789,609.6359,0,0,1,0,100,0), -- 17:53:39
+(@PATH,124,5781.64,624.1789,610.1359,0,0,1,0,100,0), -- 17:53:39
+(@PATH,125,5779.79,623.2709,610.2906,0,0,1,0,100,0), -- 17:53:43
+(@PATH,126,5773.29,624.0209,610.2906,0,0,1,0,100,0), -- 17:53:43
+(@PATH,127,5771.79,624.7709,609.5406,0,0,1,0,100,0), -- 17:53:43
+(@PATH,128,5765.886,625.5369,612.6761,0,0,1,0,100,0), -- 17:53:45
+(@PATH,129,5764.136,626.5369,613.6761,0,0,1,0,100,0), -- 17:53:45
+(@PATH,130,5762.886,626.7869,614.1761,0,0,1,0,100,0), -- 17:53:45
+(@PATH,131,5761.386,627.7869,614.9261,0,0,1,0,100,0), -- 17:53:45
+(@PATH,132,5757.345,630.0953,616.8363,0,0,1,0,100,0), -- 17:53:48
+(@PATH,133,5752.345,634.3453,617.8363,0,0,1,0,100,0), -- 17:53:48
+(@PATH,134,5751.345,635.0953,617.3363,0,0,1,0,100,0), -- 17:53:48
+(@PATH,135,5748.116,637.8995,618.5641,0,0,1,0,100,0), -- 17:53:50
+(@PATH,136,5747.366,636.3995,618.8141,0,0,1,0,100,0), -- 17:53:50
+(@PATH,137,5746.008,632.8196,618.8812,0,0,1,0,100,0), -- 17:53:51
+(@PATH,138,5744.508,625.0696,618.8812,0,0,1,0,100,0), -- 17:53:51
+(@PATH,139,5744.258,623.3196,619.1312,0,0,1,0,100,0), -- 17:53:51
+(@PATH,140,5743.789,622.6664,619.2971,0,0,1,0,100,0), -- 17:53:54
+(@PATH,141,5742.789,621.6664,619.2971,0,0,1,0,100,0), -- 17:53:54
+(@PATH,142,5741.789,620.1664,619.2971,0,0,1,0,100,0), -- 17:53:54
+(@PATH,143,5739.586,617.3193,619.2029,0,0,1,0,100,0), -- 17:53:55
+(@PATH,144,5723.11,606.8483,618.9691,0,0,1,0,100,0), -- 17:53:59
+(@PATH,145,5722.5,607.3009,619.1648,0,0,1,0,100,0), -- 17:54:00
+(@PATH,146,5723.25,609.0509,619.1648,0,0,1,0,100,0), -- 17:54:00
+(@PATH,147,5725.919,612.6741,619.2623,0,0,1,0,100,0), -- 17:54:01
+(@PATH,148,5727.169,613.6741,619.2623,0,0,1,0,100,0), -- 17:54:01
+(@PATH,149,5727.833,613.9911,619.2798,0,0,1,0,100,0), -- 17:54:02
+(@PATH,150,5730.833,618.4911,619.2798,0,0,1,0,100,0), -- 17:54:02
+(@PATH,151,5732.083,620.7411,619.2798,0,0,1,0,100,0), -- 17:54:02
+(@PATH,152,5736.408,628.3324,619.2798,0,0,1,0,100,0), -- 17:54:05
+(@PATH,153,5738.975,629.0027,619.2798,0,0,1,0,100,0), -- 17:54:06
+(@PATH,154,5742.99,635.6492,619.2798,0,0,1,0,100,0), -- 17:54:07
+(@PATH,155,5743.467,641.7768,619.2798,0,0,1,0,100,0), -- 17:54:09
+(@PATH,156,5747.225,647.0936,619.0926,0,0,1,0,100,0), -- 17:54:10
+(@PATH,157,5748.225,647.5936,619.0926,0,0,1,0,100,0), -- 17:54:10
+(@PATH,158,5749.297,648.2242,618.9799,0,0,1,0,100,0), -- 17:54:11
+(@PATH,159,5749.047,649.2242,619.2299,0,0,1,0,100,0), -- 17:54:11
+(@PATH,160,5749.047,650.7242,619.2299,0,0,1,0,100,0), -- 17:54:11
+(@PATH,161,5749.047,654.2242,619.4799,0,0,1,0,100,0), -- 17:54:11
+(@PATH,162,5748.797,655.7242,619.4799,0,0,1,0,100,0), -- 17:54:11
+(@PATH,163,5749.192,655.6202,619.7116,0,0,1,0,100,0), -- 17:54:12
+(@PATH,164,5749.192,656.1202,619.7116,0,0,1,0,100,0), -- 17:54:12
+(@PATH,165,5750.442,657.8702,619.7116,0,0,1,0,100,0), -- 17:54:12
+(@PATH,166,5750.391,657.9781,619.7876,0,0,1,0,100,0), -- 17:54:13
+(@PATH,167,5751.891,659.9781,619.5376,0,0,1,0,100,0), -- 17:54:13
+(@PATH,168,5753.641,659.4781,619.5376,0,0,1,0,100,0), -- 17:54:13
+(@PATH,169,5759.179,661.2788,619.2548,0,0,1,0,100,0), -- 17:54:15
+(@PATH,170,5760.229,663.2921,619.3005,0,0,1,0,100,0), -- 17:54:16
+(@PATH,171,5760.479,666.2921,619.3005,0,0,1,0,100,0), -- 17:54:16
+(@PATH,172,5762.869,669.2735,619.6941,0,0,1,0,100,0), -- 17:54:17
+(@PATH,173,5764.619,671.0235,619.6941,0,0,1,0,100,0), -- 17:54:17
+(@PATH,174,5766.816,671.4822,619.3464,0,0,1,0,100,0), -- 17:54:18
+(@PATH,175,5771.566,670.7322,619.3464,0,0,1,0,100,0), -- 17:54:18
+(@PATH,176,5773.478,671.9761,619.1648,0,0,1,0,100,0), -- 17:54:19
+(@PATH,177,5772.978,676.9761,619.1648,0,0,1,0,100,0), -- 17:54:19
+(@PATH,178,5773.809,679.17,619.6726,0,0,1,0,100,0), -- 17:54:21
+(@PATH,179,5775.309,680.92,619.6726,0,0,1,0,100,0), -- 17:54:21
+(@PATH,180,5776.809,682.67,619.6726,0,0,1,0,100,0), -- 17:54:21
+(@PATH,181,5775.323,680.9807,619.6566,0,0,1,0,100,0), -- 17:54:22
+(@PATH,182,5776.823,682.7307,619.6566,0,0,1,0,100,0), -- 17:54:22
+(@PATH,183,5777.323,683.2307,619.4066,0,0,1,0,100,0), -- 17:54:22
+(@PATH,184,5780.438,683.3417,619.2777,0,0,1,0,100,0), -- 17:54:23
+(@PATH,185,5782.188,683.5917,619.2777,0,0,1,0,100,0), -- 17:54:23
+(@PATH,186,5783.188,683.5917,619.2777,0,0,1,0,100,0), -- 17:54:23
+(@PATH,187,5783.938,684.3417,619.2777,0,0,1,0,100,0), -- 17:54:23
+(@PATH,188,5783.903,684.5225,619.173,0,0,1,0,100,0), -- 17:54:24
+(@PATH,189,5784.653,685.2725,619.173,0,0,1,0,100,0), -- 17:54:24
+(@PATH,190,5784.403,686.5225,619.173,0,0,1,0,100,0), -- 17:54:24
+(@PATH,191,5783.903,690.0225,619.173,0,0,1,0,100,0), -- 17:54:24
+(@PATH,192,5783.28,683.6895,619.2,0,0,1,0,100,0), -- 17:54:26
+(@PATH,193,5783.134,683.567,619.218,0,0,1,0,100,0), -- 17:54:27
+(@PATH,194,5780.634,683.317,619.468,0,0,1,0,100,0), -- 17:54:27
+(@PATH,195,5778.134,683.567,619.468,0,0,1,0,100,0), -- 17:54:27
+(@PATH,196,5777.437,683.3219,619.3995,0,0,1,0,100,0), -- 17:54:28
+(@PATH,197,5775.437,680.8219,619.6495,0,0,1,0,100,0), -- 17:54:28
+(@PATH,198,5773.687,679.3219,619.6495,0,0,1,0,100,0), -- 17:54:28
+(@PATH,199,5772.959,678.2682,619.4105,0,0,1,0,100,0), -- 17:54:29
+(@PATH,200,5773.209,677.0182,619.1605,0,0,1,0,100,0), -- 17:54:29
+(@PATH,201,5773.709,673.0182,619.1605,0,0,1,0,100,0), -- 17:54:29
+(@PATH,202,5773.394,673.0062,619.2454,0,0,1,0,100,0), -- 17:54:31
+(@PATH,203,5773.644,672.0062,619.2454,0,0,1,0,100,0), -- 17:54:31
+(@PATH,204,5772.396,670.793,619.3744,0,0,1,0,100,0), -- 17:54:32
+(@PATH,205,5766.896,671.793,619.3744,0,0,1,0,100,0), -- 17:54:32
+(@PATH,206,5762.968,669.4083,619.7806,0,0,1,0,100,0), -- 17:54:33
+(@PATH,207,5760.729,666.238,619.5159,0,0,1,0,100,0), -- 17:54:34
+(@PATH,208,5760.479,663.488,619.2659,0,0,1,0,100,0), -- 17:54:34
+(@PATH,209,5759.131,661.6943,619.3143,0,0,1,0,100,0), -- 17:54:36
+(@PATH,210,5756.631,659.4443,619.3143,0,0,1,0,100,0), -- 17:54:36
+(@PATH,211,5753.881,659.9443,619.3143,0,0,1,0,100,0), -- 17:54:36
+(@PATH,212,5751.954,659.9012,619.4919,0,0,1,0,100,0), -- 17:54:37
+(@PATH,213,5750.454,658.1512,619.7419,0,0,1,0,100,0), -- 17:54:37
+(@PATH,214,5749.239,656.0627,619.7203,0,0,1,0,100,0), -- 17:54:38
+(@PATH,215,5749.239,654.0627,619.4703,0,0,1,0,100,0), -- 17:54:38
+(@PATH,216,5749.239,650.8127,619.2203,0,0,1,0,100,0), -- 17:54:38
+(@PATH,217,5749.489,649.3127,619.2203,0,0,1,0,100,0), -- 17:54:38
+(@PATH,218,5748.988,650.8058,619.2463,0,0,1,0,100,0), -- 17:54:39
+(@PATH,219,5749.238,649.3058,619.2463,0,0,1,0,100,0), -- 17:54:39
+(@PATH,220,5749.238,648.3058,618.9963,0,0,1,0,100,0), -- 17:54:39
+(@PATH,221,5747.238,647.3058,619.2463,0,0,1,0,100,0), -- 17:54:39
+(@PATH,222,5747.21,647.066,619.3192,0,0,1,0,100,0), -- 17:54:40
+(@PATH,223,5744.96,646.066,619.3192,0,0,1,0,100,0), -- 17:54:40
+(@PATH,224,5743.46,642.066,619.3192,0,0,1,0,100,0), -- 17:54:40
+(@PATH,225,5742.853,635.8711,619.2798,0,0,1,0,100,0), -- 17:54:43
+(@PATH,226,5767.506,624.4731,611.6431,0,0,1,0,100,0), -- 17:55:06
+(@PATH,227,5771.256,625.4731,610.1431,0,0,1,0,100,0), -- 17:55:06
+(@PATH,228,5772.006,625.2231,609.6431,0,0,1,0,100,0), -- 17:55:06
+(@PATH,229,5772.506,624.9731,609.6431,0,0,1,0,100,0), -- 17:55:06
+(@PATH,230,5775.756,624.4731,610.3931,0,0,1,0,100,0), -- 17:55:06
+(@PATH,231,5781.39,624.2626,610.0007,0,0,1,0,100,0), -- 17:55:08
+(@PATH,232,5782.64,625.2626,609.5007,0,0,1,0,100,0), -- 17:55:08
+(@PATH,233,5785.39,627.7626,609.5007,0,0,1,0,100,0), -- 17:55:08
+(@PATH,234,5787.14,628.7626,609.5007,0,0,1,0,100,0), -- 17:55:08
+(@PATH,235,5788.89,630.2626,609.5007,0,0,1,0,100,0), -- 17:55:08
+(@PATH,236,5790.14,631.2626,610.0007,0,0,1,0,100,0), -- 17:55:08
+(@PATH,237,5789.247,630.4788,609.5232,0,0,1,0,100,0), -- 17:55:11
+(@PATH,238,5790.497,631.4788,610.0232,0,0,1,0,100,0), -- 17:55:11
+(@PATH,239,5791.497,632.2288,610.0232,0,0,1,0,100,0), -- 17:55:11
+(@PATH,240,5792.497,634.2288,610.0232,0,0,1,0,100,0), -- 17:55:11
+(@PATH,241,5808.938,656.4456,610.1359,0,0,1,0,100,0), -- 17:55:15
+(@PATH,242,5809.938,657.6956,609.6359,0,0,1,0,100,0), -- 17:55:15
+(@PATH,243,5815.188,664.1956,609.6359,0,0,1,0,100,0), -- 17:55:15
+(@PATH,244,5816.188,665.4456,610.1359,0,0,1,0,100,0), -- 17:55:15
+(@PATH,245,5818.914,671.4957,610.0309,0,0,1,0,100,0), -- 17:55:21
+(@PATH,246,5820.774,678.6002,610.1359,0,0,1,0,100,0), -- 17:55:22
+(@PATH,247,5833.884,685.7383,610.1359,0,0,1,0,100,0), -- 17:55:25
+(@PATH,248,5839.521,683.5572,610.1359,0,0,1,0,100,0), -- 17:55:27
+(@PATH,249,5842.875,678.5269,610.1359,0,0,1,0,100,0), -- 17:55:28
+(@PATH,250,5842.727,670.9156,610.1359,0,0,1,0,100,0), -- 17:55:30
+(@PATH,251,5842.025,661.4012,610.2211,0,0,1,0,100,0), -- 17:55:32
+(@PATH,252,5842.775,660.4012,610.2211,0,0,1,0,100,0), -- 17:55:32
+(@PATH,253,5843.525,659.1512,609.4711,0,0,1,0,100,0), -- 17:55:32
+(@PATH,254,5847.025,653.9012,610.2211,0,0,1,0,100,0), -- 17:55:32
+(@PATH,255,5847.525,653.1512,610.7211,0,0,1,0,100,0), -- 17:55:32
+(@PATH,256,5848.025,652.6512,610.7211,0,0,1,0,100,0), -- 17:55:32
+(@PATH,257,5854.674,644.4988,613.7783,0,0,1,0,100,0), -- 17:55:37
+(@PATH,258,5858.877,645.0601,615.1895,0,0,1,0,100,0), -- 17:55:38
+(@PATH,259,5862.704,647.3643,615.3469,0,0,1,0,100,0), -- 17:55:39
+(@PATH,260,5866.175,643.2976,615.8401,0,0,1,0,100,0), -- 17:55:41
+(@PATH,261,5863.666,636.2874,615.6055,0,0,1,0,100,0), -- 17:55:42
+(@PATH,262,5858.989,633.2343,615.9945,0,0,1,0,100,0), -- 17:55:43
+(@PATH,263,5856.424,631.0151,616.6328,0,0,1,0,100,0), -- 17:55:44
+(@PATH,264,5855.924,630.0151,616.6328,0,0,1,0,100,0), -- 17:55:44
+(@PATH,265,5854.174,628.0151,616.8828,0,0,1,0,100,0), -- 17:55:44
+(@PATH,266,5852.924,627.2651,616.6328,0,0,1,0,100,0), -- 17:55:44
+(@PATH,267,5850.174,625.7651,617.1328,0,0,1,0,100,0), -- 17:55:44
+(@PATH,268,5847.174,624.0151,617.3828,0,0,1,0,100,0), -- 17:55:44
+(@PATH,269,5842.674,621.2651,618.3828,0,0,1,0,100,0), -- 17:55:44
+(@PATH,270,5839.754,620.274,619.3906,0,0,1,0,100,0), -- 17:55:48
+(@PATH,271,5837.754,620.024,619.6406,0,0,1,0,100,0), -- 17:55:48
+(@PATH,272,5836.254,618.024,620.1406,0,0,1,0,100,0), -- 17:55:48
+(@PATH,273,5834.754,616.274,620.3906,0,0,1,0,100,0), -- 17:55:48
+(@PATH,274,5833.754,614.774,621.3906,0,0,1,0,100,0), -- 17:55:48
+(@PATH,275,5832.755,613.1848,621.7224,0,0,1,0,100,0), -- 17:55:51
+(@PATH,276,5832.755,610.4348,622.2224,0,0,1,0,100,0), -- 17:55:51
+(@PATH,277,5831.282,608.2042,622.824,0,0,1,0,100,0), -- 17:55:52
+(@PATH,278,5829.532,606.7042,623.324,0,0,1,0,100,0), -- 17:55:52
+(@PATH,279,5824.087,603.5916,624.4519,0,0,1,0,100,0), -- 17:55:53
+(@PATH,280,5822.902,598.7023,625.1343,0,0,1,0,100,0), -- 17:55:55
+(@PATH,281,5823.652,597.7023,624.8843,0,0,1,0,100,0), -- 17:55:55
+(@PATH,282,5825.152,596.2023,624.6343,0,0,1,0,100,0), -- 17:55:55
+(@PATH,283,5826.152,594.7023,624.6343,0,0,1,0,100,0), -- 17:55:55
+(@PATH,284,5827.402,593.7023,624.6343,0,0,1,0,100,0), -- 17:55:55
+(@PATH,285,5825.07,596.038,624.6668,0,0,1,0,100,0), -- 17:55:56
+(@PATH,286,5826.57,594.788,624.6668,0,0,1,0,100,0), -- 17:55:56
+(@PATH,287,5827.82,593.538,624.6668,0,0,1,0,100,0), -- 17:55:56
+(@PATH,288,5827.82,593.288,624.9168,0,0,1,0,100,0), -- 17:55:56
+(@PATH,289,5829.07,593.288,624.9168,0,0,1,0,100,0), -- 17:55:56
+(@PATH,290,5830.82,593.038,624.9168,0,0,1,0,100,0), -- 17:55:56
+(@PATH,291,5829.417,592.9346,625.0922,0,0,1,0,100,0), -- 17:55:57
+(@PATH,292,5830.917,592.9346,624.8422,0,0,1,0,100,0), -- 17:55:57
+(@PATH,293,5834.417,592.6846,624.5922,0,0,1,0,100,0), -- 17:55:57
+(@PATH,294,5835.417,591.4346,624.8422,0,0,1,0,100,0), -- 17:55:57
+(@PATH,295,5836.917,589.6846,624.8422,0,0,1,0,100,0), -- 17:55:57
+(@PATH,296,5836.748,589.3402,624.8186,0,0,1,0,100,0), -- 17:55:58
+(@PATH,297,5837.498,588.5902,624.8186,0,0,1,0,100,0), -- 17:55:58
+(@PATH,298,5837.498,586.8402,625.0686,0,0,1,0,100,0), -- 17:55:58
+(@PATH,299,5837.748,585.8402,625.0686,0,0,1,0,100,0), -- 17:55:58
+(@PATH,300,5837.972,586.4098,624.9656,0,0,1,0,100,0), -- 17:55:59
+(@PATH,301,5837.972,585.4098,625.2156,0,0,1,0,100,0), -- 17:55:59
+(@PATH,302,5837.972,584.6598,625.2156,0,0,1,0,100,0), -- 17:55:59
+(@PATH,303,5847.725,586.5244,623.9159,0,0,1,0,100,0), -- 17:56:01
+(@PATH,304,5848.381,586.9231,623.4995,0,0,1,0,100,0), -- 17:56:03
+(@PATH,305,5850.881,589.1731,623.4995,0,0,1,0,100,0), -- 17:56:03
+(@PATH,306,5853.684,591.8207,622.5383,0,0,1,0,100,0), -- 17:56:04
+(@PATH,307,5859.724,595.9813,620.9481,0,0,1,0,100,0), -- 17:56:06
+(@PATH,308,5859.907,600.2466,619.8765,0,0,1,0,100,0), -- 17:56:07
+(@PATH,309,5859.657,600.9966,619.8765,0,0,1,0,100,0), -- 17:56:07
+(@PATH,310,5861.254,603.9108,618.8354,0,0,1,0,100,0), -- 17:56:08
+(@PATH,311,5861.504,605.1608,618.5854,0,0,1,0,100,0), -- 17:56:08
+(@PATH,312,5862.816,610.0886,617.6057,0,0,1,0,100,0), -- 17:56:09
+(@PATH,313,5862.816,611.5886,617.1057,0,0,1,0,100,0), -- 17:56:09
+(@PATH,314,5863.816,611.0886,617.1057,0,0,1,0,100,0), -- 17:56:09
+(@PATH,315,5866.566,609.3386,616.1057,0,0,1,0,100,0), -- 17:56:09
+(@PATH,316,5868.066,608.3386,616.6057,0,0,1,0,100,0), -- 17:56:09
+(@PATH,317,5871.561,606.3478,616.0399,0,0,1,0,100,0), -- 17:56:12
+(@PATH,318,5887.811,594.0978,614.7899,0,0,1,0,100,0), -- 17:56:12
+(@PATH,319,5897.243,587.3519,613.1742,0,0,1,0,100,0), -- 17:56:17
+(@PATH,320,5898.243,586.8519,613.1742,0,0,1,0,100,0), -- 17:56:17
+(@PATH,321,5909.608,577.4766,611.9065,0,0,1,0,100,0), -- 17:56:20
+(@PATH,322,5910.358,576.4766,611.9065,0,0,1,0,100,0), -- 17:56:20
+(@PATH,323,5911.358,575.2266,611.9065,0,0,1,0,100,0), -- 17:56:20
+(@PATH,324,5913.358,572.4766,611.4065,0,0,1,0,100,0), -- 17:56:20
+(@PATH,325,5914.358,570.9766,611.1565,0,0,1,0,100,0), -- 17:56:20
+(@PATH,326,5914.869,570.5132,611.2545,0,0,1,0,100,0), -- 17:56:23
+(@PATH,327,5916.025,569.2449,611.0331,0,0,1,0,100,0), -- 17:56:24
+(@PATH,328,5917.275,567.9949,611.0331,0,0,1,0,100,0), -- 17:56:24
+(@PATH,329,5918.775,566.9949,610.7831,0,0,1,0,100,0), -- 17:56:24
+(@PATH,330,5919.525,566.7449,610.2831,0,0,1,0,100,0), -- 17:56:24
+(@PATH,331,5918.525,565.7449,610.2831,0,0,1,0,100,0), -- 17:56:24
+(@PATH,332,5917.025,563.9949,610.2831,0,0,1,0,100,0), -- 17:56:24
+(@PATH,333,5916.275,562.7449,610.2831,0,0,1,0,100,0), -- 17:56:24
+(@PATH,334,5912.947,557.8387,609.8282,0,0,1,0,100,0), -- 17:56:26
+(@PATH,335,5912.697,557.5887,609.8282,0,0,1,0,100,0), -- 17:56:26
+(@PATH,336,5915.036,555.4799,609.9234,0,0,1,0,100,0), -- 17:56:28
+(@PATH,337,5917.036,559.4799,609.9234,0,0,1,0,100,0), -- 17:56:28
+(@PATH,338,5918.786,561.9799,609.9234,0,0,1,0,100,0), -- 17:56:28
+(@PATH,339,5919.535,563.3184,610.3263,0,0,1,0,100,0), -- 17:56:29
+(@PATH,340,5920.785,563.5684,610.3263,0,0,1,0,100,0), -- 17:56:29
+(@PATH,341,5922.832,564.0054,610.0492,0,0,1,0,100,0), -- 17:56:30
+(@PATH,342,5924.082,562.7554,610.0492,0,0,1,0,100,0), -- 17:56:30
+(@PATH,343,5929.893,559.5189,610.0414,0,0,1,0,100,0), -- 17:56:31
+(@PATH,344,5931.28,562.356,609.8469,0,0,1,0,100,0), -- 17:56:32
+(@PATH,345,5930.53,563.356,609.8469,0,0,1,0,100,0), -- 17:56:32
+(@PATH,346,5928.03,565.856,609.8469,0,0,1,0,100,0), -- 17:56:32
+(@PATH,347,5927.28,566.856,609.8469,0,0,1,0,100,0), -- 17:56:32
+(@PATH,348,5897.451,587.326,613.1277,0,0,1,0,100,0), -- 17:56:40
+(@PATH,349,5896.701,588.076,613.3777,0,0,1,0,100,0), -- 17:56:40
+(@PATH,350,5888.951,595.076,614.3777,0,0,1,0,100,0), -- 17:56:40
+(@PATH,351,5887.915,596.0313,614.4434,0,0,1,0,100,0), -- 17:56:43
+(@PATH,352,5868.819,610.8005,615.5193,0,0,1,0,100,0), -- 17:56:47
+(@PATH,353,5866.819,612.0505,615.7693,0,0,1,0,100,0), -- 17:56:47
+(@PATH,354,5865.069,613.3005,616.5193,0,0,1,0,100,0), -- 17:56:47
+(@PATH,355,5866.63,612.3472,615.9749,0,0,1,0,100,0), -- 17:56:50
+(@PATH,356,5865.13,613.5972,616.4749,0,0,1,0,100,0), -- 17:56:50
+(@PATH,357,5864.63,613.8472,616.7249,0,0,1,0,100,0), -- 17:56:50
+(@PATH,358,5864.38,615.5972,616.7249,0,0,1,0,100,0), -- 17:56:50
+(@PATH,359,5863.88,617.3472,616.4749,0,0,1,0,100,0), -- 17:56:50
+(@PATH,360,5863.63,618.5972,616.9749,0,0,1,0,100,0), -- 17:56:50
+(@PATH,361,5864.248,615.8065,616.6554,0,0,1,0,100,0), -- 17:56:51
+(@PATH,362,5863.998,617.8065,616.6554,0,0,1,0,100,0), -- 17:56:51
+(@PATH,363,5863.748,618.8065,616.9054,0,0,1,0,100,0), -- 17:56:51
+(@PATH,364,5863.498,618.8065,616.9054,0,0,1,0,100,0), -- 17:56:51
+(@PATH,365,5865.998,623.0565,616.1554,0,0,1,0,100,0), -- 17:56:51
+(@PATH,366,5866.748,624.0565,616.1554,0,0,1,0,100,0), -- 17:56:51
+(@PATH,367,5866.979,624.3248,616.2649,0,0,1,0,100,0), -- 17:56:52
+(@PATH,368,5869.412,631.2599,615.7915,0,0,1,0,100,0), -- 17:56:54
+(@PATH,369,5873.593,633.4036,615.6859,0,0,1,0,100,0), -- 17:56:55
+(@PATH,370,5872.663,634.2109,615.7021,0,0,1,0,100,0), -- 17:56:58
+(@PATH,371,5869.663,631.2109,615.7021,0,0,1,0,100,0), -- 17:56:58
+(@PATH,372,5866.861,624.7245,616.1404,0,0,1,0,100,0), -- 17:57:00
+(@PATH,373,5866.361,623.4745,616.3904,0,0,1,0,100,0), -- 17:57:00
+(@PATH,374,5864.396,615.572,616.6294,0,0,1,0,100,0), -- 17:57:02
+(@PATH,375,5864.646,614.072,616.8794,0,0,1,0,100,0), -- 17:57:02
+(@PATH,376,5866.896,612.322,615.8794,0,0,1,0,100,0), -- 17:57:02
+(@PATH,377,5868.146,611.572,615.6294,0,0,1,0,100,0), -- 17:57:02
+(@PATH,378,5869.896,610.322,615.8794,0,0,1,0,100,0), -- 17:57:02
+(@PATH,379,5875.009,606.331,615.4817,0,0,1,0,100,0), -- 17:57:06
+(@PATH,380,5896.355,588.4134,613.6219,0,0,1,0,100,0), -- 17:57:08
+(@PATH,381,5897.355,587.4134,613.3719,0,0,1,0,100,0), -- 17:57:08
+(@PATH,382,5898.605,586.1634,613.3719,0,0,1,0,100,0), -- 17:57:08
+(@PATH,383,5910.67,576.61,611.9646,0,0,1,0,100,0), -- 17:57:13
+(@PATH,384,5911.92,575.86,611.7146,0,0,1,0,100,0), -- 17:57:13
+(@PATH,385,5914.42,574.11,611.2146,0,0,1,0,100,0), -- 17:57:13
+(@PATH,386,5912.239,575.5333,611.792,0,0,1,0,100,0), -- 17:57:16
+(@PATH,387,5914.739,573.7833,611.042,0,0,1,0,100,0), -- 17:57:16
+(@PATH,388,5916.489,572.7833,610.792,0,0,1,0,100,0), -- 17:57:16
+(@PATH,389,5918.239,572.0333,611.042,0,0,1,0,100,0), -- 17:57:16
+(@PATH,390,5921.739,571.0333,610.792,0,0,1,0,100,0), -- 17:57:16
+(@PATH,391,5922.739,570.5333,610.542,0,0,1,0,100,0), -- 17:57:16
+(@PATH,392,5923.989,570.0333,610.292,0,0,1,0,100,0), -- 17:57:16
+(@PATH,393,5925.293,569.5073,610.2241,0,0,1,0,100,0), -- 17:57:18
+(@PATH,394,5927.293,566.7573,610.2241,0,0,1,0,100,0), -- 17:57:18
+(@PATH,395,5928.043,566.0073,610.2241,0,0,1,0,100,0), -- 17:57:18
+(@PATH,396,5930.543,563.2573,610.2241,0,0,1,0,100,0), -- 17:57:18
+(@PATH,397,5931.293,562.5073,609.9741,0,0,1,0,100,0); -- 17:57:18
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_00_world.sql
new file mode 100644
index 00000000000..ed83c4897e7
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_00_world.sql
@@ -0,0 +1,28 @@
+--
+-- Sandfury Cretin SAI
+SET @ENTRY := 7789;
+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,6,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sandfury Cretin - On Just Died - Set Rooted On");
+
+-- Sandfury Slave SAI
+SET @ENTRY := 7787;
+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,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sandfury Slave - On Just Died - Set Rooted On");
+
+-- Sandfury Drudge SAI
+SET @ENTRY := 7788;
+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,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sandfury Drudge - On Just Died - Set Rooted On");
+
+-- Sandfury Zealot SAI
+SET @ENTRY := 8877;
+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,6,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sandfury Zealot - On Just Died - Set Rooted On");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_01_world.sql
new file mode 100644
index 00000000000..01d4dd4206d
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_01_world.sql
@@ -0,0 +1,32 @@
+-- Cenarion Circle Reputation
+DELETE FROM `creature_onkill_reputation` WHERE `creature_id` IN (15335, 15727);
+INSERT INTO `creature_onkill_reputation` (`creature_id`, `RewOnKillRepFaction1`, `RewOnKillRepFaction2`, `MaxStanding1`, `IsTeamAward1`, `RewOnKillRepValue1`, `MaxStanding2`, `IsTeamAward2`, `RewOnKillRepValue2`, `TeamDependent`) VALUES
+(15335, 609, 0, 7, 0, 6, 0, 0, 0, 0),
+(15727, 609, 0, 7, 0, 1100, 0, 0, 0, 0);
+
+DELETE FROM `creature_onkill_reputation` WHERE `creature_id` IN (15355, 15538, 15537, 15389, 15391, 15392, 15385, 15338, 15335, 15390, 15319, 15318, 15323, 15320, 15327, 15325, 15386, 15388, 15317, 15316, 15324, 15336);
+INSERT INTO `creature_onkill_reputation` (`creature_id`, `RewOnKillRepFaction1`, `RewOnKillRepFaction2`, `MaxStanding1`, `IsTeamAward1`, `RewOnKillRepValue1`, `MaxStanding2`, `IsTeamAward2`, `RewOnKillRepValue2`, `TeamDependent`) VALUES
+(15335, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15317, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15316, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15324, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15338, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15386, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15325, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15336, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15327, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15320, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15323, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15318, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15319, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15385, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15390, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15392, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15391, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15389, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15537, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15538, 609, 0, 7, 0, 10, 0, 0, 0, 0),
+(15355, 609, 0, 7, 0, 10, 0, 0, 0, 0);
+
+UPDATE `creature_onkill_reputation` SET `RewOnKillRepValue1`=11 WHERE `creature_id` IN (15333, 15461, 15387, 15343);
+UPDATE `creature_onkill_reputation` SET `RewOnKillRepFaction2`=609, `MaxStanding2`=7, `RewOnKillRepValue2`=73 WHERE `creature_id` IN (15276, 15275);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_02_world.sql
new file mode 100644
index 00000000000..3227d9b2096
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_02_world.sql
@@ -0,0 +1,394 @@
+-- Azuremyst Isle
+
+-- Duplicates
+DELETE FROM creature WHERE guid IN (57365,57401,57367,57392);
+DELETE FROM creature_addon WHERE guid IN (57365,57401,57367,57392);
+-- Vale Moth
+UPDATE creature SET position_x = -4056.166748, position_y = -13679.827148, position_z = 70.195099, orientation = 2.894147 WHERE guid = 57400;
+UPDATE creature SET position_x = -4009.254883, position_y = -13751.575195, position_z = 69.994392, orientation = 1.271510 WHERE guid = 57362;
+UPDATE creature SET position_x = -4002.972168, position_y = -13721.668945, position_z = 66.997993, orientation = 5.467894 WHERE guid = 57364;
+
+-- Mutated Root Lasher
+DELETE FROM creature_addon WHERE guid IN (SELECT guid FROM creature WHERE id = 16517);
+UPDATE creature SET position_x = -4072.798828, position_y = -13457.387695, position_z = 53.739014, orientation = 0.767300 WHERE guid = 57304;
+
+-- Megelon
+-- should kneel
+DELETE FROM `creature_template_addon` WHERE `entry`=16475;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(16475,0,0,8,1,0, '');
+
+-- Red Crystal Bunny
+UPDATE creature_template SET inhabittype = 4 WHERE entry = 17947;
+
+UPDATE creature SET spawndist = 0, MovementType = 0 WHERE guid IN (57429,57418,57435,57419,57417,57425,57431);
+UPDATE creature SET position_x = -4494.916016, position_y = -13426.375977, position_z = 50.020802, orientation = 0.199758 WHERE guid = 57424;
+UPDATE creature SET position_x = -4493.666016, position_y = -13412.100586, position_z = 49.711666, orientation = 5.910391 WHERE guid = 57426;
+UPDATE creature SET position_x = -4489.001953, position_y = -13347.736328, position_z = 55.123600, spawndist = 5 WHERE guid = 57433;
+UPDATE creature SET position_x = -4558.07, position_y = -13383, position_z = 84.0283, orientation = 0.980421, spawndist = 0, MovementType = 0 WHERE guid = 57415;
+UPDATE creature SET position_x = -4561.61, position_y = -13332, position_z = 78.297, orientation = 4.36313, spawndist = 0, MovementType = 0 WHERE guid = 57438;
+UPDATE creature SET position_x = -4495.072754, position_y = -13341.267578, position_z = 54.948174, orientation = 0.872046, spawndist = 0, MovementType = 2 WHERE guid = 57432;
+UPDATE creature SET spawndist = 0, MovementType = 2 WHERE guid IN (57436,57420);
+
+SET @NPC := 57420;
+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`) VALUES
+(@PATH, 1, -4570.33, -13342, 79.7079),
+(@PATH, 2, -4572.42, -13338.7, 81.9836),
+(@PATH, 3, -4573.8, -13332.1, 85.5403),
+(@PATH, 4, -4573.62, -13325.4, 88.0573),
+(@PATH, 5, -4571.77, -13319.3, 88.317),
+(@PATH, 6, -4558.65, -13302.6, 85.9795),
+(@PATH, 7, -4550.41, -13299, 82.8511),
+(@PATH, 8, -4542.54, -13296.4, 79.706),
+(@PATH, 9, -4551.81, -13299.4, 83.4887),
+(@PATH, 10, -4558, -13302.1, 85.7307),
+(@PATH, 11, -4569.98, -13314.4, 87.7967),
+(@PATH, 12, -4574.35, -13325.8, 87.9575),
+(@PATH, 13, -4574.1, -13333.5, 84.9354),
+(@PATH, 14, -4572.79, -13338.5, 82.1879),
+(@PATH, 15, -4570.21, -13342.1, 79.6678),
+(@PATH, 16, -4565.7, -13343.3, 78.4452);
+
+SET @NPC := 57436;
+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`) VALUES
+(@PATH, 1, -4537.6, -13317.9, 77.7301),
+(@PATH, 2, -4531.29, -13317.2, 77.917),
+(@PATH, 3, -4538.35, -13312.8, 77.9808),
+(@PATH, 4, -4538.11, -13320.2, 77.6869),
+(@PATH, 5, -4536.77, -13324.9, 77.5682),
+(@PATH, 6, -4537, -13320.7, 77.6223),
+(@PATH, 7, -4533.12, -13307.4, 77.7173),
+(@PATH, 8, -4525.5, -13301.3, 77.8192),
+(@PATH, 9, -4516, -13301.1, 76.9484),
+(@PATH, 10, -4508.35, -13305, 74.2754),
+(@PATH, 11, -4503.76, -13309.2, 70.6749),
+(@PATH, 12, -4502.26, -13315, 68.1374),
+(@PATH, 13, -4500.93, -13322.2, 64.4202),
+(@PATH, 14, -4502.32, -13314.8, 68.1939),
+(@PATH, 15, -4505.17, -13307.9, 71.7238),
+(@PATH, 16, -4511.36, -13302.8, 75.8496),
+(@PATH, 17, -4521.51, -13300.4, 77.5693),
+(@PATH, 18, -4529.88, -13303.2, 77.7191),
+(@PATH, 19, -4536.49, -13312.7, 77.9282),
+(@PATH, 20, -4542.37, -13324.8, 77.5282),
+(@PATH, 21, -4550.38, -13333.2, 77.7908),
+(@PATH, 22, -4550.78, -13344.5, 78.0558),
+(@PATH, 23, -4548.2, -13347.2, 77.6171),
+(@PATH, 24, -4544.49, -13348.3, 76.6312),
+(@PATH, 25, -4550.57, -13355.2, 78.4657),
+(@PATH, 26, -4541.91, -13366.4, 75.7633),
+(@PATH, 27, -4537.09, -13379.5, 72.2425),
+(@PATH, 28, -4526.18, -13391.8, 63.0653),
+(@PATH, 29, -4535.68, -13382.6, 70.6931),
+(@PATH, 30, -4540.1, -13371.5, 74.4121),
+(@PATH, 31, -4543.29, -13364.2, 76.4836),
+(@PATH, 32, -4549.18, -13357.4, 78.4678),
+(@PATH, 33, -4553.56, -13358.2, 78.9982),
+(@PATH, 34, -4556.42, -13365.6, 82.0062),
+(@PATH, 35, -4557.25, -13379.6, 84.2324),
+(@PATH, 36, -4556.48, -13368.8, 83.0642),
+(@PATH, 37, -4554.17, -13357.4, 78.9413),
+(@PATH, 38, -4550.83, -13348.5, 78.0941),
+(@PATH, 39, -4551.95, -13326, 78.1122),
+(@PATH, 40, -4552.54, -13331.4, 77.8854),
+(@PATH, 41, -4555.86, -13336.1, 77.8128),
+(@PATH, 42, -4560.8, -13337.2, 77.8925),
+(@PATH, 43, -4561.78, -13335, 78.0228),
+(@PATH, 44, -4560.34, -13337.7, 77.8832),
+(@PATH, 45, -4551.95, -13333.7, 77.7376),
+(@PATH, 46, -4543.65, -13322.2, 77.7184);
+
+SET @NPC := 57432;
+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`) VALUES
+(@PATH, 1, -4503.06, -13357.7, 54.1247),
+(@PATH, 2, -4506.78, -13373.2, 53.7056),
+(@PATH, 3, -4507.36, -13387, 53.8641),
+(@PATH, 4, -4506.39, -13372.9, 53.7694),
+(@PATH, 5, -4502.84, -13357.5, 54.1533),
+(@PATH, 6, -4495.22, -13341.5, 54.8385);
+
+UPDATE creature SET spawndist = 0, MovementType = 0 WHERE guid IN (57473,57466,57319,57321,57468,57467,57320,57470,57472,57474,57471,57316,57457,57458,57450,57462,57318,57463,57465,57464,57461);
+UPDATE creature SET position_x = -4471.007813, position_y = -14096.670898, position_z = 109.848373, orientation = 2.725909 WHERE guid = 57464;
+UPDATE creature SET position_x = -4643.638672, position_y = -13940.991211, position_z = 85.342995, orientation = 5.246780 WHERE guid = 57474;
+-- missing added - -- UDB free guid used
+
+DELETE FROM creature WHERE guid IN (
+75958,
+75959,
+75960,
+75961,
+75962,
+75963,
+75964,
+75965,
+75966,
+75967);
+
+INSERT INTO creature (guid, id, map, spawnMask, phaseMask, modelid, equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, spawndist, curhealth, curmana, MovementType) VALUES
+(75958,16537,530,1,1,0,0,-4434.66,-13759.4,56.6934,6.16494,300,0,71,0,2),
+(75959,16537,530,1,1,0,0,-4447.7,-13871.1,100.039,0.550673,300,0,71,0,2),
+(75960,16537,530,1,1,0,0,-4589.24,-13965.9,82.7032,3.97444,300,0,71,0,2),
+(75961,16537,530,1,1,0,0,-4594.7,-14003.5,86.0174,1.36692,300,0,71,0,2),
+(75962,16537,530,1,1,0,0,-4654.6,-13981.2,85.2454,0.550101,300,5,71,0,1),
+ -- Nestlewwod Owlkin
+(75963,16518,530,1,1,0,0,-4523.47,-14045.3,108.254,1.15354,300,0,86,0,2),
+(75964,16518,530,1,1,0,0,-4622.08,-13980.5,83.0399,5.28298,300,0,86,0,0),
+(75965,16518,530,1,1,0,0,-4637.72,-13935.3,86.0136,5.21538,300,0,71,0,0),
+(75966,16518,530,1,1,0,0,-4667.34,-13966,87.076,5.68662,300,0,86,0,0),
+(75967,16518,530,1,1,0,0,-4646.43,-14010,88.6244,2.11305,300,0,71,0,0);
+
+SET @NPC := 75961;
+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`) VALUES
+(@PATH, 1, -4592.98, -13982.5, 84.4159),
+(@PATH, 2, -4586.16, -13971.4, 82.9927),
+(@PATH, 3, -4580.24, -13956.1, 83.3117),
+(@PATH, 4, -4572.24, -13945.5, 83.977),
+(@PATH, 5, -4553.06, -13927.5, 84.9424),
+(@PATH, 6, -4540.27, -13916, 87.0233),
+(@PATH, 7, -4533.76, -13907.4, 89.6782),
+(@PATH, 8, -4526.08, -13901.9, 91.075),
+(@PATH, 9, -4511.39, -13896.2, 93.3214),
+(@PATH, 10, -4501.98, -13896, 95.7497),
+(@PATH, 11, -4513.02, -13896.4, 92.8177),
+(@PATH, 12, -4524.08, -13900.5, 91.1834),
+(@PATH, 13, -4533.81, -13907.2, 89.7356),
+(@PATH, 14, -4537.63, -13911.7, 87.7131),
+(@PATH, 15, -4543.6, -13919.2, 87.4545),
+(@PATH, 16, -4552.8, -13927.3, 84.9588),
+(@PATH, 17, -4576.24, -13949, 83.6602),
+(@PATH, 18, -4589.23, -13952, 83.2427),
+(@PATH, 19, -4604.19, -13952, 83.5327),
+(@PATH, 20, -4616.22, -13947.2, 83.8974),
+(@PATH, 21, -4627.14, -13943.9, 84.4674),
+(@PATH, 22, -4637.3, -13944.4, 85.009),
+(@PATH, 23, -4649.9, -13949.8, 85.5586),
+(@PATH, 24, -4657.77, -13959.4, 86.2783),
+(@PATH, 25, -4664.29, -13969.3, 86.5976),
+(@PATH, 26, -4662.94, -13981.2, 86.5135),
+(@PATH, 27, -4659.69, -13991.1, 87.4205),
+(@PATH, 28, -4659.05, -14002.6, 88.7217),
+(@PATH, 29, -4658.11, -13991.3, 87.3414),
+(@PATH, 30, -4652.72, -13982.8, 85.1681),
+(@PATH, 31, -4644.96, -13980.1, 83.6062),
+(@PATH, 32, -4629.25, -13979.6, 82.8775),
+(@PATH, 33, -4612.33, -13973.1, 83.1243),
+(@PATH, 34, -4597.79, -13975.3, 83.3084),
+(@PATH, 35, -4592.27, -13985.8, 84.9837),
+(@PATH, 36, -4594.39, -14003.7, 86.0171);
+
+SET @NPC := 75960;
+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`) VALUES
+(@PATH, 1, -4592.27, -13969.7, 82.8063),
+(@PATH, 2, -4598.27, -13970.8, 82.8528),
+(@PATH, 3, -4602.71, -13969, 82.9031),
+(@PATH, 4, -4605.37, -13963.2, 82.86),
+(@PATH, 5, -4604.43, -13957.7, 82.9402),
+(@PATH, 6, -4599.52, -13953.3, 83.2446),
+(@PATH, 7, -4593.36, -13953.8, 83.11),
+(@PATH, 8, -4588.46, -13958.5, 82.7968),
+(@PATH, 9, -4588.68, -13965.4, 82.7122);
+
+SET @NPC := 75963;
+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`) VALUES
+(@PATH, 1, -4517.82, -14036.6, 109.638),
+(@PATH, 2, -4512.34, -14031.9, 111.705),
+(@PATH, 3, -4504.76, -14032, 115.22),
+(@PATH, 4, -4495.7, -14035, 120.769),
+(@PATH, 5, -4485.96, -14035.7, 125.867),
+(@PATH, 6, -4477.07, -14034.1, 130.216),
+(@PATH, 7, -4468.08, -14026.7, 135.697),
+(@PATH, 8, -4463.56, -14019.2, 139.389),
+(@PATH, 9, -4462.25, -14008.6, 144.543),
+(@PATH, 10, -4462.15, -13995.7, 151.398),
+(@PATH, 11, -4459.33, -13989.3, 155.012),
+(@PATH, 12, -4453.88, -13984, 158.884),
+(@PATH, 13, -4442.96, -13977.9, 162.913),
+(@PATH, 14, -4437.08, -13973.9, 163.54),
+(@PATH, 15, -4442.83, -13978.1, 162.882),
+(@PATH, 16, -4447.89, -13981.6, 160.698),
+(@PATH, 17, -4454.41, -13984.3, 158.621),
+(@PATH, 18, -4459.15, -13988.9, 155.249),
+(@PATH, 19, -4462.06, -13995.7, 151.433),
+(@PATH, 20, -4463.62, -14005.8, 145.88),
+(@PATH, 21, -4464.5, -14015.9, 140.278),
+(@PATH, 22, -4465.92, -14022.3, 137.806),
+(@PATH, 23, -4473.41, -14032, 132.139),
+(@PATH, 24, -4480.65, -14035.1, 128.564),
+(@PATH, 25, -4489.53, -14035.6, 123.745),
+(@PATH, 26, -4499.66, -14033.4, 118.385),
+(@PATH, 27, -4509.38, -14031.3, 113.055),
+(@PATH, 28, -4516.56, -14033.5, 110.339),
+(@PATH, 29, -4522.55, -14042.1, 108.413),
+(@PATH, 30, -4522.58, -14049.5, 108.513),
+(@PATH, 31, -4511.73, -14069.1, 108.323),
+(@PATH, 32, -4494.98, -14092.5, 108.716),
+(@PATH, 33, -4480.21, -14106.9, 109.008),
+(@PATH, 34, -4476.78, -14106.6, 109.331),
+(@PATH, 35, -4480.54, -14107, 109.074),
+(@PATH, 36, -4501.89, -14085, 108.471),
+(@PATH, 37, -4513.44, -14066.2, 108.282),
+(@PATH, 38, -4523.29, -14045.9, 108.31),
+(@PATH, 39, -4531.47, -14045.2, 107.159),
+(@PATH, 40, -4540.48, -14042.7, 104.373),
+(@PATH, 41, -4545.76, -14038.1, 101.742),
+(@PATH, 42, -4549.34, -14028.7, 97.4769),
+(@PATH, 43, -4550.8, -14014.1, 91.238),
+(@PATH, 44, -4549.57, -14028.6, 97.381),
+(@PATH, 45, -4545.99, -14038.1, 101.736),
+(@PATH, 46, -4540.46, -14042.4, 104.306),
+(@PATH, 47, -4531.34, -14045, 107.178),
+(@PATH, 48, -4522.13, -14050.4, 108.592),
+(@PATH, 49, -4503.35, -14075.6, 108.32),
+(@PATH, 50, -4475.96, -14095.1, 109.774),
+(@PATH, 51, -4473.36, -14101.2, 109.944),
+(@PATH, 52, -4474.57, -14105.7, 109.152),
+(@PATH, 53, -4480.68, -14108, 109.006),
+(@PATH, 54, -4502.26, -14085.2, 108.472),
+(@PATH, 55, -4522.41, -14050.8, 108.626),
+(@PATH, 56, -4522.98, -14042.5, 108.354);
+
+SET @NPC := 75959;
+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`) VALUES
+(@PATH, 1, -4438.31, -13862.6, 91.776),
+(@PATH, 2, -4431.32, -13855.8, 84.8948),
+(@PATH, 3, -4426.89, -13851, 80.9621),
+(@PATH, 4, -4425.11, -13841, 79.7135),
+(@PATH, 5, -4425.27, -13831.5, 80.3198),
+(@PATH, 6, -4428.9, -13821.8, 80.8588),
+(@PATH, 7, -4431.14, -13808.6, 82.159),
+(@PATH, 8, -4428.98, -13822, 80.8303),
+(@PATH, 9, -4425.5, -13831.3, 80.3171),
+(@PATH, 10, -4425.99, -13848.9, 80.3403),
+(@PATH, 11, -4422.94, -13853.1, 79.9921),
+(@PATH, 12, -4405.51, -13848.8, 71.1473),
+(@PATH, 13, -4394.64, -13843.8, 69.9378),
+(@PATH, 14, -4373.31, -13829.4, 69.2241),
+(@PATH, 15, -4367.44, -13827.8, 69.2241),
+(@PATH, 16, -4374.24, -13829.8, 69.2241),
+(@PATH, 17, -4395.14, -13844.2, 69.9654),
+(@PATH, 18, -4401.71, -13847.1, 70.3372),
+(@PATH, 19, -4408.22, -13846.1, 70.6981),
+(@PATH, 20, -4410.12, -13840.5, 68.5303),
+(@PATH, 21, -4407.06, -13825, 62.3528),
+(@PATH, 22, -4406.01, -13816.6, 60.4572),
+(@PATH, 23, -4401.2, -13811.8, 58.4539),
+(@PATH, 24, -4395.99, -13804.2, 55.897),
+(@PATH, 25, -4401.33, -13812.3, 58.5553),
+(@PATH, 26, -4405.57, -13815.9, 60.3377),
+(@PATH, 27, -4407.42, -13829.5, 63.9209),
+(@PATH, 28, -4409.96, -13840.7, 68.609),
+(@PATH, 29, -4407.79, -13845.8, 70.5699),
+(@PATH, 30, -4401.1, -13847.4, 70.3476),
+(@PATH, 31, -4393.45, -13843.7, 69.9347),
+(@PATH, 32, -4373.67, -13829.4, 69.2235),
+(@PATH, 33, -4366.85, -13827.6, 69.2235),
+(@PATH, 34, -4374.52, -13829.8, 69.228),
+(@PATH, 35, -4397.51, -13845.3, 70.0348),
+(@PATH, 36, -4405.96, -13849.2, 71.4118),
+(@PATH, 37, -4420.98, -13853.4, 79.1551),
+(@PATH, 38, -4425.01, -13851.3, 80.4895),
+(@PATH, 39, -4426.2, -13842.6, 79.8567),
+(@PATH, 40, -4425.92, -13830.4, 80.3672),
+(@PATH, 41, -4429.15, -13820.9, 80.9154),
+(@PATH, 42, -4431.09, -13808.4, 82.1788),
+(@PATH, 43, -4429.49, -13822.1, 80.7973),
+(@PATH, 44, -4425.68, -13831.3, 80.2927),
+(@PATH, 45, -4425.49, -13843.3, 79.8208),
+(@PATH, 46, -4426.59, -13851.3, 80.9487),
+(@PATH, 47, -4431.98, -13856.3, 85.4742),
+(@PATH, 48, -4438.4, -13862.8, 91.9377),
+(@PATH, 49, -4446.83, -13869.7, 99.5607),
+(@PATH, 50, -4450.92, -13879.3, 102.427),
+(@PATH, 51, -4447.55, -13889, 107.062),
+(@PATH, 52, -4439.39, -13901.1, 116.042),
+(@PATH, 53, -4435.46, -13912.5, 124.001),
+(@PATH, 54, -4434.29, -13919.4, 128.474),
+(@PATH, 55, -4429.09, -13933.4, 138.171),
+(@PATH, 56, -4429.81, -13941.6, 143.975),
+(@PATH, 57, -4426.58, -13948.8, 149.331),
+(@PATH, 58, -4424.46, -13957.5, 154.731),
+(@PATH, 59, -4424.99, -13971.4, 161.606),
+(@PATH, 60, -4425, -13966.8, 160.317),
+(@PATH, 61, -4424.71, -13954.9, 153.1),
+(@PATH, 62, -4426.49, -13948.2, 149.01),
+(@PATH, 63, -4429.64, -13942, 144.229),
+(@PATH, 64, -4429.46, -13931.9, 137.163),
+(@PATH, 65, -4433.91, -13920.2, 129.02),
+(@PATH, 66, -4436.84, -13906.8, 119.518),
+(@PATH, 67, -4439.42, -13900.3, 115.63),
+(@PATH, 68, -4445.36, -13893.5, 110.394),
+(@PATH, 69, -4449.88, -13882.6, 103.797),
+(@PATH, 70, -4450.84, -13875.1, 101.276),
+(@PATH, 71, -4448.44, -13870.8, 100.18);
+
+SET @NPC := 75958;
+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`) VALUES
+(@PATH, 1, -4397.45, -13759, 52.5403),
+(@PATH, 2, -4387.6, -13750.7, 51.187),
+(@PATH, 3, -4384.44, -13738.6, 50.5713),
+(@PATH, 4, -4385.32, -13731.1, 50.4359),
+(@PATH, 5, -4391.07, -13724.8, 50.5065),
+(@PATH, 6, -4426.98, -13722.3, 51.7162),
+(@PATH, 7, -4437.56, -13719.7, 51.5869),
+(@PATH, 8, -4446.66, -13713.5, 49.9453),
+(@PATH, 9, -4450.02, -13707.3, 48.3929),
+(@PATH, 10, -4448.54, -13698.3, 47.5457),
+(@PATH, 11, -4440.44, -13690.5, 45.7925),
+(@PATH, 12, -4434.76, -13689.6, 45.5794),
+(@PATH, 13, -4430.11, -13694, 46.9106),
+(@PATH, 14, -4423.66, -13715.8, 51.0542),
+(@PATH, 15, -4418.28, -13721.3, 51.1114),
+(@PATH, 16, -4391.7, -13722.8, 50.4426),
+(@PATH, 17, -4381.61, -13727.8, 50.2699),
+(@PATH, 18, -4380.06, -13739.4, 50.4521),
+(@PATH, 19, -4383.25, -13752.4, 50.4515),
+(@PATH, 20, -4392.68, -13769.2, 52.2511),
+(@PATH, 21, -4390.35, -13775.7, 52.1454),
+(@PATH, 22, -4370.44, -13787.6, 52.2808),
+(@PATH, 23, -4368.16, -13791.2, 52.3032),
+(@PATH, 24, -4369.71, -13795.9, 52.4165),
+(@PATH, 25, -4379.54, -13798.8, 52.1976),
+(@PATH, 26, -4391, -13795.6, 53.3708),
+(@PATH, 27, -4392.48, -13786.4, 52.7211),
+(@PATH, 28, -4409.88, -13759.7, 53.5569),
+(@PATH, 29, -4434.79, -13759.4, 56.6967);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_03_world.sql
new file mode 100644
index 00000000000..c966be415f9
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_03_world.sql
@@ -0,0 +1,859 @@
+SET @OGUID:=77266;
+DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+430 AND `eventEntry`=12;
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+430;
+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,180415, 571, 1, 1, 5759.221, 574.9567, 649.9132, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+1,180415, 571, 1, 1, 5755.542, 570.8301, 650.9344, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+2,180415, 571, 1, 1, 5757.676, 573.3919, 650.1688, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+3,180415, 571, 1, 1, 5746.643, 578.5375, 650.8829, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+4,180415, 571, 1, 1, 5748.668, 581.0043, 650.151, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+5,180415, 571, 1, 1, 5749.933, 582.6556, 649.8248, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+6,180406, 571, 1, 1, 5728.36, 610.9005, 649.4632, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+7,180415, 571, 1, 1, 5715.421, 644.4554, 648.6602, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+8,180415, 571, 1, 1, 5715.515, 646.4188, 648.6602, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+9,180415, 571, 1, 1, 5753.461, 568.1178, 651.6292, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+10,180415, 571, 1, 1, 5744.647, 575.9879, 651.6357, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+11,180415, 571, 1, 1, 5715.134, 648.1215, 648.6602, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+12,180415, 571, 1, 1, 5751.013, 565.1844, 651.9471, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+13,180472, 571, 1, 1, 5732.004, 677.9211, 653.3353, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1)
+(@OGUID+14,180472, 571, 1, 1, 5728.826, 680.5181, 653.5024, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1)
+(@OGUID+15,180415, 571, 1, 1, 5741.146, 571.6998, 652.0657, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+16,180415, 571, 1, 1, 5714.502, 642.7459, 648.6602, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+17,180407, 571, 1, 1, 5732.993, 687.059, 647.7728, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+18,180406, 571, 1, 1, 5743.645, 693.545, 622.6204, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+19,180406, 571, 1, 1, 5731.452, 685.2674, 647.8353, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+20,180472, 571, 1, 1, 5767.736, 709.554, 623.3895, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1)
+(@OGUID+21,180415, 571, 1, 1, 5712.989, 641.5297, 648.6602, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+22,180415, 571, 1, 1, 5885.288, 649.3917, 648.3478, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+23,180415, 571, 1, 1, 5884.635, 650.209, 648.3451, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+24,180415, 571, 1, 1, 5857.195, 694.9765, 642.7598, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+25,180415, 571, 1, 1, 5884.362, 655.5961, 647.7375, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+26,180415, 571, 1, 1, 5884.462, 651.8329, 648.3445, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+27,180415, 571, 1, 1, 5884.962, 652.7103, 648.349, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+28,180415, 571, 1, 1, 5882.854, 654.217, 647.4544, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+29,180415, 571, 1, 1, 5882.08, 652.5934, 646.7969, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+30,180415, 571, 1, 1, 5881.939, 650.6448, 646.3702, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+31,180415, 571, 1, 1, 5887.319, 654.8732, 647.7352, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+32,180415, 571, 1, 1, 5872.773, 683.941, 643.9858, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+33,180415, 571, 1, 1, 5888.374, 653.126, 648.3439, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+34,180415, 571, 1, 1, 5888.698, 649.7112, 648.3463, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+35,180415, 571, 1, 1, 5886.394, 656.2161, 647.7482, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+36,180415, 571, 1, 1, 5887.868, 649.1268, 648.3483, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+37,180415, 571, 1, 1, 5887.483, 653.6826, 648.3387, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+38,180415, 571, 1, 1, 5887.04, 648.8273, 648.3465, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+39,180406, 571, 1, 1, 5867.473, 689.6141, 643.0695, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+40,180415, 571, 1, 1, 5885.699, 653.4232, 648.3426, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+41,180415, 571, 1, 1, 5853.894, 697.7454, 642.7382, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+42,180415, 571, 1, 1, 5886.554, 653.7294, 648.3412, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+43,180415, 571, 1, 1, 5886.262, 649.0009, 648.3515, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+44,180415, 571, 1, 1, 5868.731, 687.4305, 643.9653, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+45,180415, 571, 1, 1, 5859.763, 697.9153, 644.2113, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+46,180415, 571, 1, 1, 5870.243, 688.5043, 644.9064, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+47,180415, 571, 1, 1, 5856.464, 700.5812, 644.1898, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+48,180415, 571, 1, 1, 5889.053, 652.2928, 648.3411, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+49,180415, 571, 1, 1, 5889.22, 650.639, 648.3416, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+50,180415, 571, 1, 1, 5873.591, 685.6783, 644.8956, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+51,180415, 571, 1, 1, 5831.401, 719.1722, 641.9816, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+52,180415, 571, 1, 1, 5836.437, 717.9185, 642.9285, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+53,180415, 571, 1, 1, 5835.081, 716.1272, 642.0018, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+54,180415, 571, 1, 1, 5832.815, 720.7052, 642.9305, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+55,180472, 571, 1, 1, 5814.139, 724.2066, 628.9741, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1)
+(@OGUID+56,180411, 571, 1, 1, 5852.397, 719.2882, 645.0352, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1)
+(@OGUID+57,180411, 571, 1, 1, 5776.054, 717.1719, 621.5515, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1)
+(@OGUID+58,180407, 571, 1, 1, 5774.249, 718.1202, 624.7645, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+59,180407, 571, 1, 1, 5776.448, 568.1436, 650.5096, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+60,180415, 571, 1, 1, 5712.064, 650.5781, 648.6602, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+61,180415, 571, 1, 1, 5713.762, 649.6603, 648.6602, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+62,180415, 571, 1, 1, 5711.214, 640.9504, 648.6602, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+63,180415, 571, 1, 1, 5743.377, 555.9014, 652.7935, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+64,180415, 571, 1, 1, 5748.702, 562.2153, 652.2548, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+65,180415, 571, 1, 1, 5739.39, 569.5277, 652.2971, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+66,180415, 571, 1, 1, 5746.047, 559.1688, 652.5618, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+67,180415, 571, 1, 1, 5736.597, 566.2489, 652.5988, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+68,180415, 571, 1, 1, 5740.009, 551.746, 653.0452, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+69,180415, 571, 1, 1, 5733.646, 562.5793, 652.8564, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+70,180415, 571, 1, 1, 5703.292, 611.9144, 646.913, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+71,180415, 571, 1, 1, 5706.292, 643.5551, 648.6602, 5.235988, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+72,180415, 571, 1, 1, 5705.489, 608.3424, 646.913, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+73,180415, 571, 1, 1, 5707.491, 642.0325, 648.6602, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+74,180415, 571, 1, 1, 5709.232, 641.1325, 648.6602, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+75,180415, 571, 1, 1, 5730.303, 558.2949, 653.1008, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+76,180415, 571, 1, 1, 5727.385, 554.3962, 653.2108, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+77,180415, 571, 1, 1, 5736.26, 546.9634, 653.2068, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+78,180415, 571, 1, 1, 5710.064, 650.7815, 648.6602, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+79,180407, 571, 1, 1, 5819.17, 537.0236, 654.2689, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613)
+(@OGUID+80,180406, 571, 1, 1, 5825.69, 539.1132, 654.2733, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613)
+(@OGUID+81,180429, 571, 1, 1, 5890.736, 547.4893, 649.311, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 4613)
+(@OGUID+82,180406, 571, 1, 1, 5881.452, 527.659, 641.7739, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613)
+(@OGUID+83,180472, 571, 1, 1, 5858.2, 635.0283, 654.1966, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613)
+(@OGUID+84,180411, 571, 1, 1, 5843.23, 641.0156, 651.1626, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4613)
+(@OGUID+85,180472, 571, 1, 1, 5885.185, 523.5266, 649.183, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613)
+(@OGUID+86,180415, 571, 1, 1, 5883.065, 523.7357, 642.2219, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+87,180415, 571, 1, 1, 5884.091, 519.3121, 641.5697, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+88,180429, 571, 1, 1, 5900.888, 555.5231, 649.303, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 4613)
+(@OGUID+89,180415, 571, 1, 1, 5886.866, 524.562, 642.2232, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+90,180472, 571, 1, 1, 5885.981, 520.1681, 649.2055, 0.6108634, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613)
+(@OGUID+91,180415, 571, 1, 1, 5881.253, 512.0975, 641.5697, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+92,180411, 571, 1, 1, 5851.213, 642.0174, 651.0532, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4613)
+(@OGUID+93,180415, 571, 1, 1, 5882.032, 509.4985, 641.5697, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+94,180415, 571, 1, 1, 5811.41, 654.3241, 647.392, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+95,180415, 571, 1, 1, 5860.809, 639.9338, 648.7387, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+96,180415, 571, 1, 1, 5857.7, 642.8248, 648.7574, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+97,180415, 571, 1, 1, 5821.589, 653.7233, 647.4023, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+98,180407, 571, 1, 1, 5874.733, 503.2205, 644.0117, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613)
+(@OGUID+99,180472, 571, 1, 1, 5854.177, 643.7856, 621.9326, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613)
+(@OGUID+100,180415, 571, 1, 1, 5887.842, 520.2131, 641.5697, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+101,180415, 571, 1, 1, 5882.763, 505.9572, 641.5697, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+102,180415, 571, 1, 1, 5806.485, 653.2708, 609.8859, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+103,180472, 571, 1, 1, 5911.032, 576.6434, 619.5021, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613)
+(@OGUID+104,180415, 571, 1, 1, 5908.835, 572.4176, 612.8084, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+105,180415, 571, 1, 1, 5909.355, 557.9609, 616.0233, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+106,180415, 571, 1, 1, 5914.888, 579.7658, 612.8085, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+107,180415, 571, 1, 1, 5917.828, 556.0546, 616.0338, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+108,180407, 571, 1, 1, 5922.737, 572.6234, 612.5124, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613)
+(@OGUID+109,180415, 571, 1, 1, 5857.261, 647.3333, 648.7574, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+110,180406, 571, 1, 1, 5861.599, 649.9679, 658.3734, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613)
+(@OGUID+111,180407, 571, 1, 1, 5861.045, 644.9129, 658.374, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613)
+(@OGUID+112,180472, 571, 1, 1, 5853.057, 649.1964, 665.2919, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613)
+(@OGUID+113,180415, 571, 1, 1, 5928.843, 579.6561, 616.0331, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+114,180407, 571, 1, 1, 5934.309, 611.9305, 652.9676, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613)
+(@OGUID+115,180415, 571, 1, 1, 5856.715, 651.5797, 648.7574, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+116,180415, 571, 1, 1, 5893.633, 514.4703, 641.5697, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+117,180411, 571, 1, 1, 5849.691, 655.1979, 651.0836, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4613)
+(@OGUID+118,180415, 571, 1, 1, 5934.673, 573.1963, 616.0229, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+119,180411, 571, 1, 1, 5841.72, 654.2864, 651.1182, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4613)
+(@OGUID+120,180415, 571, 1, 1, 5856.279, 656.2487, 648.7574, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+121,180415, 571, 1, 1, 5928.253, 556.8299, 616.0229, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+122,180415, 571, 1, 1, 5933.573, 563.7382, 616.0335, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+123,180415, 571, 1, 1, 5893.986, 512.0244, 641.5697, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+124,180415, 571, 1, 1, 5894.723, 508.7653, 641.5697, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+125,180415, 571, 1, 1, 5858.74, 659.7316, 648.7386, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+126,180415, 571, 1, 1, 5935.716, 564.6371, 610.6148, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+127,180415, 571, 1, 1, 5930.358, 557.245, 610.5422, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+128,180472, 571, 1, 1, 5846.67, 654.1088, 618.3235, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613)
+(@OGUID+129,180410, 571, 1, 1, 5850.755, 664.9973, 658.8376, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4613)
+(@OGUID+130,180415, 571, 1, 1, 5841.599, 664.91, 609.8859, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+131,180472, 571, 1, 1, 5855.111, 663.9308, 654.1978, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613)
+(@OGUID+132,180407, 571, 1, 1, 5948.633, 614.5261, 650.6004, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613)
+(@OGUID+133,180415, 571, 1, 1, 5836.036, 660.7959, 609.8859, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+134,180406, 571, 1, 1, 5939.868, 564.8651, 612.0865, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613)
+(@OGUID+135,180410, 571, 1, 1, 5844.364, 664.4332, 647.9496, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4613)
+(@OGUID+136,180411, 571, 1, 1, 5893.518, 492.6269, 644.5281, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4616)
+(@OGUID+137,180407, 571, 1, 1, 5875.965, 497.4745, 657.2557, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4616)
+(@OGUID+138,180407, 571, 1, 1, 5863.621, 487.1664, 641.5697, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4616)
+(@OGUID+139,180406, 571, 1, 1, 5864.623, 480.571, 641.5697, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4616)
+(@OGUID+140,180406, 571, 1, 1, 5877.73, 489.3853, 657.3113, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4616)
+(@OGUID+141,180415, 571, 1, 1, 5892.837, 490.0521, 641.2783, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+142,180415, 571, 1, 1, 5891.826, 490.1104, 641.5697, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+143,180415, 571, 1, 1, 5895.737, 492.6667, 640.7758, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+144,180472, 571, 1, 1, 5864.557, 470.3632, 647.7255, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4616)
+(@OGUID+145,180415, 571, 1, 1, 5893.601, 489.979, 641.0445, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+146,180415, 571, 1, 1, 5902.456, 493.8513, 640.7816, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+147,180415, 571, 1, 1, 5895.705, 475.3102, 641.3199, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+148,180415, 571, 1, 1, 5894.93, 474.8922, 641.5697, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+149,180407, 571, 1, 1, 5883.147, 462.4044, 657.2766, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4616)
+(@OGUID+150,180415, 571, 1, 1, 5896.422, 475.6479, 641.0445, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+151,180411, 571, 1, 1, 5899.214, 464.7854, 644.7711, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4616)
+(@OGUID+152,180415, 571, 1, 1, 5906.314, 475.4718, 640.7803, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+153,180411, 571, 1, 1, 5880.079, 459.3812, 662.5659, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4616)
+(@OGUID+154,180415, 571, 1, 1, 5899.555, 474.0015, 640.776, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+155,180415, 571, 1, 1, 5825.489, 463.355, 658.7728, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+156,180415, 571, 1, 1, 5820.489, 466.2061, 658.7727, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+157,180415, 571, 1, 1, 5814.865, 467.4187, 658.7726, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+158,180406, 571, 1, 1, 5877.546, 452.3022, 657.9406, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4616)
+(@OGUID+159,180415, 571, 1, 1, 5831.669, 453.8633, 658.7728, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+160,180415, 571, 1, 1, 5829.311, 459.1713, 658.7728, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+161,180410, 571, 1, 1, 5873.148, 451.0983, 642.2259, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4616)
+(@OGUID+162,180410, 571, 1, 1, 5907.471, 449.2349, 642.2161, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4616)
+(@OGUID+163,180415, 571, 1, 1, 5809.19, 466.7998, 658.7725, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+164,180415, 571, 1, 1, 5831.065, 442.6467, 658.7728, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+165,180415, 571, 1, 1, 5803.969, 464.4766, 658.7724, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+166,180415, 571, 1, 1, 5832.148, 448.1182, 658.7727, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+167,180415, 571, 1, 1, 5828.126, 437.6552, 658.7726, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+168,180406, 571, 1, 1, 5814.591, 573.3528, 649.9803, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+169,180406, 571, 1, 1, 5965.314, 596.2342, 650.6269, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4616)
+(@OGUID+170,180406, 571, 1, 1, 5943.678, 636.6887, 652.9681, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4616)
+(@OGUID+171,180410, 571, 1, 1, 5851.691, 630.7206, 658.9904, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4616)
+(@OGUID+172,180415, 571, 1, 1, 5849.42, 630.6858, 648.6568, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+173,180415, 571, 1, 1, 5850.446, 631.7395, 647.5121, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+174,180472, 571, 1, 1, 5845.358, 629.1765, 623.5621, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4616)
+(@OGUID+175,180407, 571, 1, 1, 5979.741, 625.2219, 650.6269, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4616)
+(@OGUID+176,180410, 571, 1, 1, 5842.257, 636.217, 647.894, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4616)
+(@OGUID+177,180415, 571, 1, 1, 5846.326, 633.0816, 648.738, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+178,180415, 571, 1, 1, 5847.134, 634.3536, 647.5121, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616)
+(@OGUID+179,180407, 571, 1, 1, 5818.687, 619.2923, 613.1467, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4616)
+(@OGUID+180,180415, 571, 1, 1, 5820.354, 632.9934, 647.3919, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+181,180415, 571, 1, 1, 5814.812, 625.3407, 647.392, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+182,180406, 571, 1, 1, 5808.426, 620.7781, 649.5657, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613)
+(@OGUID+183,180415, 571, 1, 1, 5809.522, 628.6146, 647.392, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+184,180472, 571, 1, 1, 5835.432, 637.2127, 619.9534, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613)
+(@OGUID+185,180415, 571, 1, 1, 5816.108, 637.7375, 647.392, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+186,180415, 571, 1, 1, 5814.764, 643.3781, 647.3929, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+187,180415, 571, 1, 1, 5806.706, 634.3302, 648.2245, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+188,180415, 571, 1, 1, 5803.731, 634.0671, 648.2162, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+189,180415, 571, 1, 1, 5803.088, 629.0997, 647.3966, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+190,180415, 571, 1, 1, 5817.476, 648.9861, 647.392, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+191,180415, 571, 1, 1, 5798.526, 625.1855, 647.392, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+192,180415, 571, 1, 1, 5809.953, 641.7255, 648.2184, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+193,180407, 571, 1, 1, 5800.643, 620.0817, 649.5657, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613)
+(@OGUID+194,180415, 571, 1, 1, 5810.266, 638.7852, 648.2237, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+195,180415, 571, 1, 1, 5814.763, 631.7408, 609.8859, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+196,180415, 571, 1, 1, 5824.873, 659.8167, 647.4612, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+197,180415, 571, 1, 1, 5795.606, 621.2239, 647.3924, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+198,180415, 571, 1, 1, 5805.514, 645.3051, 648.2424, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+199,180415, 571, 1, 1, 5815.022, 659.305, 647.4066, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+200,180415, 571, 1, 1, 5817.596, 637.9969, 609.8859, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+201,180415, 571, 1, 1, 5806.178, 650.1483, 647.3949, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+202,180415, 571, 1, 1, 5799.287, 637.6236, 648.2151, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+203,180415, 571, 1, 1, 5799.006, 640.5789, 648.2176, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+204,180415, 571, 1, 1, 5809.311, 627.6649, 609.8859, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+205,180415, 571, 1, 1, 5802.596, 644.9901, 648.22, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+206,180406, 571, 1, 1, 5799.613, 575.9578, 633.1762, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613)
+(@OGUID+207,180415, 571, 1, 1, 5791.946, 630.3287, 647.392, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+208,180415, 571, 1, 1, 5794.709, 635.8553, 647.3961, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+209,180415, 571, 1, 1, 5816.86, 644.9385, 609.8859, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+210,180415, 571, 1, 1, 5793.807, 640.3995, 647.3958, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+211,180415, 571, 1, 1, 5801.429, 649.8392, 647.4017, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+212,180415, 571, 1, 1, 5789.164, 626.7645, 647.3924, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+213,180415, 571, 1, 1, 5819.923, 663.9031, 647.4847, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+214,180415, 571, 1, 1, 5802.309, 626.9839, 609.8859, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+215,180415, 571, 1, 1, 5790.742, 604.8807, 609.8859, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+216,180415, 571, 1, 1, 5812.88, 650.5403, 609.8859, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+217,180415, 571, 1, 1, 5796.077, 629.7592, 609.8859, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+218,180415, 571, 1, 1, 5787.88, 598.5773, 609.8859, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+219,180415, 571, 1, 1, 5788.278, 648.998, 647.2794, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+220,180415, 571, 1, 1, 5792.746, 654.9274, 647.4214, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+221,180415, 571, 1, 1, 5829.179, 660.076, 609.8859, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+222,180415, 571, 1, 1, 5822.864, 662.8907, 609.8859, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+223,180415, 571, 1, 1, 5790.068, 611.6815, 609.8859, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+224,180415, 571, 1, 1, 5844.557, 671.1918, 609.8859, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+225,180415, 571, 1, 1, 5782.394, 594.4963, 609.8859, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+226,180415, 571, 1, 1, 5799.559, 652.5767, 609.8859, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+227,180415, 571, 1, 1, 5785.96, 617.3203, 609.8859, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+228,180415, 571, 1, 1, 5818.826, 668.4368, 609.8859, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+229,180415, 571, 1, 1, 5791.192, 642.2432, 609.8859, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+230,180415, 571, 1, 1, 5791.933, 635.3745, 609.8859, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+231,180415, 571, 1, 1, 5818.045, 675.3859, 609.8859, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+232,180415, 571, 1, 1, 5794.031, 648.5314, 609.8859, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+233,180415, 571, 1, 1, 5843.832, 678.011, 609.8859, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+234,180415, 571, 1, 1, 5839.708, 683.6341, 609.8859, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+235,180415, 571, 1, 1, 5772.786, 619.4384, 609.8859, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+236,180415, 571, 1, 1, 5779.674, 620.1669, 609.8859, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+237,180415, 571, 1, 1, 5775.475, 593.8323, 609.8859, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+238,180415, 571, 1, 1, 5820.88, 681.6428, 609.8859, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+239,180415, 571, 1, 1, 5833.342, 686.4538, 609.8859, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+240,180406, 571, 1, 1, 5770.311, 581.2781, 619.9363, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613)
+(@OGUID+241,180415, 571, 1, 1, 5769.2, 596.6345, 609.8859, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+242,180407, 571, 1, 1, 5753.431, 594.8392, 619.9331, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613)
+(@OGUID+243,180415, 571, 1, 1, 5767.191, 615.3619, 609.8859, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+244,180415, 571, 1, 1, 5765.103, 602.2392, 609.8859, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+245,180415, 571, 1, 1, 5764.401, 609.0145, 609.8859, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+246,180415, 571, 1, 1, 5799.662, 460.6987, 658.7724, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4598)
+(@OGUID+247,180415, 571, 1, 1, 5796.819, 455.7213, 658.7723, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4598)
+(@OGUID+248,180415, 571, 1, 1, 5796.333, 444.3685, 658.772, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4598)
+(@OGUID+249,180415, 571, 1, 1, 5795.719, 450.095, 658.7721, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4598)
+(@OGUID+250,180415, 571, 1, 1, 5798.614, 439.1821, 658.7722, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4598)
+(@OGUID+251,180415, 571, 1, 1, 5818.679, 431.5019, 658.7725, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4598)
+(@OGUID+252,180415, 571, 1, 1, 5823.953, 433.8398, 658.7726, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4598)
+(@OGUID+253,180415, 571, 1, 1, 5802.473, 434.9366, 658.7722, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4564)
+(@OGUID+254,180415, 571, 1, 1, 5807.424, 432.0813, 658.7723, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4564)
+(@OGUID+255,180415, 571, 1, 1, 5812.94, 430.9195, 658.7723, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4564)
+(@OGUID+256,180415, 571, 1, 1, 5754.749, 614.3086, 650.5781, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+257,180415, 571, 1, 1, 5752.304, 612.6968, 650.5865, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+258,180415, 571, 1, 1, 5749.63, 613.0443, 650.5931, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+259,180415, 571, 1, 1, 5747.075, 615.2822, 650.555, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+260,180415, 571, 1, 1, 5744.621, 617.712, 649.0058, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+261,180472, 571, 1, 1, 5762.698, 626.3858, 622.6323, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613)
+(@OGUID+262,180472, 571, 1, 1, 5751.257, 635.6403, 625.4073, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613)
+(@OGUID+263,180472, 571, 1, 1, 5772.164, 641.6515, 625.404, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613)
+(@OGUID+264,180472, 571, 1, 1, 5780.46, 648.5278, 623.1652, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613)
+(@OGUID+265,180415, 571, 1, 1, 5699.396, 613.3456, 646.913, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567)
+(@OGUID+266,180406, 571, 1, 1, 5715.341, 537.7757, 654.431, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4567)
+(@OGUID+267,180415, 571, 1, 1, 5694.938, 612.3784, 646.913, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567)
+(@OGUID+268,180415, 571, 1, 1, 5741.505, 643.7399, 648.7906, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567)
+(@OGUID+269,180415, 571, 1, 1, 5739.154, 636.8212, 648.0576, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567)
+(@OGUID+270,180407, 571, 1, 1, 5684.432, 627.8524, 647.1506, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4567)
+(@OGUID+271,180415, 571, 1, 1, 5705.729, 645.3735, 648.6602, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567)
+(@OGUID+272,180415, 571, 1, 1, 5705.89, 647.2834, 648.6602, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567)
+(@OGUID+273,180415, 571, 1, 1, 5706.852, 649.0601, 648.6602, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567)
+(@OGUID+274,180415, 571, 1, 1, 5708.286, 650.1924, 648.6602, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567)
+(@OGUID+275,180415, 571, 1, 1, 5744.292, 647.872, 650.5656, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567)
+(@OGUID+276,180472, 571, 1, 1, 5759.925, 650.0181, 625.4079, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4567)
+(@OGUID+277,180415, 571, 1, 1, 5747.346, 650.718, 650.5872, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567)
+(@OGUID+278,180415, 571, 1, 1, 5751.074, 649.3328, 650.5782, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567)
+(@OGUID+279,180472, 571, 1, 1, 5772.861, 661.1832, 625.4011, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4567)
+(@OGUID+280,180411, 571, 1, 1, 5725.395, 683.3143, 650.6137, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4613)
+(@OGUID+281,180407, 571, 1, 1, 5718.163, 673.8229, 647.5087, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613)
+(@OGUID+282,180407, 571, 1, 1, 5778.422, 682.1052, 643.6171, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613)
+(@OGUID+283,180406, 571, 1, 1, 5702.005, 692.7043, 655.5365, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613)
+(@OGUID+284,180415, 571, 1, 1, 5783.094, 693.3018, 647.382, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+285,180415, 571, 1, 1, 5784.806, 690.4636, 647.4271, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+286,180407, 571, 1, 1, 5663.047, 663.5198, 654.332, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613)
+(@OGUID+287,180472, 571, 1, 1, 5697.199, 694.4003, 650.3392, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613)
+(@OGUID+288,180411, 571, 1, 1, 5705.412, 698.7116, 659.8047, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4613)
+(@OGUID+289,180406, 571, 1, 1, 5796.241, 685.36, 622.4468, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613)
+(@OGUID+290,180415, 571, 1, 1, 5782.856, 691.076, 619.1068, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+291,180407, 571, 1, 1, 5776.292, 694.8016, 620.0498, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613)
+(@OGUID+292,180406, 571, 1, 1, 5710.861, 703.6387, 655.5365, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613)
+(@OGUID+293,180415, 571, 1, 1, 5773.052, 697.6647, 618.808, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+294,180415, 571, 1, 1, 5770.577, 700.3301, 618.9056, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+295,180415, 571, 1, 1, 5777.162, 695.6837, 618.886, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+296,180411, 571, 1, 1, 5762.035, 699.783, 621.4487, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4613)
+(@OGUID+297,180472, 571, 1, 1, 5695.049, 700.8595, 658.7589, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568)
+(@OGUID+298,180472, 571, 1, 1, 5692.463, 698.1651, 646.9638, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568)
+(@OGUID+299,180406, 571, 1, 1, 5656.161, 674.6107, 651.9675, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4568)
+(@OGUID+300,180406, 571, 1, 1, 5673.89, 687.817, 654.3331, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4568)
+(@OGUID+301,180407, 571, 1, 1, 5680.124, 714.1534, 653.8931, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4568)
+(@OGUID+302,180407, 571, 1, 1, 5643.794, 704.9396, 651.9927, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4568)
+(@OGUID+303,180472, 571, 1, 1, 5711.498, 710.7621, 658.8002, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568)
+(@OGUID+304,180472, 571, 1, 1, 5682.352, 717.6917, 660.2382, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568)
+(@OGUID+305,180472, 571, 1, 1, 5713.616, 713.4178, 659.8443, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568)
+(@OGUID+306,180472, 571, 1, 1, 5707.959, 708.0295, 650.3406, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568)
+(@OGUID+307,180472, 571, 1, 1, 5680.694, 719.1438, 648.2689, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568)
+(@OGUID+308,180472, 571, 1, 1, 5701.399, 708.7687, 658.7588, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568)
+(@OGUID+309,180407, 571, 1, 1, 5672.957, 714.2048, 642.0627, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4568)
+(@OGUID+310,180406, 571, 1, 1, 5677.349, 729.4107, 653.3925, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4568)
+(@OGUID+311,180407, 571, 1, 1, 5654.972, 745.8715, 643.2557, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4568)
+(@OGUID+312,180407, 571, 1, 1, 5629.459, 729.5208, 643.1681, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4568)
+(@OGUID+313,180406, 571, 1, 1, 5647.172, 752.6823, 643.2747, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4568)
+(@OGUID+314,180411, 571, 1, 1, 5740.034, 730.2188, 646.2493, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4568)
+(@OGUID+315,180415, 571, 1, 1, 5757.258, 714.6268, 621.7719, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4568)
+(@OGUID+316,180410, 571, 1, 1, 5754.624, 713.8906, 618.7103, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4568)
+(@OGUID+317,180411, 571, 1, 1, 5759.559, 714.3611, 646.4409, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4568)
+(@OGUID+318,180415, 571, 1, 1, 5760.468, 718.4333, 621.6825, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4568)
+(@OGUID+319,180410, 571, 1, 1, 5760.893, 721.6644, 618.6522, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4568)
+(@OGUID+320,180415, 571, 1, 1, 5783.688, 696.0384, 647.3867, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+321,180415, 571, 1, 1, 5785.933, 698.4983, 647.3533, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+322,180415, 571, 1, 1, 5788.838, 701.0469, 645.5853, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+323,180415, 571, 1, 1, 5787.46, 697.2659, 619.1364, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+324,180415, 571, 1, 1, 5782.752, 703.0441, 618.8907, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+325,180415, 571, 1, 1, 5790.956, 702.4618, 645.574, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+326,180415, 571, 1, 1, 5793.381, 703.7379, 645.5629, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+327,180415, 571, 1, 1, 5780.374, 706.554, 618.8164, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+328,180415, 571, 1, 1, 5777.6, 709.0973, 618.8805, 0.6981314, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+329,180415, 571, 1, 1, 5798.407, 704.9445, 643.7188, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+330,180415, 571, 1, 1, 5798.076, 707.0781, 643.2503, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+331,180407, 571, 1, 1, 5796.173, 707.6254, 641.702, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613)
+(@OGUID+332,180415, 571, 1, 1, 5797.557, 709.8958, 642.1785, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+333,180406, 571, 1, 1, 5805.458, 708.4065, 641.4847, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613)
+(@OGUID+334,180415, 571, 1, 1, 5803.493, 707.8524, 643.1374, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+335,180415, 571, 1, 1, 5808.656, 705.1858, 645.5119, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+336,180406, 571, 1, 1, 5810.498, 684.2795, 613.1106, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613)
+(@OGUID+337,180415, 571, 1, 1, 5815.443, 686.139, 620.7764, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+338,180429, 571, 1, 1, 5820.363, 685.0911, 651.8358, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 4613)
+(@OGUID+339,180415, 571, 1, 1, 5814.018, 684.253, 620.7783, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+340,180415, 571, 1, 1, 5803.706, 705.5712, 643.6826, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+341,180415, 571, 1, 1, 5819.794, 694.0382, 647.324, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+342,180415, 571, 1, 1, 5818.243, 689.6962, 620.7728, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+343,180415, 571, 1, 1, 5813.675, 703.7327, 645.5302, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+344,180415, 571, 1, 1, 5811.034, 704.5538, 645.5168, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+345,180415, 571, 1, 1, 5816.901, 687.9096, 620.7746, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+346,180415, 571, 1, 1, 5803.448, 710.5295, 642.1144, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+347,180415, 571, 1, 1, 5821.086, 697.1408, 647.4297, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+348,180415, 571, 1, 1, 5817.18, 701.6979, 647.2963, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+349,180428, 571, 1, 1, 5770.154, 735.5269, 641.4877, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180428 (Area: 4613)
+(@OGUID+350,180415, 571, 1, 1, 5819.856, 699.8424, 647.4349, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+351,180415, 571, 1, 1, 5826.483, 685.6487, 609.8859, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613)
+(@OGUID+352,180406, 571, 1, 1, 5759.826, 735.288, 619.8346, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613)
+(@OGUID+353,180408, 571, 1, 1, 5771.545, 737.5035, 643.0945, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4613)
+(@OGUID+354,180472, 571, 1, 1, 5778.527, 742.8954, 628.8207, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613)
+(@OGUID+355,180406, 571, 1, 1, 5715.729, 758.2275, 641.7689, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613)
+(@OGUID+356,180407, 571, 1, 1, 5849.386, 695.0423, 618.1664, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613)
+(@OGUID+357,180407, 571, 1, 1, 5824.359, 760.3876, 640.3284, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613)
+(@OGUID+358,180406, 571, 1, 1, 5817.995, 795.4424, 636.5713, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613)
+(@OGUID+359,180411, 571, 1, 1, 5866.639, 738.9694, 644.7529, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4619)
+(@OGUID+360,180415, 571, 1, 1, 5863.78, 735.2543, 640.5769, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4619)
+(@OGUID+361,180415, 571, 1, 1, 5863.101, 737.2114, 641.4838, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4619)
+(@OGUID+362,180415, 571, 1, 1, 5867.234, 738.8976, 641.493, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4619)
+(@OGUID+363,180415, 571, 1, 1, 5868.181, 737.1629, 640.6047, 5.235988, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4619)
+(@OGUID+364,180411, 571, 1, 1, 5866.184, 738.7732, 642.8267, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4619)
+(@OGUID+365,180406, 571, 1, 1, 5868.594, 725.371, 639.2031, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4619)
+(@OGUID+366,180407, 571, 1, 1, 5876.713, 739.0898, 639.2625, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4619)
+(@OGUID+367,180415, 571, 1, 1, 5881.346, 740.5377, 641.2245, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4619)
+(@OGUID+368,180415, 571, 1, 1, 5881.581, 738.4108, 640.2767, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4619)
+(@OGUID+369,180415, 571, 1, 1, 5885.815, 741.3719, 641.2227, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+370,180415, 571, 1, 1, 5886.161, 739.3089, 640.2971, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+371,180415, 571, 1, 1, 5894.53, 711.022, 642.7033, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+372,180415, 571, 1, 1, 5899.31, 745.5648, 641.9313, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+373,180415, 571, 1, 1, 5898.649, 743.8654, 640.9814, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+374,180415, 571, 1, 1, 5892.321, 708.2484, 643.9171, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+375,180415, 571, 1, 1, 5913.069, 726.2639, 642.1484, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+376,180415, 571, 1, 1, 5903.729, 744.6061, 642.0323, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+377,180411, 571, 1, 1, 5906.245, 742.7525, 644.4848, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0)
+(@OGUID+378,180415, 571, 1, 1, 5903.366, 742.7047, 641.1063, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+379,180415, 571, 1, 1, 5915.093, 726.1569, 643.0661, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+380,180415, 571, 1, 1, 5915.276, 730.6907, 643.0677, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+381,180415, 571, 1, 1, 5913.209, 731.0977, 642.1209, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+382,180415, 571, 1, 1, 5914.37, 712.4825, 643.2484, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+383,180415, 571, 1, 1, 5897.809, 708.4827, 642.675, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+384,180415, 571, 1, 1, 5912.41, 712.7233, 642.2968, 0.6981314, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+385,180415, 571, 1, 1, 5912.094, 708.0308, 642.4371, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+386,180415, 571, 1, 1, 5914.194, 707.9479, 643.3494, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+387,180415, 571, 1, 1, 5895.294, 705.7078, 643.9164, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+388,180407, 571, 1, 1, 5899.475, 704.617, 641.8773, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+389,180411, 571, 1, 1, 5895.397, 691.5417, 647.283, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0)
+(@OGUID+390,180415, 571, 1, 1, 5897.531, 684.7337, 643.5082, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4560)
+(@OGUID+391,180415, 571, 1, 1, 5900.777, 688.1335, 643.5274, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4560)
+(@OGUID+392,180415, 571, 1, 1, 5899.163, 683.2125, 644.4352, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4560)
+(@OGUID+393,180415, 571, 1, 1, 5902.085, 686.6057, 644.4786, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4560)
+(@OGUID+394,180429, 571, 1, 1, 5951.905, 675.3125, 656.6282, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 4570)
+(@OGUID+395, 180405, 571, 1, 1, 5760.702, 701.1509, 624.7817, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+396, 180405, 571, 1, 1, 5775.396, 533.9785, 643.1385, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+397, 180405, 571, 1, 1, 5847.228, 553.8382, 655.0237, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+398, 180405, 571, 1, 1, 5722.783, 531.7375, 654.4309, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+399, 180405, 571, 1, 1, 5822.742, 502.0839, 657.3818, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+400, 180405, 571, 1, 1, 5869.858, 617.1184, 619.7509, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+401, 180405, 571, 1, 1, 5854.306, 634.2508, 647.5121, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+402, 180405, 571, 1, 1, 5886.771, 528.7459, 641.8399, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+403, 180405, 571, 1, 1, 5863.885, 640.6849, 647.049, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+404, 180405, 571, 1, 1, 5917.715, 566.2281, 612.521, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+405, 180405, 571, 1, 1, 5860.379, 654.9897, 658.3739, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+406, 180405, 571, 1, 1, 5899.553, 509.2794, 643.4328, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+407, 180405, 571, 1, 1, 5865.935, 488.1068, 657.8251, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4616)
+(@OGUID+408, 180405, 571, 1, 1, 5899.716, 457.0769, 643.6509, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4616)
+(@OGUID+409, 180405, 571, 1, 1, 5804.67, 572.4031, 650.2531, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4616)
+(@OGUID+410, 180405, 571, 1, 1, 5952.642, 625.262, 650.6025, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4616)
+(@OGUID+411, 180405, 571, 1, 1, 5779.202, 595.5325, 651.0052, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+412, 180405, 571, 1, 1, 5904.518, 662.9713, 643.8431, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+413, 180405, 571, 1, 1, 5764.936, 593.0349, 615.7024, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+414, 180405, 571, 1, 1, 5742.553, 629.7415, 648.2349, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+415, 180405, 571, 1, 1, 5795.288, 666.0266, 613.8831, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4567)
+(@OGUID+416, 180405, 571, 1, 1, 5772.321, 675.5978, 643.5193, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+417, 180405, 571, 1, 1, 5715.069, 682.2311, 647.5992, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+418, 180405, 571, 1, 1, 5723.762, 693.092, 647.5992, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+419, 180405, 571, 1, 1, 5627.806, 677.0311, 651.9927, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4568)
+(@OGUID+420, 180405, 571, 1, 1, 5661.1, 685.0604, 651.9661, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4568)
+(@OGUID+421, 180405, 571, 1, 1, 5668.602, 719.249, 653.3779, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4568)
+(@OGUID+422, 180405, 571, 1, 1, 5688.877, 724.2303, 645.729, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4568)
+(@OGUID+423, 180405, 571, 1, 1, 5629.213, 732.0972, 643.1825, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4568)
+(@OGUID+424, 180405, 571, 1, 1, 5706.784, 747.1557, 641.7341, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4568)
+(@OGUID+425, 180405, 571, 1, 1, 5783.512, 703.9484, 620.0486, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+426, 180405, 571, 1, 1, 5821.932, 693.4803, 643.1427, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+427, 180405, 571, 1, 1, 5771.341, 737.5543, 641.4539, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+428, 180405, 571, 1, 1, 5790.703, 741.6038, 623.3499, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613)
+(@OGUID+429, 180405, 571, 1, 1, 5862, 734.8575, 639.8586, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4619)
+(@OGUID+430, 180405, 571, 1, 1, 5912.15, 721.3925, 641.4152, 4.97419, 0, 0, 0, 1, 120, 255, 1); -- 180405 (Area: 0)
+
+SET @OGUID:=77266;
+INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES
+(12, @OGUID+0),
+(12, @OGUID+1),
+(12, @OGUID+2),
+(12, @OGUID+3),
+(12, @OGUID+4),
+(12, @OGUID+5),
+(12, @OGUID+6),
+(12, @OGUID+7),
+(12, @OGUID+8),
+(12, @OGUID+9),
+(12, @OGUID+10),
+(12, @OGUID+11),
+(12, @OGUID+12),
+(12, @OGUID+13),
+(12, @OGUID+14),
+(12, @OGUID+15),
+(12, @OGUID+16),
+(12, @OGUID+17),
+(12, @OGUID+18),
+(12, @OGUID+19),
+(12, @OGUID+20),
+(12, @OGUID+21),
+(12, @OGUID+22),
+(12, @OGUID+23),
+(12, @OGUID+24),
+(12, @OGUID+25),
+(12, @OGUID+26),
+(12, @OGUID+27),
+(12, @OGUID+28),
+(12, @OGUID+29),
+(12, @OGUID+30),
+(12, @OGUID+31),
+(12, @OGUID+32),
+(12, @OGUID+33),
+(12, @OGUID+34),
+(12, @OGUID+35),
+(12, @OGUID+36),
+(12, @OGUID+37),
+(12, @OGUID+38),
+(12, @OGUID+39),
+(12, @OGUID+40),
+(12, @OGUID+51),
+(12, @OGUID+52),
+(12, @OGUID+53),
+(12, @OGUID+54),
+(12, @OGUID+55),
+(12, @OGUID+56),
+(12, @OGUID+57),
+(12, @OGUID+58),
+(12, @OGUID+59),
+(12, @OGUID+60),
+(12, @OGUID+61),
+(12, @OGUID+62),
+(12, @OGUID+63),
+(12, @OGUID+64),
+(12, @OGUID+65),
+(12, @OGUID+66),
+(12, @OGUID+67),
+(12, @OGUID+68),
+(12, @OGUID+69),
+(12, @OGUID+70),
+(12, @OGUID+71),
+(12, @OGUID+72),
+(12, @OGUID+73),
+(12, @OGUID+74),
+(12, @OGUID+75),
+(12, @OGUID+76),
+(12, @OGUID+77),
+(12, @OGUID+78),
+(12, @OGUID+79),
+(12, @OGUID+80),
+(12, @OGUID+81),
+(12, @OGUID+82),
+(12, @OGUID+83),
+(12, @OGUID+84),
+(12, @OGUID+85),
+(12, @OGUID+86),
+(12, @OGUID+87),
+(12, @OGUID+88),
+(12, @OGUID+89),
+(12, @OGUID+90),
+(12, @OGUID+91),
+(12, @OGUID+92),
+(12, @OGUID+93),
+(12, @OGUID+94),
+(12, @OGUID+95),
+(12, @OGUID+96),
+(12, @OGUID+97),
+(12, @OGUID+98),
+(12, @OGUID+99),
+(12, @OGUID+100),
+(12, @OGUID+101),
+(12, @OGUID+102),
+(12, @OGUID+103),
+(12, @OGUID+104),
+(12, @OGUID+105),
+(12, @OGUID+106),
+(12, @OGUID+107),
+(12, @OGUID+108),
+(12, @OGUID+109),
+(12, @OGUID+110),
+(12, @OGUID+111),
+(12, @OGUID+112),
+(12, @OGUID+113),
+(12, @OGUID+114),
+(12, @OGUID+115),
+(12, @OGUID+116),
+(12, @OGUID+117),
+(12, @OGUID+118),
+(12, @OGUID+119),
+(12, @OGUID+120),
+(12, @OGUID+121),
+(12, @OGUID+122),
+(12, @OGUID+123),
+(12, @OGUID+124),
+(12, @OGUID+125),
+(12, @OGUID+126),
+(12, @OGUID+127),
+(12, @OGUID+128),
+(12, @OGUID+129),
+(12, @OGUID+130),
+(12, @OGUID+131),
+(12, @OGUID+132),
+(12, @OGUID+133),
+(12, @OGUID+134),
+(12, @OGUID+135),
+(12, @OGUID+136),
+(12, @OGUID+137),
+(12, @OGUID+138),
+(12, @OGUID+139),
+(12, @OGUID+140),
+(12, @OGUID+141),
+(12, @OGUID+142),
+(12, @OGUID+143),
+(12, @OGUID+144),
+(12, @OGUID+145),
+(12, @OGUID+146),
+(12, @OGUID+147),
+(12, @OGUID+148),
+(12, @OGUID+149),
+(12, @OGUID+150),
+(12, @OGUID+151),
+(12, @OGUID+152),
+(12, @OGUID+153),
+(12, @OGUID+154),
+(12, @OGUID+155),
+(12, @OGUID+156),
+(12, @OGUID+157),
+(12, @OGUID+158),
+(12, @OGUID+159),
+(12, @OGUID+160),
+(12, @OGUID+161),
+(12, @OGUID+162),
+(12, @OGUID+163),
+(12, @OGUID+164),
+(12, @OGUID+165),
+(12, @OGUID+166),
+(12, @OGUID+167),
+(12, @OGUID+168),
+(12, @OGUID+169),
+(12, @OGUID+170),
+(12, @OGUID+171),
+(12, @OGUID+172),
+(12, @OGUID+173),
+(12, @OGUID+174),
+(12, @OGUID+175),
+(12, @OGUID+176),
+(12, @OGUID+177),
+(12, @OGUID+178),
+(12, @OGUID+179),
+(12, @OGUID+180),
+(12, @OGUID+181),
+(12, @OGUID+182),
+(12, @OGUID+183),
+(12, @OGUID+184),
+(12, @OGUID+185),
+(12, @OGUID+186),
+(12, @OGUID+187),
+(12, @OGUID+188),
+(12, @OGUID+189),
+(12, @OGUID+190),
+(12, @OGUID+191),
+(12, @OGUID+192),
+(12, @OGUID+193),
+(12, @OGUID+194),
+(12, @OGUID+195),
+(12, @OGUID+196),
+(12, @OGUID+197),
+(12, @OGUID+198),
+(12, @OGUID+199),
+(12, @OGUID+200),
+(12, @OGUID+201),
+(12, @OGUID+202),
+(12, @OGUID+203),
+(12, @OGUID+204),
+(12, @OGUID+205),
+(12, @OGUID+206),
+(12, @OGUID+207),
+(12, @OGUID+208),
+(12, @OGUID+209),
+(12, @OGUID+210),
+(12, @OGUID+211),
+(12, @OGUID+212),
+(12, @OGUID+213),
+(12, @OGUID+214),
+(12, @OGUID+215),
+(12, @OGUID+216),
+(12, @OGUID+217),
+(12, @OGUID+218),
+(12, @OGUID+219),
+(12, @OGUID+220),
+(12, @OGUID+221),
+(12, @OGUID+222),
+(12, @OGUID+223),
+(12, @OGUID+224),
+(12, @OGUID+225),
+(12, @OGUID+226),
+(12, @OGUID+227),
+(12, @OGUID+228),
+(12, @OGUID+229),
+(12, @OGUID+230),
+(12, @OGUID+231),
+(12, @OGUID+232),
+(12, @OGUID+233),
+(12, @OGUID+234),
+(12, @OGUID+235),
+(12, @OGUID+236),
+(12, @OGUID+237),
+(12, @OGUID+238),
+(12, @OGUID+239),
+(12, @OGUID+240),
+(12, @OGUID+241),
+(12, @OGUID+242),
+(12, @OGUID+243),
+(12, @OGUID+244),
+(12, @OGUID+245),
+(12, @OGUID+246),
+(12, @OGUID+247),
+(12, @OGUID+248),
+(12, @OGUID+249),
+(12, @OGUID+250),
+(12, @OGUID+251),
+(12, @OGUID+252),
+(12, @OGUID+253),
+(12, @OGUID+254),
+(12, @OGUID+255),
+(12, @OGUID+256),
+(12, @OGUID+257),
+(12, @OGUID+258),
+(12, @OGUID+259),
+(12, @OGUID+260),
+(12, @OGUID+261),
+(12, @OGUID+262),
+(12, @OGUID+263),
+(12, @OGUID+264),
+(12, @OGUID+265),
+(12, @OGUID+266),
+(12, @OGUID+267),
+(12, @OGUID+268),
+(12, @OGUID+269),
+(12, @OGUID+270),
+(12, @OGUID+271),
+(12, @OGUID+272),
+(12, @OGUID+273),
+(12, @OGUID+274),
+(12, @OGUID+275),
+(12, @OGUID+276),
+(12, @OGUID+277),
+(12, @OGUID+278),
+(12, @OGUID+279),
+(12, @OGUID+280),
+(12, @OGUID+281),
+(12, @OGUID+282),
+(12, @OGUID+283),
+(12, @OGUID+284),
+(12, @OGUID+285),
+(12, @OGUID+286),
+(12, @OGUID+287),
+(12, @OGUID+288),
+(12, @OGUID+289),
+(12, @OGUID+290),
+(12, @OGUID+291),
+(12, @OGUID+292),
+(12, @OGUID+293),
+(12, @OGUID+294),
+(12, @OGUID+295),
+(12, @OGUID+296),
+(12, @OGUID+297),
+(12, @OGUID+298),
+(12, @OGUID+299),
+(12, @OGUID+300),
+(12, @OGUID+301),
+(12, @OGUID+302),
+(12, @OGUID+303),
+(12, @OGUID+304),
+(12, @OGUID+305),
+(12, @OGUID+306),
+(12, @OGUID+307),
+(12, @OGUID+308),
+(12, @OGUID+309),
+(12, @OGUID+310),
+(12, @OGUID+311),
+(12, @OGUID+312),
+(12, @OGUID+313),
+(12, @OGUID+314),
+(12, @OGUID+315),
+(12, @OGUID+316),
+(12, @OGUID+317),
+(12, @OGUID+318),
+(12, @OGUID+319),
+(12, @OGUID+320),
+(12, @OGUID+321),
+(12, @OGUID+322),
+(12, @OGUID+323),
+(12, @OGUID+324),
+(12, @OGUID+325),
+(12, @OGUID+326),
+(12, @OGUID+327),
+(12, @OGUID+328),
+(12, @OGUID+329),
+(12, @OGUID+330),
+(12, @OGUID+331),
+(12, @OGUID+332),
+(12, @OGUID+333),
+(12, @OGUID+334),
+(12, @OGUID+335),
+(12, @OGUID+336),
+(12, @OGUID+337),
+(12, @OGUID+338),
+(12, @OGUID+339),
+(12, @OGUID+340),
+(12, @OGUID+341),
+(12, @OGUID+342),
+(12, @OGUID+343),
+(12, @OGUID+344),
+(12, @OGUID+345),
+(12, @OGUID+346),
+(12, @OGUID+347),
+(12, @OGUID+348),
+(12, @OGUID+349),
+(12, @OGUID+350),
+(12, @OGUID+351),
+(12, @OGUID+352),
+(12, @OGUID+353),
+(12, @OGUID+354),
+(12, @OGUID+355),
+(12, @OGUID+356),
+(12, @OGUID+357),
+(12, @OGUID+358),
+(12, @OGUID+359),
+(12, @OGUID+360),
+(12, @OGUID+361),
+(12, @OGUID+362),
+(12, @OGUID+363),
+(12, @OGUID+364),
+(12, @OGUID+365),
+(12, @OGUID+366),
+(12, @OGUID+367),
+(12, @OGUID+368),
+(12, @OGUID+369),
+(12, @OGUID+370),
+(12, @OGUID+371),
+(12, @OGUID+372),
+(12, @OGUID+373),
+(12, @OGUID+374),
+(12, @OGUID+375),
+(12, @OGUID+376),
+(12, @OGUID+377),
+(12, @OGUID+378),
+(12, @OGUID+379),
+(12, @OGUID+380),
+(12, @OGUID+381),
+(12, @OGUID+382),
+(12, @OGUID+383),
+(12, @OGUID+384),
+(12, @OGUID+385),
+(12, @OGUID+386),
+(12, @OGUID+387),
+(12, @OGUID+388),
+(12, @OGUID+389),
+(12, @OGUID+390),
+(12, @OGUID+391),
+(12, @OGUID+392),
+(12, @OGUID+393),
+(12, @OGUID+394),
+(12, @OGUID+395),
+(12, @OGUID+396),
+(12, @OGUID+397),
+(12, @OGUID+398),
+(12, @OGUID+399),
+(12, @OGUID+400),
+(12, @OGUID+401),
+(12, @OGUID+402),
+(12, @OGUID+403),
+(12, @OGUID+404),
+(12, @OGUID+405),
+(12, @OGUID+406),
+(12, @OGUID+407),
+(12, @OGUID+408),
+(12, @OGUID+409),
+(12, @OGUID+410),
+(12, @OGUID+411),
+(12, @OGUID+412),
+(12, @OGUID+413),
+(12, @OGUID+414),
+(12, @OGUID+415),
+(12, @OGUID+416),
+(12, @OGUID+417),
+(12, @OGUID+418),
+(12, @OGUID+419),
+(12, @OGUID+420),
+(12, @OGUID+421),
+(12, @OGUID+422),
+(12, @OGUID+423),
+(12, @OGUID+424),
+(12, @OGUID+425),
+(12, @OGUID+426),
+(12, @OGUID+427),
+(12, @OGUID+428),
+(12, @OGUID+429),
+(12, @OGUID+430);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_00_world335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_00_world335.sql
new file mode 100644
index 00000000000..36583239a4d
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_00_world335.sql
@@ -0,0 +1,31 @@
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=5667;
+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
+(5667, 0, 0, 'Hey Knot - I''m a Leatherworker. Think you could teach me how to make the ogre suit?', 9403, 1, 1, 0, 0, 0, 0, '', 0),
+(5667, 1, 0, 'Hey Knot - I''m a Tailor. Think you could teach me how to make the ogre suit?', 9404, 1, 1, 0, 0, 0, 0, '', 0);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=5667;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, 5667, 0, 0, 0, 7, 0, 165, 275, 0, 0, 0, 0, '', 'Only show gossip option if player has Leatherworking with skill level 275'),
+(15, 5667, 1, 0, 0, 7, 0, 197, 275, 0, 0, 0, 0, '', 'Only show gossip option if player has Tailoring with skill level 275');
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=14338 AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=1433800 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
+(14338, 0, 0, 0, 20, 0, 100, 1, 5525, 0, 0, 0, 80, 1433800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Knot - On Free Knot! Reward - run script'),
+(14338, 0, 1, 0, 20, 0, 100, 1, 7429, 0, 0, 0, 80, 1433800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Knot - On Free Knot! Reward - run script'),
+(14338, 0, 2, 0, 34, 0, 100, 0, 0, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Knot - On Point Reached - Despawn'),
+(14338, 0, 3, 0, 25, 0, 100, 0, 0, 0, 0, 0, 50, 179511, 43200, 0, 0, 0, 0, 8, 0, 0, 0, 581.241, 524.321, -25.4027, -2.79252, 'Knot - On Reset - Spawn Ball and Chain'),
+(14338, 0, 4, 6, 62, 0, 100, 0, 5667, 0, 0, 0, 85, 22816, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Knot - On Gossip Select - Cast Gordok Ogre Suit'),
+(14338, 0, 5, 6, 62, 0, 100, 0, 5667, 1, 0, 0, 85, 22814, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Knot - On Gossip Select - Cast Gordok Ogre Suit'),
+(14338, 0, 6, 0, 61, 0, 100, 0, 5667, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Knot - On Gossip Select - Close Gossip'),
+
+(1433800, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Knot - Script - Say 0'),
+(1433800, 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, 'Knot - Script - Remove npc flag'),
+(1433800, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 70, 43200, 0, 0, 0, 0, 0, 20, 179511, 10, 0, 0, 0, 0, 0, 'Knot - Script - Despawn Ball and Chain'),
+(1433800, 9, 3, 0, 0, 0, 100, 0, 500, 500, 0, 0, 50, 179501, 43200, 0, 0, 0, 0, 8, 0, 0, 0, 583.6, 523.44, -25.4, 3.1848, 'Knot - Script - Spawn Cache'),
+(1433800, 9, 4, 0, 0, 0, 100, 0, 1500, 1500, 0, 0, 69, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 500.42, 540.966, -25.3194, 2.72271, 'Knot - Script - Move Point');
+
+DELETE FROM `creature_text` WHERE `entry`=14338;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(14338, 0, 0, '$n, I\'ll make sure all my friends in the Cartel know that you\'ve saved my life today. Here - I\'m going to need to be able to travel light, so please help yourself to my cache of tailoring and leatherworking supplies! Thanks again - see ya!', 12, 0, 0, 0, 0, 0, 9346, 0, 'Knot');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_01_world.sql
new file mode 100644
index 00000000000..4e3986e5ca3
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_01_world.sql
@@ -0,0 +1,25 @@
+ UPDATE `smart_scripts` SET `event_phase_mask`=1 WHERE `entryorguid`=32257 AND `source_type`=0 AND `id` in(0,1,2);
+
+
+ DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=32257 AND `id`>2;
+ DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid`=3225700;
+ DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid`=3214901;
+
+ DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=32149 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
+ (32257, 0, 3, 0, 1, 0, 100, 0, 5000, 5000, 5000, 5000, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Scourge Converter - OOC - Set Phase 2'),
+ (32257, 0, 4, 0, 4, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Scourge Converter - On Agro - Set Phase 1'),
+ (32257, 0, 5, 0, 75, 2,33, 0, 0, 32149, 40, 120000, 80, 3225700, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Scourge Converter - On Fallen Heros Spirit within 30 yards (Phase 2/5% Chance) - Run Script'),
+ (32149, 0, 1, 0, 8, 0, 100, 1, 60231, 0, 0, 0, 80, 3214901, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Fallen Hero\'s Spirit - On Spellhit "Grip of the Scourge" - Run Script'),
+ (3214901, 9, 0, 0, 0, 0, 100, 0, 10, 10, 0, 0, 75, 60231, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Fallen Heros Spirit - Script - Add Aura Grip of the Scourge'),
+ (3214901, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Fallen Heros Spirit - Script - Turn random movement off'),
+
+ (3214901, 9, 2, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 7464.0068, 2445.8369, 384.2378, 0, 'Fallen Heros Spirit - Script - Move to Position'),
+ (3214901, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 10000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Fallen Heros Spirit - Script - Despawn'),
+ (3225700, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 60212, 64, 0, 0, 0, 0, 19, 32149, 0, 0, 0, 0, 0, 0, 'Scourge Converter - Script - Cast Grip of the Scourge');
+
+ DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry`=66719 AND `ConditionTypeOrReference`=1;
+
+ INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+ (17, 0, 66719, 0, 0, 1, 1, 60231, 0, 0, 1, 0, 0, '', 'Blessing of Peace cannot be cast on unit with Grip of the Scourge');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_02_world.sql
new file mode 100644
index 00000000000..6df624989d1
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_02_world.sql
@@ -0,0 +1,648 @@
+SET @OGUID:=77697;
+DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+325 AND `eventEntry`=12;
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+325;
+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, 180431, 530, 1, 1, -1534.655, 5289.483, 11.84585, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: -1)
+(@OGUID+1, 180431, 530, 1, 1, -1551.18, 5096.325, -18.82875, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: -1)
+(@OGUID+2, 180431, 530, 1, 1, -1995.255, 5121.023, 8.559834, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: -1)
+(@OGUID+3, 180408, 530, 1, 1, -1827.292, 5290.855, -12.42814, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: -1)
+(@OGUID+4, 180431, 530, 1, 1, -1885.991, 4967.481, -21.06316, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: -1)
+(@OGUID+5, 180431, 530, 1, 1, -2215.704, 5421.465, 51.26691, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: -1)
+(@OGUID+6, 180431, 530, 1, 1, -2170.908, 5149.174, -19.88593, 6.0912, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: -1)
+(@OGUID+7, 185434, 530, 1, 1, -1730.203, 5241.882, -48.3983, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 185434 (Area: 3899)
+(@OGUID+8, 180415, 530, 1, 1, -1713.155, 5189.252, -40.20916, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+9, 180407, 530, 1, 1, -1726.565, 5195.366, -40.20916, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3899)
+(@OGUID+10, 180472, 530, 1, 1, -1711.832, 5189.654, -35.45917, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3899)
+(@OGUID+11, 185434, 530, 1, 1, -1695.124, 5272.625, -50.12435, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 185434 (Area: 3899)
+(@OGUID+12, 180415, 530, 1, 1, -1668.301, 5242.631, -51.47162, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+13, 180415, 530, 1, 1, -1746.134, 5166.982, -35.90804, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+14, 180407, 530, 1, 1, -1694.59, 5185.016, -40.20916, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3899)
+(@OGUID+15, 180415, 530, 1, 1, -1746.674, 5164.065, -35.90804, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+16, 180415, 530, 1, 1, -1767.908, 5170.395, -38.40183, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+17, 180415, 530, 1, 1, -1665.969, 5242.099, -51.50999, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+18, 180415, 530, 1, 1, -1697.149, 5183.031, -40.20916, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+19, 180415, 530, 1, 1, -1746.348, 5166.079, -35.90804, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+20, 180415, 530, 1, 1, -1666.871, 5242.716, -51.67263, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+21, 180415, 530, 1, 1, -1749.273, 5163.449, -37.20491, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+22, 180405, 530, 1, 1, -1666.335, 5238.355, -50.38025, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3899)
+(@OGUID+23, 180415, 530, 1, 1, -1754.351, 5174.463, -38.41282, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+24, 180415, 530, 1, 1, -1721.349, 5167.382, -40.20916, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+25, 180415, 530, 1, 1, -1746.573, 5164.723, -35.90804, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+26, 180415, 530, 1, 1, -1664.876, 5241.221, -51.22554, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+27, 180415, 530, 1, 1, -1746.429, 5165.326, -35.90803, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+28, 180415, 530, 1, 1, -1726.724, 5175.467, -40.20916, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+29, 180415, 530, 1, 1, -1731.426, 5173.524, -40.20916, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+30, 180406, 530, 1, 1, -1771.68, 5173.339, -40.20917, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3899)
+(@OGUID+31, 180415, 530, 1, 1, -1746.179, 5167.779, -35.90804, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+32, 180415, 530, 1, 1, -1663.543, 5236.966, -50.02916, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+33, 180415, 530, 1, 1, -1790.927, 5177.194, -41.12518, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+34, 180415, 530, 1, 1, -1701.983, 5172.746, -40.20916, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+35, 180415, 530, 1, 1, -1663.604, 5235.882, -49.77483, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+36, 180415, 530, 1, 1, -1792.114, 5174.076, -40.86684, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+37, 180415, 530, 1, 1, -1663.852, 5235.025, -49.56621, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+38, 180407, 530, 1, 1, -1739.737, 5159.344, -34.7813, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3899)
+(@OGUID+39, 180415, 530, 1, 1, -1664.292, 5240.016, -50.89723, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+40, 180415, 530, 1, 1, -1745.957, 5161.741, -35.90803, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+41, 180415, 530, 1, 1, -1706.435, 5167.831, -40.20916, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+42, 180415, 530, 1, 1, -1737.001, 5157.635, -36.06097, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+43, 180415, 530, 1, 1, -1748.725, 5161.841, -37.20491, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+44, 180415, 530, 1, 1, -1663.867, 5238.99, -50.61524, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+45, 180415, 530, 1, 1, -1745.184, 5160.036, -35.90804, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+46, 180415, 530, 1, 1, -1739.258, 5162.583, -36.06791, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+47, 180415, 530, 1, 1, -1663.598, 5238.002, -50.30962, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+48, 180415, 530, 1, 1, -1744.431, 5157.619, -35.90803, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+49, 180415, 530, 1, 1, -1770.254, 5159.312, -35.90804, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+50, 180415, 530, 1, 1, -1768.823, 5157.79, -35.90805, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+51, 180415, 530, 1, 1, -1691.969, 5171.893, -40.20916, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+52, 180415, 530, 1, 1, -1742.25, 5152.299, -35.90804, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+53, 180415, 530, 1, 1, -1766.36, 5158.437, -37.20492, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+54, 180415, 530, 1, 1, -1769.767, 5158.846, -35.90805, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+55, 180415, 530, 1, 1, -1765.703, 5156.897, -37.20491, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+56, 180415, 530, 1, 1, -1743.057, 5154.369, -35.90804, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+57, 180415, 530, 1, 1, -1778.556, 5162.756, -40.20917, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+58, 180415, 530, 1, 1, -1678.028, 5180.92, -40.20916, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+59, 180415, 530, 1, 1, -1769.271, 5158.336, -35.90804, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+60, 180415, 530, 1, 1, -1768.123, 5155.603, -35.90804, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+61, 180415, 530, 1, 1, -1771.096, 5160.236, -35.90804, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+62, 180415, 530, 1, 1, -1746.076, 5154.508, -37.2049, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+63, 180415, 530, 1, 1, -1743.914, 5156.47, -35.90803, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+64, 180415, 530, 1, 1, -1770.592, 5159.727, -35.90804, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+65, 180415, 530, 1, 1, -1745.323, 5152.098, -37.20491, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+66, 180415, 530, 1, 1, -1680.046, 5182.063, -40.20916, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+67, 180415, 530, 1, 1, -1743.301, 5155.08, -35.90803, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+68, 180415, 530, 1, 1, -1663.519, 5293.407, -49.5914, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+69, 180415, 530, 1, 1, -1767.19, 5150.615, -35.90804, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+70, 180415, 530, 1, 1, -1797.811, 5163.908, -40.20916, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+71, 180415, 530, 1, 1, -1763.264, 5146.753, -37.20491, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+72, 180415, 530, 1, 1, -1664.684, 5293.219, -49.66723, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+73, 180415, 530, 1, 1, -1766.92, 5149.255, -35.90804, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+74, 180415, 530, 1, 1, -1763.881, 5149.05, -37.20491, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+75, 180415, 530, 1, 1, -1781.224, 5155.466, -40.20916, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+76, 180415, 530, 1, 1, -1766.588, 5147.896, -35.90804, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+77, 180415, 530, 1, 1, -1774.051, 5152.581, -36.06793, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+78, 180415, 530, 1, 1, -1767.712, 5153.141, -35.90804, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+79, 180406, 530, 1, 1, -1727.872, 5151.118, -34.72747, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3899)
+(@OGUID+80, 180415, 530, 1, 1, -1647.858, 5322.972, -40.20916, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+81, 180415, 530, 1, 1, -1653.098, 5316.989, -40.20916, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+82, 180415, 530, 1, 1, -1623.009, 5353.79, -39.90628, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+83, 180415, 530, 1, 1, -1650.696, 5301.975, -40.15569, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+84, 180415, 530, 1, 1, -1627.55, 5350.804, -39.69448, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+85, 180415, 530, 1, 1, -1649.128, 5294.073, -40.33651, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+86, 180415, 530, 1, 1, -1656.347, 5308.329, -40.20916, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+87, 180415, 530, 1, 1, -1640.815, 5324.775, -40.0241, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+88, 180415, 530, 1, 1, -1630.996, 5346.603, -39.8759, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+89, 180415, 530, 1, 1, -1650.263, 5289.858, -40.64635, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+90, 180415, 530, 1, 1, -1640.641, 5328.2, -40.13517, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+91, 180415, 530, 1, 1, -1604.216, 5327.811, -40.20916, 5.235988, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+92, 180415, 530, 1, 1, -1620.229, 5273.603, -40.8573, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+93, 180415, 530, 1, 1, -1615.813, 5287.19, -40.76569, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+94, 180415, 530, 1, 1, -1643.108, 5261.086, -41.00774, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+95, 180415, 530, 1, 1, -1610.787, 5322.729, -40.20916, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+96, 180415, 530, 1, 1, -1614.804, 5285.652, -40.81396, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+97, 180415, 530, 1, 1, -1641.931, 5257.188, -40.93716, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+98, 180415, 530, 1, 1, -1618.817, 5355.966, -40.20382, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+99, 180415, 530, 1, 1, -1614.204, 5284.298, -40.8007, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+100, 180415, 530, 1, 1, -1604.152, 5341.309, -40.20916, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+101, 180415, 530, 1, 1, -1616.99, 5277.182, -40.82001, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+102, 180415, 530, 1, 1, -1616.733, 5288.768, -40.65269, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+103, 180415, 530, 1, 1, -1615.797, 5268.268, -40.774, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+104, 180407, 530, 1, 1, -1620.341, 5252.917, -40.79367, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3899)
+(@OGUID+105, 180415, 530, 1, 1, -1615.02, 5261.716, -40.74166, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+106, 180415, 530, 1, 1, -1593.996, 5360.147, -40.20916, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+107, 180415, 530, 1, 1, -1600.158, 5344.43, -40.20916, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+108, 180407, 530, 1, 1, -1592.862, 5307.45, -38.57781, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3899)
+(@OGUID+109, 180415, 530, 1, 1, -1594.889, 5261.762, -13.97506, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+110, 180415, 530, 1, 1, -1597.819, 5264.682, -14.05011, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+111, 180415, 530, 1, 1, -1597.493, 5366.856, -40.20916, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+112, 180406, 530, 1, 1, -1592.3, 5357.065, -40.20916, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3899)
+(@OGUID+113, 180415, 530, 1, 1, -1596.895, 5263.488, -14.02306, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+114, 180415, 530, 1, 1, -1612.543, 5247.093, -40.65835, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+115, 180415, 530, 1, 1, -1622.793, 5243.489, -40.80069, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+116, 180415, 530, 1, 1, -1595.962, 5262.593, -13.99772, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+117, 180415, 530, 1, 1, -1616.154, 5244.095, -40.70304, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+118, 180415, 530, 1, 1, -1620.814, 5239.755, -40.75924, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+119, 180431, 530, 1, 1, -1688.561, 5666.329, 130.5969, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 3899)
+(@OGUID+120, 180415, 530, 1, 1, -1593.098, 5260.721, -13.94664, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+121, 180410, 530, 1, 1, -1617.977, 5403.792, -38.17708, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3899)
+(@OGUID+122, 180405, 530, 1, 1, -1612.946, 5424.752, -38.85912, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+123, 180415, 530, 1, 1, -1614.504, 5415.917, -38.86249, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+124, 180415, 530, 1, 1, -1614.682, 5413.557, -38.85962, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+125, 180415, 530, 1, 1, -1614.065, 5412.168, -38.85929, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+126, 180415, 530, 1, 1, -1614.54, 5414.432, -38.86086, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+127, 180415, 530, 1, 1, -1615.161, 5408.31, -39.67566, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+128, 180415, 530, 1, 1, -1615.594, 5407.222, -40.56182, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+129, 180415, 530, 1, 1, -1613.32, 5410.315, -38.85626, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+130, 180415, 530, 1, 1, -1617.042, 5407.143, -41.05295, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+131, 180415, 530, 1, 1, -1614.408, 5409.302, -38.85281, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+132, 180415, 530, 1, 1, -1613.731, 5407.422, -39.67501, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+133, 180410, 530, 1, 1, -1618.031, 5406.084, -37.86068, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+134, 180472, 530, 1, 1, -1648.206, 5544.745, 15.57858, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+135, 180431, 530, 1, 1, -1822.676, 5698.866, 129.1411, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+136, 180431, 530, 1, 1, -1910.552, 5698.088, 124.9568, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+137, 180405, 530, 1, 1, -1648.345, 5544.776, 16.72861, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+138, 185434, 530, 1, 1, -1598.392, 5396.745, -40.17126, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 185434 (Area: 0)
+(@OGUID+139, 185455, 530, 1, 1, -1709.808, 5632.51, 127.9465, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 185455 (Area: 3899)
+(@OGUID+140, 180415, 530, 1, 1, -1710.33, 5634.917, 127.9465, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+141, 180415, 530, 1, 1, -1711.769, 5633.732, 127.9465, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+142, 180429, 530, 1, 1, -1707.317, 5645.849, 130.3365, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 3899)
+(@OGUID+143, 180415, 530, 1, 1, -1591.131, 5260.113, -13.96355, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+144, 180407, 530, 1, 1, -1650.866, 5190.316, -38.87681, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3899)
+(@OGUID+145, 180406, 530, 1, 1, -1645.201, 5199.991, -38.8768, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3899)
+(@OGUID+146, 180415, 530, 1, 1, -1618.823, 5181.593, -33.82702, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+147, 180415, 530, 1, 1, -1601.915, 5171.649, -30.58988, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+148, 180415, 530, 1, 1, -1608.95, 5160.993, -30.56009, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+149, 180415, 530, 1, 1, -1624.757, 5172.668, -33.79735, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+150, 180415, 530, 1, 1, -1602.198, 5152.721, -28.87143, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+151, 180415, 530, 1, 1, -1591.732, 5168.822, -28.87342, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+152, 180406, 530, 1, 1, -1723.19, 5136.492, -35.09916, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3899)
+(@OGUID+153, 180415, 530, 1, 1, -1584.816, 5160.914, -27.39262, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+154, 180411, 530, 1, 1, -1742.706, 5137.688, -30.48351, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3899)
+(@OGUID+155, 180415, 530, 1, 1, -1593.068, 5148.36, -27.30097, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+156, 180415, 530, 1, 1, -1566.594, 5148.008, -23.49201, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+157, 180415, 530, 1, 1, -1575.762, 5134.228, -23.58824, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+158, 185434, 530, 1, 1, -1744.142, 5123.62, -35.82451, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 185434 (Area: 0)
+(@OGUID+159, 180411, 530, 1, 1, -1758.289, 5131.851, -30.40018, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0)
+(@OGUID+160, 180415, 530, 1, 1, -1766.187, 5145.766, -35.90804, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+161, 180405, 530, 1, 1, -1756.477, 5130.035, -36.26126, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+162, 180415, 530, 1, 1, -1773.81, 5148.538, -36.06519, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+163, 180415, 530, 1, 1, -1772.502, 5143.563, -36.23128, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+164, 180415, 530, 1, 1, -1774.292, 5139.007, -36.21167, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+165, 180415, 530, 1, 1, -1775.087, 5137.319, -36.26489, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+166, 180405, 530, 1, 1, -1777.374, 5136.409, -34.72696, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+167, 180405, 530, 1, 1, -1773.338, 5121.479, -35.0905, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+168, 180415, 530, 1, 1, -1769.995, 5125.528, -36.02662, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+169, 180415, 530, 1, 1, -1772.336, 5122.282, -35.83616, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+170, 180415, 530, 1, 1, -1787.647, 5148.141, -40.20916, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+171, 180415, 530, 1, 1, -1781.443, 5131.746, -34.77077, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+172, 180415, 530, 1, 1, -1771.183, 5123.882, -35.90277, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+173, 180415, 530, 1, 1, -1782.792, 5132.561, -34.69776, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+174, 180415, 530, 1, 1, -1776.1, 5136.846, -35.92095, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+175, 180415, 530, 1, 1, -1778.352, 5124.249, -34.69559, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+176, 180415, 530, 1, 1, -1800.136, 5141.807, -40.20917, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+177, 180415, 530, 1, 1, -1804.512, 5157.381, -40.20917, 1.239183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+178, 180415, 530, 1, 1, -1779.405, 5125.828, -34.73515, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+179, 180407, 530, 1, 1, -1798.805, 5132.179, -40.20916, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+180, 180415, 530, 1, 1, -1793.893, 5143.439, -40.20916, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+181, 180415, 530, 1, 1, -1853.723, 5200.164, -40.20916, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+182, 180406, 530, 1, 1, -1829.19, 5132.753, -36.21552, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+183, 180415, 530, 1, 1, -1852.917, 5204.884, -40.20917, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+184, 180415, 530, 1, 1, -1846.027, 5211.841, -40.20916, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+185, 180407, 530, 1, 1, -1830.194, 5129.449, -36.20708, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+186, 180415, 530, 1, 1, -1849.075, 5210.507, -40.20917, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+187, 180405, 530, 1, 1, -1828.722, 5136.165, -36.61174, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+188, 180407, 530, 1, 1, -1845.585, 5181.297, -48.83864, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+189, 180415, 530, 1, 1, -1802.642, 5133.133, -40.20916, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+190, 180415, 530, 1, 1, -1851.821, 5208.425, -40.20916, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+191, 180415, 530, 1, 1, -1857.086, 5210.439, -40.20916, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+192, 180415, 530, 1, 1, -1859.659, 5207.607, -40.20916, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+193, 180415, 530, 1, 1, -1856.036, 5214.328, -40.20916, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+194, 180415, 530, 1, 1, -1848.79, 5084.666, -33.83941, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+195, 180410, 530, 1, 1, -1913.184, 5138.171, -37.93413, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+196, 180407, 530, 1, 1, -1874.145, 5136.215, -40.20916, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+197, 180411, 530, 1, 1, -1879.563, 5125.416, -28.39666, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0)
+(@OGUID+198, 180406, 530, 1, 1, -1896.112, 5150.331, -38.65614, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+199, 180415, 530, 1, 1, -1859.411, 5085.3, -33.84349, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+200, 180415, 530, 1, 1, -1848.927, 5065.024, -30.60378, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+201, 180415, 530, 1, 1, -1865.414, 5055.882, -28.88485, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+202, 180407, 530, 1, 1, -1908.842, 5158.162, -40.20916, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+203, 180472, 530, 1, 1, -1924.396, 5137.794, -30.42237, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+204, 180415, 530, 1, 1, -1846.269, 5054.519, -28.83364, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+205, 180415, 530, 1, 1, -1910.569, 5159.94, -40.20916, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+206, 180472, 530, 1, 1, -1924.554, 5144.456, -30.56359, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+207, 180415, 530, 1, 1, -1912.345, 5164.043, -40.20916, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+208, 180410, 530, 1, 1, -1922.556, 5136.9, -37.5277, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+209, 180415, 530, 1, 1, -1862.386, 5205.07, -40.20916, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+210, 180415, 530, 1, 1, -1861.724, 5065.828, -30.52389, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+211, 180415, 530, 1, 1, -1849.668, 5044.827, -27.33423, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+212, 180410, 530, 1, 1, -1933.896, 5139.628, -36.7346, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+213, 180410, 530, 1, 1, -1933.745, 5142.19, -36.79674, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+214, 180415, 530, 1, 1, -1946.493, 5150.041, -40.20916, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+215, 180407, 530, 1, 1, -1932.899, 5165.837, -40.20917, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+216, 180415, 530, 1, 1, -1864.642, 5045.729, -27.34014, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+217, 180415, 530, 1, 1, -1935.678, 5168, -40.20916, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+218, 180405, 530, 1, 1, -1946.298, 5152.045, 19.95769, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+219, 180415, 530, 1, 1, -1851.71, 5022.643, -23.50557, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+220, 180415, 530, 1, 1, -1868.281, 5023.652, -23.48158, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+221, 180339, 530, 1, 1, -1837.953, 4921.162, -18.875, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0)
+(@OGUID+222, 180338, 530, 1, 1, -1783.58, 4937.418, -22.87706, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+223, 180415, 530, 1, 1, -1956.957, 5150.171, -40.20916, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+224, 180415, 530, 1, 1, -1956.558, 5153.624, -40.20916, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+225, 180415, 530, 1, 1, -1946.968, 5183.813, -40.20916, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+226, 180415, 530, 1, 1, -1976.524, 5163.211, -37.86652, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+227, 180406, 530, 1, 1, -1964.799, 5158.828, 20.03405, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+228, 180405, 530, 1, 1, -1966.638, 5166.105, -38.13643, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+229, 180415, 530, 1, 1, -1960.333, 5168.675, -37.84088, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+230, 180406, 530, 1, 1, -2002.535, 5178.877, -40.20916, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+231, 180415, 530, 1, 1, -1975.752, 5182.889, -40.20917, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+232, 180415, 530, 1, 1, -1966.224, 5179.32, -37.85986, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+233, 180415, 530, 1, 1, -1990.585, 5176.176, -40.20916, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+234, 180415, 530, 1, 1, -1984.641, 5181.01, -40.20916, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+235, 180415, 530, 1, 1, -1975.384, 5162.208, -37.85071, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+236, 180415, 530, 1, 1, -2019.362, 5190.989, -35.6937, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+237, 180415, 530, 1, 1, -2021.95, 5196.345, -35.69493, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+238, 180415, 530, 1, 1, -1940.617, 5186.5, -40.20917, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+239, 180415, 530, 1, 1, -2010.293, 5209.039, -35.69574, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+240, 180407, 530, 1, 1, -2004.333, 5223.759, -35.69689, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+241, 180415, 530, 1, 1, -2002.867, 5221.198, -35.69662, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+242, 180415, 530, 1, 1, -2007.341, 5224.245, -35.697, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+243, 180431, 530, 1, 1, -1746.621, 5620.082, 127.9465, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+244, 180405, 530, 1, 1, -2040.23, 5272.147, -39.39414, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+245, 180472, 530, 1, 1, -2037.333, 5278.771, -34.47883, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+246, 180415, 530, 1, 1, -2063.034, 5263.798, -38.4651, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+247, 180415, 530, 1, 1, -2047.227, 5279.073, -38.46528, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+248, 180415, 530, 1, 1, -2049.917, 5283.648, -38.46651, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+249, 180472, 530, 1, 1, -2061.579, 5254.934, -33.4444, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+250, 180415, 530, 1, 1, -2066.363, 5251.825, -38.46505, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+251, 180415, 530, 1, 1, -2094.274, 5197.883, -30.58273, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+252, 180415, 530, 1, 1, -2088.683, 5180.594, -29.04385, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+253, 180415, 530, 1, 1, -2072.257, 5204.007, -33.86522, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+254, 180415, 530, 1, 1, -2080.019, 5211.397, -33.80571, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+255, 180415, 530, 1, 1, -2075.596, 5271.93, -37.32354, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+256, 180415, 530, 1, 1, -2084.991, 5189.033, -30.6074, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+257, 180415, 530, 1, 1, -2076.316, 5273.985, -37.32354, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+258, 180415, 530, 1, 1, -2098.523, 5174.088, -27.32298, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+259, 180415, 530, 1, 1, -2126.393, 5169.769, -23.65068, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+260, 180415, 530, 1, 1, -2114.375, 5158.421, -23.51009, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+261, 180415, 530, 1, 1, -2109.443, 5184.435, -27.30091, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+262, 180415, 530, 1, 1, -2103.463, 5192.882, -28.88327, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+263, 180415, 530, 1, 1, -2051.785, 5314.479, -39.39214, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+264, 180406, 530, 1, 1, -2051.922, 5310.453, -38.68298, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3899)
+(@OGUID+265, 180415, 530, 1, 1, -2071.595, 5291.309, -37.32354, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+266, 180415, 530, 1, 1, -2067.464, 5305.053, -37.32354, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+267, 180415, 530, 1, 1, -2051.43, 5296.361, -38.53338, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+268, 180415, 530, 1, 1, -2084.633, 5291.633, -37.32354, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899)
+(@OGUID+269, 180415, 530, 1, 1, -2074.696, 5328.799, -37.32354, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+270, 180415, 530, 1, 1, -2068.033, 5319.889, -37.32354, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+271, 180415, 530, 1, 1, -2093.221, 5313.236, -37.32355, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+272, 180472, 530, 1, 1, -2066.37, 5326.438, -32.57355, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+273, 180415, 530, 1, 1, -2070.872, 5322.3, -37.32354, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+274, 180415, 530, 1, 1, -2087.761, 5329.484, -34.30538, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+275, 180405, 530, 1, 1, -2097.77, 5327.023, -35.3358, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+276, 180415, 530, 1, 1, -2073.631, 5338.689, -37.32354, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+277, 180472, 530, 1, 1, -2087.516, 5309.336, -32.71938, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+278, 180415, 530, 1, 1, -2097.917, 5305.059, -37.32355, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+279, 180407, 530, 1, 1, -2104.679, 5301.78, -37.32354, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+280, 180415, 530, 1, 1, -2104.488, 5299.115, -37.32354, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+281, 180415, 530, 1, 1, -2075.449, 5347.141, -37.23588, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+282, 180472, 530, 1, 1, -2290.313, 5517.61, 69.03755, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+283, 180472, 530, 1, 1, -2302.897, 5520.82, 68.41949, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3898)
+(@OGUID+284, 180407, 530, 1, 1, -2268.796, 5537.234, 66.99442, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3898)
+(@OGUID+285, 180410, 530, 1, 1, -2244.775, 5558.765, 83.47392, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+286, 180472, 530, 1, 1, -2209.612, 5545.717, 74.61052, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+287, 180410, 530, 1, 1, -2245.656, 5556.635, 83.39277, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+288, 180410, 530, 1, 1, -2248.23, 5552.896, 83.42593, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+289, 180410, 530, 1, 1, -2246.702, 5554.45, 83.38676, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+290, 180472, 530, 1, 1, -2314.44, 5528.929, 68.49589, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+291, 180410, 530, 1, 1, -2244.457, 5563.03, 83.45087, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+292, 180410, 530, 1, 1, -2244.639, 5560.766, 83.45145, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+293, 180415, 530, 1, 1, -2271.303, 5563.579, 101.4032, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+294, 180415, 530, 1, 1, -2269.602, 5568.494, 101.4043, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+295, 180415, 530, 1, 1, -2284.665, 5565.351, 101.7906, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+296, 180415, 530, 1, 1, -2289.344, 5567.648, 100.985, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+297, 180415, 530, 1, 1, -2268.372, 5565.401, 105.0102, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+298, 180415, 530, 1, 1, -2290.393, 5569.944, 100.9936, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+299, 180415, 530, 1, 1, -2281.353, 5575.188, 101.7809, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+300, 180407, 530, 1, 1, -2225.354, 5587.122, 64.07227, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+301, 180415, 530, 1, 1, -2290.132, 5572.43, 100.9957, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+302, 180415, 530, 1, 1, -2288.95, 5574.736, 100.9939, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+303, 180415, 530, 1, 1, -2286.49, 5576.088, 100.9853, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+304, 180405, 530, 1, 1, -2241.581, 5617.456, 64.07227, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+305, 180406, 530, 1, 1, -2306.073, 5572.37, 64.07227, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+306, 180472, 530, 1, 1, -2299.912, 5575.924, 73.04609, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+307, 180405, 530, 1, 1, -2302.336, 5582.462, 64.07227, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+308, 180472, 530, 1, 1, -2313.528, 5589.7, 68.47504, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+309, 180472, 530, 1, 1, -2299.703, 5602.162, 69.12782, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+310, 185455, 530, 1, 1, -1931.683, 5771.58, 130.6861, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 185455 (Area: 0)
+(@OGUID+311, 180429, 530, 1, 1, -1897.193, 5764.772, 132.3861, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 0)
+(@OGUID+312, 180429, 530, 1, 1, -1754.127, 5644.799, 130.0099, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 0)
+(@OGUID+313, 180415, 530, 1, 1, -1754.441, 5844.208, 146.4398, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+314, 180429, 530, 1, 1, -1759.247, 5830.715, 151.03, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 0)
+(@OGUID+315, 185455, 530, 1, 1, -1752.689, 5842.345, 146.4398, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 185455 (Area: 0)
+(@OGUID+316, 180415, 530, 1, 1, -1755.557, 5841.976, 146.4398, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+317, 180407, 530, 1, 1, -1694.201, 5803.418, 150.5294, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+318, 180406, 530, 1, 1, -1682.232, 5716.45, 132.2278, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+319, 180471, 530, 1, 1, -1660.319, 5724.346, 138.4462, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 0)
+(@OGUID+320, 180471, 530, 1, 1, -1661.021, 5725.675, 138.5542, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 0)
+(@OGUID+321, 180407, 530, 1, 1, -1664.092, 5696.812, 129.5579, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+322, 180405, 530, 1, 1, -1652.332, 5660.17, 132.697, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+323, 180415, 530, 1, 1, -1656.486, 5683.149, 132.9795, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+324, 180411, 530, 1, 1, -1657.563, 5686.755, 135.8198, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0)
+(@OGUID+325, 180429, 530, 1, 1, -1647.701, 5660.5, 134.0306, 0.4712385, 0, 0, 0, 1, 120, 255, 1); -- 180429 (Area: 0)
+
+INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES
+(12, @OGUID+0),
+(12, @OGUID+1),
+(12, @OGUID+2),
+(12, @OGUID+3),
+(12, @OGUID+4),
+(12, @OGUID+5),
+(12, @OGUID+6),
+(12, @OGUID+7),
+(12, @OGUID+8),
+(12, @OGUID+9),
+(12, @OGUID+10),
+(12, @OGUID+11),
+(12, @OGUID+12),
+(12, @OGUID+13),
+(12, @OGUID+14),
+(12, @OGUID+15),
+(12, @OGUID+16),
+(12, @OGUID+17),
+(12, @OGUID+18),
+(12, @OGUID+19),
+(12, @OGUID+20),
+(12, @OGUID+21),
+(12, @OGUID+22),
+(12, @OGUID+23),
+(12, @OGUID+24),
+(12, @OGUID+25),
+(12, @OGUID+26),
+(12, @OGUID+27),
+(12, @OGUID+28),
+(12, @OGUID+29),
+(12, @OGUID+30),
+(12, @OGUID+31),
+(12, @OGUID+32),
+(12, @OGUID+33),
+(12, @OGUID+34),
+(12, @OGUID+35),
+(12, @OGUID+36),
+(12, @OGUID+37),
+(12, @OGUID+38),
+(12, @OGUID+39),
+(12, @OGUID+40),
+(12, @OGUID+51),
+(12, @OGUID+52),
+(12, @OGUID+53),
+(12, @OGUID+54),
+(12, @OGUID+55),
+(12, @OGUID+56),
+(12, @OGUID+57),
+(12, @OGUID+58),
+(12, @OGUID+59),
+(12, @OGUID+60),
+(12, @OGUID+61),
+(12, @OGUID+62),
+(12, @OGUID+63),
+(12, @OGUID+64),
+(12, @OGUID+65),
+(12, @OGUID+66),
+(12, @OGUID+67),
+(12, @OGUID+68),
+(12, @OGUID+69),
+(12, @OGUID+70),
+(12, @OGUID+71),
+(12, @OGUID+72),
+(12, @OGUID+73),
+(12, @OGUID+74),
+(12, @OGUID+75),
+(12, @OGUID+76),
+(12, @OGUID+77),
+(12, @OGUID+78),
+(12, @OGUID+79),
+(12, @OGUID+80),
+(12, @OGUID+81),
+(12, @OGUID+82),
+(12, @OGUID+83),
+(12, @OGUID+84),
+(12, @OGUID+85),
+(12, @OGUID+86),
+(12, @OGUID+87),
+(12, @OGUID+88),
+(12, @OGUID+89),
+(12, @OGUID+90),
+(12, @OGUID+91),
+(12, @OGUID+92),
+(12, @OGUID+93),
+(12, @OGUID+94),
+(12, @OGUID+95),
+(12, @OGUID+96),
+(12, @OGUID+97),
+(12, @OGUID+98),
+(12, @OGUID+99),
+(12, @OGUID+100),
+(12, @OGUID+101),
+(12, @OGUID+102),
+(12, @OGUID+103),
+(12, @OGUID+104),
+(12, @OGUID+105),
+(12, @OGUID+106),
+(12, @OGUID+107),
+(12, @OGUID+108),
+(12, @OGUID+109),
+(12, @OGUID+110),
+(12, @OGUID+111),
+(12, @OGUID+112),
+(12, @OGUID+113),
+(12, @OGUID+114),
+(12, @OGUID+115),
+(12, @OGUID+116),
+(12, @OGUID+117),
+(12, @OGUID+118),
+(12, @OGUID+119),
+(12, @OGUID+120),
+(12, @OGUID+121),
+(12, @OGUID+122),
+(12, @OGUID+123),
+(12, @OGUID+124),
+(12, @OGUID+125),
+(12, @OGUID+126),
+(12, @OGUID+127),
+(12, @OGUID+128),
+(12, @OGUID+129),
+(12, @OGUID+130),
+(12, @OGUID+131),
+(12, @OGUID+132),
+(12, @OGUID+133),
+(12, @OGUID+134),
+(12, @OGUID+135),
+(12, @OGUID+136),
+(12, @OGUID+137),
+(12, @OGUID+138),
+(12, @OGUID+139),
+(12, @OGUID+140),
+(12, @OGUID+141),
+(12, @OGUID+142),
+(12, @OGUID+143),
+(12, @OGUID+144),
+(12, @OGUID+145),
+(12, @OGUID+146),
+(12, @OGUID+147),
+(12, @OGUID+148),
+(12, @OGUID+149),
+(12, @OGUID+150),
+(12, @OGUID+151),
+(12, @OGUID+152),
+(12, @OGUID+153),
+(12, @OGUID+154),
+(12, @OGUID+155),
+(12, @OGUID+156),
+(12, @OGUID+157),
+(12, @OGUID+158),
+(12, @OGUID+159),
+(12, @OGUID+160),
+(12, @OGUID+161),
+(12, @OGUID+162),
+(12, @OGUID+163),
+(12, @OGUID+164),
+(12, @OGUID+165),
+(12, @OGUID+166),
+(12, @OGUID+167),
+(12, @OGUID+168),
+(12, @OGUID+169),
+(12, @OGUID+170),
+(12, @OGUID+171),
+(12, @OGUID+172),
+(12, @OGUID+173),
+(12, @OGUID+174),
+(12, @OGUID+175),
+(12, @OGUID+176),
+(12, @OGUID+177),
+(12, @OGUID+178),
+(12, @OGUID+179),
+(12, @OGUID+180),
+(12, @OGUID+181),
+(12, @OGUID+182),
+(12, @OGUID+183),
+(12, @OGUID+184),
+(12, @OGUID+185),
+(12, @OGUID+186),
+(12, @OGUID+187),
+(12, @OGUID+188),
+(12, @OGUID+189),
+(12, @OGUID+190),
+(12, @OGUID+191),
+(12, @OGUID+192),
+(12, @OGUID+193),
+(12, @OGUID+194),
+(12, @OGUID+195),
+(12, @OGUID+196),
+(12, @OGUID+197),
+(12, @OGUID+198),
+(12, @OGUID+199),
+(12, @OGUID+200),
+(12, @OGUID+201),
+(12, @OGUID+202),
+(12, @OGUID+203),
+(12, @OGUID+204),
+(12, @OGUID+205),
+(12, @OGUID+206),
+(12, @OGUID+207),
+(12, @OGUID+208),
+(12, @OGUID+209),
+(12, @OGUID+210),
+(12, @OGUID+211),
+(12, @OGUID+212),
+(12, @OGUID+213),
+(12, @OGUID+214),
+(12, @OGUID+215),
+(12, @OGUID+216),
+(12, @OGUID+217),
+(12, @OGUID+218),
+(12, @OGUID+219),
+(12, @OGUID+220),
+(12, @OGUID+221),
+(12, @OGUID+222),
+(12, @OGUID+223),
+(12, @OGUID+224),
+(12, @OGUID+225),
+(12, @OGUID+226),
+(12, @OGUID+227),
+(12, @OGUID+228),
+(12, @OGUID+229),
+(12, @OGUID+230),
+(12, @OGUID+231),
+(12, @OGUID+232),
+(12, @OGUID+233),
+(12, @OGUID+234),
+(12, @OGUID+235),
+(12, @OGUID+236),
+(12, @OGUID+237),
+(12, @OGUID+238),
+(12, @OGUID+239),
+(12, @OGUID+240),
+(12, @OGUID+241),
+(12, @OGUID+242),
+(12, @OGUID+243),
+(12, @OGUID+244),
+(12, @OGUID+245),
+(12, @OGUID+246),
+(12, @OGUID+247),
+(12, @OGUID+248),
+(12, @OGUID+249),
+(12, @OGUID+250),
+(12, @OGUID+251),
+(12, @OGUID+252),
+(12, @OGUID+253),
+(12, @OGUID+254),
+(12, @OGUID+255),
+(12, @OGUID+256),
+(12, @OGUID+257),
+(12, @OGUID+258),
+(12, @OGUID+259),
+(12, @OGUID+260),
+(12, @OGUID+261),
+(12, @OGUID+262),
+(12, @OGUID+263),
+(12, @OGUID+264),
+(12, @OGUID+265),
+(12, @OGUID+266),
+(12, @OGUID+267),
+(12, @OGUID+268),
+(12, @OGUID+269),
+(12, @OGUID+270),
+(12, @OGUID+271),
+(12, @OGUID+272),
+(12, @OGUID+273),
+(12, @OGUID+274),
+(12, @OGUID+275),
+(12, @OGUID+276),
+(12, @OGUID+277),
+(12, @OGUID+278),
+(12, @OGUID+279),
+(12, @OGUID+280),
+(12, @OGUID+281),
+(12, @OGUID+282),
+(12, @OGUID+283),
+(12, @OGUID+284),
+(12, @OGUID+285),
+(12, @OGUID+286),
+(12, @OGUID+287),
+(12, @OGUID+288),
+(12, @OGUID+289),
+(12, @OGUID+290),
+(12, @OGUID+291),
+(12, @OGUID+292),
+(12, @OGUID+293),
+(12, @OGUID+294),
+(12, @OGUID+295),
+(12, @OGUID+296),
+(12, @OGUID+297),
+(12, @OGUID+298),
+(12, @OGUID+299),
+(12, @OGUID+300),
+(12, @OGUID+301),
+(12, @OGUID+302),
+(12, @OGUID+303),
+(12, @OGUID+304),
+(12, @OGUID+305),
+(12, @OGUID+306),
+(12, @OGUID+307),
+(12, @OGUID+308),
+(12, @OGUID+309),
+(12, @OGUID+310),
+(12, @OGUID+311),
+(12, @OGUID+312),
+(12, @OGUID+313),
+(12, @OGUID+314),
+(12, @OGUID+315),
+(12, @OGUID+316),
+(12, @OGUID+317),
+(12, @OGUID+318),
+(12, @OGUID+319),
+(12, @OGUID+320),
+(12, @OGUID+321),
+(12, @OGUID+322),
+(12, @OGUID+323),
+(12, @OGUID+324),
+(12, @OGUID+325);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_28_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_28_00_world.sql
new file mode 100644
index 00000000000..d414c3b7fc6
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_28_00_world.sql
@@ -0,0 +1,29 @@
+-- Fix for DB/Event: Add missing Hallow's End event spawns in Dalaran
+SET @OGUID:=77307;
+DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+9 AND `eventEntry`=12;
+INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES
+(12, @OGUID+0),
+(12, @OGUID+1),
+(12, @OGUID+2),
+(12, @OGUID+3),
+(12, @OGUID+4),
+(12, @OGUID+5),
+(12, @OGUID+6),
+(12, @OGUID+7),
+(12, @OGUID+8),
+(12, @OGUID+9);
+
+-- Fix for DB/Event: Add missing Hallow's End event spawns in Shattrath
+SET @OGUID:=77697;
+DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+9 AND `eventEntry`=12;
+INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES
+(12, @OGUID+0),
+(12, @OGUID+1),
+(12, @OGUID+2),
+(12, @OGUID+3),
+(12, @OGUID+4),
+(12, @OGUID+5),
+(12, @OGUID+6),
+(12, @OGUID+7),
+(12, @OGUID+8),
+(12, @OGUID+9);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_29_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_29_00_world.sql
new file mode 100644
index 00000000000..dd80ebe8ec4
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_29_00_world.sql
@@ -0,0 +1,10 @@
+--
+SET @OGUID:=17765;
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+5;
+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, 180643, 530, 1, 1, 10362.4, -6414.424, 163.4537, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 180643 (Area: 3431)
+(@OGUID+1, 181325, 530, 1, 1, 6810.514, -7413.837, 47.01349, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 181325 (Area: 3517)
+(@OGUID+2, 184803, 530, 1, 1, 9748.917, -7075.639, 16.75368, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 184803 (Area: -1)
+(@OGUID+3, 184804, 530, 1, 1, 9749.188, -7075.547, 16.75464, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 184804 (Area: -1)
+(@OGUID+4, 186406, 530, 1, 1, 6738.535, -7607.16, 126.1211, 2.862331, 0, 0, 0, 1, 120, 255, 1), -- 186406 (Area: 3507)
+(@OGUID+5, 186407, 530, 1, 1, 6795.697, -7574.934, 126.9773, 3.324856, 0, 0, 0, 1, 120, 255, 1); -- 186407 (Area: 3517)
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_00_world.sql
new file mode 100644
index 00000000000..84247a85973
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_00_world.sql
@@ -0,0 +1,16 @@
+--
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=27292;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=27292 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
+(27292,0,0,1,62,0,100,0,9512,0,0,0,11,48606,0,0,0,0,0,7,0,0,0,0,0,0,0,'Flamebringer - On gossip select - Spellcast'),
+(27292,0,1,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Flamebringer - On gossip select - Close gossip'),
+(27292,0,2,3,54,0,100,0,0,0,0,0,83,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Flamebringer - On summon - Remove npcflag'),
+(27292,0,3,4,61,0,100,0,0,0,0,0,85,46598,0,0,0,0,0,1,0,0,0,0,0,0,0,'Flamebringer - On summon - Spellcast'),
+(27292,0,4,0,61,0,100,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Flamebringer - Linked with previous Event -Set Passive'),
+(27292,0,5,0,28,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Flamebringer - On passenger removed - Despawn');
+DELETE FROM `creature_template_addon` WHERE `entry`=27292;
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(27292, 0, 0, 33554432, 0, 0, '55971');
+DELETE FROM `creature_addon` WHERE `guid`=110538;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(110538,0,0,0,1,0,'');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_01_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_01_world_335.sql
new file mode 100644
index 00000000000..36565638949
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_01_world_335.sql
@@ -0,0 +1,3 @@
+--
+UPDATE `creature_template` SET `dynamicflags`=0 WHERE `entry`=23667;
+UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 14338;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_02_world.sql
new file mode 100644
index 00000000000..5d9407ef620
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_02_world.sql
@@ -0,0 +1,8 @@
+--
+UPDATE `npc_spellclick_spells` SET `cast_flags`=1 WHERE `npc_entry`=26477 AND `spell_id`=61832;
+
+UPDATE smart_scripts SET action_param1=48600 WHERE entryorguid=27292 AND source_type=0 AND id=3;
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=48600;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `Comment`) VALUES
+(13, 1, 48600, 31, 0, 3, 27292, "Ride Flamebringer effect only on Flamebringer");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_03_world.sql
new file mode 100644
index 00000000000..3b419524c5e
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_03_world.sql
@@ -0,0 +1,3 @@
+--
+UPDATE `creature_model_info` SET `DisplayID_Other_Gender`=0 WHERE `DisplayID` IN (16046, 3258, 14533);
+UPDATE `creature_template` SET `flags_extra`=`flags_extra`|128 WHERE `entry` IN (22434,22435,22447,22383);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_00_world.sql
new file mode 100644
index 00000000000..edae60f42d6
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_00_world.sql
@@ -0,0 +1,7 @@
+UPDATE `creature_text` SET `text`='It is over, your search is done. Let fate choose now, the righteous one.', `sound`=11961,`BroadcastTextId`=22261 WHERE `entry`=23682 AND `groupid`=0 AND `id`=0; -- Summon
+UPDATE `creature_text` SET `text`='Here\'s my body, fit and pure! Now, your blackened souls I\'ll cure!', `sound`=12567,`BroadcastTextId`=22271 WHERE `entry`=23682 AND `groupid`=1 AND `id`=0; -- Agro
+UPDATE `creature_text` SET `text`='Harken, cur! Tis you I spurn! Now feel... the burn!', `type`=12,`BroadcastTextId`=22587 WHERE `entry`=23682 AND `groupid`=2 AND `id`=0; -- Conflaguate
+UPDATE `creature_text` SET `text`='Soldiers arise, stand and fight! Bring victory at last to this fallen knight!', `sound`=11963,`BroadcastTextId`=23861 WHERE `entry`=23682 AND `groupid`=3 AND `id`=0; -- Summon Pumkins
+UPDATE `creature_text` SET `text`='This end have I reached before. What new adventure lies in store?', `sound`=11964,`BroadcastTextId`=23455 WHERE `entry`=23682 AND `groupid`=4 AND `id`=0; -- Death
+UPDATE `creature_text` SET `text`='So eager you are, for my blood to spill. Yet to vanquish me, \'tis my head you must kill!', `sound`=11969, `BroadcastTextId`=22757 WHERE `entry`=23775 AND `groupid`=0 AND `id`=0; -- Loose Head
+UPDATE `creature_text` SET `text`='Your body lies beaten, battered and broken! Let my curse be your own, fate has spoken!', `sound`=11962,`BroadcastTextId`=40546 WHERE `entry`=23775 AND `groupid`=1 AND `id`=0; -- PLayer Death
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_01_world.sql
new file mode 100644
index 00000000000..b929d74becc
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_01_world.sql
@@ -0,0 +1,8 @@
+ DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=18 AND `SourceGroup`=26477;
+ INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+ (18, 26477, 47096, 0, 0, 9, 0, 12000, 0, 0, 0, 0, 0, '', 'Required quest active for spellclick'),
+ (18, 26477, 47096, 0, 1, 9, 0, 11999, 0, 0, 0, 0, 0, '', 'Required quest active for spellclick'),
+ (18, 26477, 61286, 0, 0, 9, 0, 12000, 0, 0, 0, 0, 0, '', 'Required quest active for spellclick'),
+ (18, 26477, 61286, 0, 1, 9, 0, 11999, 0, 0, 0, 0, 0, '', 'Required quest active for spellclick'),
+ (18, 26477, 61832, 0, 0, 9, 0, 11999, 0, 0, 0, 0, 0, '', 'Required quest active for spellclick'),
+(18, 26477, 61832, 0, 1, 9, 0, 12000, 0, 0, 0, 0, 0, '', 'Required quest active for spellclick');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_02_world.sql
new file mode 100644
index 00000000000..6dfeba2116c
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_02_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature` SET `MovementType`=2 WHERE `guid`=84011 AND `id`=18672;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_03_world_2015_08_01_01.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_03_world_2015_08_01_01.sql
new file mode 100644
index 00000000000..776486929ff
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_03_world_2015_08_01_01.sql
@@ -0,0 +1,43 @@
+DROP TABLE IF EXISTS `creature_template_locale`;
+CREATE TABLE IF NOT EXISTS `creature_template_locale` (
+ `entry` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
+ `locale` VARCHAR(4) NOT NULL,
+ `Name` TEXT,
+ `Title` TEXT,
+ `VerifiedBuild` SMALLINT(5) DEFAULT '0',
+ PRIMARY KEY (`entry`,`locale`)
+) ENGINE=MYISAM DEFAULT CHARSET=utf8;
+
+-- koKR
+INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`)
+ (SELECT `entry`, "koKR", `name_loc1`, `subname_loc1`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc1`) > 0 OR LENGTH(`subname_loc1`) > 0);
+
+-- frFR
+INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`)
+ (SELECT `entry`, "frFR", `name_loc2`, `subname_loc2`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc2`) > 0 OR LENGTH(`subname_loc2`) > 0);
+
+-- deDE
+INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`)
+ (SELECT `entry`, "deDE", `name_loc3`, `subname_loc3`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc3`) > 0 OR LENGTH(`subname_loc3`) > 0);
+
+-- zhCN
+INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`)
+ (SELECT `entry`, "zhCN", `name_loc4`, `subname_loc4`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc4`) > 0 OR LENGTH(`subname_loc4`) > 0);
+
+-- zhTW
+INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`)
+ (SELECT `entry`, "zhTW", `name_loc5`, `subname_loc5`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc5`) > 0 OR LENGTH(`subname_loc5`) > 0);
+
+-- esES
+INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`)
+ (SELECT `entry`, "esES", `name_loc6`, `subname_loc6`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc6`) > 0 OR LENGTH(`subname_loc6`) > 0);
+
+-- esMX
+INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`)
+ (SELECT `entry`, "esMX", `name_loc7`, `subname_loc7`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc7`) > 0 OR LENGTH(`subname_loc7`) > 0);
+
+-- ruRU
+INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`)
+ (SELECT `entry`, "ruRU", `name_loc8`, `subname_loc8`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc8`) > 0 OR LENGTH(`subname_loc8`) > 0);
+
+DROP TABLE IF EXISTS `locales_creature`;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_00_world.sql
new file mode 100644
index 00000000000..dabd7d27138
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_00_world.sql
@@ -0,0 +1,127 @@
+DELETE FROM `smart_scripts` WHERE `entryorguid`IN(20102,18927,19177,19169,19175,19171,19172,19176,19178,19173,19148) AND `source_type`=0 AND `id` IN(6,11);
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(19148,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Dwarf Commoner - OOC - Say'),
+(19171,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Dreanei Commoner - OOC - Say'),
+(20102,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Goblin Commoner - OOC - Say'),
+(19172,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gnome Commoner - OOC - Say'),
+(19173,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Night Elf Commoner - OOC - Say'),
+(18927,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Human Commoner - OOC - Say'),
+(19175,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orc Commoner - OOC - Say'),
+(19176,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tauren Commoner - OOC - Say'),
+(19177,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Troll Commoner - OOC - Say'),
+(19178,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Forsaken Commoner - OOC - Say'),
+(19169,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blood Elf Commoner - OOC - Say'),
+
+(19171,0,11,0,64,0,100,0,0,0,0,0,98,8936,11957,0,0,0,0,1,0,0,0,0,0,0,0,'Dreanei Commoner - On Gossip Hello - Send Gossip'),
+(20102,0,11,0,64,0,100,0,0,0,0,0,98,8939,11960,0,0,0,0,1,0,0,0,0,0,0,0,'Goblin Commoner - On Gossip Hello - Send Gossip'),
+(19172,0,11,0,64,0,100,0,0,0,0,0,98,8938,11959,0,0,0,0,1,0,0,0,0,0,0,0,'Gnome Commoner - On Gossip Hello - Send Gossip'),
+(19173,0,11,0,64,0,100,0,0,0,0,0,98,8941,11962,0,0,0,0,1,0,0,0,0,0,0,0,'Night Elf Commoner - On Gossip Hello - Send Gossip'),
+(18927,0,11,0,64,0,100,0,0,0,0,0,98,8940,11961,0,0,0,0,1,0,0,0,0,0,0,0,'Human Commoner - On Gossip Hello - Send Gossip'),
+(19175,0,11,0,64,0,100,0,0,0,0,0,98,8942,11963,0,0,0,0,1,0,0,0,0,0,0,0,'Orc Commoner - On Gossip Hello - Send Gossip'),
+(19176,0,11,0,64,0,100,0,0,0,0,0,98,8943,11964,0,0,0,0,1,0,0,0,0,0,0,0,'Tauren Commoner - On Gossip Hello - Send Gossip'),
+(19177,0,11,0,64,0,100,0,0,0,0,0,98,8944,11965,0,0,0,0,1,0,0,0,0,0,0,0,'Troll Commoner - On Gossip Hello - Send Gossip'),
+(19178,0,11,0,64,0,100,0,0,0,0,0,98,8945,11966,0,0,0,0,1,0,0,0,0,0,0,0,'Forsaken Commoner - On Gossip Hello - Send Gossip'),
+(19169,0,11,0,64,0,100,0,0,0,0,0,98,8935,11956,0,0,0,0,1,0,0,0,0,0,0,0,'Blood Elf Commoner - On Gossip Hello - Send Gossip');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` in(20102,18927,19177,19169,19175,19171,19172,19176,19178,19173,19148) AND `SourceGroup`=7;
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` in(20102,18927,19177,19169,19175,19171,19172,19176,19178,19173,19148) AND `SourceGroup`=12;
+
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(22, 7, 19148, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 7, 20102, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 7, 18927, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 7, 19171, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 7, 19172, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 7, 19173, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 7, 19175, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 7, 19176, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 7, 19177, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 7, 19178, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 7, 19169, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 12, 20102, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 12, 18927, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 12, 19171, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 12, 19172, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 12, 19173, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 12, 19175, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 12, 19176, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 12, 19177, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 12, 19178, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'),
+(22, 12, 19169, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active');
+
+DELETE FROM `gossip_menu` WHERE `entry` IN(8936,8939,8938,8941,8940,8942,8943,8944,8945,8935);
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(8936,11957),
+(8939,11960),
+(8938,11959),
+(8941,11962),
+(8940,11961),
+(8942,11963),
+(8943,11964),
+(8944,11965),
+(8945,11966),
+(8935,11956);
+
+DELETE FROM `creature_text` WHERE `entry` IN(20102,18927,19177,19169,19175,19171,19176,19178,19173,19148) AND `groupid`=6;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES
+(19171, 6, 0, 'What do you think of the mask?', 12, 7, 100, 1, 0, 0, 24339, 'Draenei Commoner to Draenei Commoner'),
+(19171, 6, 1, 'You know... why DO we celebrate this holiday?', 12, 7, 100, 0, 0, 0, 23287, 'Draenei Commoner to Draenei Commoner'),
+(19171, 6, 2, 'For the Horde!', 12, 7, 100, 4, 0, 0, 23357, 'Draenei Commoner to Draenei Commoner'),
+(19173, 6, 0, 'Next year, I''m dressing up as either a corsair or an assassin.', 12, 7, 100, 1, 0, 0, 24338, 'Night Elf Commoner to Night Elf Commoner'),
+(19173, 6, 1, 'Happy Hallow''s End!', 12, 7, 100, 0, 0, 0, 24346, 'Night Elf Commoner to Night Elf Commoner'),
+(19173, 6, 2, 'We should go trick or treating later.', 12, 7, 100, 0, 0, 0, 0, 'Night Elf Commoner to Night Elf Commoner'),
+(19173, 6, 3, 'For the Horde!', 12, 7, 100, 4, 0, 0, 23357, 'Night Elf Commoner to Night Elf Commoner'),
+(19173, 6, 4, 'Curse this twisting of the night. The candy''s good, though.', 12, 7, 100, 0, 0, 0, 23294, 'Night Elf Commoner to Night Elf Commoner'),
+(19173, 6, 5, 'You know... why DO we celebrate this holiday?', 12, 7, 100, 0, 0, 0, 23287, 'Night Elf Commoner to Night Elf Commoner'),
+(19173, 6, 6, 'What do you think of the mask?', 12, 7, 100, 1, 0, 0, 24339, 'Night Elf Commoner to Night Elf Commoner'),
+(19173, 6, 7, 'Next year, I''m dressing up as either a corsair or an assassin.', 12, 7, 100, 1, 0, 0, 24338, 'Night Elf Commoner to Night Elf Commoner'),
+(18927, 6, 0, 'Brains... braaaiiins!', 12, 7, 100, 15, 0, 0, 23358, 'Human Commoner to Human Commoner'),
+(18927, 6, 1, 'We should go trick or treating later.', 12, 7, 100, 396, 0, 0, 24348, 'Human Commoner to Human Commoner'),
+(18927, 6, 2, 'Are there any more inns we can visit for treats?', 12, 7, 100, 0, 0, 0, 23293, 'Human Commoner to Human Commoner'),
+(18927, 6, 3, 'We should go trick or treating later.', 12, 7, 100, 0, 0, 0, 24348, 'Human Commoner to Human Commoner'),
+(18927, 6, 4, 'For the Horde!', 12, 7, 100, 274, 0, 0, 23357, 'Human Commoner to Human Commoner'),
+(18927, 6, 5, 'What do you think of the mask?', 12, 7, 100, 1, 0, 0, 24339, 'Human Commoner to Human Commoner'),
+(18927, 6, 6, 'You know... why DO we celebrate this holiday?', 12, 7, 100, 0, 0, 0, 23287, 'Human Commoner to Human Commoner'),
+(19148, 6, 0, 'I think I''ve eaten too much candy...', 12, 7, 100, 0, 0, 0, 24347, 'Dwarf Commoner to Dwarf Commoner'),
+(19148, 6, 1, 'Happy Hallow''s End!', 12, 7, 100, 0, 0, 0, 24346, 'Dwarf Commoner to Dwarf Commoner'),
+(20102, 6, 0, 'We should go trick or treating later.', 12, 0, 100, 0, 0, 0, 23286, 'Goblin Commoner to Goblin Commoner'),
+(20102, 6, 1, 'There MUST be a way to make more money off of this holiday.', 12, 0, 100, 0, 0, 0, 23299, 'Goblin Commoner to Goblin Commoner'),
+(20102, 6, 2, 'The innkeepers are mad to be giving away treats for free.', 12, 0, 100, 0, 0, 0, 23300, 'Goblin Commoner to Goblin Commoner'),
+(20102, 6, 3, 'For the Alliance! Wait... the Horde! Wait... which was I again?', 12, 0, 100, 4, 0, 149, 23364, 'Goblin Commoner to Goblin Commoner'),
+(19176, 6, 0, 'What do you think of the mask?', 12, 1, 100, 1, 0, 0, 24337, 'Tauren Commoner to Tauren Commoner'),
+(19176, 6, 1, 'Ishnu-dal-dieb.', 12, 1, 100, 3, 0, 0, 23355, 'Tauren Commoner to Tauren Commoner'),
+(19176, 6, 2, 'For the Alliance!', 12, 1, 100, 4, 0, 0, 23351, 'Tauren Commoner to Tauren Commoner'),
+(19177, 6, 0, 'Next year, I''m dressing up as either a corsair or an assassin.', 12, 1, 100, 1, 0, 0, 24336, 'Troll Commoner to Troll Commoner'),
+(19177, 6, 1, 'Happy Hallow''s End!', 12, 1, 100, 0, 0, 0, 24329, 'Troll Commoner to Troll Commoner'),
+(19177, 6, 2, 'What do you think of the mask?', 12, 1, 100, 1, 0, 0, 24337, 'Troll Commoner to Troll Commoner'),
+(19177, 6, 3, 'Boo-hoo! I''m a poor little gnome, and I don''t have a capital ci... oh, wait.', 12, 1, 100, 1, 0, 0, 23354, 'Troll Commoner to Troll Commoner'),
+(19177, 6, 4, 'Someone should make a candy with a chewy gnome center.', 12, 1, 100, 0, 0, 0, 23297, 'Troll Commoner to Troll Commoner'),
+(19177, 6, 5, 'We should go trick or treating later.', 12, 1, 100, 0, 0, 0, 24331, 'Troll Commoner to Troll Commoner'),
+(19177, 6, 6, 'I think I''ve eaten too much candy...', 12, 1, 100, 0, 0, 0, 24330, 'Troll Commoner to Troll Commoner'),
+(19178, 6, 0, 'We should go trick or treating later.', 12, 1, 100, 0, 0, 0, 24331, 'Forsaken Commoner to Forsaken Commoner'),
+(19178, 6, 1, 'We should attend the next burning of the Wickerman.', 12, 1, 100, 0, 0, 0, 23292, 'Forsaken Commoner to Forsaken Commoner'),
+(19178, 6, 2, 'For the Alliance!', 12, 1, 100, 4, 0, 0, 23351, 'Forsaken Commoner to Forsaken Commoner'),
+(19178, 6, 3, 'Happy Hallow''s End!', 12, 1, 100, 0, 0, 0, 24329, 'Forsaken Commoner to Forsaken Commoner'),
+(19178, 6, 4, 'I think I''ve eaten too much candy...', 12, 1, 100, 0, 0, 0, 24330, 'Forsaken Commoner to Forsaken Commoner'),
+(19178, 6, 5, 'I think I''ve eaten too much candy...', 12, 1, 100, 274, 0, 0, 24330, 'Forsaken Commoner to Forsaken Commoner'),
+(19169, 6, 0, 'Gaze upon my crazy tentacle-face and despair, Azerothian!', 12, 1, 100, 23, 0, 0, 23356, 'Blood Elf Commoner to Blood Elf Commoner'),
+(19169, 6, 1, 'Next year, I''m dressing up as either a corsair or an assassin.', 12, 1, 100, 1, 0, 0, 24336, 'Blood Elf Commoner to Blood Elf Commoner'),
+(19169, 6, 2, 'I think I''ve eaten too much candy...', 12, 1, 100, 0, 0, 0, 24330, 'Blood Elf Commoner to Blood Elf Commoner'),
+(19169, 6, 3, 'What do you think of the mask?', 12, 1, 100, 1, 0, 0, 24337, 'Blood Elf Commoner to Blood Elf Commoner'),
+(19169, 6, 4, 'We should go trick or treating later.', 12, 1, 100, 0, 0, 0, 24331, 'Blood Elf Commoner to Blood Elf Commoner'),
+(19169, 6, 5, 'Happy Hallow''s End!', 12, 1, 100, 0, 0, 0, 24329, 'Blood Elf Commoner to Blood Elf Commoner'),
+(19169, 6, 6, 'This time of year is quite important to our Forsaken allies.', 12, 1, 100, 0, 0, 0, 23288, 'Blood Elf Commoner to Blood Elf Commoner'),
+(19169, 6, 7, 'For the Alliance!', 12, 1, 100, 4, 0, 0, 23351, 'Blood Elf Commoner to Blood Elf Commoner'),
+(19169, 6, 8, 'We should attend the next burning of the Wickerman.', 12, 1, 100, 0, 0, 0, 23292, 'Blood Elf Commoner to Blood Elf Commoner'),
+(19169, 6, 9, 'What do you think of the mask?', 12, 1, 100, 273, 0, 0, 24337, 'Blood Elf Commoner to Blood Elf Commoner'),
+(19175, 6, 0, 'We should go trick or treating later.', 12, 1, 100, 0, 0, 0, 24331, 'Orc Commoner to Orc Commoner'),
+(19175, 6, 1, 'Happy Hallow''s End!', 12, 1, 100, 0, 0, 0, 24329, 'Orc Commoner to Orc Commoner'),
+(19175, 6, 2, 'What do you think of the mask?', 12, 1, 100, 1, 0, 0, 24337, 'Orc Commoner to Orc Commoner'),
+(19175, 6, 3, 'We should attend the next burning of the Wickerman.', 12, 1, 100, 0, 0, 0, 23292, 'Orc Commoner to Orc Commoner'),
+(19175, 6, 4, 'We should go trick or treating later.', 12, 1, 100, 273, 0, 0, 24331, 'Orc Commoner to Orc Commoner'),
+(19175, 6, 5, 'Where''s me gold? Where''s me beer? Where''s me feet?', 12, 1, 100, 6, 0, 0, 23352, 'Orc Commoner to Orc Commoner'),
+(19175, 6, 6, 'For the Alliance!', 12, 1, 100, 4, 0, 0, 23351, 'Orc Commoner to Orc Commoner'),
+(19175, 6, 7, 'Where''s me gold? Where''s me beer? Where''s me feet?', 12, 1, 100, 6, 0, 0, 23352, 'Orc Commoner to Orc Commoner'),
+(19175, 6, 8, 'The Forsaken are right to celebrate their freedom.', 12, 1, 100, 0, 0, 0, 23295, 'Orc Commoner to Orc Commoner'),
+(19175, 6, 9, 'I think I''ve eaten too much candy...', 12, 1, 100, 396, 0, 0, 24330, 'Orc Commoner to Orc Commoner'),
+(19175, 6, 10, 'I think I''ve eaten too much candy...', 12, 1, 100, 0, 0, 0, 24330, 'Orc Commoner to Orc Commoner');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_01_world.sql
new file mode 100644
index 00000000000..e6fb63ec28c
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_01_world.sql
@@ -0,0 +1,779 @@
+--
+SET @OGUID:=78023;
+DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+385 AND `eventEntry`=12;
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+385;
+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,180406, 530, 1, 1, 10006.97, -7223.957, 38.252, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+1,180410, 530, 1, 1, 10017.58, -7218.51, 32.9932, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1)
+(@OGUID+2,180411, 530, 1, 1, 10001.91, -7204.366, 43.59731, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1)
+(@OGUID+3,180410, 530, 1, 1, 9963.57, -7252.031, 33.84737, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1)
+(@OGUID+4,180410, 530, 1, 1, 9961.773, -7253.525, 33.84737, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1)
+(@OGUID+5,180410, 530, 1, 1, 9965.425, -7250.459, 34.04182, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1)
+(@OGUID+6, 180410, 530, 1, 1, 9966.247, -7242.492, 33.60432, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1)
+(@OGUID+7, 180410, 530, 1, 1, 10024.43, -7212.82, 32.86126, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1)
+(@OGUID+8, 180410, 530, 1, 1, 10020.63, -7200.405, 33.09042, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1)
+(@OGUID+9, 180405, 530, 1, 1, 9823.148, -7386.113, 20.45557, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+10,1180407, 530, 1, 1, 9812.965, -7409.957, 13.62506, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+11,1180427, 530, 1, 1, 9682.321, -7432.618, 23.67524, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1)
+(@OGUID+12,1180426, 530, 1, 1, 9685.572, -7441.069, 23.97384, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1)
+(@OGUID+13,1180426, 530, 1, 1, 9686.853, -7440.715, 20.77245, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1)
+(@OGUID+14,1180427, 530, 1, 1, 9686.702, -7436.893, 20.72384, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1)
+(@OGUID+15,1180426, 530, 1, 1, 9684.29, -7437.083, 23.16829, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1)
+(@OGUID+16,1180427, 530, 1, 1, 9682.661, -7437.406, 19.14746, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1)
+(@OGUID+17,1180427, 530, 1, 1, 9682.217, -7440.542, 23.70301, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1)
+(@OGUID+18,1180426, 530, 1, 1, 9681.567, -7440.406, 21.67523, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1)
+(@OGUID+19,1180427, 530, 1, 1, 9688.92, -7439.088, 24.64051, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1)
+(@OGUID+20,1180415, 530, 1, 1, 9726.541, -7459.687, 14.03802, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+21,1180415, 530, 1, 1, 9646.93, -7446.186, 14.02778, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+22,1180415, 530, 1, 1, 9763.853, -7467.264, 13.57424, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+23,1180415, 530, 1, 1, 9721.928, -7473.809, 14.03804, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+24,1180415, 530, 1, 1, 9763.872, -7469.173, 13.57424, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+25,1180415, 530, 1, 1, 9642.902, -7441.372, 14.02778, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+26,1180415, 530, 1, 1, 9706.262, -7464.713, 14.03802, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+27,1180415, 530, 1, 1, 9722.172, -7455.784, 14.03802, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+28,1180415, 530, 1, 1, 9637.544, -7439.558, 14.02778, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+29,1180415, 530, 1, 1, 9708.006, -7469.922, 14.03803, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+30,1180415, 530, 1, 1, 9717.246, -7454.905, 14.03803, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+31,1180415, 530, 1, 1, 9707.984, -7459.522, 14.03802, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+32,1180415, 530, 1, 1, 9726.428, -7470.03, 14.03803, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+33,1180415, 530, 1, 1, 9763.653, -7472.03, 13.57424, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+34,1180415, 530, 1, 1, 9712.377, -7473.811, 14.03804, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+35,1180415, 530, 1, 1, 9728.004, -7464.864, 14.03802, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+36,1180415, 530, 1, 1, 9712.409, -7455.581, 14.03802, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+37,1180415, 530, 1, 1, 9717.181, -7474.624, 14.03804, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+38,1180415, 530, 1, 1, 9660.289, -7459.098, 14.02777, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+39,1180415, 530, 1, 1, 9661.99, -7464.522, 14.02777, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+40,1180415, 530, 1, 1, 9655.606, -7455.169, 14.02777, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+41,1180415, 530, 1, 1, 9649.94, -7453.708, 14.02778, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+42,1180415, 530, 1, 1, 9641.782, -7259.7, 14.81578, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+43,1180406, 530, 1, 1, 9607.743, -7398.093, 13.61317, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+44,1180415, 530, 1, 1, 9628.13, -7445.979, 14.02779, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+45,1180415, 530, 1, 1, 9632.113, -7441.426, 14.02779, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+46,1180415, 530, 1, 1, 9660.25, -7470.04, 14.02776, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+47,1180415, 530, 1, 1, 9638.744, -7460.21, 15.98692, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+48,1180415, 530, 1, 1, 9641.474, -7463.021, 16.38364, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+49,1180415, 530, 1, 1, 9640.314, -7461.316, 17.30185, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+50,1180415, 530, 1, 1, 9638.427, -7461.016, 18.32743, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+51,1180415, 530, 1, 1, 9638.209, -7462.663, 18.66362, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+52,1180415, 530, 1, 1, 9637.09, -7461.913, 18.66316, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+53,1180415, 530, 1, 1, 9640.428, -7464.382, 15.98692, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+54,1180415, 530, 1, 1, 9641.477, -7465.749, 15.98692, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+55,1180415, 530, 1, 1, 9639.198, -7461.872, 15.98692, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+56,1180415, 530, 1, 1, 9624.851, -7453.41, 14.02778, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+57,1180415, 530, 1, 1, 9637.354, -7461.244, 15.98692, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+58,1180415, 530, 1, 1, 9639.954, -7462.725, 16.84003, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+59,1180415, 530, 1, 1, 9635.964, -7460.174, 15.97606, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+60,1180415, 530, 1, 1, 9635.571, -7461.838, 15.98692, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+61,1180415, 530, 1, 1, 9639.138, -7462.302, 17.97781, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+62,1180415, 530, 1, 1, 9635.984, -7466.34, 18.39254, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+63,1180415, 530, 1, 1, 9633.069, -7464.283, 15.98692, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+64,1180415, 530, 1, 1, 9634.456, -7463.351, 15.98692, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+65,1180415, 530, 1, 1, 9635.389, -7467.68, 17.8932, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+66,1180415, 530, 1, 1, 9637.663, -7466.748, 18.66317, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+67,1180415, 530, 1, 1, 9633.908, -7461.739, 15.98692, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+68,1180415, 530, 1, 1, 9634.506, -7465.276, 16.39715, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+69,1180415, 530, 1, 1, 9637.328, -7468.691, 15.98692, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+70,1180415, 530, 1, 1, 9638.302, -7467.272, 15.98692, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+71,1180415, 530, 1, 1, 9635.129, -7466.257, 17.33418, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+72,1180415, 530, 1, 1, 9649.725, -7475.164, 14.02777, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+73,1180415, 530, 1, 1, 9634.771, -7467.749, 15.98692, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+74,1180415, 530, 1, 1, 9639.864, -7467.848, 15.98692, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+75,1180415, 530, 1, 1, 9636.4, -7467.287, 15.98692, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+76,1180415, 530, 1, 1, 9639.832, -7466.174, 15.98692, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+77,1180415, 530, 1, 1, 9655.462, -7473.856, 14.02776, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+78,1180415, 530, 1, 1, 9633.779, -7466.766, 16.85439, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+79,1180415, 530, 1, 1, 9654.685, -7494.923, 20.20687, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+80,1180415, 530, 1, 1, 9642.694, -7487.412, 14.02775, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+81,1180415, 530, 1, 1, 9708.024, -7495.3, 20.21482, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+82,1180405, 530, 1, 1, 9677.399, -7499.985, 15.73777, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+83,1180407, 530, 1, 1, 9687.479, -7494.583, 15.76028, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+84,1180411, 530, 1, 1, 9694.27, -7498.087, 19.95394, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1)
+(@OGUID+85,1180415, 530, 1, 1, 9714.893, -7495.471, 20.20084, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+86,1180406, 530, 1, 1, 9689.191, -7499.704, 15.73832, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+87,1180415, 530, 1, 1, 9705.337, -7495.149, 20.22054, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+88,1180406, 530, 1, 1, 9679.796, -7494.525, 15.75649, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+89,1180415, 530, 1, 1, 9646.641, -7482.605, 14.02776, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+90,1180411, 530, 1, 1, 9672.331, -7497.908, 19.90336, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1)
+(@OGUID+91,1180415, 530, 1, 1, 9619.048, -7454.828, 14.02777, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+92,1180415, 530, 1, 1, 9711.266, -7495.455, 20.2082, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+93,1180415, 530, 1, 1, 9658.174, -7494.944, 20.21395, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+94,1180407, 530, 1, 1, 9697.96, -7500.003, 15.73456, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+95,1180415, 530, 1, 1, 9661.191, -7494.833, 20.22025, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+96,1180415, 530, 1, 1, 9614.421, -7458.695, 14.02777, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+97,1180411, 530, 1, 1, 9683.252, -7498, 21.73868, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1)
+(@OGUID+98,1180415, 530, 1, 1, 9612.596, -7464.159, 14.02776, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+99,1180415, 530, 1, 1, 9624.603, -7474.983, 14.02777, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+100,180415, 530, 1, 1, 9718.226, -7495.425, 20.1941, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+101,180415, 530, 1, 1, 9651.492, -7494.754, 20.20044, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+102,180415, 530, 1, 1, 9708.641, -7508.83, 20.19345, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+103,180415, 530, 1, 1, 9614.337, -7469.526, 14.02776, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+104,180415, 530, 1, 1, 9767.092, -7472.754, 13.57029, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+105,180415, 530, 1, 1, 9627.683, -7482.578, 14.02777, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+106,180415, 530, 1, 1, 9618.941, -7473.685, 14.02776, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+107,180415, 530, 1, 1, 9648.458, -7494.752, 20.19428, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+108,180415, 530, 1, 1, 9631.637, -7487.333, 14.02776, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+109,180415, 530, 1, 1, 9657.274, -7508.259, 20.19345, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+110,180415, 530, 1, 1, 9637.185, -7488.979, 14.02775, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+111,180407, 530, 1, 1, 9668.626, -7499.798, 15.73456, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+112,180415, 530, 1, 1, 9708.441, -7511.002, 20.19343, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+113,180415, 530, 1, 1, 9658.278, -7510.662, 20.19343, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+114,180415, 530, 1, 1, 9767.192, -7475.003, 13.54758, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+115,180415, 530, 1, 1, 9747.169, -7504.403, 13.82745, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+116,180415, 530, 1, 1, 9708.247, -7520.514, 20.1934, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+117,180411, 530, 1, 1, 9768.593, -7495.143, 22.07407, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1)
+(@OGUID+118,180415, 530, 1, 1, 9770.302, -7477.873, 13.54952, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+119,180415, 530, 1, 1, 9708.587, -7514.249, 20.19342, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+120,180405, 530, 1, 1, 9771.71, -7476.252, 13.54952, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+121,180405, 530, 1, 1, 9765.729, -7484.294, 13.51967, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+122,180415, 530, 1, 1, 9745.084, -7507.751, 13.84984, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+123,180415, 530, 1, 1, 9708.395, -7517.227, 20.19341, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+124,180406, 530, 1, 1, 9766.075, -7491.438, 13.51901, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+125,180415, 530, 1, 1, 9767.161, -7488.73, 13.5172, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+126,180415, 530, 1, 1, 9767.326, -7477.913, 13.5208, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+127,180415, 530, 1, 1, 9770.485, -7489.105, 13.54949, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+128,180415, 530, 1, 1, 9770.472, -7486.432, 13.54949, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+129,180415, 530, 1, 1, 9766.888, -7486.758, 13.51768, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+130,180411, 530, 1, 1, 9768.688, -7480.606, 22.21311, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1)
+(@OGUID+131,180415, 530, 1, 1, 9770.341, -7492.48, 13.5495, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+132,180415, 530, 1, 1, 9770.315, -7483.281, 13.5495, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+133,180407, 530, 1, 1, 9806.146, -7483.15, 13.54675, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+134,180405, 530, 1, 1, 9828.603, -7428.656, 13.619, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+135,180405, 530, 1, 1, 9771.549, -7499.522, 13.54952, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+136,180415, 530, 1, 1, 9770.2, -7497.835, 13.54952, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+137,180415, 530, 1, 1, 9767.045, -7497.897, 13.52364, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+138,180415, 530, 1, 1, 9763.943, -7503.117, 13.57326, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+139,180415, 530, 1, 1, 9760.557, -7504.637, 13.84737, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+140,180407, 530, 1, 1, 9822.736, -7460.87, 14.96318, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+141,180415, 530, 1, 1, 9767.044, -7502.682, 13.56838, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+142,180415, 530, 1, 1, 9828.7, -7444.441, 15.47772, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+143,180406, 530, 1, 1, 9806.036, -7492.882, 13.54704, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+144,180472, 530, 1, 1, 9828.494, -7448.282, 18.26859, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1)
+(@OGUID+145,180472, 530, 1, 1, 9834.405, -7383.108, 18.10079, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1)
+(@OGUID+146,180406, 530, 1, 1, 9850.404, -7388.42, 13.64399, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+147,180415, 530, 1, 1, 9864.481, -7406.846, 17.2591, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+148,180415, 530, 1, 1, 9873.646, -7397.968, 17.17783, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+149,180415, 530, 1, 1, 9871.325, -7404.424, 17.25784, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+150,180407, 530, 1, 1, 9864.585, -7372.301, 20.45062, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+151,180472, 530, 1, 1, 9874.94, -7450.112, 18.36826, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1)
+(@OGUID+152,180406, 530, 1, 1, 9876.843, -7387.032, 20.45033, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+153,180407, 530, 1, 1, 9912.188, -7409.072, 13.64037, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+154,180405, 530, 1, 1, 9899.083, -7405.358, 13.6274, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+155,180415, 530, 1, 1, 9841.817, -7508.129, 19.64095, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+156,180415, 530, 1, 1, 9849.061, -7502.075, -4.007756, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+157,180415, 530, 1, 1, 9852.741, -7502.268, -4.003982, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+158,180415, 530, 1, 1, 9847.087, -7501.374, 19.64914, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+159,180415, 530, 1, 1, 9855.832, -7499.758, 14.95692, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+160,180415, 530, 1, 1, 9844.303, -7503.149, 19.64698, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+161,180415, 530, 1, 1, 9850.985, -7500.915, 19.68542, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+162,180415, 530, 1, 1, 9850.927, -7498.934, 14.93043, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+163,180415, 530, 1, 1, 9841.513, -7507.542, -4.000395, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+164,180405, 530, 1, 1, 9881.052, -7461.776, 18.23401, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+165,180415, 530, 1, 1, 9855.014, -7501.309, 19.67005, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+166,180415, 530, 1, 1, 9845.86, -7499.851, 14.9349, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+167,180415, 530, 1, 1, 9863.115, -7510.865, -3.999226, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+168,180415, 530, 1, 1, 9836.048, -7510.821, -4.0007, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+169,180415, 530, 1, 1, 9857.706, -7503.155, 19.66912, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+170,180407, 530, 1, 1, 9911.933, -7454.624, 3.859614, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+171,180415, 530, 1, 1, 9861.13, -7509.801, -3.999039, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+172,180415, 530, 1, 1, 9860.067, -7508.15, 19.66097, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+173,180415, 530, 1, 1, 9838.981, -7510.788, -3.999198, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+174,180415, 530, 1, 1, 9860.134, -7507.262, -3.999874, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+175,180415, 530, 1, 1, 9841.044, -7509.531, -3.99918, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+176,180415, 530, 1, 1, 9866.301, -7510.897, -4.000865, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+177,180415, 530, 1, 1, 9850.412, -7576.229, 20.30321, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+178,180415, 530, 1, 1, 9859.636, -7571.133, 20.36898, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+179,180415, 530, 1, 1, 9840.057, -7565.67, 20.272, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+180,180415, 530, 1, 1, 9855.566, -7556.837, 20.22193, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+181,180415, 530, 1, 1, 9855.622, -7574.95, 20.33961, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+182,180415, 530, 1, 1, 9841.286, -7570.885, 20.31774, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+183,180415, 530, 1, 1, 9850.589, -7555.328, 20.28959, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+184,180415, 530, 1, 1, 9860.757, -7565.826, 20.21995, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+185,180415, 530, 1, 1, 9845.252, -7556.721, 20.27281, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+186,180415, 530, 1, 1, 9859.213, -7560.637, 20.16981, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+187,180415, 530, 1, 1, 9845.12, -7574.828, 20.32867, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+188,180415, 530, 1, 1, 9841.471, -7560.367, 20.30399, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+189,180415, 530, 1, 1, 9708.164, -7523.533, 20.19339, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+190,180415, 530, 1, 1, 9708.63, -7525.708, 20.19339, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+191,180415, 530, 1, 1, 9689.424, -7526.101, 18.17952, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+192,180415, 530, 1, 1, 9698.255, -7529.269, 18.1807, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+193,180415, 530, 1, 1, 9699.27, -7531.121, 18.17952, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+194,180415, 530, 1, 1, 9688.258, -7524.131, 18.17952, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+195,180415, 530, 1, 1, 9696.238, -7528.111, 18.18006, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+196,180415, 530, 1, 1, 9699.441, -7533.089, 18.18734, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+197,180415, 530, 1, 1, 9686.209, -7523.117, 18.17953, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+198,180415, 530, 1, 1, 9680.044, -7523.145, 18.17953, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+199,180415, 530, 1, 1, 9689.915, -7528.086, 18.18014, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+200,180415, 530, 1, 1, 9677.983, -7524.141, 18.17953, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+201,180415, 530, 1, 1, 9676.573, -7530.896, 18.18807, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+202,180415, 530, 1, 1, 9669.972, -7528.087, 18.18037, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+203,180415, 530, 1, 1, 9658.169, -7523.246, 20.19338, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+204,180415, 530, 1, 1, 9666.942, -7531.015, 18.18179, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+205,180415, 530, 1, 1, 9658.161, -7520.05, 20.19339, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+206,180415, 530, 1, 1, 9676.96, -7525.968, 18.17952, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+207,180415, 530, 1, 1, 9690.021, -7531.793, 18.19084, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+208,180415, 530, 1, 1, 9658.127, -7516.909, 20.19341, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+209,180415, 530, 1, 1, 9687.82, -7536.056, 18.20918, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+210,180415, 530, 1, 1, 9677.461, -7536.019, 18.20867, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+211,180415, 530, 1, 1, 9676.623, -7527.953, 18.17995, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+212,180415, 530, 1, 1, 9658.238, -7513.847, 20.19342, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+213,180415, 530, 1, 1, 9668.019, -7529.09, 18.17951, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+214,180415, 530, 1, 1, 9657.903, -7525.752, 20.19338, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+215,180415, 530, 1, 1, 9666.733, -7532.866, 18.1876, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+216,180415, 530, 1, 1, 9555.557, -7451.346, 15.48449, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+217,180415, 530, 1, 1, 9566.941, -7457.089, 15.52037, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+218,180415, 530, 1, 1, 9567.046, -7447.51, 15.51974, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+219,180415, 530, 1, 1, 9566.97, -7453.825, 15.51949, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+220,180415, 530, 1, 1, 9566.997, -7451.406, 15.51957, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+221,180415, 530, 1, 1, 9568.402, -7426.109, 19.47399, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+222,180415, 530, 1, 1, 9567.152, -7445.854, 15.52034, 0.6108634, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+223,180472, 530, 1, 1, 9563.636, -7502.269, 21.49481, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1)
+(@OGUID+224,180415, 530, 1, 1, 9566.976, -7449.656, 15.51938, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+225,180415, 530, 1, 1, 9566.942, -7455.471, 15.51938, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+226,180405, 530, 1, 1, 9563.622, -7483.452, 15.5327, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+227,180415, 530, 1, 1, 9567.161, -7443.97, 15.52034, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+228,180406, 530, 1, 1, 9562.59, -7505.374, 16.25697, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+229,180415, 530, 1, 1, 9567.133, -7442.481, 15.5201, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+230,180415, 530, 1, 1, 9565.785, -7425.961, 19.47643, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+231,180410, 530, 1, 1, 9540.223, -7450.809, 17.51837, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1)
+(@OGUID+232,180415, 530, 1, 1, 9567.209, -7426.12, 19.47489, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+233,180415, 530, 1, 1, 9541.864, -7425.773, 19.47651, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+234,180415, 530, 1, 1, 9563.859, -7424.643, 19.47689, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+235,180410, 530, 1, 1, 9540.258, -7448.014, 17.50896, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1)
+(@OGUID+236,180472, 530, 1, 1, 9564.246, -7412.431, 27.42245, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1)
+(@OGUID+237,180410, 530, 1, 1, 9550.316, -7412.965, 20.95277, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1)
+(@OGUID+238,180415, 530, 1, 1, 9544.101, -7423.859, 19.47693, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+239,180415, 530, 1, 1, 9563.4, -7423.909, 19.47697, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+240,180410, 530, 1, 1, 9540.216, -7453.866, 17.47302, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1)
+(@OGUID+241,180415, 530, 1, 1, 9543.036, -7424.986, 19.47662, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+242,180415, 530, 1, 1, 9564.668, -7425.304, 19.47664, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+243,180407, 530, 1, 1, 9567.768, -7397.515, 16.85042, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+244,180406, 530, 1, 1, 9567.915, -7416.937, 19.47392, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+245,180410, 530, 1, 1, 9553.402, -7413.04, 20.98712, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1)
+(@OGUID+246,180407, 530, 1, 1, 9543.043, -7483.666, 15.53269, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+247,180415, 530, 1, 1, 9540.23, -7425.866, 19.4752, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+248,180472, 530, 1, 1, 9519.833, -7433.035, 19.3605, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1)
+(@OGUID+249,180415, 530, 1, 1, 9539.083, -7425.975, 19.47459, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+250,180407, 530, 1, 1, 9540.185, -7417.852, 19.4752, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+251,180405, 530, 1, 1, 9557.853, -7400.035, 16.83773, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+252,180410, 530, 1, 1, 9543.699, -7412.968, 20.87036, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1)
+(@OGUID+253,180406, 530, 1, 1, 9508.441, -7424.596, 14.1965, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+254,180410, 530, 1, 1, 9538.562, -7415.213, 20.94702, 0, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1)
+(@OGUID+255,180405, 530, 1, 1, 9523.479, -7423.124, 14.25087, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+256,180410, 530, 1, 1, 9540.664, -7412.908, 20.89148, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1)
+(@OGUID+257,180406, 530, 1, 1, 9539.319, -7392.822, 16.82288, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+258,180472, 530, 1, 1, 9554.567, -7389.99, 21.68028, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1)
+(@OGUID+259,180415, 530, 1, 1, 9487.291, -7422.018, 14.81501, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+260,180415, 530, 1, 1, 9484.362, -7445.353, 14.90302, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+261,180415, 530, 1, 1, 9480.708, -7432.739, 14.90301, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+262,180415, 530, 1, 1, 9476.451, -7449.176, 14.90303, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+263,180407, 530, 1, 1, 9494.879, -7428.358, 17.09135, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+264,180415, 530, 1, 1, 9492.825, -7419.987, 14.81502, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+265,180415, 530, 1, 1, 9476.508, -7431.844, 14.90302, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+266,180415, 530, 1, 1, 9467.375, -7440.646, 14.90301, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+267,180415, 530, 1, 1, 9472.466, -7432.785, 14.90301, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+268,180415, 530, 1, 1, 9482.682, -7420.492, 14.81501, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+269,180415, 530, 1, 1, 9484.56, -7436.282, 14.90301, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+270,180415, 530, 1, 1, 9468.686, -7445.147, 14.90302, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+271,180415, 530, 1, 1, 9496.979, -7414.939, 14.81503, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+272,180415, 530, 1, 1, 9472.42, -7448.443, 14.90303, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+273,180415, 530, 1, 1, 9485.846, -7440.649, 14.90301, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+274,180415, 530, 1, 1, 9497.751, -7409.99, 14.81504, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+275,180415, 530, 1, 1, 9480.601, -7448.55, 14.90303, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+276,180415, 530, 1, 1, 9497.879, -7397.243, 14.81503, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+277,180415, 530, 1, 1, 9468.706, -7436.143, 14.90301, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+278,180415, 530, 1, 1, 9497.823, -7404.051, 14.81503, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+279,180405, 530, 1, 1, 9728.203, -7077.669, 16.74163, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+280,180405, 530, 1, 1, 9731.667, -7093.845, 16.69393, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+281,180406, 530, 1, 1, 9649.085, -7055.952, 18.9854, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+282,180405, 530, 1, 1, 9630.405, -7055.748, 18.99824, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+283,180407, 530, 1, 1, 9625.018, -7048.128, 16.5235, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+284,180407, 530, 1, 1, 9452.534, -7117.212, 17.60469, 1.239183, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+285, 180415, 530, 1, 1, 9471.1, -6788.781, 18.13373, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+286, 180415, 530, 1, 1, 9476.353, -6788.941, 18.10409, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+287, 180405, 530, 1, 1, 9477.764, -6788.119, 16.49356, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+288, 180415, 530, 1, 1, 9478.772, -6793.347, 18.11179, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+289, 180415, 530, 1, 1, 9540.375, -6792.719, 18.12548, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+290, 180406, 530, 1, 1, 9543.698, -6778.754, 15.11356, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+291, 180415, 530, 1, 1, 9543.889, -6783.125, 17.3731, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+292, 180415, 530, 1, 1, 9544.979, -6778.125, 16.53427, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+293, 180415, 530, 1, 1, 9543.481, -6796.776, 18.1165, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+294, 180405, 530, 1, 1, 9542.096, -6797.444, 16.47561, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+295, 180415, 530, 1, 1, 9541.747, -6787.827, 17.90674, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+296, 180415, 530, 1, 1, 8744.743, -6707.795, 71.16882, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+297, 180407, 530, 1, 1, 8752.958, -6701.513, 70.30769, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+298, 180415, 530, 1, 1, 8732.847, -6664.828, 71.75481, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+299, 180415, 530, 1, 1, 8761.782, -6686.872, 71.60171, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+300, 180407, 530, 1, 1, 8727.983, -6662.12, 70.34041, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+301, 180415, 530, 1, 1, 8748.609, -6711.054, 71.06712, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+302, 180415, 530, 1, 1, 8759.109, -6691.253, 71.28538, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+303, 180406, 530, 1, 1, 8749.692, -6699.78, 69.26237, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+304, 180415, 530, 1, 1, 8739.994, -6664.781, 71.07558, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+305, 180415, 530, 1, 1, 8757.932, -6701.396, 71.16756, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+306, 180405, 530, 1, 1, 8723.28, -6666.225, 70.24129, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+307, 180415, 530, 1, 1, 8753.414, -6709.49, 71.1883, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+308, 180415, 530, 1, 1, 8726.561, -6687.083, 72.62592, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+309, 180405, 530, 1, 1, 8753.743, -6699.585, 70.3749, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+310, 180415, 530, 1, 1, 8723.233, -6681.452, 71.84742, 0.6981314, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+311, 180405, 530, 1, 1, 8719.521, -6656.928, 93.42024, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+312, 180415, 530, 1, 1, 8700.916, -6674.799, 72.0319, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3462)
+(@OGUID+313, 180415, 530, 1, 1, 8706.488, -6662.007, 71.92754, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3462)
+(@OGUID+314, 180406, 530, 1, 1, 8705.386, -6687.072, 70.4631, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3462)
+(@OGUID+315, 180411, 530, 1, 1, 8717.235, -6634.217, 81.3668, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3462)
+(@OGUID+316, 180415, 530, 1, 1, 8702.579, -6665.299, 71.93767, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3462)
+(@OGUID+317, 180415, 530, 1, 1, 8701.252, -6679.795, 72.46958, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3462)
+(@OGUID+318, 180407, 530, 1, 1, 8706.709, -6692.784, 70.40144, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3462)
+(@OGUID+319, 180411, 530, 1, 1, 8692.95, -6653.304, 81.65059, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3462)
+(@OGUID+320, 180415, 530, 1, 1, 8698.946, -6684.249, 72.75284, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3462)
+(@OGUID+321, 180411, 530, 1, 1, 8690.379, -6624.208, 81.74379, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3462)
+(@OGUID+322, 180407, 530, 1, 1, 8698.128, -6633.019, 82.70164, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3462)
+(@OGUID+323, 180406, 530, 1, 1, 8704.135, -6639.711, 82.70164, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3462)
+(@OGUID+324, 180411, 530, 1, 1, 8714.333, -6651.519, 81.38808, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3462)
+(@OGUID+325, 180405, 530, 1, 1, 8679.956, -6613.042, 93.42129, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3462)
+(@OGUID+326, 180405, 530, 1, 1, 8683.743, -6621.233, 70.36587, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3462)
+(@OGUID+327, 180406, 530, 1, 1, 8688.724, -6616.967, 70.36587, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3462)
+(@OGUID+328, 180415, 530, 1, 1, 7605.088, -6811.049, 84.1159, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+329, 180415, 530, 1, 1, 7612.11, -6804.234, 81.90377, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+330, 180415, 530, 1, 1, 7612.021, -6828.266, 83.9107, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+331, 180415, 530, 1, 1, 7566.673, -6821.13, 88.05801, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+332, 180427, 530, 1, 1, 7573.918, -6803.229, 94.8674, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+333, 180415, 530, 1, 1, 7567.127, -6817.865, 88.0573, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+334, 180427, 530, 1, 1, 7569.024, -6809.578, 94.50038, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+335, 180426, 530, 1, 1, 7569.082, -6825.991, 89.69709, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+336, 180415, 530, 1, 1, 7602.116, -6828.639, 86.01514, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+337, 180427, 530, 1, 1, 7574.768, -6814.038, 95.28167, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+338, 180405, 530, 1, 1, 7577.568, -6858.068, 93.35548, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+339, 180426, 530, 1, 1, 7572.743, -6822.458, 90.08892, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+340, 180407, 530, 1, 1, 7576.379, -6780.385, 87.40021, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+341, 180426, 530, 1, 1, 7572.007, -6815.111, 93.45477, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+342, 180415, 530, 1, 1, 7567.2, -6819.601, 88.05785, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+343, 180427, 530, 1, 1, 7589.011, -6833.851, 98.97574, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+344, 180407, 530, 1, 1, 7572.278, -6819.3, 86.66614, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+345, 180426, 530, 1, 1, 7571.846, -6841.222, 98.84716, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+346, 180415, 530, 1, 1, 7562.185, -6823.288, 88.05971, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+347, 180427, 530, 1, 1, 7567.376, -6835.135, 98.69683, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+348, 180415, 530, 1, 1, 7561.724, -6814.664, 88.05759, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+349, 180415, 530, 1, 1, 7565.117, -6815.148, 88.05692, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+350, 180415, 530, 1, 1, 7558.944, -6816.728, 88.05735, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+351, 180405, 530, 1, 1, 7566.199, -6800.06, 87.48344, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+352, 180415, 530, 1, 1, 7563.428, -6814.641, 88.05914, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+353, 180415, 530, 1, 1, 7559.307, -6821.544, 88.05991, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+354, 180415, 530, 1, 1, 7558.512, -6820.009, 88.05814, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+355, 180426, 530, 1, 1, 7560.972, -6804.747, 97.29667, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+356, 180415, 530, 1, 1, 7565.508, -6822.448, 88.05878, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+357, 180426, 530, 1, 1, 7567.499, -6812.465, 101.9166, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+358, 180415, 530, 1, 1, 7566.346, -6816.298, 88.0579, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+359, 180407, 530, 1, 1, 7571.595, -6855.143, 93.3475, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+360, 180415, 530, 1, 1, 7564.033, -6823.213, 88.05829, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+361, 180415, 530, 1, 1, 7560.621, -6822.766, 88.05952, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+362, 180426, 530, 1, 1, 7564.719, -6828.118, 96.17546, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+363, 180426, 530, 1, 1, 7560.467, -6812.441, 96.04751, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+364, 180415, 530, 1, 1, 7560.125, -6815.4, 88.05717, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+365, 180426, 530, 1, 1, 7547.692, -6814.104, 93.27422, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+366, 180406, 530, 1, 1, 7552.977, -6801.014, 87.09279, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+367, 180426, 530, 1, 1, 7547.643, -6825.288, 94.40193, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+368, 180427, 530, 1, 1, 7558.28, -6809.564, 94.68667, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+369, 180415, 530, 1, 1, 7546.278, -6830.885, 88.81131, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+370, 180426, 530, 1, 1, 7557.047, -6828.95, 95.44633, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+371, 180415, 530, 1, 1, 7555.831, -6833.354, 89.27995, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+372, 180415, 530, 1, 1, 7558.429, -6818.413, 88.05863, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+373, 180405, 530, 1, 1, 7552.512, -6816.896, 86.9488, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+374, 180411, 530, 1, 1, 7557.601, -6889.191, 103.978, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0)
+(@OGUID+375, 180427, 530, 1, 1, 7542.735, -6808.821, 93.34179, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+376, 180427, 530, 1, 1, 7538.969, -6832.844, 96.30994, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+377, 180411, 530, 1, 1, 7552.211, -6766.903, 96.95532, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0)
+(@OGUID+378, 180406, 530, 1, 1, 7512.574, -6856.683, 84.62782, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3488)
+(@OGUID+379, 180415, 530, 1, 1, 7506.477, -6809.167, 81.56933, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3488)
+(@OGUID+380, 180415, 530, 1, 1, 7516.309, -6806.774, 83.16227, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3488)
+(@OGUID+381, 186720, 530, 1, 1, 9225.462, -6765.234, 26.05804, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 186720 (Area: 0)
+(@OGUID+382, 186720, 530, 1, 1, 9229.307, -6780.561, 27.05395, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 186720 (Area: 0)
+(@OGUID+383, 186720, 530, 1, 1, 9224.697, -6771.005, 27.25945, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 186720 (Area: 0)
+(@OGUID+384, 186720, 530, 1, 1, 9224.153, -6777.715, 28.38528, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 186720 (Area: 0)
+(@OGUID+385, 186234, 530, 1, 1, 9235.062, -6770.263, 24.79453, 2.792518, 0, 0, 0, 1, 120, 255, 1); -- 186234 (Area: 0)
+
+INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES
+(12, @OGUID+0),
+(12, @OGUID+1),
+(12, @OGUID+2),
+(12, @OGUID+3),
+(12, @OGUID+4),
+(12, @OGUID+5),
+(12, @OGUID+6),
+(12, @OGUID+7),
+(12, @OGUID+8),
+(12, @OGUID+9),
+(12, @OGUID+10),
+(12, @OGUID+11),
+(12, @OGUID+12),
+(12, @OGUID+13),
+(12, @OGUID+14),
+(12, @OGUID+15),
+(12, @OGUID+16),
+(12, @OGUID+17),
+(12, @OGUID+18),
+(12, @OGUID+19),
+(12, @OGUID+20),
+(12, @OGUID+21),
+(12, @OGUID+22),
+(12, @OGUID+23),
+(12, @OGUID+24),
+(12, @OGUID+25),
+(12, @OGUID+26),
+(12, @OGUID+27),
+(12, @OGUID+28),
+(12, @OGUID+29),
+(12, @OGUID+30),
+(12, @OGUID+31),
+(12, @OGUID+32),
+(12, @OGUID+33),
+(12, @OGUID+34),
+(12, @OGUID+35),
+(12, @OGUID+36),
+(12, @OGUID+37),
+(12, @OGUID+38),
+(12, @OGUID+39),
+(12, @OGUID+40),
+(12, @OGUID+41),
+(12, @OGUID+42),
+(12, @OGUID+43),
+(12, @OGUID+44),
+(12, @OGUID+45),
+(12, @OGUID+46),
+(12, @OGUID+47),
+(12, @OGUID+48),
+(12, @OGUID+49),
+(12, @OGUID+50),
+(12, @OGUID+51),
+(12, @OGUID+52),
+(12, @OGUID+53),
+(12, @OGUID+54),
+(12, @OGUID+55),
+(12, @OGUID+56),
+(12, @OGUID+57),
+(12, @OGUID+58),
+(12, @OGUID+59),
+(12, @OGUID+60),
+(12, @OGUID+61),
+(12, @OGUID+62),
+(12, @OGUID+63),
+(12, @OGUID+64),
+(12, @OGUID+65),
+(12, @OGUID+66),
+(12, @OGUID+67),
+(12, @OGUID+68),
+(12, @OGUID+69),
+(12, @OGUID+70),
+(12, @OGUID+71),
+(12, @OGUID+72),
+(12, @OGUID+73),
+(12, @OGUID+74),
+(12, @OGUID+75),
+(12, @OGUID+76),
+(12, @OGUID+77),
+(12, @OGUID+78),
+(12, @OGUID+79),
+(12, @OGUID+80),
+(12, @OGUID+81),
+(12, @OGUID+82),
+(12, @OGUID+83),
+(12, @OGUID+84),
+(12, @OGUID+85),
+(12, @OGUID+86),
+(12, @OGUID+87),
+(12, @OGUID+88),
+(12, @OGUID+89),
+(12, @OGUID+90),
+(12, @OGUID+91),
+(12, @OGUID+92),
+(12, @OGUID+93),
+(12, @OGUID+94),
+(12, @OGUID+95),
+(12, @OGUID+96),
+(12, @OGUID+97),
+(12, @OGUID+98),
+(12, @OGUID+99),
+(12, @OGUID+100),
+(12, @OGUID+101),
+(12, @OGUID+102),
+(12, @OGUID+103),
+(12, @OGUID+104),
+(12, @OGUID+105),
+(12, @OGUID+106),
+(12, @OGUID+107),
+(12, @OGUID+108),
+(12, @OGUID+109),
+(12, @OGUID+110),
+(12, @OGUID+111),
+(12, @OGUID+112),
+(12, @OGUID+113),
+(12, @OGUID+114),
+(12, @OGUID+115),
+(12, @OGUID+116),
+(12, @OGUID+117),
+(12, @OGUID+118),
+(12, @OGUID+119),
+(12, @OGUID+120),
+(12, @OGUID+121),
+(12, @OGUID+122),
+(12, @OGUID+123),
+(12, @OGUID+124),
+(12, @OGUID+125),
+(12, @OGUID+126),
+(12, @OGUID+127),
+(12, @OGUID+128),
+(12, @OGUID+129),
+(12, @OGUID+130),
+(12, @OGUID+131),
+(12, @OGUID+132),
+(12, @OGUID+133),
+(12, @OGUID+134),
+(12, @OGUID+135),
+(12, @OGUID+136),
+(12, @OGUID+137),
+(12, @OGUID+138),
+(12, @OGUID+139),
+(12, @OGUID+140),
+(12, @OGUID+141),
+(12, @OGUID+142),
+(12, @OGUID+143),
+(12, @OGUID+144),
+(12, @OGUID+145),
+(12, @OGUID+146),
+(12, @OGUID+147),
+(12, @OGUID+148),
+(12, @OGUID+149),
+(12, @OGUID+150),
+(12, @OGUID+151),
+(12, @OGUID+152),
+(12, @OGUID+153),
+(12, @OGUID+154),
+(12, @OGUID+155),
+(12, @OGUID+156),
+(12, @OGUID+157),
+(12, @OGUID+158),
+(12, @OGUID+159),
+(12, @OGUID+160),
+(12, @OGUID+161),
+(12, @OGUID+162),
+(12, @OGUID+163),
+(12, @OGUID+164),
+(12, @OGUID+165),
+(12, @OGUID+166),
+(12, @OGUID+167),
+(12, @OGUID+168),
+(12, @OGUID+169),
+(12, @OGUID+170),
+(12, @OGUID+171),
+(12, @OGUID+172),
+(12, @OGUID+173),
+(12, @OGUID+174),
+(12, @OGUID+175),
+(12, @OGUID+176),
+(12, @OGUID+177),
+(12, @OGUID+178),
+(12, @OGUID+179),
+(12, @OGUID+180),
+(12, @OGUID+181),
+(12, @OGUID+182),
+(12, @OGUID+183),
+(12, @OGUID+184),
+(12, @OGUID+185),
+(12, @OGUID+186),
+(12, @OGUID+187),
+(12, @OGUID+188),
+(12, @OGUID+189),
+(12, @OGUID+190),
+(12, @OGUID+191),
+(12, @OGUID+192),
+(12, @OGUID+193),
+(12, @OGUID+194),
+(12, @OGUID+195),
+(12, @OGUID+196),
+(12, @OGUID+197),
+(12, @OGUID+198),
+(12, @OGUID+199),
+(12, @OGUID+200),
+(12, @OGUID+201),
+(12, @OGUID+202),
+(12, @OGUID+203),
+(12, @OGUID+204),
+(12, @OGUID+205),
+(12, @OGUID+206),
+(12, @OGUID+207),
+(12, @OGUID+208),
+(12, @OGUID+209),
+(12, @OGUID+210),
+(12, @OGUID+211),
+(12, @OGUID+212),
+(12, @OGUID+213),
+(12, @OGUID+214),
+(12, @OGUID+215),
+(12, @OGUID+216),
+(12, @OGUID+217),
+(12, @OGUID+218),
+(12, @OGUID+219),
+(12, @OGUID+220),
+(12, @OGUID+221),
+(12, @OGUID+222),
+(12, @OGUID+223),
+(12, @OGUID+224),
+(12, @OGUID+225),
+(12, @OGUID+226),
+(12, @OGUID+227),
+(12, @OGUID+228),
+(12, @OGUID+229),
+(12, @OGUID+230),
+(12, @OGUID+231),
+(12, @OGUID+232),
+(12, @OGUID+233),
+(12, @OGUID+234),
+(12, @OGUID+235),
+(12, @OGUID+236),
+(12, @OGUID+237),
+(12, @OGUID+238),
+(12, @OGUID+239),
+(12, @OGUID+240),
+(12, @OGUID+241),
+(12, @OGUID+242),
+(12, @OGUID+243),
+(12, @OGUID+244),
+(12, @OGUID+245),
+(12, @OGUID+246),
+(12, @OGUID+247),
+(12, @OGUID+248),
+(12, @OGUID+249),
+(12, @OGUID+250),
+(12, @OGUID+251),
+(12, @OGUID+252),
+(12, @OGUID+253),
+(12, @OGUID+254),
+(12, @OGUID+255),
+(12, @OGUID+256),
+(12, @OGUID+257),
+(12, @OGUID+258),
+(12, @OGUID+259),
+(12, @OGUID+260),
+(12, @OGUID+261),
+(12, @OGUID+262),
+(12, @OGUID+263),
+(12, @OGUID+264),
+(12, @OGUID+265),
+(12, @OGUID+266),
+(12, @OGUID+267),
+(12, @OGUID+268),
+(12, @OGUID+269),
+(12, @OGUID+270),
+(12, @OGUID+271),
+(12, @OGUID+272),
+(12, @OGUID+273),
+(12, @OGUID+274),
+(12, @OGUID+275),
+(12, @OGUID+276),
+(12, @OGUID+277),
+(12, @OGUID+278),
+(12, @OGUID+279),
+(12, @OGUID+280),
+(12, @OGUID+281),
+(12, @OGUID+282),
+(12, @OGUID+283),
+(12, @OGUID+284),
+(12, @OGUID+285),
+(12, @OGUID+286),
+(12, @OGUID+287),
+(12, @OGUID+288),
+(12, @OGUID+289),
+(12, @OGUID+290),
+(12, @OGUID+291),
+(12, @OGUID+292),
+(12, @OGUID+293),
+(12, @OGUID+294),
+(12, @OGUID+295),
+(12, @OGUID+296),
+(12, @OGUID+297),
+(12, @OGUID+298),
+(12, @OGUID+299),
+(12, @OGUID+300),
+(12, @OGUID+301),
+(12, @OGUID+302),
+(12, @OGUID+303),
+(12, @OGUID+304),
+(12, @OGUID+305),
+(12, @OGUID+306),
+(12, @OGUID+307),
+(12, @OGUID+308),
+(12, @OGUID+309),
+(12, @OGUID+310),
+(12, @OGUID+311),
+(12, @OGUID+312),
+(12, @OGUID+313),
+(12, @OGUID+314),
+(12, @OGUID+315),
+(12, @OGUID+316),
+(12, @OGUID+317),
+(12, @OGUID+318),
+(12, @OGUID+319),
+(12, @OGUID+320),
+(12, @OGUID+321),
+(12, @OGUID+322),
+(12, @OGUID+323),
+(12, @OGUID+324),
+(12, @OGUID+325),
+(12, @OGUID+326),
+(12, @OGUID+327),
+(12, @OGUID+328),
+(12, @OGUID+329),
+(12, @OGUID+330),
+(12, @OGUID+331),
+(12, @OGUID+332),
+(12, @OGUID+333),
+(12, @OGUID+334),
+(12, @OGUID+335),
+(12, @OGUID+336),
+(12, @OGUID+337),
+(12, @OGUID+338),
+(12, @OGUID+339),
+(12, @OGUID+340),
+(12, @OGUID+341),
+(12, @OGUID+342),
+(12, @OGUID+343),
+(12, @OGUID+344),
+(12, @OGUID+345),
+(12, @OGUID+346),
+(12, @OGUID+347),
+(12, @OGUID+348),
+(12, @OGUID+349),
+(12, @OGUID+350),
+(12, @OGUID+351),
+(12, @OGUID+352),
+(12, @OGUID+353),
+(12, @OGUID+354),
+(12, @OGUID+355),
+(12, @OGUID+356),
+(12, @OGUID+357),
+(12, @OGUID+358),
+(12, @OGUID+359),
+(12, @OGUID+360),
+(12, @OGUID+361),
+(12, @OGUID+362),
+(12, @OGUID+363),
+(12, @OGUID+364),
+(12, @OGUID+365),
+(12, @OGUID+366),
+(12, @OGUID+367),
+(12, @OGUID+368),
+(12, @OGUID+369),
+(12, @OGUID+370),
+(12, @OGUID+371),
+(12, @OGUID+372),
+(12, @OGUID+373),
+(12, @OGUID+374),
+(12, @OGUID+375),
+(12, @OGUID+376),
+(12, @OGUID+377),
+(12, @OGUID+378),
+(12, @OGUID+379),
+(12, @OGUID+380),
+(12, @OGUID+381),
+(12, @OGUID+382),
+(12, @OGUID+383),
+(12, @OGUID+384),
+(12, @OGUID+385);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_02_world.sql
new file mode 100644
index 00000000000..40a7f50c769
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_02_world.sql
@@ -0,0 +1,94 @@
+--
+SET @OGUID:=78023;
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+10 AND @OGUID+99;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@OGUID+10,180407, 530, 1, 1, 9812.965, -7409.957, 13.62506, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+11,180427, 530, 1, 1, 9682.321, -7432.618, 23.67524, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1)
+(@OGUID+12,180426, 530, 1, 1, 9685.572, -7441.069, 23.97384, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1)
+(@OGUID+13,180426, 530, 1, 1, 9686.853, -7440.715, 20.77245, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1)
+(@OGUID+14,180427, 530, 1, 1, 9686.702, -7436.893, 20.72384, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1)
+(@OGUID+15,180426, 530, 1, 1, 9684.29, -7437.083, 23.16829, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1)
+(@OGUID+16,180427, 530, 1, 1, 9682.661, -7437.406, 19.14746, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1)
+(@OGUID+17,180427, 530, 1, 1, 9682.217, -7440.542, 23.70301, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1)
+(@OGUID+18,180426, 530, 1, 1, 9681.567, -7440.406, 21.67523, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1)
+(@OGUID+19,180427, 530, 1, 1, 9688.92, -7439.088, 24.64051, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1)
+(@OGUID+20,180415, 530, 1, 1, 9726.541, -7459.687, 14.03802, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+21,180415, 530, 1, 1, 9646.93, -7446.186, 14.02778, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+22,180415, 530, 1, 1, 9763.853, -7467.264, 13.57424, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+23,180415, 530, 1, 1, 9721.928, -7473.809, 14.03804, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+24,180415, 530, 1, 1, 9763.872, -7469.173, 13.57424, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+25,180415, 530, 1, 1, 9642.902, -7441.372, 14.02778, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+26,180415, 530, 1, 1, 9706.262, -7464.713, 14.03802, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+27,180415, 530, 1, 1, 9722.172, -7455.784, 14.03802, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+28,180415, 530, 1, 1, 9637.544, -7439.558, 14.02778, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+29,180415, 530, 1, 1, 9708.006, -7469.922, 14.03803, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+30,180415, 530, 1, 1, 9717.246, -7454.905, 14.03803, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+31,180415, 530, 1, 1, 9707.984, -7459.522, 14.03802, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+32,180415, 530, 1, 1, 9726.428, -7470.03, 14.03803, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+33,180415, 530, 1, 1, 9763.653, -7472.03, 13.57424, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+34,180415, 530, 1, 1, 9712.377, -7473.811, 14.03804, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+35,180415, 530, 1, 1, 9728.004, -7464.864, 14.03802, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+36,180415, 530, 1, 1, 9712.409, -7455.581, 14.03802, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+37,180415, 530, 1, 1, 9717.181, -7474.624, 14.03804, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+38,180415, 530, 1, 1, 9660.289, -7459.098, 14.02777, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+39,180415, 530, 1, 1, 9661.99, -7464.522, 14.02777, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+40,180415, 530, 1, 1, 9655.606, -7455.169, 14.02777, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+41,180415, 530, 1, 1, 9649.94, -7453.708, 14.02778, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+42,180415, 530, 1, 1, 9641.782, -7259.7, 14.81578, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+43,180406, 530, 1, 1, 9607.743, -7398.093, 13.61317, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+44,180415, 530, 1, 1, 9628.13, -7445.979, 14.02779, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+45,180415, 530, 1, 1, 9632.113, -7441.426, 14.02779, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+46,180415, 530, 1, 1, 9660.25, -7470.04, 14.02776, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+47,180415, 530, 1, 1, 9638.744, -7460.21, 15.98692, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+48,180415, 530, 1, 1, 9641.474, -7463.021, 16.38364, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+49,180415, 530, 1, 1, 9640.314, -7461.316, 17.30185, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+50,180415, 530, 1, 1, 9638.427, -7461.016, 18.32743, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+51,180415, 530, 1, 1, 9638.209, -7462.663, 18.66362, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+52,180415, 530, 1, 1, 9637.09, -7461.913, 18.66316, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+53,180415, 530, 1, 1, 9640.428, -7464.382, 15.98692, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+54,180415, 530, 1, 1, 9641.477, -7465.749, 15.98692, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+55,180415, 530, 1, 1, 9639.198, -7461.872, 15.98692, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+56,180415, 530, 1, 1, 9624.851, -7453.41, 14.02778, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+57,180415, 530, 1, 1, 9637.354, -7461.244, 15.98692, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+58,180415, 530, 1, 1, 9639.954, -7462.725, 16.84003, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+59,180415, 530, 1, 1, 9635.964, -7460.174, 15.97606, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+60,180415, 530, 1, 1, 9635.571, -7461.838, 15.98692, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+61,180415, 530, 1, 1, 9639.138, -7462.302, 17.97781, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+62,180415, 530, 1, 1, 9635.984, -7466.34, 18.39254, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+63,180415, 530, 1, 1, 9633.069, -7464.283, 15.98692, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+64,180415, 530, 1, 1, 9634.456, -7463.351, 15.98692, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+65,180415, 530, 1, 1, 9635.389, -7467.68, 17.8932, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+66,180415, 530, 1, 1, 9637.663, -7466.748, 18.66317, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+67,180415, 530, 1, 1, 9633.908, -7461.739, 15.98692, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+68,180415, 530, 1, 1, 9634.506, -7465.276, 16.39715, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+69,180415, 530, 1, 1, 9637.328, -7468.691, 15.98692, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+70,180415, 530, 1, 1, 9638.302, -7467.272, 15.98692, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+71,180415, 530, 1, 1, 9635.129, -7466.257, 17.33418, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+72,180415, 530, 1, 1, 9649.725, -7475.164, 14.02777, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+73,180415, 530, 1, 1, 9634.771, -7467.749, 15.98692, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+74,180415, 530, 1, 1, 9639.864, -7467.848, 15.98692, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+75,180415, 530, 1, 1, 9636.4, -7467.287, 15.98692, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+76,180415, 530, 1, 1, 9639.832, -7466.174, 15.98692, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+77,180415, 530, 1, 1, 9655.462, -7473.856, 14.02776, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+78,180415, 530, 1, 1, 9633.779, -7466.766, 16.85439, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+79,180415, 530, 1, 1, 9654.685, -7494.923, 20.20687, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+80,180415, 530, 1, 1, 9642.694, -7487.412, 14.02775, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+81,180415, 530, 1, 1, 9708.024, -7495.3, 20.21482, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+82,180405, 530, 1, 1, 9677.399, -7499.985, 15.73777, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1)
+(@OGUID+83,180407, 530, 1, 1, 9687.479, -7494.583, 15.76028, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+84,180411, 530, 1, 1, 9694.27, -7498.087, 19.95394, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1)
+(@OGUID+85,180415, 530, 1, 1, 9714.893, -7495.471, 20.20084, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+86,180406, 530, 1, 1, 9689.191, -7499.704, 15.73832, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+87,180415, 530, 1, 1, 9705.337, -7495.149, 20.22054, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+88,180406, 530, 1, 1, 9679.796, -7494.525, 15.75649, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1)
+(@OGUID+89,180415, 530, 1, 1, 9646.641, -7482.605, 14.02776, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+90,180411, 530, 1, 1, 9672.331, -7497.908, 19.90336, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1)
+(@OGUID+91,180415, 530, 1, 1, 9619.048, -7454.828, 14.02777, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+92,180415, 530, 1, 1, 9711.266, -7495.455, 20.2082, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+93,180415, 530, 1, 1, 9658.174, -7494.944, 20.21395, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+94,180407, 530, 1, 1, 9697.96, -7500.003, 15.73456, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1)
+(@OGUID+95,180415, 530, 1, 1, 9661.191, -7494.833, 20.22025, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+96,180415, 530, 1, 1, 9614.421, -7458.695, 14.02777, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+97,180411, 530, 1, 1, 9683.252, -7498, 21.73868, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1)
+(@OGUID+98,180415, 530, 1, 1, 9612.596, -7464.159, 14.02776, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1)
+(@OGUID+99,180415, 530, 1, 1, 9624.603, -7474.983, 14.02777, 3.717554, 0, 0, 0, 1, 120, 255, 1); -- 180415 (Area: -1)
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_03_world.sql
new file mode 100644
index 00000000000..b3f3f2e9009
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_03_world.sql
@@ -0,0 +1,34 @@
+-- farlina cleanup
+-- areatrigger for greeting
+DELETE FROM `areatrigger_scripts` WHERE `entry`=4115;
+INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES
+(4115,"at_faerlina_entrance");
+
+DELETE FROM `creature_text` WHERE `entry`=15953 AND `groupid` IN (4,5);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
+(15953,4,0,"%s is affected by Widow's Embrace!",41,100,31019,3,"Faerlina EMOTE_WIDOW_EMBRACE"),
+(15953,5,0,"%s goes into a frenzy!",41,100,2384,3,"Faerlina EMOTE_FRENZY");
+
+-- remove some random spiders that aren't there on retail
+DELETE FROM `creature` WHERE `guid` IN (127961,127962);
+-- move followers to summon groups to avoid buggy respawn behavior of minions
+DELETE FROM `creature` WHERE `guid` IN (128061,128062,128063,128064);
+DELETE FROM `linked_respawn` WHERE `guid` IN (128061,128062,128063,128064);
+DELETE FROM `creature_summon_groups` WHERE `summonerId`=15953;
+INSERT INTO `creature_summon_groups` (`summonerId`,`summonerType`,`groupId`,`entry`,`position_x`,`position_y`,`position_z`,`orientation`,`summonType`) VALUES
+(15953,0,1,16506,3362.66 ,-3620.97,261.08,4.57276,8),
+(15953,0,1,16506,3356.71 ,-3620.05,261.08,4.57276,8),
+(15953,0,2,16505,3359.685,-3620.51,261.08,4.57276,8),
+(15953,0,1,16506,3344.3 ,-3618.31,261.08,4.69494,8),
+(15953,0,1,16506,3350.26 ,-3619.11,261.08,4.69494,8),
+(15953,0,2,16505,3347.28 ,-3618.71,261.08,4.69494,8);
+
+-- adds' fireball spell
+DELETE FROM `spelldifficulty_dbc` WHERE `id`=54095;
+INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`) VALUES
+(54095,54095,54096);
+
+-- naxxramas follower SAI changes
+DELETE FROM `smart_scripts` WHERE `entryorguid`=16505 AND `source_type`=0 AND `id`=2;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`event_type`,`event_chance`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`target_type`,`comment`) VALUES
+(16505,0,2,4,100,39,75,0,0,0, "Naxxramas Follower - On Aggro - Call For Help (75yd)");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_04_world.sql
new file mode 100644
index 00000000000..90efdecdf4f
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_04_world.sql
@@ -0,0 +1,27 @@
+DELETE FROM `creature_template_addon` WHERE `entry` IN (35254, 35253, 35252, 35251, 35250, 35249, 35248, 35247, 35246, 35256, 34484, 34483, 34482, 34481, 34480, 34479, 34478, 34477, 34476, 34435, 35258, 35244, 35259, 35260, 35261);
+INSERT INTO `creature_template_addon` (`entry`, `emote`, `auras`) VALUES
+(35254, 10, "33900 30628"),
+(35253, 10, "33900 30628"),
+(35252, 10, "33900 30628"),
+(35251, 10, "33900 30628"),
+(35250, 10, "33900 30628"),
+(35249, 10, "33900 30628"),
+(35248, 10, "33900 30628"),
+(35247, 10, "33900 30628"),
+(35246, 10, "33900 30628"),
+(35256, 0, "33900 30628"),
+(34484, 0, "33900 30628"),
+(34483, 0, "33900 30628"),
+(34482, 0, "33900 30628"),
+(34481, 0, "33900 30628"),
+(34480, 0, "33900 30628"),
+(34479, 0, "33900 30628"),
+(34478, 0, "33900 30628"),
+(34477, 0, "33900 30628"),
+(34476, 0, "33900 30628"),
+(34435, 0, "33900 30628"),
+(35258, 0, "33900 30628"),
+(35244, 0, "33900 30628"),
+(35259, 0, "33900 30628"),
+(35260, 0, "33900 30628"),
+(35261, 0, "33900 30628");
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_11_02_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_02_00_world.sql
new file mode 100644
index 00000000000..f0805777177
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_02_00_world.sql
@@ -0,0 +1,26 @@
+-- Anub'Rekhan cleanup
+-- areatrigger for greeting upon entering room
+DELETE FROM `areatrigger_scripts` WHERE `entry`=4119;
+INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES
+(4119,"at_anubrekhan_entrance");
+
+-- make crypt guards aggro anub when pulled
+DELETE FROM `smart_scripts` WHERE `entryorguid`=16573 AND `source_type`=0 AND `id` IN (6,7);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_chance`,`event_flags`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`target_type`,`comment`) VALUES
+(16573,0, 6, 0, 4,100,0, 39, 25, 0, 0, 0, "Crypt Guard - On Aggro - Call For Help (25yd)"),
+(16573,0, 7, 5,61,100,0, 1, 0, 0, 0, 0, "Crypt Guard - On Cast Frenzy - Say EMOTE_FRENZY");
+UPDATE `smart_scripts` SET `link`=7 WHERE `entryorguid`=16573 AND `source_type`=0 AND `id`=5;
+
+DELETE FROM `creature_text` WHERE `entry`=16573;
+DELETE FROM `creature_text` WHERE `entry`=15956 AND `groupid`=3;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
+(16573,0,0,"%s goes into a frenzy!",16,100,1191,3,"Crypt Guard EMOTE_FRENZY"),
+(16573,1,0,"A Crypt Guard joins the fight!",41,100,29887,3,"Crypt Guard EMOTE_SPAWN"),
+(16573,2,0,"Corpse Scarabs appear from a Crypt Guard's corpse!",41,100,32796,3,"Crypt Guard EMOTE_SCARAB"),
+(15956,3,0,"Anub'Rekhan begins to unleash an insect swarm!",41,100,13443,3,"Anub'Rekhan EMOTE_LOCUST");
+
+DELETE FROM `creature_summon_groups` WHERE `summonerId`=15956;
+INSERT INTO `creature_summon_groups` (`summonerId`,`summonerType`,`groupId`,`entry`,`position_x`,`position_y`,`position_z`,`orientation`,`summonType`) VALUES
+(15956,0,1,16573, 3300.503, -3503.574, 287.1606, 2.321288, 8),
+(15956,0,1,16573, 3299.283, -3450.938, 287.1606, 3.839724, 8),
+(15956,0,2,16573, 3334.41 , -3476.84 , 287.1553, 0, 8);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_11_02_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_02_01_world.sql
new file mode 100644
index 00000000000..c074e6b7de8
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_02_01_world.sql
@@ -0,0 +1,432 @@
+-- Pathing for Phoenix-Hawk Entry: 20039 'TDB FORMAT'
+SET @NPC := 12475;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=404.3267,`position_y`=51.04832,`position_z`=20.42939 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,404.3267,51.04832,20.42939,0,0,1,0,100,0), -- 15:53:14
+(@PATH,2,363.3958,82.78564,20.16342,0,0,1,0,100,0), -- 15:53:20
+(@PATH,3,351.0526,86.04145,20.2427,0,0,1,0,100,0), -- 15:53:21
+(@PATH,4,332.8026,86.04145,20.4927,0,0,1,0,100,0), -- 15:53:21
+(@PATH,5,322.5526,86.29145,20.2427,0,0,1,0,100,0), -- 15:53:21
+(@PATH,6,309.8975,86.35751,20.44322,0,0,1,0,100,0), -- 15:53:25
+(@PATH,7,298.1475,82.35751,20.44322,0,0,1,0,100,0), -- 15:53:25
+(@PATH,8,276.9726,72.43015,20.42969,0,0,1,0,100,0), -- 15:53:27
+(@PATH,9,256.9967,56.60734,20.43009,0,0,1,0,100,0), -- 15:53:29
+(@PATH,10,256.7982,56.72626,20.43009,0,0,1,0,100,0), -- 15:53:33
+(@PATH,11,276.9184,72.64089,20.43155,0,0,1,0,100,0), -- 15:53:34
+(@PATH,12,297.7713,82.30241,20.42944,0,0,1,0,100,0), -- 15:53:37
+(@PATH,13,322.4713,86.09231,20.41415,0,0,1,0,100,0), -- 15:53:39
+(@PATH,14,332.4713,86.09231,20.41415,0,0,1,0,100,0), -- 15:53:39
+(@PATH,15,351.2139,86.03535,20.23542,0,0,1,0,100,0), -- 15:53:43
+(@PATH,16,365.9639,82.28535,20.23542,0,0,1,0,100,0), -- 15:53:43
+(@PATH,17,386.9718,70.78688,20.28395,0,0,1,0,100,0), -- 15:53:45
+(@PATH,18,404.4698,51.14609,20.42939,0,0,1,0,100,0); -- 15:53:48
+
+-- Pathing for Phoenix-Hawk Entry: 20039 'TDB FORMAT'
+SET @NPC := 12434;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=332.7476,`position_y`=-90.41917,`position_z`=20.51123 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,332.7476,-90.41917,20.51123,0,0,1,0,100,0), -- 15:53:36
+(@PATH,2,324.7476,-90.16917,20.26123,0,0,1,0,100,0), -- 15:53:36
+(@PATH,3,315.7476,-89.91917,20.26123,0,0,1,0,100,0), -- 15:53:36
+(@PATH,4,297.1394,-85.66326,20.4148,0,0,1,0,100,0), -- 15:53:39
+(@PATH,5,258.2917,-57.28191,20.42989,0,0,1,0,100,0), -- 15:53:42
+(@PATH,6,244.784,-38.03379,20.51284,0,0,1,0,100,0), -- 15:53:45
+(@PATH,7,239.784,-13.28379,25.76284,0,0,1,0,100,0), -- 15:53:45
+(@PATH,8,238.5742,1.909073,26.95395,0,0,1,0,100,0), -- 15:53:49
+(@PATH,9,242.5742,29.15907,20.70395,0,0,1,0,100,0), -- 15:53:49
+(@PATH,10,256.9634,56.59798,20.42731,0,0,1,0,100,0), -- 15:53:54
+(@PATH,11,297.2964,83.12163,20.43203,0,0,1,0,100,0), -- 15:53:56
+(@PATH,12,315.9869,88.49153,20.44473,0,0,1,0,100,0), -- 15:54:00
+(@PATH,13,324.2369,88.49153,20.44473,0,0,1,0,100,0), -- 15:54:00
+(@PATH,14,332.4869,88.74153,20.44473,0,0,1,0,100,0), -- 15:54:00
+(@PATH,15,340.2369,88.99153,20.44473,0,0,1,0,100,0), -- 15:54:00
+(@PATH,16,349.4869,89.24153,20.44473,0,0,1,0,100,0), -- 15:54:00
+(@PATH,17,362.7359,84.22715,20.25116,0,0,1,0,100,0), -- 15:54:03
+(@PATH,18,366.4859,82.72715,20.25116,0,0,1,0,100,0), -- 15:54:03
+(@PATH,19,380.7359,76.72715,20.50116,0,0,1,0,100,0), -- 15:54:03
+(@PATH,20,388.7359,73.47715,20.25116,0,0,1,0,100,0), -- 15:54:03
+(@PATH,21,403.4129,54.84925,20.37498,0,0,1,0,100,0), -- 15:54:07
+(@PATH,22,418.7638,27.5905,20.42937,0,0,1,0,100,0), -- 15:54:11
+(@PATH,23,423.947,-0.8590612,20.42934,0,0,1,0,100,0), -- 15:54:13
+(@PATH,24,423.947,-12.85906,20.42934,0,0,1,0,100,0), -- 15:54:13
+(@PATH,25,415.4541,-39.22434,20.42944,0,0,1,0,100,0), -- 15:54:17
+(@PATH,26,409.8507,-46.91153,20.42938,0,0,1,0,100,0), -- 15:54:18
+(@PATH,27,404.3507,-55.91153,20.42938,0,0,1,0,100,0), -- 15:54:18
+(@PATH,28,379.6078,-80.35109,20.36515,0,0,1,0,100,0), -- 15:54:21
+(@PATH,29,357.0756,-90.66071,20.3293,0,0,1,0,100,0), -- 15:54:24
+(@PATH,30,344.5756,-90.41071,20.3293,0,0,1,0,100,0); -- 15:54:24
+
+-- Add missing Phoenix-Hawk
+SET @ENTRY := 20039;
+SET @GUID := 554;
+DELETE FROM `creature` WHERE `guid`=@GUID;
+INSERT INTO `creature` (`guid`, `id`, `map`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `curhealth`) VALUES
+(@GUID, @ENTRY, 550, 246.4875, -37.49984, 20.42661, 5.58522, 10800, 366765);
+
+-- Pathing for Phoenix-Hawk Entry: 20039 'TDB FORMAT'
+SET @NPC := 554;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=246.4875,`position_y`=-37.49984,`position_z`=20.42661 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,246.4875,-37.49984,20.42661,0,0,1,0,100,0), -- 15:53:34
+(@PATH,2,257.6479,-57.38124,20.42661,0,0,1,0,100,0), -- 15:53:37
+(@PATH,3,276.6165,-74.59982,20.42977,0,0,1,0,100,0), -- 15:53:40
+(@PATH,4,318.1243,-87.4548,20.22828,0,0,1,0,100,0), -- 15:53:43
+(@PATH,5,346.6934,-87.65228,20.55079,0,0,1,0,100,0), -- 15:53:46
+(@PATH,6,366.6934,-84.40228,20.05079,0,0,1,0,100,0), -- 15:53:46
+(@PATH,7,371.813,-83.31676,20.14231,0,0,1,0,100,0), -- 15:53:49
+(@PATH,8,381.313,-76.81676,20.39231,0,0,1,0,100,0), -- 15:53:49
+(@PATH,9,387.563,-73.06676,20.39231,0,0,1,0,100,0), -- 15:53:49
+(@PATH,10,405.1288,-53.81012,20.43003,0,0,1,0,100,0), -- 15:53:52
+(@PATH,11,387.8711,-72.59858,20.29767,0,0,1,0,100,0), -- 15:53:56
+(@PATH,12,381.6211,-76.84858,20.29767,0,0,1,0,100,0), -- 15:53:56
+(@PATH,13,366.4635,-84.1076,20.22797,0,0,1,0,100,0), -- 15:53:58
+(@PATH,14,346.7135,-87.6076,20.47797,0,0,1,0,100,0), -- 15:53:58
+(@PATH,15,332.7135,-90.1076,20.47797,0,0,1,0,100,0), -- 15:53:58
+(@PATH,16,318.1471,-87.49127,20.23125,0,0,1,0,100,0), -- 15:54:02
+(@PATH,17,297.8971,-83.99127,20.23125,0,0,1,0,100,0), -- 15:54:02
+(@PATH,18,276.5398,-74.81604,20.42981,0,0,1,0,100,0), -- 15:54:05
+(@PATH,19,257.961,-57.62645,20.42985,0,0,1,0,100,0); -- 15:54:07
+
+-- Pathing for Phoenix-Hawk Entry: 20039 'TDB FORMAT'
+SET @NPC := 12433;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=332.517,`position_y`=-90.67094,`position_z`=20.45976 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,332.517,-90.67094,20.45976,0,0,1,0,100,0), -- 15:54:00
+(@PATH,2,349.2753,-89.96908,20.37492,0,0,1,0,100,0), -- 15:54:03
+(@PATH,3,367.7753,-86.46908,20.12492,0,0,1,0,100,0), -- 15:54:03
+(@PATH,4,390.4767,-72.33127,20.37196,0,0,1,0,100,0), -- 15:54:07
+(@PATH,5,404.9767,-53.58127,20.37196,0,0,1,0,100,0), -- 15:54:07
+(@PATH,6,417.079,-29.24579,20.42938,0,0,1,0,100,0), -- 15:54:10
+(@PATH,7,423.1954,-0.6701798,20.42934,0,0,1,0,100,0), -- 15:54:13
+(@PATH,8,416.2595,27.87078,20.42938,0,0,1,0,100,0), -- 15:54:16
+(@PATH,9,405.6095,50.9514,20.42931,0,0,1,0,100,0), -- 15:54:18
+(@PATH,10,379.8849,78.87553,20.28936,0,0,1,0,100,0), -- 15:54:20
+(@PATH,11,361.7868,87.05472,20.07407,0,0,1,0,100,0), -- 15:54:24
+(@PATH,12,347.5368,87.55472,20.32407,0,0,1,0,100,0), -- 15:54:24
+(@PATH,13,332.7868,88.05472,20.57407,0,0,1,0,100,0), -- 15:54:24
+(@PATH,14,315.7868,88.55472,20.32407,0,0,1,0,100,0), -- 15:54:24
+(@PATH,15,297.4316,83.2674,20.46751,0,0,1,0,100,0), -- 15:54:28
+(@PATH,16,275.6396,74.44795,20.43051,0,0,1,0,100,0), -- 15:54:30
+(@PATH,17,258.8896,55.69796,20.43051,0,0,1,0,100,0), -- 15:54:30
+(@PATH,18,243.9132,25.22697,20.67206,0,0,1,0,100,0), -- 15:54:35
+(@PATH,19,241.1632,11.72697,25.92206,0,0,1,0,100,0), -- 15:54:35
+(@PATH,20,238.8673,-0.7733765,27.23883,0,0,1,0,100,0), -- 15:54:39
+(@PATH,21,246.6173,-37.27338,20.48883,0,0,1,0,100,0), -- 15:54:39
+(@PATH,22,257.6819,-57.25851,20.4247,0,0,1,0,100,0), -- 15:54:42
+(@PATH,23,276.6098,-74.62117,20.42971,0,0,1,0,100,0), -- 15:54:45
+(@PATH,24,297.1098,-85.12117,20.42971,0,0,1,0,100,0), -- 15:54:45
+(@PATH,25,315.9437,-89.75371,20.45979,0,0,1,0,100,0), -- 15:54:48
+(@PATH,26,324.4437,-90.25371,20.45979,0,0,1,0,100,0); -- 15:54:48
+
+-- Pathing for Crystalcore Devastator Entry: 20040 'TDB FORMAT'
+SET @NPC := 12549;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=478.9474,`position_y`=89.4745,`position_z`=20.52121 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,478.9474,89.4745,20.52121,0,0,0,0,100,0), -- 16:07:45
+(@PATH,2,479.0185,89.26942,20.52121,0,0,0,0,100,0), -- 16:07:50
+(@PATH,3,493.3273,105.7242,20.53989,0,0,0,0,100,0), -- 16:07:54
+(@PATH,4,500.1716,115.4319,20.53092,0,0,0,0,100,0), -- 16:07:57
+(@PATH,5,501.6716,118.1819,20.53092,0,0,0,0,100,0), -- 16:07:57
+(@PATH,6,505.9216,125.6819,20.53092,0,0,0,0,100,0), -- 16:07:57
+(@PATH,7,509.7829,136.1951,20.50818,0,0,0,0,100,0), -- 16:08:02
+(@PATH,8,511.0329,139.6951,20.50818,0,0,0,0,100,0), -- 16:08:02
+(@PATH,9,511.7829,142.6951,20.50818,0,0,0,0,100,0), -- 16:08:02
+(@PATH,10,517.5752,164.9698,20.50733,0,0,0,0,100,0), -- 16:08:08
+(@PATH,11,520.0752,175.7198,20.50733,0,0,0,0,100,0), -- 16:08:08
+(@PATH,12,520.3252,177.2198,20.50733,0,0,0,0,100,0), -- 16:08:08
+(@PATH,13,520.882,179.5561,20.53715,0,0,0,0,100,0), -- 16:08:16
+(@PATH,14,520.382,184.3061,20.53715,0,0,0,0,100,0), -- 16:08:16
+(@PATH,15,519.882,191.8061,20.53715,0,0,0,0,100,0), -- 16:08:16
+(@PATH,16,519.132,199.5561,20.53715,0,0,0,0,100,0), -- 16:08:16
+(@PATH,17,515.7716,216.1749,20.5457,0,0,0,0,100,0), -- 16:08:23
+(@PATH,18,513.7716,222.9249,20.5457,0,0,0,0,100,0), -- 16:08:23
+(@PATH,19,517.1009,211.7702,20.5457,0,0,0,0,100,0), -- 16:08:30
+(@PATH,20,519.8978,192.0669,20.53427,0,0,0,0,100,0), -- 16:08:35
+(@PATH,21,520.3978,184.3169,20.53427,0,0,0,0,100,0), -- 16:08:35
+(@PATH,22,520.1716,175.6861,20.51027,0,0,0,0,100,0), -- 16:08:42
+(@PATH,23,517.6716,165.6861,20.51027,0,0,0,0,100,0), -- 16:08:42
+(@PATH,24,516.1716,158.4361,20.51027,0,0,0,0,100,0), -- 16:08:42
+(@PATH,25,511.1044,140.4333,20.50434,0,0,0,0,100,0), -- 16:08:49
+(@PATH,26,510.1044,136.1833,20.50434,0,0,0,0,100,0), -- 16:08:49
+(@PATH,27,502.2063,118.9294,20.52943,0,0,0,0,100,0), -- 16:08:56
+(@PATH,28,500.2063,115.4294,20.52943,0,0,0,0,100,0), -- 16:08:56
+(@PATH,29,498.2063,111.9294,20.52943,0,0,0,0,100,0), -- 16:08:56
+(@PATH,30,493.3535,105.5967,20.53989,0,0,0,0,100,0), -- 16:09:00
+(@PATH,31,488.6035,99.84668,20.53989,0,0,0,0,100,0); -- 16:09:00
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=12467;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(12467, 12467, 0, 0, 1),
+(12467, 12431, 3, 270, 2),
+(12467, 12432, 3, 90, 2);
+
+-- Pathing for Astromancer Lord Entry: 20046 'TDB FORMAT'
+SET @NPC := 12467;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=513.6304,`position_y`=-224.7386,`position_z`=20.56552 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,513.6304,-224.7386,20.56552,0,5000,0,0,100,0), -- 16:08:45
+(@PATH,2,517.2208,-208.6252,20.56552,0,0,0,0,100,0), -- 16:08:52
+(@PATH,3,518.7356,-200.354,20.56796,0,0,0,0,100,0), -- 16:08:57
+(@PATH,4,519.4856,-193.354,20.56796,0,0,0,0,100,0), -- 16:08:57
+(@PATH,5,519.9856,-190.104,20.56796,0,0,0,0,100,0), -- 16:08:57
+(@PATH,6,519.5496,-178.3897,20.51476,0,0,0,0,100,0), -- 16:09:02
+(@PATH,7,519.2996,-177.3897,20.51476,0,0,0,0,100,0), -- 16:09:02
+(@PATH,8,518.2996,-169.3897,20.51476,0,0,0,0,100,0), -- 16:09:02
+(@PATH,9,518.0496,-166.6397,20.51476,0,0,0,0,100,0), -- 16:09:02
+(@PATH,10,516.9454,-162.3555,20.49109,0,0,0,0,100,0), -- 16:09:08
+(@PATH,11,516.4454,-160.1055,20.49109,0,0,0,0,100,0), -- 16:09:08
+(@PATH,12,512.1954,-143.8555,20.49109,0,0,0,0,100,0), -- 16:09:08
+(@PATH,13,511.4454,-141.3555,20.49109,0,0,0,0,100,0), -- 16:09:08
+(@PATH,14,509.4338,-136.6816,20.51297,0,0,0,0,100,0), -- 16:09:14
+(@PATH,15,504.6838,-123.9316,20.51297,0,0,0,0,100,0), -- 16:09:14
+(@PATH,16,502.9338,-119.4316,20.51297,0,0,0,0,100,0), -- 16:09:14
+(@PATH,17,502.5425,-118.8291,20.53002,0,0,0,0,100,0), -- 16:09:19
+(@PATH,18,498.0425,-113.0791,20.53002,0,0,0,0,100,0), -- 16:09:19
+(@PATH,19,493.7925,-106.8291,20.53002,0,0,0,0,100,0), -- 16:09:19
+(@PATH,20,488.5476,-100.5731,20.50299,0,0,0,0,100,0), -- 16:09:24
+(@PATH,21,482.5476,-94.07306,20.50299,0,0,0,0,100,0), -- 16:09:24
+(@PATH,22,479.0476,-90.32306,20.50299,0,5000,0,0,100,0), -- 16:09:24
+(@PATH,23,488.4339,-100.7364,20.50299,0,0,0,0,100,0), -- 16:09:32
+(@PATH,24,493.5073,-106.8633,20.53566,0,0,0,0,100,0), -- 16:09:37
+(@PATH,25,498.0073,-112.8633,20.53566,0,0,0,0,100,0), -- 16:09:37
+(@PATH,26,509.557,-136.8885,20.51389,0,0,0,0,100,0), -- 16:09:42
+(@PATH,27,512.2501,-143.873,20.491,0,0,0,0,100,0), -- 16:09:48
+(@PATH,28,516.2501,-159.623,20.491,0,0,0,0,100,0), -- 16:09:48
+(@PATH,29,517.0001,-162.373,20.491,0,0,0,0,100,0), -- 16:09:48
+(@PATH,30,517.6157,-163.5336,20.51302,0,0,0,0,100,0), -- 16:09:54
+(@PATH,31,518.1157,-166.7836,20.51302,0,0,0,0,100,0), -- 16:09:54
+(@PATH,32,518.3657,-169.2836,20.51302,0,0,0,0,100,0), -- 16:09:54
+(@PATH,33,519.3657,-177.0336,20.51302,0,0,0,0,100,0), -- 16:09:54
+(@PATH,34,519.6157,-178.2836,20.51302,0,0,0,0,100,0), -- 16:09:54
+(@PATH,35,519.576,-193.4193,20.5364,0,0,0,0,100,0), -- 16:10:00
+(@PATH,36,518.826,-200.4193,20.5364,0,0,0,0,100,0), -- 16:10:00
+(@PATH,37,517.826,-207.1693,20.5364,0,0,0,0,100,0); -- 16:10:00
+
+UPDATE `creature` SET `id`=20045 WHERE `guid`=12540;
+UPDATE `creature` SET `id`=20045 WHERE `guid`=12538;
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=12540;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(12540, 12540, 0, 0, 1),
+(12540, 12542, 3, 270, 2),
+(12540, 12541, 3, 90, 2);
+
+-- Pathing for Nether Scryer Entry: 20045 'TDB FORMAT'
+SET @NPC := 12540;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=423.7304,`position_y`=-297.2403,`position_z`=19.25663 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,423.7304,-297.2403,19.25663,0,0,0,0,100,0), -- 16:13:39
+(@PATH,2,421.8612,-297.5166,19.29133,0,0,0,0,100,0), -- 16:13:46
+(@PATH,3,395.1479,-306.0458,19.47611,0,0,0,0,100,0), -- 16:13:51
+(@PATH,4,386.0147,-311.4482,19.33733,0,0,0,0,100,0), -- 16:13:57
+(@PATH,5,361.8398,-343.4693,19.29735,0,0,0,0,100,0), -- 16:14:02
+(@PATH,6,357.9641,-362.9832,19.28531,0,0,0,0,100,0), -- 16:14:08
+(@PATH,7,358.3306,-382.0202,19.17975,0,0,0,0,100,0), -- 16:14:14
+(@PATH,8,367.2446,-410.9676,19.20938,0,0,0,0,100,0), -- 16:14:20
+(@PATH,9,376.3463,-423.0817,19.22353,0,0,0,0,100,0), -- 16:14:26
+(@PATH,10,387.6675,-434.1544,19.24023,0,0,0,0,100,0), -- 16:14:31
+(@PATH,11,422.7839,-449.2073,19.28438,0,0,0,0,100,0), -- 16:14:37
+(@PATH,12,442.8006,-447.2404,19.22515,0,0,0,0,100,0), -- 16:14:43
+(@PATH,13,478.9905,-433.6435,19.3018,0,0,0,0,100,0), -- 16:14:51
+(@PATH,14,494.5335,-421.47,19.31859,0,0,0,0,100,0), -- 16:15:01
+(@PATH,15,505.3245,-403.0611,19.52428,0,0,0,0,100,0), -- 16:15:07
+(@PATH,16,510.3288,-382.475,19.45391,0,0,0,0,100,0), -- 16:15:12
+(@PATH,17,509.6892,-362.8328,19.19526,0,0,0,0,100,0), -- 16:15:18
+(@PATH,18,504.8862,-343.3768,19.23977,0,0,0,0,100,0), -- 16:15:22
+(@PATH,19,505.9844,-344.7854,19.44162,0,0,0,0,100,0), -- 16:15:28
+(@PATH,20,509.5838,-363.0805,19.20078,0,0,0,0,100,0), -- 16:15:33
+(@PATH,21,505.4904,-403.0814,19.51538,0,0,0,0,100,0), -- 16:15:38
+(@PATH,22,494.6033,-421.486,19.34887,0,0,0,0,100,0), -- 16:15:44
+(@PATH,23,493.8533,-422.486,19.59887,0,0,0,0,100,0), -- 16:15:44
+(@PATH,24,492.6177,-424.3935,19.49897,0,0,0,0,100,0), -- 16:15:49
+(@PATH,25,479.1177,-433.3935,19.24897,0,0,0,0,100,0), -- 16:15:49
+(@PATH,26,470.3677,-439.3935,19.24897,0,0,0,0,100,0), -- 16:15:49
+(@PATH,27,462.8677,-444.3935,19.49897,0,0,0,0,100,0), -- 16:15:49
+(@PATH,28,442.9135,-447.4605,19.24915,0,0,0,0,100,0), -- 16:15:58
+(@PATH,29,403.749,-444.8676,19.51671,0,0,0,0,100,0), -- 16:16:07
+(@PATH,30,387.6254,-434.2364,19.2685,0,0,0,0,100,0), -- 16:16:13
+(@PATH,31,376.6454,-423.368,19.23084,0,0,0,0,100,0), -- 16:16:18
+(@PATH,32,361.54,-397.0302,19.1883,0,0,0,0,100,0), -- 16:16:24
+(@PATH,33,358.272,-382.2332,19.21221,0,0,0,0,100,0), -- 16:16:30
+(@PATH,34,358.0092,-362.9816,19.25879,0,0,0,0,100,0), -- 16:16:36
+(@PATH,35,372.6,-326.9489,19.52757,0,0,0,0,100,0), -- 16:16:42
+(@PATH,36,385.8902,-311.8205,19.52534,0,0,0,0,100,0), -- 16:16:48
+(@PATH,37,395.203,-306.4769,19.5721,0,0,0,0,100,0), -- 16:16:53
+(@PATH,38,404.203,-300.9769,19.5721,0,0,0,0,100,0); -- 16:16:53
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=12538;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(12538, 12538, 0, 0, 1),
+(12538, 12537, 3, 270, 2),
+(12538, 12539, 3, 90, 2);
+
+-- Pathing for Nether Scryer Entry: 20045 'TDB FORMAT'
+SET @NPC := 12538;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=491.6343,`position_y`=-348.8971,`position_z`=17.45782 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,491.6343,-348.8971,17.45782,0,0,0,0,100,0), -- 16:10:09
+(@PATH,2,494.4583,-365.0894,17.3224,0,0,0,0,100,0), -- 16:10:11
+(@PATH,3,494.3617,-380.7137,17.29877,0,0,0,0,100,0), -- 16:10:17
+(@PATH,4,485.7098,-402.4861,17.33348,0,0,0,0,100,0), -- 16:10:22
+(@PATH,5,479.9598,-409.9861,17.08348,0,0,0,0,100,0), -- 16:10:22
+(@PATH,6,475.9598,-414.7361,17.33348,0,0,0,0,100,0), -- 16:10:22
+(@PATH,7,470.2098,-421.7361,17.33348,0,0,0,0,100,0), -- 16:10:22
+(@PATH,8,456.0066,-429.1491,17.33844,0,0,0,0,100,0), -- 16:10:32
+(@PATH,9,441.2566,-434.6491,17.58844,0,0,0,0,100,0), -- 16:10:32
+(@PATH,10,425.0241,-433.6116,17.49777,0,0,0,0,100,0), -- 16:10:39
+(@PATH,11,409.0241,-431.8616,17.49777,0,0,0,0,100,0), -- 16:10:39
+(@PATH,12,396.0655,-422.4177,17.41465,0,0,0,0,100,0), -- 16:10:47
+(@PATH,13,387.3155,-413.9177,17.41465,0,0,0,0,100,0), -- 16:10:47
+(@PATH,14,374.3321,-392.9123,17.42148,0,0,0,0,100,0), -- 16:10:56
+(@PATH,15,371.2164,-380.3734,17.65318,0,0,0,0,100,0), -- 16:11:02
+(@PATH,16,371.1164,-364.8227,17.43382,0,0,0,0,100,0), -- 16:11:07
+(@PATH,17,381.9487,-334.1354,17.87497,0,0,0,0,100,0), -- 16:11:12
+(@PATH,18,393.8716,-322.5054,17.69732,0,0,0,0,100,0), -- 16:11:17
+(@PATH,19,412.3383,-311.7506,17.58051,0,0,0,0,100,0), -- 16:11:21
+(@PATH,20,423.361,-308.4557,17.6968,0,0,0,0,100,0), -- 16:11:26
+(@PATH,21,428.361,-307.4557,17.9468,0,0,0,0,100,0), -- 16:11:26
+(@PATH,22,423.8289,-308.1609,17.72783,0,0,0,0,100,0), -- 16:11:32
+(@PATH,23,403.0539,-316.1074,17.86351,0,0,0,0,100,0), -- 16:11:35
+(@PATH,24,394.0146,-322.5777,17.75302,0,0,0,0,100,0), -- 16:11:40
+(@PATH,25,381.8382,-334.0474,17.83417,0,0,0,0,100,0), -- 16:11:45
+(@PATH,26,371.0694,-364.8433,17.48853,0,0,0,0,100,0), -- 16:11:49
+(@PATH,27,371.0801,-380.4205,17.45639,0,0,0,0,100,0), -- 16:11:54
+(@PATH,28,379.2573,-404.1338,17.39072,0,0,0,0,100,0), -- 16:11:59
+(@PATH,29,387.2876,-413.9666,17.47128,0,0,0,0,100,0), -- 16:12:05
+(@PATH,30,396.0376,-422.4666,17.47128,0,0,0,0,100,0), -- 16:12:05
+(@PATH,31,424.8217,-433.5346,17.49184,0,0,0,0,100,0), -- 16:12:14
+(@PATH,32,456.0426,-429.2732,17.36312,0,0,0,0,100,0), -- 16:12:22
+(@PATH,33,460.5426,-427.7732,17.36312,0,0,0,0,100,0), -- 16:12:22
+(@PATH,34,476.0071,-414.7808,17.28578,0,0,0,0,100,0), -- 16:12:29
+(@PATH,35,479.7571,-410.0308,17.03578,0,0,0,0,100,0), -- 16:12:29
+(@PATH,36,485.7571,-402.5308,17.28578,0,0,0,0,100,0), -- 16:12:29
+(@PATH,37,490.2571,-397.2808,17.28578,0,0,0,0,100,0), -- 16:12:29
+(@PATH,38,494.1788,-380.7926,17.42046,0,0,0,0,100,0), -- 16:12:39
+(@PATH,39,494.2377,-364.9676,17.32992,0,0,0,0,100,0); -- 16:12:45
+
+-- Remove bad spawns
+DELETE FROM `creature` WHERE `guid` IN (12546, 12545, 12460, 12459, 12547, 12548, 12571, 12572);
+DELETE FROM `linked_respawn` WHERE `guid` IN (12546, 12545, 12460, 12459, 12547, 12548, 12571, 12572);
+
+-- Set right entry
+UPDATE `creature` SET `id`=20050 WHERE `guid`=12465;
+UPDATE `creature` SET `id`=20048 WHERE `guid`=12463;
+UPDATE `creature` SET `id`=20048 WHERE `guid`=12464;
+UPDATE `creature` SET `id`=20031 WHERE `guid`=12485;
+UPDATE `creature` SET `id`=20031 WHERE `guid`=12484;
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=12465;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(12465, 12465, 0, 0, 1),
+(12465, 12463, 3, 270, 2),
+(12465, 12464, 3, 90, 2);
+
+-- Pathing for Crimson Hand Inquisitor Entry: 20050 'TDB FORMAT'
+SET @NPC := 12465;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=655.5598,`position_y`=-74.22478,`position_z`=47.05975 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,655.5598,-74.22478,47.05975,0,0,0,0,100,0), -- 16:08:34
+(@PATH,2,651.4869,-79.5063,47.04427,0,0,0,0,100,0), -- 16:08:41
+(@PATH,3,631.1815,-102.5708,47.03273,0,0,0,0,100,0), -- 16:08:45
+(@PATH,4,619.0531,-111.1841,46.42092,0,0,0,0,100,0), -- 16:08:51
+(@PATH,5,617.8031,-111.9341,45.92092,0,0,0,0,100,0), -- 16:08:51
+(@PATH,6,606.8416,-117.8403,41.57663,0,0,0,0,100,0), -- 16:08:56
+(@PATH,7,589.9025,-125.8981,36.43072,0,0,0,0,100,0), -- 16:09:01
+(@PATH,8,580.551,-129.5958,36.31794,0,0,0,0,100,0), -- 16:09:03
+(@PATH,9,579.801,-129.8458,36.31794,0,0,0,0,100,0), -- 16:09:03
+(@PATH,10,573.301,-132.3458,35.06794,0,0,0,0,100,0), -- 16:09:03
+(@PATH,11,580.7385,-129.5231,36.23978,0,0,0,0,100,0), -- 16:09:10
+(@PATH,12,594.8942,-123.7401,37.95549,0,0,0,0,100,0), -- 16:09:14
+(@PATH,13,606.4921,-118.0775,41.48959,0,0,0,0,100,0), -- 16:09:17
+(@PATH,14,619.0924,-111.1047,46.4275,0,0,0,0,100,0), -- 16:09:21
+(@PATH,15,633.9102,-99.63002,47.15026,0,0,0,0,100,0), -- 16:09:25
+(@PATH,16,653.5164,-77.03735,47.0669,0,0,0,0,100,0); -- 16:09:31
+
+SET @CGUID := 86939;
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+14;
+INSERT INTO `creature` (`guid`, `id`, `map`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`) VALUES
+(@CGUID+0, 20048, 550, 615.408, 108.1827, 45.53154, 5.798159, 7200), -- 20048 (Area: -1)
+(@CGUID+1, 20050, 550, 621.3588, 107.9806, 46.45268, 5.711797, 7200), -- 20050 (Area: -1)
+(@CGUID+2, 20048, 550, 617.9949, 113.5776, 45.32596, 5.797285, 7200), -- 20048 (Area: -1)
+(@CGUID+3, 20048, 550, 651.4778, 85.3616, 46.98529, 2.460914, 7200), -- 20048 (Area: -1)
+(@CGUID+4, 20048, 550, 644.955, 78.4049, 46.925, 2.181662, 7200), -- 20048 (Area: -1)
+(@CGUID+5, 20048, 550, 590.4993, 115.3127, 37.52827, 2.478368, 7200), -- 20048 (Area: -1)
+(@CGUID+6, 20048, 550, 598.2206, 130.2819, 37.6214, 3.211406, 7200), -- 20048 (Area: -1)
+(@CGUID+7, 20049, 550, 641.1609, 77.83035, 46.88414, 2.076942, 7200), -- 20049 (Area: -1)
+(@CGUID+8, 20049, 550, 594.7014, 114.7355, 38.61783, 2.670354, 7200), -- 20049 (Area: -1)
+(@CGUID+9, 20049, 550, 654.7372, 88.48184, 46.82887, 2.583087, 7200), -- 20049 (Area: -1)
+(@CGUID+10, 20049, 550, 601.0374, 127.5763, 38.66954, 3.054326, 7200), -- 20049 (Area: -1)
+(@CGUID+11, 20047, 550, 651.4259, 87.75813, 46.89581, 2.321288, 7200), -- 20047 (Area: -1) (Auras: )
+(@CGUID+12, 20047, 550, 642.4025, 80.52879, 46.89103, 2.146755, 7200), -- 20047 (Area: -1) (Auras: )
+(@CGUID+13, 20047, 550, 597.9776, 114.9579, 39.38305, 2.792527, 7200), -- 20047 (Area: -1) (Auras: )
+(@CGUID+14, 20047, 550, 603.4946, 125.0622, 39.5998, 2.9147, 7200); -- 20047 (Area: -1) (Auras: )
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=86940;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(86940, 86940, 0, 0, 1),
+(86940, 86939, 3, 270, 2),
+(86940, 86941, 3, 90, 2);
+
+-- Pathing for Crimson Hand Inquisitor Entry: 20050 'TDB FORMAT'
+SET @NPC := 86940;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=655.5364,`position_y`=72.95763,`position_z`=47.05836 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,655.5364,72.95763,47.05836,0,0,0,0,100,0), -- 16:08:23
+(@PATH,2,651.3881,78.08571,47.05026,0,0,0,0,100,0), -- 16:08:30
+(@PATH,3,630.8481,100.8367,47.02984,0,0,0,0,100,0), -- 16:08:35
+(@PATH,4,618.8256,109.6938,46.47087,0,0,0,0,100,0), -- 16:08:40
+(@PATH,5,617.3256,110.6938,45.72087,0,0,0,0,100,0), -- 16:08:40
+(@PATH,6,606.6226,116.3986,41.5707,0,0,0,0,100,0), -- 16:08:45
+(@PATH,7,589.7452,124.2339,36.51868,0,0,0,0,100,0), -- 16:08:50
+(@PATH,8,580.804,128.0832,36.30165,0,0,0,0,100,0), -- 16:08:52
+(@PATH,9,580.054,128.5832,36.30165,0,0,0,0,100,0), -- 16:08:52
+(@PATH,10,577.9855,129.5036,35.95486,0,0,0,0,100,0), -- 16:08:55
+(@PATH,11,573.9855,129.7536,35.20486,0,0,0,0,100,0), -- 16:08:55
+(@PATH,12,573.3516,129.5648,35.01861,0,0,0,0,100,0), -- 16:09:00
+(@PATH,13,579.8276,128.5876,36.13748,0,0,0,0,100,0), -- 16:09:02
+(@PATH,14,580.5776,128.0876,36.13748,0,0,0,0,100,0), -- 16:09:02
+(@PATH,15,595.2676,121.8818,37.90141,0,0,0,0,100,0), -- 16:09:04
+(@PATH,16,606.479,116.8065,41.47223,0,0,0,0,100,0), -- 16:09:07
+(@PATH,17,618.7388,110.0541,46.44956,0,0,0,0,100,0), -- 16:09:12
+(@PATH,18,635.658,96.03332,46.94309,0,0,0,0,100,0), -- 16:09:17
+(@PATH,19,653.3979,75.61298,47.06518,0,0,0,0,100,0); -- 16:09:21
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_00_world.sql
new file mode 100644
index 00000000000..deb95e8e7be
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_00_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=50556;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,1,50556,0,0,31,0,3,28054,0,0,0,0,'','Only Lucky Wilhelm is a target for the spell Ride Wilhelm');
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_01_world.sql
new file mode 100644
index 00000000000..562e70491a7
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_01_world.sql
@@ -0,0 +1,41 @@
+SET @CGUID:=86954;
+
+DELETE FROM `creature` WHERE `id` IN (30655, 30640, 30832, 30646, 30651, 30707, 30649, 30749, 30700, 30699, 30690, 31246, 31353, 30589, 30588, 30476, 30559);
+DELETE FROM `creature` WHERE `guid` IN (122568, 122569, 122570);
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+29;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 30640, 623, 1, 1, 35.03846, 36.06336, 25.11708, 5.288348, 120, 0, 0), -- 30640 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+1, 30640, 623, 1, 1, 6.909693, 9.529325, 20.54005, 2.303835, 120, 0, 0), -- 30640 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+2, 30640, 623, 1, 1, -27.16368, 2.981263, 20.54094, 0.122173, 120, 0, 0), -- 30640 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+3, 30640, 623, 1, 1, -56.31194, 12.39219, 31.00466, 3.281219, 120, 0, 0), -- 30640 (Area: 4537) (possible waypoints or random movement)
+(@CGUID+4, 30646, 623, 1, 1, -30.25571, 31.80029, 12.35424, 1.605703, 120, 0, 0), -- 30646 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+5, 30646, 623, 1, 1, -5.325279, 31.62501, 12.34004, 1.500983, 120, 0, 0), -- 30646 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+6, 30651, 623, 1, 1, -40.68238, 29.21558, 12.33503, 1.919862, 120, 0, 0), -- 30651 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+7, 30651, 623, 1, 1, -17.81335, 32.07878, 12.3449, 1.553343, 120, 0, 0), -- 30651 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+8, 30651, 623, 1, 1, 5.88316, 30.50419, 12.34755, 1.32645, 120, 0, 0), -- 30651 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+9, 30655, 623, 1, 1, 6.662919, 19.23895, 10.05156, 0.5061455, 120, 0, 0), -- 30655 (Area: 4509)
+(@CGUID+10, 30655, 623, 1, 1, -43.53964, 18.66365, 9.692578, 3.246312, 120, 0, 0), -- 30655 (Area: 4509) (possible waypoints or random movement)
+(@CGUID+11, 30559, 623, 1, 1, 38.16154, -0.040522, 40.16801, 4.223697, 120, 0, 0), -- 30559 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+12, 30476, 623, 1, 1, 31.41805, 0.126893, 41.69821, 0.05235988, 120, 0, 0), -- 30476 (Area: 4508) (Auras: 56852 - 56852) (possible waypoints or random movement)
+(@CGUID+13, 31353, 623, 1, 1, -21.7234, 19.33753, 9.687197, 1.64061, 120, 0, 0), -- 31353 (Area: 4509) (Auras: 57726 - 57726)
+(@CGUID+14, 30690, 622, 1, 1, 15.24723, 32.37709, 10.63188, 1.553343, 120, 0, 0), -- 30690 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+15, 30690, 622, 1, 1, -11.22309, 32.91199, 10.55865, 1.58825, 120, 0, 0), -- 30690 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+16, 30649, 622, 1, 1, 4.109683, 19.52689, 34.74765, 3.752458, 120, 0, 0), -- 30649 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+17, 30649, 622, 1, 1, -32.53434, 24.30232, 33.9708, 3.211406, 120, 0, 0), -- 30649 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+18, 30649, 622, 1, 1, 50.99569, 46.95655, 23.41373, 2.583087, 120, 0, 0), -- 30649 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+19, 30649, 622, 1, 1, 2.006737, 15.73845, 9.250069, 3.368485, 120, 0, 0), -- 30649 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+20, 30699, 622, 1, 1, 1.853844, 32.8888, 10.02361, 1.58825, 120, 0, 0), -- 30699 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+21, 30700, 622, 1, 1, -35.66628, 29.43331, 1.87925, 1.745329, 120, 0, 0), -- 30700 (Area: 0) (possible waypoints or random movement)
+(@CGUID+22, 30700, 622, 1, 1, 7.417077, 32.82674, 38.35604, 1.553343, 120, 0, 0), -- 30700 (Area: 0) (possible waypoints or random movement)
+(@CGUID+23, 30700, 622, 1, 1, -55.9708, 28.44186, 18.02501, 2.268928, 120, 0, 0), -- 30700 (Area: 0) (possible waypoints or random movement)
+(@CGUID+24, 30700, 622, 1, 1, 38.76255, 30.09343, 2.308181, 1.134464, 120, 0, 0), -- 30700 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+25, 30707, 622, 1, 1, 19.47087, 27.5296, 10.64527, 1.396263, 120, 0, 0), -- 30707 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+26, 30707, 622, 1, 1, -15.3085, 30.59285, 11.11614, 2.635447, 120, 0, 0), -- 30707 (Area: 0) (possible waypoints or random movement)
+(@CGUID+27, 31353, 622, 1, 1, -7.999845, 17.85185, 35.04856, 2.460914, 120, 0, 0), -- 31353 (Area: 0) (possible waypoints or random movement)
+(@CGUID+28, 30588, 622, 1, 1, -18.10283, -0.042108, 45.31725, 1.762783, 120, 0, 0), -- 30588 (Area: 4533) (Auras: 57424 - 57424) (possible waypoints or random movement)
+(@CGUID+29, 30589, 622, 1, 1, -11.83204, -0.019289, 43.11467, 4.153883, 120, 0, 0); -- 30589 (Area: 4533) (possible waypoints or random movement)
+
+UPDATE `creature_template` SET `flags_extra`=128 WHERE `entry` IN (30690, 30699);
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (30700, 30646,30651,31353);
+
+DELETE FROM `creature_addon` WHERE `guid` IN (122568, 122569, 122758, 122777, 124002, 124113);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_02_world.sql
new file mode 100644
index 00000000000..c4757d0d634
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_02_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=16573 AND `source_type`=0 AND `id`=7;
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_11_06_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_06_00_world_335.sql
new file mode 100644
index 00000000000..dbf4559b786
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_06_00_world_335.sql
@@ -0,0 +1,4 @@
+--
+DELETE FROM `gameobject_template` where `entry` =191146;
+INSERT INTO `gameobject_template` (`entry`, `type`, `displayId`, `name`, `IconName`, `castBarCaption`, `unk1`, `faction`, `flags`, `size`, `Data0`, `Data1`, `Data2`, `Data3`, `Data4`, `Data5`, `Data6`, `VerifiedBuild`) VALUES
+(191146, 6, 7205, 'Ensnaring Trap', '', '', '', 0, 0, 1, 12, 0, 5, 53077, 0, 0, -1, -18019);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_11_07_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_07_00_world.sql
new file mode 100644
index 00000000000..2cb4a1bdd90
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_07_00_world.sql
@@ -0,0 +1,9 @@
+-- Page text: Saga of the Sin'dorei
+
+DELETE FROM `page_text` WHERE `ID` IN (2823, 2824, 2825, 2826, 2827);
+INSERT INTO `page_text` (`ID`, `TEXT`, `NextPageID`) VALUES
+(2823, "Thousands of years ago, the exiled Highborne landed on the shores of Lordaeron and founded the enchanted kingdom of Quel'Thalas. These high elves, as they called themselves, created a fount of vast, magical energies within the heart of their land - the Sunwell. Over time, they grew dependant on the Sunwell's unstable energies- regardless of the bitter lessons they'd learned in ages past.", 2824),
+(2824, "During the Third War, the villainous Prince Arthas invaded Quel'Thalas and reduced the once-mighty realm to rubble and ashes. His undead army decimated nearly ninety percent of the high elven population. In addition, he used the Sunwell's energies to resurrect Kel'thuzad - a powerful undead Lich - thereby fouling the Sunwell's mystical waters. The few elven survivors, realizing that they had been cut off from the source of their arcane power, grew increasingly volatile and desperate.", 2825),
+(2825, "In the midst of the elves' darkest hour came Kael'thas Sunstrider - the last of Quel'Thalas' royal bloodline. Kael, as he was commonly known, knew that the remnants of his people would not long survive without the nourishing magics that once empowered them. Renaming his people blood elves, in honor of their fallen countrymen, he taught them how to tap into ambient mystical energies- even demonic energies - in order to sate their terrible thirst for magic.", 2826),
+(2826, "In search of a new destiny for his people - referred to in the elven vernacular now as the Sin'dorei - Kael'thas ventured to the remote world of Outland where he encountered the fallen night elf, Illidan. Under Illidan's tutelage, Kael and his blood elves have regained much of their former power.", 2827),
+(2827, "Unfortunately, the blood elves' practice of embracing demonic energies resulted in them being shunned by their former comrades in the Alliance. Thus, he remaining blood elves on Azeroth look desperately to the Horde to help them reach Outland, where they can reunite with Kael'thas and achieve the golden destiny he promised them.", 0);
diff --git a/sql/old/3.3.5a/world/59_2015_11_07/2015_11_07_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_07_01_world.sql
new file mode 100644
index 00000000000..a72a893a652
--- /dev/null
+++ b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_07_01_world.sql
@@ -0,0 +1,47 @@
+--
+SET @Guid=144801;
+DELETE FROM `creature` WHERE `guid` BETWEEN @Guid+0 and @Guid+41;
+DELETE FROM `creature` WHERE `id`=22175;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`) VALUES
+(@Guid+0, 22175, 530, 1, 1, 0, 0, 2608.55, 7075.41, 364.496, 5.71923, 300, 5, 0, 7181, 0, 1),
+(@Guid+1, 22175, 530, 1, 1, 0, 0, 2238.57, 7119.23, 365.84, 3.09914, 300, 5, 0, 7181, 0, 1),
+(@Guid+2, 22175, 530, 1, 1, 0, 0, 2218.84, 7276.48, 366.109, 3.94579, 300, 5, 0, 7181, 0, 1),
+(@Guid+3, 22175, 530, 1, 1, 0, 0, 2154.76, 7242.51, 371.791, 1.50713, 300, 5, 0, 7181, 0, 1),
+(@Guid+4, 22175, 530, 1, 1, 0, 0, 1991.99, 7364.78, 366.955, 1.9501, 300, 5, 0, 7181, 0, 1),
+(@Guid+5, 22175, 530, 1, 1, 0, 0, 2076.62, 7337.08, 365.808, 0.65419, 300, 5, 0, 7181, 0, 1),
+(@Guid+6, 22175, 530, 1, 1, 0, 0, 4079.29, 5129.22, 268.446, 1.09823, 600, 5, 0, 7181, 0, 1),
+(@Guid+7, 22175, 530, 1, 1, 0, 0, 2270.3, 7189.96, 364.752, 6.06008, 300, 5, 0, 7181, 0, 1),
+(@Guid+8, 22175, 530, 1, 1, 0, 0, 2202.82, 7237.79, 375.415, 2.95619, 300, 5, 0, 7181, 0, 1),
+(@Guid+9, 22175, 530, 1, 1, 0, 0, 2008.2, 7182.08, 369.87, 5.39014, 300, 5, 0, 7181, 0, 1),
+(@Guid+10, 22175, 530, 1, 1, 0, 0, 1952.68, 7216.42, 368.281, 4.71862, 300, 5, 0, 7181, 0, 1),
+(@Guid+11, 22175, 530, 1, 1, 0, 0, 2129.63, 7169.39, 366.483, 2.49909, 300, 5, 0, 7181, 0, 1),
+(@Guid+12, 22175, 530, 1, 1, 0, 0, 2494.71, 7263.55, 367.219, 5.21106, 300, 5, 0, 7181, 0, 1),
+(@Guid+13, 22175, 530, 1, 1, 0, 0, 2054.45, 7271.76, 365.238, 2.8211, 300, 5, 0, 7181, 0, 1),
+(@Guid+14, 22175, 530, 1, 1, 0, 0, 2483.08, 7057.84, 364.585, 3.86333, 300, 5, 0, 7181, 0, 1),
+(@Guid+15, 22175, 530, 1, 1, 0, 0, 2525.27, 7252.78, 365.323, 4.43352, 300, 5, 0, 7181, 0, 1),
+(@Guid+16, 22175, 530, 1, 1, 0, 0, 2455.15, 7057.42, 366.643, 0.409148, 300, 5, 0, 7181, 0, 1),
+(@Guid+17, 22175, 530, 1, 1, 0, 0, 2050.88, 7172.54, 369.315, 4.41232, 300, 5, 0, 7181, 0, 1),
+(@Guid+18, 22175, 530, 1, 1, 0, 0, 2402.86, 7068.99, 369.09, 2.95541, 300, 5, 0, 7181, 0, 1),
+(@Guid+19, 22175, 530, 1, 1, 0, 0, 2383.77, 7040.89, 379.688, 2.85331, 300, 5, 0, 7181, 0, 1),
+(@Guid+20, 22175, 530, 1, 1, 0, 0, 2345.61, 7026.68, 387.225, 2.59727, 300, 5, 0, 7181, 0, 1),
+(@Guid+21, 22175, 530, 1, 1, 0, 0, 2209.37, 7124.08, 364.438, 5.00765, 300, 5, 0, 7181, 0, 1),
+(@Guid+22, 22175, 530, 1, 1, 0, 0, 1843.45, 7310.6, 369.195, 1.96894, 300, 5, 0, 7181, 0, 1),
+(@Guid+23, 22175, 530, 1, 1, 0, 0, 1847.23, 7324.28, 368.691, 5.12624, 300, 5, 0, 7181, 0, 1),
+(@Guid+24, 22175, 530, 1, 1, 0, 0, 1853.72, 7366.1, 366.072, 1.24245, 300, 5, 0, 7181, 0, 1),
+(@Guid+25, 22175, 530, 1, 1, 0, 0, 2148.09, 7282.4, 368.747, 6.10328, 300, 5, 0, 7181, 0, 1),
+(@Guid+26, 22175, 530, 1, 1, 0, 0, 2596.27, 7200.13, 367.541, 1.25031, 300, 5, 0, 7181, 0, 1),
+(@Guid+27, 22175, 530, 1, 1, 0, 0, 2176.91, 7309.42, 372.694, 5.73415, 300, 5, 0, 7181, 0, 1),
+(@Guid+28, 22175, 530, 1, 1, 0, 0, 2745.14, 7230.82, 368.577, 3.98822, 300, 5, 0, 7181, 0, 1),
+(@Guid+29, 22175, 530, 1, 1, 0, 0, 2725.08, 7244.41, 369.344, 6.08051, 300, 5, 0, 7181, 0, 1),
+(@Guid+30, 22175, 530, 1, 1, 0, 0, 2591.54, 7220.81, 364.005, 5.91165, 300, 5, 0, 7181, 0, 1),
+(@Guid+31, 22175, 530, 1, 1, 0, 0, 2305.98, 7154.86, 365.855, 0.25991, 300, 5, 0, 7181, 0, 1),
+(@Guid+32, 22175, 530, 1, 1, 0, 0, 2337.79, 7148.06, 368.183, 1.28878, 300, 5, 0, 7181, 0, 1),
+(@Guid+33, 22175, 530, 1, 1, 0, 0, 2425.56, 7173.66, 366.865, 6.19438, 300, 5, 0, 7181, 0, 1),
+(@Guid+34, 22175, 530, 1, 1, 0, 0, 2460.97, 7128.22, 367.7, 1.39166, 300, 5, 0, 7181, 0, 1),
+(@Guid+35, 22175, 530, 1, 1, 0, 0, 2491.67, 7155.23, 369.61, 3.2884, 300, 5, 0, 7181, 0, 1),
+(@Guid+36, 22175, 530, 1, 1, 0, 0, 2451.01, 7296.84, 365.796, 2.66794, 300, 5, 0, 7181, 0, 1),
+(@Guid+37, 22175, 530, 1, 1, 0, 0, 2439.87, 7254.54, 369.234, 2.22419, 300, 5, 0, 7181, 0, 1),
+(@Guid+38, 22175, 530, 1, 1, 0, 0, 1945.76, 7133.53, 367.456, 3.74865, 300, 5, 0, 7181, 0, 1),
+(@Guid+39, 22175, 530, 1, 1, 0, 0, 2037.34, 7265.44, 367.727, 0.68482, 300, 5, 0, 7181, 0, 1),
+(@Guid+40, 22175, 530, 1, 1, 0, 0, 1993.1, 7143.76, 373.431, 5.6768, 300, 5, 0, 7181, 0, 1),
+(@Guid+41, 22175, 530, 1, 1, 0, 0, 1948.44, 7203.54, 366.609, 1.46472, 300, 5, 0, 7181, 0, 1);
diff --git a/sql/updates/auth/2015_11_07_00_auth.sql b/sql/updates/auth/2015_11_07_00_auth.sql
new file mode 100644
index 00000000000..be8a4d21b66
--- /dev/null
+++ b/sql/updates/auth/2015_11_07_00_auth.sql
@@ -0,0 +1 @@
+UPDATE `updates` SET `state`='ARCHIVED';
diff --git a/sql/updates/characters/2015_11_07_00_characters.sql b/sql/updates/characters/2015_11_07_00_characters.sql
new file mode 100644
index 00000000000..be8a4d21b66
--- /dev/null
+++ b/sql/updates/characters/2015_11_07_00_characters.sql
@@ -0,0 +1 @@
+UPDATE `updates` SET `state`='ARCHIVED';
diff --git a/sql/updates/world/2015_11_07_02_world.sql b/sql/updates/world/2015_11_07_02_world.sql
new file mode 100644
index 00000000000..3e23e0e629b
--- /dev/null
+++ b/sql/updates/world/2015_11_07_02_world.sql
@@ -0,0 +1,3 @@
+UPDATE `version` SET `db_version`='TDB 335.60', `cache_id`=60 LIMIT 1;
+
+UPDATE `updates` SET `state`='ARCHIVED';
diff --git a/sql/updates/world/2015_11_08_00_world.sql b/sql/updates/world/2015_11_08_00_world.sql
new file mode 100644
index 00000000000..fea6f43bc64
--- /dev/null
+++ b/sql/updates/world/2015_11_08_00_world.sql
@@ -0,0 +1,1550 @@
+SET @OGUID := 78409;
+SET @CGUID := 144843;
+
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+566;
+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, 195087, 571, 1, 1, 5851.9, 765.9167, 641.0652, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 4613)
+(@OGUID+1, 195087, 1, 1, 1, 1181.967, -4466.106, 21.32664, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 4982)
+(@OGUID+2, 195087, 0, 1, 1, 1803.686, 217.2379, 60.58969, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 1497)
+(@OGUID+3, 195087, 530, 1, 1, 9410.952, -6840.467, 16.09267, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 3482)
+(@OGUID+4, 195087, 530, 1, 1, -1790.766, 4923.897, -21.78506, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 0)
+(@OGUID+5, 195087, 530, 1, 1, -4323.897, -12446.65, 17.0041, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 3524)
+(@OGUID+6, 195087, 1, 1, 1, 10051.27, 2122.431, 1329.658, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 0)
+(@OGUID+7, 180338, 1, 1, 1, -983.618, -70.35069, 20.84995, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345)
+(@OGUID+8, 195066, 1, 1, 1, -984.309, -72.32986, 20.99182, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 5345)
+(@OGUID+9, 195068, 1, 1, 1, -983.0087, -70.09549, 20.78351, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 5345)
+(@OGUID+10, 195087, 0, 1, 1, -5147.768, -856.9913, 508.4915, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 809)
+(@OGUID+11, 195063, 571, 1, 1, 5848.714, 768.3906, 641.631, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4613)
+(@OGUID+12, 195063, 571, 1, 1, 5852.234, 767.9549, 641.103, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4613)
+(@OGUID+13, 195063, 571, 1, 1, 5849.202, 772.2066, 640.4767, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4613)
+(@OGUID+14, 195063, 571, 1, 1, 5857.072, 765.0121, 641.2158, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4613)
+(@OGUID+15, 195063, 571, 1, 1, 5850.005, 771.9219, 640.5843, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4613)
+(@OGUID+16, 195063, 571, 1, 1, 5856.767, 766.2274, 641.33, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0)
+(@OGUID+17, 195063, 1, 1, 1, 1191.095, -4465.377, 21.48901, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4982)
+(@OGUID+18, 195063, 1, 1, 1, 1185.155, -4469.573, 21.33183, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4982)
+(@OGUID+19, 195063, 1, 1, 1, 1176.061, -4456.295, 21.52715, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4982)
+(@OGUID+20, 195063, 1, 1, 1, 1174.722, -4455.491, 21.53682, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4982)
+(@OGUID+21, 195063, 1, 1, 1, 1176.774, -4463.587, 22.47352, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4982)
+(@OGUID+22, 195063, 1, 1, 1, 1177.625, -4467.955, 21.30696, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4982)
+(@OGUID+23, 195063, 0, 1, 1, 1776.349, 223.1736, 59.50775, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 1497)
+(@OGUID+24, 195063, 0, 1, 1, 1776.75, 250.7431, 59.88243, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 1497)
+(@OGUID+25, 195063, 0, 1, 1, 1781.599, 252.3177, 59.52622, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 1497)
+(@OGUID+26, 195063, 0, 1, 1, 1782.601, 260.5486, 59.42002, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 1497)
+(@OGUID+27, 195063, 0, 1, 1, 1779.512, 268.9236, 59.89299, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 1497)
+(@OGUID+28, 195063, 530, 1, 1, 9419.169, -6852.986, 14.97407, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3482)
+(@OGUID+29, 195063, 530, 1, 1, 9414.444, -6857.547, 14.74677, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3482)
+(@OGUID+30, 195063, 530, 1, 1, 9415.489, -6857.064, 14.79821, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3482)
+(@OGUID+31, 195063, 530, 1, 1, 9418.024, -6846.972, 15.29444, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3482)
+(@OGUID+32, 195063, 530, 1, 1, 9416.951, -6845.929, 15.41893, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3482)
+(@OGUID+33, 195063, 530, 1, 1, -1836.826, 4923.663, -21.17379, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0)
+(@OGUID+34, 195063, 530, 1, 1, -1815.741, 4911.45, -21.24386, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0)
+(@OGUID+35, 180340, 530, 1, 1, -1830.755, 4918.104, -18.9403, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0)
+(@OGUID+36, 195063, 530, 1, 1, -1791.418, 4919.373, -21.02562, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0)
+(@OGUID+37, 195063, 530, 1, 1, -1791.957, 4916.519, -21.02558, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0)
+(@OGUID+38, 195063, 530, 1, 1, -1783.134, 4926.91, -21.13906, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0)
+(@OGUID+39, 195063, 530, 1, 1, -1790.319, 4921.727, -21.08779, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0)
+(@OGUID+40, 195063, 530, 1, 1, -4310.884, -12445.17, 17.40245, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3524)
+(@OGUID+41, 195063, 530, 1, 1, -4325.502, -12449.76, 16.71575, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3524)
+(@OGUID+42, 195063, 530, 1, 1, -4318.972, -12441.63, 18.41204, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3524)
+(@OGUID+43, 195063, 530, 1, 1, -4315.609, -12442.86, 17.24089, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3524)
+(@OGUID+44, 195063, 530, 1, 1, -4323.721, -12439.26, 17.49479, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3524)
+(@OGUID+45, 195063, 1, 1, 1, 10050.31, 2118.57, 1330.741, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0)
+(@OGUID+46, 195063, 1, 1, 1, 10055.02, 2111.276, 1329.648, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0)
+(@OGUID+47, 195063, 1, 1, 1, 10046.66, 2110.08, 1329.649, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0)
+(@OGUID+48, 195063, 1, 1, 1, 10066.38, 2120.483, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0)
+(@OGUID+49, 195063, 1, 1, 1, 10063.6, 2112.158, 1329.656, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0)
+(@OGUID+50, 195069, 1, 1, 1, -979.8663, -71.9184, 20.70171, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195069 (Area: 5345)
+(@OGUID+51, 180338, 1, 1, 1, -984.8542, -76.17361, 20.92023, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345)
+(@OGUID+52, 180338, 1, 1, 1, -982.4827, -69.96007, 20.57871, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345)
+(@OGUID+53, 182807, 1, 1, 1, -980.7708, -79.82291, 20.13352, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 5345)
+(@OGUID+54, 195063, 1, 1, 1, -983.493, -72.63021, 20.66981, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5345)
+(@OGUID+55, 180338, 1, 1, 1, -982.8646, -68.86111, 23.79464, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345)
+(@OGUID+56, 195063, 1, 1, 1, -984.1493, -77.33334, 20.75268, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5345)
+(@OGUID+57, 195066, 1, 1, 1, -984.9132, -75.15972, 20.9375, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 5345)
+(@OGUID+58, 195069, 1, 1, 1, -980.3646, -72.38715, 20.70848, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 195069 (Area: 5345)
+(@OGUID+59, 180338, 1, 1, 1, -983.3958, -69.59202, 23.80661, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345)
+(@OGUID+60, 180338, 1, 1, 1, -984.9861, -77.32639, 24.26638, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345)
+(@OGUID+61, 182807, 1, 1, 1, -984.7379, -73.1875, 20.9946, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 5345)
+(@OGUID+62, 195090, 1, 1, 1, -981.625, -66.97916, 20.97347, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 5345)
+(@OGUID+63, 180338, 1, 1, 1, -984.9184, -73.05903, 23.8784, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345)
+(@OGUID+64, 180339, 1, 1, 1, -982.2309, -68.62674, 20.82022, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 5345)
+(@OGUID+65, 195307, 1, 1, 1, -984.5347, -75.82813, 20.86416, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5345)
+(@OGUID+66, 195063, 1, 1, 1, -982.1302, -68.07639, 20.88359, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5345)
+(@OGUID+67, 180338, 1, 1, 1, -980.5104, -79.84028, 20.08269, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345)
+(@OGUID+68, 195069, 1, 1, 1, -980.8941, -71.7934, 20.70992, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 195069 (Area: 5345)
+(@OGUID+69, 195063, 0, 1, 1, -8443.87, 906.762, 99.3449, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5314)
+(@OGUID+70, 195063, 0, 1, 1, -8445.61, 905.467, 99.4309, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5314)
+(@OGUID+71, 195063, 0, 1, 1, -8467.02, 914.174, 98.4846, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5314)
+(@OGUID+72, 195063, 0, 1, 1, -5149.59, -854.4288, 509.4989, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 809)
+(@OGUID+73, 195063, 0, 1, 1, -5160.054, -871.7535, 507.3147, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 809)
+(@OGUID+74, 195063, 0, 1, 1, -5149.858, -882.2344, 508.2253, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 809)
+(@OGUID+75, 195063, 0, 1, 1, -5162.099, -870.6007, 507.1854, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 809)
+(@OGUID+76, 195063, 0, 1, 1, -5161.04, -868.9688, 507.2333, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 809)
+(@OGUID+77, 195063, 0, 1, 1, -5158.944, -869.9549, 507.3573, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 809)
+(@OGUID+78, 195069, 571, 1, 1, 5849.256, 767.816, 641.601, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 4613)
+(@OGUID+79, 195069, 571, 1, 1, 5848.229, 767.941, 641.6459, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 4613)
+(@OGUID+80, 195069, 571, 1, 1, 5848.76, 767.3472, 641.611, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 4613)
+(@OGUID+81, 195069, 1, 1, 1, 1176.29, -4464.037, 22.45014, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 4982)
+(@OGUID+82, 195069, 1, 1, 1, 1177.318, -4464.162, 22.46108, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 4982)
+(@OGUID+83, 195069, 1, 1, 1, 1176.819, -4464.63, 22.45066, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 4982)
+(@OGUID+84, 195069, 0, 1, 1, 1806.354, 217.283, 61.54374, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 1497)
+(@OGUID+85, 195069, 0, 1, 1, 1805.326, 217.408, 61.53273, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 1497)
+(@OGUID+86, 195069, 0, 1, 1, 1805.856, 216.8142, 61.58862, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 1497)
+(@OGUID+87, 195069, 530, 1, 1, 9411.333, -6838.778, 17.29001, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 3482)
+(@OGUID+88, 195069, 530, 1, 1, 9410.804, -6838.184, 17.31258, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 3482)
+(@OGUID+89, 195069, 530, 1, 1, 9411.832, -6838.309, 17.33341, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 3482)
+(@OGUID+90, 195069, 530, 1, 1, -1785.054, 4926.184, -21.13912, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 0)
+(@OGUID+91, 195069, 530, 1, 1, -1785.786, 4925.874, -21.13907, 0, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 0)
+(@OGUID+92, 195069, 530, 1, 1, -1788.583, 4923.905, -21.08776, 0, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 0)
+(@OGUID+93, 195069, 530, 1, 1, -1789.043, 4923.307, -21.08783, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 0)
+(@OGUID+94, 195069, 530, 1, 1, -4319.014, -12442.87, 18.41169, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 3524)
+(@OGUID+95, 195069, 530, 1, 1, -4318.516, -12442.4, 18.40369, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 3524)
+(@OGUID+96, 195069, 530, 1, 1, -4319.543, -12442.27, 18.39898, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 3524)
+(@OGUID+97, 195069, 1, 1, 1, 10049.83, 2118.115, 1330.741, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 0)
+(@OGUID+98, 195069, 1, 1, 1, 10050.89, 2117.891, 1330.74, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 0)
+(@OGUID+99, 195069, 1, 1, 1, 10050.35, 2117.479, 1330.742, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 0)
+(@OGUID+103, 195069, 0, 1, 1, -5149.047, -855.0035, 509.5043, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 809)
+(@OGUID+104, 195069, 0, 1, 1, -5150.075, -854.8785, 509.4961, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 809)
+(@OGUID+105, 195069, 0, 1, 1, -5149.545, -855.4722, 509.4695, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 809)
+(@OGUID+106, 195307, 571, 1, 1, 5849.159, 767.4809, 641.5854, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 4613)
+(@OGUID+107, 195307, 571, 1, 1, 5852.819, 768.2014, 642.1424, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 4613)
+(@OGUID+108, 195307, 1, 1, 1, 1177.219, -4464.497, 22.45422, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 4982)
+(@OGUID+109, 195307, 1, 1, 1, 1171.943, -4462.662, 21.31713, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 4982)
+(@OGUID+110, 195307, 0, 1, 1, 1780.497, 269.0799, 59.82373, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 1497)
+(@OGUID+111, 195307, 0, 1, 1, 1792.509, 241.7743, 60.58672, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 1497)
+(@OGUID+112, 195307, 530, 1, 1, 9418.824, -6851.054, 15.01082, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3482)
+(@OGUID+113, 195307, 530, 1, 1, 9416.861, -6847.479, 15.28504, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3482)
+(@OGUID+114, 195307, 530, 1, 1, -1830.345, 4920.569, -21.52812, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0)
+(@OGUID+115, 195307, 530, 1, 1, -1789.354, 4922.852, -21.08776, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0)
+(@OGUID+116, 195307, 530, 1, 1, -1784.595, 4926.287, -21.1391, 0, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0)
+(@OGUID+117, 195307, 530, 1, 1, -4310.455, -12444.99, 17.43356, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3524)
+(@OGUID+118, 195307, 530, 1, 1, -4320.196, -12452.81, 17.29529, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3524)
+(@OGUID+119, 195307, 530, 1, 1, -4319.519, -12455.02, 17.36685, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3524)
+(@OGUID+120, 195307, 530, 1, 1, -4319.094, -12442, 18.40238, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3524)
+(@OGUID+121, 195307, 530, 1, 1, -4324.972, -12449.45, 16.71002, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3524)
+(@OGUID+122, 195307, 530, 1, 1, -4322.378, -12439.06, 17.53725, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3524)
+(@OGUID+123, 195307, 530, 1, 1, -4324.618, -12440.14, 17.45538, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3524)
+(@OGUID+124, 195307, 1, 1, 1, 10054.24, 2129.033, 1329.658, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0)
+(@OGUID+125, 195307, 1, 1, 1, 10054.64, 2131.958, 1329.658, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0)
+(@OGUID+126, 195307, 1, 1, 1, 10053.82, 2127.783, 1329.666, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0)
+(@OGUID+127, 195307, 1, 1, 1, 10062.81, 2129.417, 1329.658, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0)
+(@OGUID+128, 195307, 1, 1, 1, 10049.72, 2113.115, 1329.65, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0)
+(@OGUID+129, 180761, 1, 1, 1, -981.087, -79.5799, 21.1868, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180761 (Area: 5345)
+(@OGUID+130, 195087, 1, 1, 1, -979.1094, -77.90278, 19.64342, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 5345)
+(@OGUID+131, 180338, 1, 1, 1, -980.6302, -80.09375, 22.98439, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345)
+(@OGUID+132, 195090, 1, 1, 1, -985.321, -76.3576, 21.0619, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 5345)
+(@OGUID+133, 180338, 1, 1, 1, -979.757, -79.63021, 19.90928, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345)
+(@OGUID+134, 195063, 1, 1, 1, -980.2118, -80.25521, 20.06755, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5345)
+(@OGUID+135, 195066, 1, 1, 1, -984.632, -76.12153, 20.85417, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 5345)
+(@OGUID+136, 195067, 1, 1, 1, -980.892, -79.2656, 20.1022, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 5345)
+(@OGUID+137, 195068, 1, 1, 1, -984.6389, -76.13194, 20.85489, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 5345)
+(@OGUID+138, 180338, 1, 1, 1, -985.2778, -76.17535, 24.29876, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345)
+(@OGUID+139, 180338, 1, 1, 1, -979.6441, -81.02778, 22.9663, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345)
+(@OGUID+140, 180338, 1, 1, 1, -984.9375, -72.08681, 23.89491, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345)
+(@OGUID+141, 195307, 1, 1, 1, -979.9774, -71.34202, 20.71725, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5345)
+(@OGUID+142, 180338, 1, 1, 1, -981.941, -69.09375, 20.54778, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345)
+(@OGUID+143, 180340, 1, 1, 1, -984.3177, -73.4566, 20.85332, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 5345)
+(@OGUID+144, 195063, 1, 1, 1, -980.4097, -71.34375, 20.71852, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5345)
+(@OGUID+145, 195066, 1, 1, 1, -983.0018, -70.08334, 20.78368, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 5345)
+(@OGUID+146, 195067, 1, 1, 1, -983.566, -73.32465, 20.6424, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 5345)
+(@OGUID+147, 195068, 1, 1, 1, -984.9202, -75.17188, 20.93883, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 5345)
+(@OGUID+148, 180338, 1, 1, 1, -985.4739, -75.02952, 21.10662, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345)
+(@OGUID+149, 180755, 0, 1, 1, -5162.04, -884.5504, 507.9172, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180755 (Area: 809)
+(@OGUID+150, 180756, 0, 1, 1, -5166.146, -883.5208, 508.0248, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180756 (Area: 809)
+(@OGUID+151, 180758, 1, 1, 1, 10055.21, 2131.847, 1330.38, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180758 (Area: 0)
+(@OGUID+152, 180759, 1, 1, 1, 1184.212, -4470.561, 21.98507, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180759 (Area: 4982)
+(@OGUID+153, 180760, 0, 1, 1, 1777.118, 219.349, 60.5295, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180760 (Area: 1497)
+(@OGUID+154, 180762, 1, 1, 1, 1176.91, -4470.264, 22.60036, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180762 (Area: 4982)
+(@OGUID+155, 182807, 0, 1, 1, 1780.764, 215.6111, 59.79877, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 1497)
+(@OGUID+156, 182807, 530, 1, 1, 9672.116, -7346.438, 11.93114, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3487)
+(@OGUID+157, 182807, 530, 1, 1, 9417.683, -6856.628, 14.86021, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3482)
+(@OGUID+158, 182807, 530, 1, 1, 9418.266, -6855.799, 14.89146, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3482)
+(@OGUID+159, 182807, 530, 1, 1, -1836.095, 4923.363, -21.24118, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0)
+(@OGUID+160, 182807, 530, 1, 1, -1783.089, 4936.236, -22.63017, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0)
+(@OGUID+161, 182807, 530, 1, 1, -1791.925, 4910.33, -21.34786, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0)
+(@OGUID+162, 182807, 530, 1, 1, -4320.022, -12455.68, 17.30129, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3524)
+(@OGUID+163, 182807, 530, 1, 1, -4320.519, -12453.16, 17.25064, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3524)
+(@OGUID+164, 182807, 530, 1, 1, -4314.443, -12446.47, 17.27439, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3524)
+(@OGUID+165, 182807, 530, 1, 1, -4323.438, -12438.89, 17.51184, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3524)
+(@OGUID+166, 182807, 530, 1, 1, -4325.009, -12439.88, 17.46258, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3524)
+(@OGUID+167, 182807, 530, 1, 1, -4309.337, -12420.27, 17.54578, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3524)
+(@OGUID+168, 182807, 1, 1, 1, 10062.73, 2129.979, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0)
+(@OGUID+169, 182807, 1, 1, 1, 10053.69, 2125.306, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0)
+(@OGUID+170, 182807, 1, 1, 1, 10054.79, 2132.236, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0)
+(@OGUID+171, 182807, 1, 1, 1, 10065.52, 2118.462, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0)
+(@OGUID+172, 182807, 1, 1, 1, 10063.4, 2111.853, 1329.656, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0)
+(@OGUID+173, 182807, 0, 1, 1, -8448.64, 903.946, 99.5498, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 5314)
+(@OGUID+174, 182807, 0, 1, 1, -8453.51, 900.464, 99.7285, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 5314)
+(@OGUID+175, 182807, 0, 1, 1, -8456.34, 898.545, 99.7749, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 5314)
+(@OGUID+176, 182807, 0, 1, 1, -8462.6, 913.405, 98.7069, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 5314)
+(@OGUID+177, 182807, 0, 1, 1, -5160.733, -871.283, 507.27, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 809)
+(@OGUID+178, 182807, 0, 1, 1, -5161.266, -870.7344, 507.2331, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 809)
+(@OGUID+179, 180338, 1, 1, 1, 1171.443, -4464.412, 24.96728, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+180, 182807, 571, 1, 1, 5855.949, 765.8055, 641.4308, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 4613)
+(@OGUID+181, 182807, 1, 1, 1, 1184.024, -4469.832, 21.28517, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 4982)
+(@OGUID+182, 182807, 1, 1, 1, 1174.358, -4455.34, 21.55141, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 4982)
+(@OGUID+183, 195307, 0, 1, 1, -8440.75, 910.311, 99.4881, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5314)
+(@OGUID+184, 195307, 0, 1, 1, -8440.54, 900.953, 99.1201, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5314)
+(@OGUID+185, 195307, 0, 1, 1, -8442.21, 899.545, 100.222, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5314)
+(@OGUID+186, 195307, 0, 1, 1, -8460.03, 918.196, 99.1356, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5314)
+(@OGUID+187, 195307, 0, 1, 1, -8460.04, 918.201, 99.1337, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5314)
+(@OGUID+188, 195307, 0, 1, 1, -8460, 918.182, 99.133, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5314)
+(@OGUID+189, 195307, 0, 1, 1, -5160.804, -869.684, 507.2506, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 809)
+(@OGUID+190, 195307, 0, 1, 1, -5159.658, -869.7083, 507.3152, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 809)
+(@OGUID+191, 195090, 571, 1, 1, 5852.62, 768.3403, 642.1464, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 4613)
+(@OGUID+192, 195090, 571, 1, 1, 5857.653, 765.75, 642.5522, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0)
+(@OGUID+193, 195090, 1, 1, 1, 1184.344, -4469.792, 21.29567, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 4982)
+(@OGUID+194, 195090, 1, 1, 1, 1171.813, -4463.702, 21.26314, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 4982)
+(@OGUID+195, 195090, 0, 1, 1, 1777.444, 219.4965, 59.608, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 1497)
+(@OGUID+196, 195090, 0, 1, 1, 1804.74, 215.4219, 65.87223, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 1497)
+(@OGUID+197, 195090, 530, 1, 1, 9419.64, -6851.49, 14.99889, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 3482)
+(@OGUID+198, 195090, 530, 1, 1, 9406.932, -6839.236, 16.12153, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 3482)
+(@OGUID+199, 195090, 530, 1, 1, -1791.731, 4917.936, -21.02558, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0)
+(@OGUID+200, 195090, 530, 1, 1, -1784.01, 4926.544, -21.13911, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0)
+(@OGUID+201, 195090, 530, 1, 1, -1789.701, 4922.516, -21.0878, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0)
+(@OGUID+202, 195090, 530, 1, 1, -4311.059, -12439.47, 17.12793, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 3524)
+(@OGUID+203, 195090, 530, 1, 1, -4325.021, -12437.49, 17.54514, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 3524)
+(@OGUID+204, 195090, 530, 1, 1, -4323.682, -12439.64, 17.47939, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 3524)
+(@OGUID+205, 195090, 1, 1, 1, 10063.32, 2129.74, 1329.658, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0)
+(@OGUID+206, 195090, 1, 1, 1, 10066.65, 2120.208, 1329.658, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0)
+(@OGUID+207, 195090, 1, 1, 1, 10049.55, 2113.663, 1329.651, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0)
+(@OGUID+208, 195090, 1, 1, 1, 10061, 2124.774, 1329.658, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0)
+(@OGUID+209, 182807, 0, 1, 1, 1780.181, 214.7813, 59.85345, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 1497)
+(@OGUID+210, 180339, 0, 1, 1, -5148.749, -848.9774, 510.0603, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 809)
+(@OGUID+211, 180338, 0, 1, 1, -5160.168, -876.7604, 507.3247, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809)
+(@OGUID+212, 180338, 0, 1, 1, -5167.522, -868.3629, 506.5979, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809)
+(@OGUID+213, 180338, 0, 1, 1, -5164.054, -865.0399, 507.1024, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809)
+(@OGUID+214, 180338, 0, 1, 1, -5167.394, -872.684, 506.959, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809)
+(@OGUID+215, 180338, 0, 1, 1, -5156.068, -865.3837, 507.6269, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809)
+(@OGUID+216, 180338, 0, 1, 1, -5153.628, -869.4393, 508.0057, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809)
+(@OGUID+217, 180340, 0, 1, 1, -5146.814, -846.8055, 509.676, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0)
+(@OGUID+218, 180338, 0, 1, 1, -5159.741, -863.7969, 507.2404, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809)
+(@OGUID+219, 180338, 0, 1, 1, -5155.458, -873.7691, 507.8888, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809)
+(@OGUID+220, 180339, 0, 1, 1, -5166.297, -884.3802, 508.2979, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 809)
+(@OGUID+221, 180340, 0, 1, 1, -5160.538, -885.4479, 508.2625, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 809)
+(@OGUID+222, 180338, 0, 1, 1, -5170.338, -880.1614, 508.6569, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809)
+(@OGUID+223, 180338, 0, 1, 1, -5172.024, -874.8038, 508.3947, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809)
+(@OGUID+224, 180338, 0, 1, 1, -5165.082, -876.1962, 507.2279, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809)
+(@OGUID+225, 180340, 0, 1, 1, -5146.814, -846.8055, 509.676, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0)
+(@OGUID+226, 195090, 0, 1, 1, -8443.32, 905.976, 100.686, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 5314)
+(@OGUID+227, 195090, 0, 1, 1, -5160.616, -870.092, 507.2644, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 809)
+(@OGUID+228, 195090, 0, 1, 1, -5163.096, -880.0538, 507.2781, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 809)
+(@OGUID+229, 195067, 571, 1, 1, 5854.465, 767.3403, 641.372, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 4613)
+(@OGUID+230, 195067, 1, 1, 1, 1185.363, -4460.861, 21.102, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 4982)
+(@OGUID+231, 195067, 1, 1, 1, 1175.465, -4455.316, 21.52186, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 4982)
+(@OGUID+232, 195067, 1, 1, 1, 1179.267, -4468.452, 21.24715, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 4982)
+(@OGUID+233, 195067, 0, 1, 1, 1778.847, 260.0729, 59.49801, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 1497)
+(@OGUID+234, 195067, 530, 1, 1, 9419.522, -6850.597, 15.02395, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 3482)
+(@OGUID+235, 195067, 530, 1, 1, -1829.62, 4920.397, -21.57142, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 0)
+(@OGUID+236, 195067, 530, 1, 1, -1814.91, 4911.508, -21.3175, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 0)
+(@OGUID+237, 195067, 530, 1, 1, -1782.922, 4936.822, -22.65951, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 0)
+(@OGUID+238, 195067, 530, 1, 1, -4313.847, -12446.49, 17.29691, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 3524)
+(@OGUID+239, 195067, 530, 1, 1, -4324.51, -12450.02, 16.69843, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 3524)
+(@OGUID+240, 195067, 530, 1, 1, -4324.768, -12454.01, 16.80428, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 3524)
+(@OGUID+241, 195067, 530, 1, 1, -4314.912, -12442.83, 17.23089, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 3524)
+(@OGUID+242, 195067, 530, 1, 1, -4309.531, -12421.05, 17.52263, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 3524)
+(@OGUID+243, 195067, 1, 1, 1, 10054.15, 2124.82, 1329.657, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 0)
+(@OGUID+244, 195067, 1, 1, 1, 10047.4, 2110.174, 1329.648, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 0)
+(@OGUID+245, 195067, 1, 1, 1, 10059.84, 2122.516, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 0)
+(@OGUID+259, 195067, 0, 1, 1, -8457.63, 920.431, 98.7564, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 5314)
+(@OGUID+260, 195067, 0, 1, 1, -8454.19, 900.314, 99.721, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 5314)
+(@OGUID+261, 195067, 0, 1, 1, -8456.06, 899.118, 99.7615, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 5314)
+(@OGUID+262, 195067, 0, 1, 1, -5161.686, -869.6702, 507.2025, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 809)
+(@OGUID+263, 195068, 571, 1, 1, 5856.616, 765.5434, 641.3311, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 4613)
+(@OGUID+264, 195068, 571, 1, 1, 5851.963, 771.2986, 641.4988, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 0)
+(@OGUID+265, 195068, 1, 1, 1, 1180.125, -4457.483, 21.48894, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 4982)
+(@OGUID+266, 195068, 1, 1, 1, 1186.068, -4471.153, 21.37074, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 4982)
+(@OGUID+267, 195068, 1, 1, 1, 1172.283, -4463.252, 21.28665, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 4982)
+(@OGUID+268, 195068, 0, 1, 1, 1777.313, 220.5382, 59.57676, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 1497)
+(@OGUID+269, 195068, 0, 1, 1, 1780.137, 269.7587, 59.8725, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 1497)
+(@OGUID+270, 195068, 530, 1, 1, 9418.647, -6849.45, 15.08854, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 3482)
+(@OGUID+271, 195068, 530, 1, 1, 9418.885, -6854.578, 14.94307, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 3482)
+(@OGUID+272, 195068, 530, 1, 1, -1835.915, 4922.82, -21.20826, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 0)
+(@OGUID+273, 195068, 530, 1, 1, -1782.254, 4935.55, -22.66033, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 0)
+(@OGUID+274, 195068, 530, 1, 1, -4319.374, -12455.69, 17.32846, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 3524)
+(@OGUID+275, 195068, 530, 1, 1, -4318.948, -12448.24, 17.12119, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 3524)
+(@OGUID+276, 195068, 530, 1, 1, -4310.337, -12439.54, 17.13309, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 3524)
+(@OGUID+277, 195068, 530, 1, 1, -4322.972, -12439.46, 17.49306, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 3524)
+(@OGUID+278, 195068, 1, 1, 1, 10053.44, 2128.55, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 0)
+(@OGUID+279, 195068, 1, 1, 1, 10053.57, 2109.589, 1329.648, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 0)
+(@OGUID+280, 195068, 1, 1, 1, 10065.01, 2118.719, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 0)
+(@OGUID+281, 180338, 0, 1, 1, -8445.18, 905.661, 99.3023, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+282, 180338, 0, 1, 1, -8444.22, 906.408, 99.2224, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+283, 180338, 0, 1, 1, -8443.28, 907.071, 99.0144, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+284, 180338, 0, 1, 1, -8446.03, 905.257, 99.4471, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+285, 180338, 0, 1, 1, -8455.08, 904.391, 100.157, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+286, 180338, 0, 1, 1, -8449.8, 908.224, 100.615, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+287, 180338, 0, 1, 1, -8453.44, 916.448, 100.143, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+288, 180338, 0, 1, 1, -8449.09, 919.457, 100.142, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+289, 180338, 0, 1, 1, -8464.38, 908.977, 100.278, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+290, 180338, 0, 1, 1, -8467.54, 913.882, 98.4647, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+291, 180338, 0, 1, 1, -8463.29, 915.149, 100.835, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+292, 180340, 0, 1, 1, -8458.65, 921.385, 99.9164, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 5314)
+(@OGUID+293, 180338, 0, 1, 1, -8459.59, 901.333, 100.158, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+294, 180338, 0, 1, 1, -8458.68, 912.972, 100.059, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+295, 180338, 0, 1, 1, -8466.58, 914.538, 98.4997, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+296, 180340, 0, 1, 1, -5154.092, -851.6649, 509.5116, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 809)
+(@OGUID+297, 180338, 0, 1, 1, -5149.162, -854.5643, 509.2533, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809)
+(@OGUID+298, 180340, 0, 1, 1, -5151.327, -850.9496, 510.0824, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 809)
+(@OGUID+299, 180338, 1, 1, 1, 10064, 2112.663, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+300, 180338, 0, 1, 1, -8435.02, 903.467, 99.3079, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+301, 180340, 0, 1, 1, -8441.88, 900.998, 98.596, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 5314)
+(@OGUID+302, 180338, 0, 1, 1, -8444.11, 911.977, 100.496, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314)
+(@OGUID+303, 195068, 0, 1, 1, -8441.9, 901.031, 98.8491, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 5314)
+(@OGUID+304, 195068, 0, 1, 1, -8449.35, 903.849, 99.5788, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 5314)
+(@OGUID+305, 195068, 0, 1, 1, -8451.97, 894.715, 99.7093, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 5314)
+(@OGUID+306, 195068, 0, 1, 1, -8462.02, 913.623, 98.741, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 5314)
+(@OGUID+307, 195068, 0, 1, 1, -5160.018, -869.0295, 507.2899, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 809)
+(@OGUID+308, 195068, 0, 1, 1, -5159.92, -870.566, 507.3073, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 809)
+(@OGUID+309, 195066, 571, 1, 1, 5856.642, 765.5573, 641.3152, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 4613)
+(@OGUID+310, 195066, 571, 1, 1, 5851.97, 771.3108, 641.496, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 0)
+(@OGUID+311, 195066, 1, 1, 1, 1186.075, -4471.141, 21.3708, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 4982)
+(@OGUID+312, 195066, 1, 1, 1, 1180.132, -4457.471, 21.48913, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 4982)
+(@OGUID+313, 195066, 1, 1, 1, 1172.309, -4463.226, 21.28819, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 4982)
+(@OGUID+314, 195066, 0, 1, 1, 1777.319, 220.5504, 59.57675, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 1497)
+(@OGUID+315, 195066, 0, 1, 1, 1780.161, 269.7726, 59.87251, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 1497)
+(@OGUID+316, 195066, 530, 1, 1, 9418.892, -6854.566, 14.9436, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 3482)
+(@OGUID+317, 195066, 530, 1, 1, 9418.671, -6849.436, 15.08938, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 3482)
+(@OGUID+318, 195066, 530, 1, 1, -1835.911, 4922.804, -21.20723, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 0)
+(@OGUID+319, 195066, 530, 1, 1, -1782.203, 4935.565, -22.66405, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 0)
+(@OGUID+320, 195066, 530, 1, 1, -4318.948, -12448.24, 17.12119, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 3524)
+(@OGUID+321, 195066, 530, 1, 1, -4319.338, -12455.67, 17.32952, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 3524)
+(@OGUID+322, 195066, 530, 1, 1, -4310.302, -12439.51, 17.13647, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 3524)
+(@OGUID+323, 195066, 530, 1, 1, -4322.932, -12439.47, 17.49306, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 3524)
+(@OGUID+324, 195066, 1, 1, 1, 10053.48, 2128.547, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 0)
+(@OGUID+325, 195066, 1, 1, 1, 10065.05, 2118.715, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 0)
+(@OGUID+346, 195066, 0, 1, 1, -8451.97, 894.705, 99.7091, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 5314)
+(@OGUID+347, 195066, 0, 1, 1, -8449.34, 903.826, 99.5779, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 5314)
+(@OGUID+348, 195066, 0, 1, 1, -8462.03, 913.627, 98.7401, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 5314)
+(@OGUID+349, 195066, 0, 1, 1, -5159.913, -870.5538, 507.3073, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 809)
+(@OGUID+350, 195066, 0, 1, 1, -5159.993, -869.0156, 507.2909, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 809)
+(@OGUID+351, 180338, 1, 1, 1, 1190.076, -4465.677, 24.34778, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+352, 180339, 1, 1, 1, 1190.387, -4464.894, 21.43193, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 4982)
+(@OGUID+353, 180338, 1, 1, 1, 1191.014, -4464.749, 21.46348, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+354, 180340, 1, 1, 1, 1189.604, -4465.708, 24.78123, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 4982)
+(@OGUID+355, 180338, 1, 1, 1, 1183.564, -4461.292, 21.89302, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+356, 180338, 1, 1, 1, 1180.523, -4458.66, 21.29023, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+357, 180338, 1, 1, 1, 1184.557, -4461.646, 23.8004, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+358, 180338, 1, 1, 1, 1179.453, -4458.417, 24.01959, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+359, 180338, 1, 1, 1, 1189.028, -4464.564, 21.34884, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+360, 180338, 1, 1, 1, 1185.379, -4462.064, 21.31019, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+361, 180338, 571, 1, 1, 5849.52, 771.9202, 640.5316, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613)
+(@OGUID+362, 180339, 571, 1, 1, 5855.462, 762.7917, 641.0209, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 4613)
+(@OGUID+363, 180338, 571, 1, 1, 5852.08, 768.382, 641.0565, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613)
+(@OGUID+364, 180340, 571, 1, 1, 5856.033, 763, 642.1487, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 4613)
+(@OGUID+365, 180338, 571, 1, 1, 5855.965, 762.6042, 642.0032, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613)
+(@OGUID+366, 180338, 571, 1, 1, 5855.427, 763.2327, 640.9249, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613)
+(@OGUID+367, 180340, 571, 1, 1, 5851.866, 767.7535, 641.0768, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 4613)
+(@OGUID+368, 180338, 571, 1, 1, 5852.549, 767.7952, 640.9977, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613)
+(@OGUID+369, 180340, 571, 1, 1, 5856.377, 764.816, 641.3123, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 4613)
+(@OGUID+370, 180338, 571, 1, 1, 5852.02, 770.6042, 640.6677, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613)
+(@OGUID+371, 180339, 571, 1, 1, 5851.663, 770.5261, 640.8624, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 4613)
+(@OGUID+372, 180338, 571, 1, 1, 5851.499, 770.9114, 640.8176, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613)
+(@OGUID+373, 180338, 571, 1, 1, 5854.482, 768.0121, 641.1102, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613)
+(@OGUID+374, 180338, 571, 1, 1, 5855.041, 767.118, 641.4463, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613)
+(@OGUID+375, 180338, 571, 1, 1, 5857.665, 766.7049, 642.3126, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+376, 180338, 571, 1, 1, 5856.665, 766.6354, 641.3419, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+377, 180338, 571, 1, 1, 5857.962, 764.8403, 642.324, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+378, 180338, 1, 1, 1, 1183.734, -4471.45, 24.01979, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+379, 180338, 1, 1, 1, 1174.95, -4456.12, 23.48371, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+380, 180338, 1, 1, 1, 1184.267, -4471.882, 24.54644, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+381, 180338, 1, 1, 1, 1185.028, -4472.323, 23.94708, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+382, 180338, 1, 1, 1, 1176.332, -4456.46, 21.52742, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+383, 180340, 1, 1, 1, 1183.41, -4470.307, 21.25746, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 4982)
+(@OGUID+384, 180338, 1, 1, 1, 1178.354, -4468.153, 21.28568, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+385, 180338, 1, 1, 1, 1176.658, -4470.476, 24.50543, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+386, 180338, 1, 1, 1, 1171.104, -4464.168, 23.80319, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+387, 180338, 1, 1, 1, 1177.444, -4471.063, 25.08418, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+388, 180338, 1, 1, 1, 1171.076, -4462.833, 21.30515, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+389, 180340, 1, 1, 1, 1177.351, -4467.596, 21.30621, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 4982)
+(@OGUID+390, 180338, 1, 1, 1, 1172.712, -4464.057, 21.24482, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982)
+(@OGUID+391, 180340, 1, 1, 1, 1176.064, -4470.356, 24.25703, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 4982)
+(@OGUID+392, 180338, 0, 1, 1, 1775.641, 229.2917, 60.04337, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+393, 180338, 0, 1, 1, 1772.943, 234.9115, 60.76359, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+394, 180339, 0, 1, 1, 1772.793, 242.4514, 60.76684, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 1497)
+(@OGUID+395, 180338, 0, 1, 1, 1767.434, 242.9219, 60.86443, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+396, 180338, 0, 1, 1, 1776.615, 222.5781, 59.50615, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+397, 180339, 0, 1, 1, 1767.819, 235.5816, 60.85546, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 1497)
+(@OGUID+398, 180338, 0, 1, 1, 1777.62, 253.684, 59.63699, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+399, 180339, 0, 1, 1, 1785.023, 241.592, 60.4074, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 1497)
+(@OGUID+400, 180338, 0, 1, 1, 1776.589, 250.25, 59.941, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+401, 180338, 0, 1, 1, 1779.648, 236.3507, 60.41855, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+402, 180338, 0, 1, 1, 1780.391, 229.7986, 59.81966, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+403, 180338, 0, 1, 1, 1780.266, 242.6875, 60.41016, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+404, 180338, 0, 1, 1, 1778.505, 257.7934, 59.51064, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+405, 180338, 0, 1, 1, 1785.799, 234.8142, 60.40706, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+406, 180338, 0, 1, 1, 1778.811, 260.8629, 59.52987, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+407, 180338, 0, 1, 1, 1794.349, 233.2778, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+408, 180338, 0, 1, 1, 1794.559, 243.0747, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+409, 180338, 0, 1, 1, 1795.705, 228.9132, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+410, 180338, 0, 1, 1, 1790.866, 241.2483, 60.57669, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+411, 180338, 0, 1, 1, 1791.102, 235.2639, 60.57873, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+412, 180338, 0, 1, 1, 1802.957, 251.9531, 60.59119, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+413, 180338, 0, 1, 1, 1803.123, 221.4722, 60.27921, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+414, 180338, 0, 1, 1, 1800.771, 232.3576, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+415, 180338, 0, 1, 1, 1801.089, 244.6042, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+416, 180338, 0, 1, 1, 1802.851, 224.4931, 60.35531, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+417, 180340, 0, 1, 1, 1799.745, 236.6701, 62.75362, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 1497)
+(@OGUID+418, 180338, 0, 1, 1, 1800.885, 227.724, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+419, 180338, 0, 1, 1, 1798.29, 236.1111, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+420, 180338, 0, 1, 1, 1798.233, 240.9566, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+421, 180338, 0, 1, 1, 1795.684, 248.316, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+422, 180339, 0, 1, 1, 1802, 243.1927, 62.75362, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 1497)
+(@OGUID+423, 180338, 0, 1, 1, 1800.889, 249.349, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+424, 180338, 0, 1, 1, 1809.691, 244.4688, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+425, 180338, 0, 1, 1, 1808.592, 255.6615, 60.70827, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+426, 180338, 0, 1, 1, 1812.352, 235.9392, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+427, 180338, 0, 1, 1, 1803.595, 255.8056, 60.703, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+428, 180338, 0, 1, 1, 1810.738, 249.3802, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+429, 180338, 0, 1, 1, 1809.031, 251.6267, 60.58867, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+430, 180338, 0, 1, 1, 1812.432, 240.7135, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+431, 180340, 0, 1, 1, 1808.877, 242.9375, 62.75362, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 1497)
+(@OGUID+432, 180338, 0, 1, 1, 1805.212, 230.9288, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+433, 180340, 0, 1, 1, 1810.583, 236.5469, 62.75362, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 1497)
+(@OGUID+434, 180338, 0, 1, 1, 1803.302, 258.3698, 60.86269, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+435, 180339, 0, 1, 1, 1808.549, 225.0729, 60.36491, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 1497)
+(@OGUID+436, 180338, 0, 1, 1, 1808.307, 258.4965, 60.88347, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+437, 180338, 0, 1, 1, 1810.634, 227.6076, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+438, 180340, 0, 1, 1, 1805.387, 232.2726, 62.67342, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 1497)
+(@OGUID+439, 180338, 0, 1, 1, 1809.67, 232.2656, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+440, 180338, 0, 1, 1, 1805.504, 245.9323, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+441, 180338, 0, 1, 1, 1808.227, 220.7396, 60.25816, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+442, 180338, 0, 1, 1, 1818.595, 241.8403, 60.5149, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+443, 180338, 0, 1, 1, 1815.023, 247.9809, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+444, 180338, 0, 1, 1, 1828.241, 240.6667, 60.74019, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+445, 180338, 0, 1, 1, 1816.179, 233.5122, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+446, 180338, 0, 1, 1, 1828.354, 235.0365, 60.73164, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+447, 180338, 0, 1, 1, 1819.064, 235.4375, 60.40575, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+448, 180338, 0, 1, 1, 1822.648, 242.0139, 60.74152, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+449, 180338, 0, 1, 1, 1814.47, 228.5608, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+450, 180338, 0, 1, 1, 1823.495, 236.0972, 60.7414, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+451, 180338, 0, 1, 1, 1816.132, 243.6632, 60.58345, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+452, 180338, 0, 1, 1, 1834.165, 235.7222, 60.28042, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+453, 180338, 0, 1, 1, 1839.09, 234.6892, 60.58925, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+454, 180338, 0, 1, 1, 1839.069, 241.9236, 60.58492, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+455, 180338, 0, 1, 1, 1834.045, 240.8646, 60.27056, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497)
+(@OGUID+456, 180338, 530, 1, 1, 9418.825, -6850.219, 15.04114, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482)
+(@OGUID+457, 180338, 530, 1, 1, 9416.098, -6859.702, 17.72371, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482)
+(@OGUID+458, 180339, 530, 1, 1, 9410.924, -6860.234, 14.66373, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 3482)
+(@OGUID+459, 180338, 530, 1, 1, 9409.407, -6847.16, 15.59513, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482)
+(@OGUID+460, 180338, 530, 1, 1, 9413.11, -6858.149, 14.68079, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482)
+(@OGUID+461, 180340, 530, 1, 1, 9406.975, -6850.432, 15.49679, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 3482)
+(@OGUID+462, 180338, 530, 1, 1, 9421.596, -6855.611, 20.67232, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482)
+(@OGUID+463, 180338, 530, 1, 1, 9406.053, -6854.354, 15.2733, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482)
+(@OGUID+464, 180338, 530, 1, 1, 9419.435, -6853.582, 14.97401, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482)
+(@OGUID+465, 180338, 530, 1, 1, 9416.808, -6857.134, 14.83239, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482)
+(@OGUID+466, 180338, 530, 1, 1, 9407.948, -6858.431, 14.819, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482)
+(@OGUID+467, 180338, 530, 1, 1, 9421.068, -6849.257, 18.02616, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482)
+(@OGUID+468, 180340, 530, 1, 1, 9417.853, -6844.644, 15.44193, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 3482)
+(@OGUID+469, 180340, 530, 1, 1, 9412.682, -6845.231, 15.64252, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 3482)
+(@OGUID+470, 180339, 530, 1, 1, 9415.574, -6844.394, 15.6033, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 3482)
+(@OGUID+471, 180338, 530, 1, 1, 9410.944, -6842.853, 15.94074, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482)
+(@OGUID+472, 180338, 530, 1, 1, 9411.216, -6835.885, 16.40972, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482)
+(@OGUID+473, 180338, 530, 1, 1, -1837.974, 4921.648, -19.05106, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+474, 180339, 530, 1, 1, -1837.953, 4921.162, -18.875, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0)
+(@OGUID+475, 180338, 530, 1, 1, -1836.629, 4922.929, -21.1233, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+476, 180339, 530, 1, 1, -1816.16, 4909.691, -16.47844, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0)
+(@OGUID+477, 180338, 530, 1, 1, -1779.859, 4938.297, -20.57433, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+478, 180338, 530, 1, 1, -1783.58, 4937.418, -22.87706, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+479, 180339, 530, 1, 1, -1779.325, 4938.288, -20.35745, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0)
+(@OGUID+480, 180338, 530, 1, 1, -1783.845, 4936.499, -22.62333, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+481, 180340, 530, 1, 1, -1815.401, 4912.053, -21.41395, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0)
+(@OGUID+482, 180339, 530, 1, 1, -1830.479, 4917.759, -18.83961, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0)
+(@OGUID+483, 180340, 530, 1, 1, -1788.946, 4925.132, -21.71204, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0)
+(@OGUID+484, 180338, 530, 1, 1, -1829.241, 4919.934, -21.42811, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+485, 180340, 530, 1, 1, -1782.326, 4934.665, -22.62724, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0)
+(@OGUID+486, 180338, 530, 1, 1, -1779.852, 4937.522, -20.63801, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+487, 180340, 530, 1, 1, -1830.764, 4920.147, -21.45236, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0)
+(@OGUID+488, 180340, 530, 1, 1, -1791.436, 4921.899, -21.66345, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0)
+(@OGUID+489, 180338, 530, 1, 1, -1787.144, 4926.236, -21.7487, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+490, 180338, 530, 1, 1, -1802.321, 4907.97, -21.39958, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+491, 180338, 530, 1, 1, -1791.648, 4910.958, -21.36656, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+492, 180338, 530, 1, 1, -1801.554, 4910.698, -21.4005, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+493, 180338, 530, 1, 1, -1799.038, 4912.07, -21.3998, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+494, 180339, 530, 1, 1, -1792.384, 4920.327, -21.64606, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0)
+(@OGUID+495, 180340, 530, 1, 1, -1792.658, 4910.359, -21.37147, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0)
+(@OGUID+496, 180339, 530, 1, 1, -1790.858, 4909.421, -16.41148, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0)
+(@OGUID+497, 180338, 530, 1, 1, -1796.408, 4911.367, -21.40019, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+498, 180338, 530, 1, 1, -4314.503, -12446.04, 17.23437, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+499, 180338, 530, 1, 1, -4313.417, -12447.03, 17.36579, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+500, 180338, 530, 1, 1, -4310.95, -12444.82, 17.38944, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+501, 180338, 530, 1, 1, -4313.21, -12446.54, 17.32341, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+502, 180340, 530, 1, 1, -4320.821, -12452.94, 17.18122, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 3524)
+(@OGUID+503, 180338, 530, 1, 1, -4319.653, -12448.14, 17.09422, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+504, 180339, 530, 1, 1, -4319.12, -12456.25, 17.34892, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 3524)
+(@OGUID+505, 180338, 530, 1, 1, -4314.819, -12443.43, 17.22013, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+506, 180338, 530, 1, 1, -4313.979, -12445.83, 17.23385, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+507, 180340, 530, 1, 1, -4318.693, -12448.96, 17.16888, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 3524)
+(@OGUID+508, 180338, 530, 1, 1, -4310.422, -12445.56, 17.44872, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+509, 180338, 530, 1, 1, -4324.342, -12454.45, 16.90608, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+510, 180338, 530, 1, 1, -4309.894, -12439.97, 17.22674, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+511, 180338, 530, 1, 1, -4325.287, -12453.73, 16.75985, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+512, 180338, 530, 1, 1, -4324.807, -12450.67, 16.6921, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+513, 180338, 530, 1, 1, -4324.394, -12453.49, 16.81945, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+514, 180338, 530, 1, 1, -4325.122, -12454.39, 16.82211, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+515, 180885, 530, 1, 1, -4318.978, -12442.33, 17.2804, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 180885 (Area: 3524)
+(@OGUID+516, 180338, 530, 1, 1, -4315.319, -12442.54, 17.24293, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+517, 180338, 530, 1, 1, -4325.247, -12450.3, 16.65173, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+518, 180338, 530, 1, 1, -4324.653, -12441.05, 17.42333, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+519, 180338, 530, 1, 1, -4326.519, -12438.95, 18.94419, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+520, 180338, 530, 1, 1, -4324.635, -12436.89, 19.43099, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+521, 180338, 530, 1, 1, -4325.179, -12440.22, 17.47205, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+522, 180338, 530, 1, 1, -4325.653, -12438.65, 19.28593, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+523, 180338, 530, 1, 1, -4322.175, -12438.73, 17.56375, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+524, 180338, 530, 1, 1, -4326.963, -12438.2, 19.36827, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+525, 180338, 530, 1, 1, -4323.887, -12437.04, 18.70215, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+526, 180338, 530, 1, 1, -4325.113, -12436.97, 19.78218, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+527, 180338, 530, 1, 1, -4324.327, -12437.5, 19.13781, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+528, 180338, 530, 1, 1, -4311.293, -12421.77, 17.49123, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+529, 180338, 530, 1, 1, -4325.132, -12436.4, 19.8198, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+530, 180338, 530, 1, 1, -4326.474, -12437.68, 19.88736, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+531, 180338, 530, 1, 1, -4322.835, -12438.41, 17.56154, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+532, 180338, 530, 1, 1, -4326.099, -12438.25, 19.56963, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+533, 180338, 530, 1, 1, -4310.422, -12422.13, 17.46415, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+534, 180338, 530, 1, 1, -4309.858, -12416.43, 20.66073, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+535, 180338, 530, 1, 1, -4308.606, -12418.14, 19.15999, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+536, 180338, 530, 1, 1, -4310.059, -12417.64, 20.57458, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+537, 180338, 530, 1, 1, -4312.616, -12419.58, 19.46299, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+538, 180338, 530, 1, 1, -4308.205, -12421.55, 17.49692, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+539, 180338, 530, 1, 1, -4308.79, -12417.27, 20.00328, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+540, 180338, 530, 1, 1, -4309.601, -12418.8, 19.92153, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+541, 180338, 530, 1, 1, -4308.077, -12420.59, 17.54629, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+542, 180338, 530, 1, 1, -4312.104, -12418.41, 20.58256, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+543, 180338, 530, 1, 1, -4311.853, -12419.18, 20.15026, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+544, 180338, 530, 1, 1, -4312.518, -12416.92, 20.90093, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+545, 180338, 530, 1, 1, -4313.009, -12418.03, 20.47431, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524)
+(@OGUID+546, 180338, 1, 1, 1, 10053.4, 2124.88, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+547, 180338, 1, 1, 1, 10063.77, 2128.635, 1331.266, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+548, 180338, 1, 1, 1, 10054.83, 2127.247, 1330.36, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+549, 180340, 1, 1, 1, 10058.35, 2134.978, 1330.78, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0)
+(@OGUID+550, 180338, 1, 1, 1, 10054.68, 2126.606, 1330.203, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+551, 180338, 1, 1, 1, 10055.19, 2132.316, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+552, 180338, 1, 1, 1, 10054.86, 2131.425, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+553, 180338, 1, 1, 1, 10049.81, 2111.908, 1330.872, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+554, 180338, 1, 1, 1, 10065.84, 2118.132, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+555, 180338, 1, 1, 1, 10060.6, 2122.877, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+556, 180338, 1, 1, 1, 10066.9, 2122.259, 1329.658, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+557, 180338, 1, 1, 1, 10061.39, 2123.998, 1331.735, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+558, 180338, 1, 1, 1, 10047.33, 2107.856, 1331.513, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+559, 180338, 1, 1, 1, 10047.17, 2109.439, 1329.648, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+560, 180338, 1, 1, 1, 10050.19, 2112.628, 1331.073, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+561, 180338, 1, 1, 1, 10065.6, 2116.717, 1329.658, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+562, 180338, 1, 1, 1, 10064.18, 2114.285, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+563, 180338, 1, 1, 1, 10046.18, 2105.722, 1330.707, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+564, 180338, 1, 1, 1, 10053.27, 2105.349, 1330.886, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0)
+(@OGUID+565, 180339, 1, 1, 1, 10054.41, 2109.627, 1329.648, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0)
+(@OGUID+566, 182807, 571, 1, 1, 5849.689, 771.4618, 640.5817, 0, 0, 0, 0, 1, 120, 255, 1); -- 182807 (Area: 4613)
+
+
+
+DELETE FROM `game_event_gameobject` WHERE `eventEntry`=51 AND `guid` BETWEEN @OGUID+0 AND @OGUID+566;
+
+INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES
+(51, @OGUID+0),
+(51, @OGUID+1),
+(51, @OGUID+2),
+(51, @OGUID+3),
+(51, @OGUID+4),
+(51, @OGUID+5),
+(51, @OGUID+6),
+(51, @OGUID+7),
+(51, @OGUID+8),
+(51, @OGUID+9),
+(51, @OGUID+10),
+(51, @OGUID+11),
+(51, @OGUID+12),
+(51, @OGUID+13),
+(51, @OGUID+14),
+(51, @OGUID+15),
+(51, @OGUID+16),
+(51, @OGUID+17),
+(51, @OGUID+18),
+(51, @OGUID+19),
+(51, @OGUID+20),
+(51, @OGUID+21),
+(51, @OGUID+22),
+(51, @OGUID+23),
+(51, @OGUID+24),
+(51, @OGUID+25),
+(51, @OGUID+26),
+(51, @OGUID+27),
+(51, @OGUID+28),
+(51, @OGUID+29),
+(51, @OGUID+30),
+(51, @OGUID+31),
+(51, @OGUID+32),
+(51, @OGUID+33),
+(51, @OGUID+34),
+(51, @OGUID+35),
+(51, @OGUID+36),
+(51, @OGUID+37),
+(51, @OGUID+38),
+(51, @OGUID+39),
+(51, @OGUID+40),
+(51, @OGUID+41),
+(51, @OGUID+42),
+(51, @OGUID+43),
+(51, @OGUID+44),
+(51, @OGUID+45),
+(51, @OGUID+46),
+(51, @OGUID+47),
+(51, @OGUID+48),
+(51, @OGUID+49),
+(51, @OGUID+50),
+(51, @OGUID+51),
+(51, @OGUID+52),
+(51, @OGUID+53),
+(51, @OGUID+54),
+(51, @OGUID+55),
+(51, @OGUID+56),
+(51, @OGUID+57),
+(51, @OGUID+58),
+(51, @OGUID+59),
+(51, @OGUID+60),
+(51, @OGUID+61),
+(51, @OGUID+62),
+(51, @OGUID+63),
+(51, @OGUID+64),
+(51, @OGUID+65),
+(51, @OGUID+66),
+(51, @OGUID+67),
+(51, @OGUID+68),
+(51, @OGUID+69),
+(51, @OGUID+70),
+(51, @OGUID+71),
+(51, @OGUID+72),
+(51, @OGUID+73),
+(51, @OGUID+74),
+(51, @OGUID+75),
+(51, @OGUID+76),
+(51, @OGUID+77),
+(51, @OGUID+78),
+(51, @OGUID+79),
+(51, @OGUID+80),
+(51, @OGUID+81),
+(51, @OGUID+82),
+(51, @OGUID+83),
+(51, @OGUID+84),
+(51, @OGUID+85),
+(51, @OGUID+86),
+(51, @OGUID+87),
+(51, @OGUID+88),
+(51, @OGUID+89),
+(51, @OGUID+90),
+(51, @OGUID+91),
+(51, @OGUID+92),
+(51, @OGUID+93),
+(51, @OGUID+94),
+(51, @OGUID+95),
+(51, @OGUID+96),
+(51, @OGUID+97),
+(51, @OGUID+98),
+(51, @OGUID+99),
+(51, @OGUID+100),
+(51, @OGUID+101),
+(51, @OGUID+102),
+(51, @OGUID+103),
+(51, @OGUID+104),
+(51, @OGUID+105),
+(51, @OGUID+106),
+(51, @OGUID+107),
+(51, @OGUID+108),
+(51, @OGUID+109),
+(51, @OGUID+110),
+(51, @OGUID+111),
+(51, @OGUID+112),
+(51, @OGUID+113),
+(51, @OGUID+114),
+(51, @OGUID+115),
+(51, @OGUID+116),
+(51, @OGUID+117),
+(51, @OGUID+118),
+(51, @OGUID+119),
+(51, @OGUID+120),
+(51, @OGUID+121),
+(51, @OGUID+122),
+(51, @OGUID+123),
+(51, @OGUID+124),
+(51, @OGUID+125),
+(51, @OGUID+126),
+(51, @OGUID+127),
+(51, @OGUID+128),
+(51, @OGUID+129),
+(51, @OGUID+130),
+(51, @OGUID+131),
+(51, @OGUID+132),
+(51, @OGUID+133),
+(51, @OGUID+134),
+(51, @OGUID+135),
+(51, @OGUID+136),
+(51, @OGUID+137),
+(51, @OGUID+138),
+(51, @OGUID+139),
+(51, @OGUID+140),
+(51, @OGUID+141),
+(51, @OGUID+142),
+(51, @OGUID+143),
+(51, @OGUID+144),
+(51, @OGUID+145),
+(51, @OGUID+146),
+(51, @OGUID+147),
+(51, @OGUID+148),
+(51, @OGUID+149),
+(51, @OGUID+150),
+(51, @OGUID+151),
+(51, @OGUID+152),
+(51, @OGUID+153),
+(51, @OGUID+154),
+(51, @OGUID+155),
+(51, @OGUID+156),
+(51, @OGUID+157),
+(51, @OGUID+158),
+(51, @OGUID+159),
+(51, @OGUID+160),
+(51, @OGUID+161),
+(51, @OGUID+162),
+(51, @OGUID+163),
+(51, @OGUID+164),
+(51, @OGUID+165),
+(51, @OGUID+166),
+(51, @OGUID+167),
+(51, @OGUID+168),
+(51, @OGUID+169),
+(51, @OGUID+170),
+(51, @OGUID+171),
+(51, @OGUID+172),
+(51, @OGUID+173),
+(51, @OGUID+174),
+(51, @OGUID+175),
+(51, @OGUID+176),
+(51, @OGUID+177),
+(51, @OGUID+178),
+(51, @OGUID+179),
+(51, @OGUID+180),
+(51, @OGUID+181),
+(51, @OGUID+182),
+(51, @OGUID+183),
+(51, @OGUID+184),
+(51, @OGUID+185),
+(51, @OGUID+186),
+(51, @OGUID+187),
+(51, @OGUID+188),
+(51, @OGUID+189),
+(51, @OGUID+190),
+(51, @OGUID+191),
+(51, @OGUID+192),
+(51, @OGUID+193),
+(51, @OGUID+194),
+(51, @OGUID+195),
+(51, @OGUID+196),
+(51, @OGUID+197),
+(51, @OGUID+198),
+(51, @OGUID+199),
+(51, @OGUID+200),
+(51, @OGUID+201),
+(51, @OGUID+202),
+(51, @OGUID+203),
+(51, @OGUID+204),
+(51, @OGUID+205),
+(51, @OGUID+206),
+(51, @OGUID+207),
+(51, @OGUID+208),
+(51, @OGUID+209),
+(51, @OGUID+210),
+(51, @OGUID+211),
+(51, @OGUID+212),
+(51, @OGUID+213),
+(51, @OGUID+214),
+(51, @OGUID+215),
+(51, @OGUID+216),
+(51, @OGUID+217),
+(51, @OGUID+218),
+(51, @OGUID+219),
+(51, @OGUID+220),
+(51, @OGUID+221),
+(51, @OGUID+222),
+(51, @OGUID+223),
+(51, @OGUID+224),
+(51, @OGUID+225),
+(51, @OGUID+226),
+(51, @OGUID+227),
+(51, @OGUID+228),
+(51, @OGUID+229),
+(51, @OGUID+230),
+(51, @OGUID+231),
+(51, @OGUID+232),
+(51, @OGUID+233),
+(51, @OGUID+234),
+(51, @OGUID+235),
+(51, @OGUID+236),
+(51, @OGUID+237),
+(51, @OGUID+238),
+(51, @OGUID+239),
+(51, @OGUID+240),
+(51, @OGUID+241),
+(51, @OGUID+242),
+(51, @OGUID+243),
+(51, @OGUID+244),
+(51, @OGUID+245),
+(51, @OGUID+246),
+(51, @OGUID+247),
+(51, @OGUID+248),
+(51, @OGUID+249),
+(51, @OGUID+250),
+(51, @OGUID+251),
+(51, @OGUID+252),
+(51, @OGUID+253),
+(51, @OGUID+254),
+(51, @OGUID+255),
+(51, @OGUID+256),
+(51, @OGUID+257),
+(51, @OGUID+258),
+(51, @OGUID+259),
+(51, @OGUID+260),
+(51, @OGUID+261),
+(51, @OGUID+262),
+(51, @OGUID+263),
+(51, @OGUID+264),
+(51, @OGUID+265),
+(51, @OGUID+266),
+(51, @OGUID+267),
+(51, @OGUID+268),
+(51, @OGUID+269),
+(51, @OGUID+270),
+(51, @OGUID+271),
+(51, @OGUID+272),
+(51, @OGUID+273),
+(51, @OGUID+274),
+(51, @OGUID+275),
+(51, @OGUID+276),
+(51, @OGUID+277),
+(51, @OGUID+278),
+(51, @OGUID+279),
+(51, @OGUID+280),
+(51, @OGUID+281),
+(51, @OGUID+282),
+(51, @OGUID+283),
+(51, @OGUID+284),
+(51, @OGUID+285),
+(51, @OGUID+286),
+(51, @OGUID+287),
+(51, @OGUID+288),
+(51, @OGUID+289),
+(51, @OGUID+290),
+(51, @OGUID+291),
+(51, @OGUID+292),
+(51, @OGUID+293),
+(51, @OGUID+294),
+(51, @OGUID+295),
+(51, @OGUID+296),
+(51, @OGUID+297),
+(51, @OGUID+298),
+(51, @OGUID+299),
+(51, @OGUID+300),
+(51, @OGUID+301),
+(51, @OGUID+302),
+(51, @OGUID+303),
+(51, @OGUID+304),
+(51, @OGUID+305),
+(51, @OGUID+306),
+(51, @OGUID+307),
+(51, @OGUID+308),
+(51, @OGUID+309),
+(51, @OGUID+310),
+(51, @OGUID+311),
+(51, @OGUID+312),
+(51, @OGUID+313),
+(51, @OGUID+314),
+(51, @OGUID+315),
+(51, @OGUID+316),
+(51, @OGUID+317),
+(51, @OGUID+318),
+(51, @OGUID+319),
+(51, @OGUID+320),
+(51, @OGUID+321),
+(51, @OGUID+322),
+(51, @OGUID+323),
+(51, @OGUID+324),
+(51, @OGUID+325),
+(51, @OGUID+326),
+(51, @OGUID+327),
+(51, @OGUID+328),
+(51, @OGUID+329),
+(51, @OGUID+330),
+(51, @OGUID+331),
+(51, @OGUID+332),
+(51, @OGUID+333),
+(51, @OGUID+334),
+(51, @OGUID+335),
+(51, @OGUID+336),
+(51, @OGUID+337),
+(51, @OGUID+338),
+(51, @OGUID+339),
+(51, @OGUID+340),
+(51, @OGUID+341),
+(51, @OGUID+342),
+(51, @OGUID+343),
+(51, @OGUID+344),
+(51, @OGUID+345),
+(51, @OGUID+346),
+(51, @OGUID+347),
+(51, @OGUID+348),
+(51, @OGUID+349),
+(51, @OGUID+350),
+(51, @OGUID+351),
+(51, @OGUID+352),
+(51, @OGUID+353),
+(51, @OGUID+354),
+(51, @OGUID+355),
+(51, @OGUID+356),
+(51, @OGUID+357),
+(51, @OGUID+358),
+(51, @OGUID+359),
+(51, @OGUID+360),
+(51, @OGUID+361),
+(51, @OGUID+362),
+(51, @OGUID+363),
+(51, @OGUID+364),
+(51, @OGUID+365),
+(51, @OGUID+366),
+(51, @OGUID+367),
+(51, @OGUID+368),
+(51, @OGUID+369),
+(51, @OGUID+370),
+(51, @OGUID+371),
+(51, @OGUID+372),
+(51, @OGUID+373),
+(51, @OGUID+374),
+(51, @OGUID+375),
+(51, @OGUID+376),
+(51, @OGUID+377),
+(51, @OGUID+378),
+(51, @OGUID+379),
+(51, @OGUID+380),
+(51, @OGUID+381),
+(51, @OGUID+382),
+(51, @OGUID+383),
+(51, @OGUID+384),
+(51, @OGUID+385),
+(51, @OGUID+386),
+(51, @OGUID+387),
+(51, @OGUID+388),
+(51, @OGUID+389),
+(51, @OGUID+390),
+(51, @OGUID+391),
+(51, @OGUID+392),
+(51, @OGUID+393),
+(51, @OGUID+394),
+(51, @OGUID+395),
+(51, @OGUID+396),
+(51, @OGUID+397),
+(51, @OGUID+398),
+(51, @OGUID+399),
+(51, @OGUID+400),
+(51, @OGUID+401),
+(51, @OGUID+402),
+(51, @OGUID+403),
+(51, @OGUID+404),
+(51, @OGUID+405),
+(51, @OGUID+406),
+(51, @OGUID+407),
+(51, @OGUID+408),
+(51, @OGUID+409),
+(51, @OGUID+410),
+(51, @OGUID+411),
+(51, @OGUID+412),
+(51, @OGUID+413),
+(51, @OGUID+414),
+(51, @OGUID+415),
+(51, @OGUID+416),
+(51, @OGUID+417),
+(51, @OGUID+418),
+(51, @OGUID+419),
+(51, @OGUID+420),
+(51, @OGUID+421),
+(51, @OGUID+422),
+(51, @OGUID+423),
+(51, @OGUID+424),
+(51, @OGUID+425),
+(51, @OGUID+426),
+(51, @OGUID+427),
+(51, @OGUID+428),
+(51, @OGUID+429),
+(51, @OGUID+430),
+(51, @OGUID+431),
+(51, @OGUID+432),
+(51, @OGUID+433),
+(51, @OGUID+434),
+(51, @OGUID+435),
+(51, @OGUID+436),
+(51, @OGUID+437),
+(51, @OGUID+438),
+(51, @OGUID+439),
+(51, @OGUID+440),
+(51, @OGUID+441),
+(51, @OGUID+442),
+(51, @OGUID+443),
+(51, @OGUID+444),
+(51, @OGUID+445),
+(51, @OGUID+446),
+(51, @OGUID+447),
+(51, @OGUID+448),
+(51, @OGUID+449),
+(51, @OGUID+450),
+(51, @OGUID+451),
+(51, @OGUID+452),
+(51, @OGUID+453),
+(51, @OGUID+454),
+(51, @OGUID+455),
+(51, @OGUID+456),
+(51, @OGUID+457),
+(51, @OGUID+458),
+(51, @OGUID+459),
+(51, @OGUID+460),
+(51, @OGUID+461),
+(51, @OGUID+462),
+(51, @OGUID+463),
+(51, @OGUID+464),
+(51, @OGUID+465),
+(51, @OGUID+466),
+(51, @OGUID+467),
+(51, @OGUID+468),
+(51, @OGUID+469),
+(51, @OGUID+470),
+(51, @OGUID+471),
+(51, @OGUID+472),
+(51, @OGUID+473),
+(51, @OGUID+474),
+(51, @OGUID+475),
+(51, @OGUID+476),
+(51, @OGUID+477),
+(51, @OGUID+478),
+(51, @OGUID+479),
+(51, @OGUID+480),
+(51, @OGUID+481),
+(51, @OGUID+482),
+(51, @OGUID+483),
+(51, @OGUID+484),
+(51, @OGUID+485),
+(51, @OGUID+486),
+(51, @OGUID+487),
+(51, @OGUID+488),
+(51, @OGUID+489),
+(51, @OGUID+490),
+(51, @OGUID+491),
+(51, @OGUID+492),
+(51, @OGUID+493),
+(51, @OGUID+494),
+(51, @OGUID+495),
+(51, @OGUID+496),
+(51, @OGUID+497),
+(51, @OGUID+498),
+(51, @OGUID+499),
+(51, @OGUID+500),
+(51, @OGUID+501),
+(51, @OGUID+502),
+(51, @OGUID+503),
+(51, @OGUID+504),
+(51, @OGUID+505),
+(51, @OGUID+506),
+(51, @OGUID+507),
+(51, @OGUID+508),
+(51, @OGUID+509),
+(51, @OGUID+510),
+(51, @OGUID+511),
+(51, @OGUID+512),
+(51, @OGUID+513),
+(51, @OGUID+514),
+(51, @OGUID+515),
+(51, @OGUID+516),
+(51, @OGUID+517),
+(51, @OGUID+518),
+(51, @OGUID+519),
+(51, @OGUID+520),
+(51, @OGUID+521),
+(51, @OGUID+522),
+(51, @OGUID+523),
+(51, @OGUID+524),
+(51, @OGUID+525),
+(51, @OGUID+526),
+(51, @OGUID+527),
+(51, @OGUID+528),
+(51, @OGUID+529),
+(51, @OGUID+530),
+(51, @OGUID+531),
+(51, @OGUID+532),
+(51, @OGUID+533),
+(51, @OGUID+534),
+(51, @OGUID+535),
+(51, @OGUID+536),
+(51, @OGUID+537),
+(51, @OGUID+538),
+(51, @OGUID+539),
+(51, @OGUID+540),
+(51, @OGUID+541),
+(51, @OGUID+542),
+(51, @OGUID+543),
+(51, @OGUID+544),
+(51, @OGUID+545),
+(51, @OGUID+546),
+(51, @OGUID+547),
+(51, @OGUID+548),
+(51, @OGUID+549),
+(51, @OGUID+550),
+(51, @OGUID+551),
+(51, @OGUID+552),
+(51, @OGUID+553),
+(51, @OGUID+554),
+(51, @OGUID+555),
+(51, @OGUID+556),
+(51, @OGUID+557),
+(51, @OGUID+558),
+(51, @OGUID+559),
+(51, @OGUID+560),
+(51, @OGUID+561),
+(51, @OGUID+562),
+(51, @OGUID+563),
+(51, @OGUID+564),
+(51, @OGUID+565),
+(51, @OGUID+566);
+
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (34478,34481,35248,35247,35249,34435,35250,46894,46908,34479,35246,34484,35259,35258,35261,35260,35243,34483,35244,34476,34477,35251,35253,46891,46901,34482,35254,35256,34480,35252);
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(34435, 0, 0, 65536, 1, 10, '33900 30628'),
+(34476, 0, 0, 65536, 1, 10, '33900 30628'),
+(34477, 0, 0, 65536, 1, 10, '33900 30628'),
+(34478, 0, 0, 65536, 1, 10, '33900 30628'),
+(34479, 0, 0, 65536, 1, 10, '33900 30628'),
+(34480, 0, 0, 65536, 1, 10, '33900 30628'),
+(34481, 0, 0, 65536, 1, 10, '33900 30628'),
+(34482, 0, 0, 65536, 1, 10, '33900 30628'),
+(34483, 0, 0, 65536, 1, 10, '33900 30628'),
+(34484, 0, 0, 65536, 1, 10, '33900 30628'),
+(35243, 0, 0, 65536, 1, 10, '33900 30628'),
+(35244, 0, 0, 65536, 1, 10, '33900 30628'),
+(35246, 0, 0, 65536, 1, 10, '33900 30628'),
+(35247, 0, 0, 65536, 1, 10, '33900 30628'),
+(35248, 0, 0, 65536, 1, 10, '33900 30628'),
+(35249, 0, 0, 65536, 1, 10, '33900 30628'),
+(35250, 0, 0, 65536, 1, 10, '33900 30628'),
+(35251, 0, 0, 65536, 1, 10, '33900 30628'),
+(35252, 0, 0, 65536, 1, 10, '33900 30628'),
+(35253, 0, 0, 65536, 1, 10, '33900 30628'),
+(35254, 0, 0, 65536, 1, 10, '33900 30628'),
+(35256, 0, 0, 65536, 1, 10, '33900 30628'),
+(35258, 0, 0, 65536, 1, 10, '33900 30628'),
+(35259, 0, 0, 65536, 1, 10, '33900 30628'),
+(35260, 0, 0, 65536, 1, 10, '33900 30628'),
+(35261, 0, 0, 65536, 1, 10, '33900 30628'),
+(46891, 0, 0, 65536, 1, 10, '33900 30628'),
+(46894, 0, 0, 65536, 1, 10, '33900 30628'),
+(46901, 0, 0, 65536, 1, 10, '33900 30628'),
+(46908, 0, 0, 65536, 1, 10, '33900 30628');
+
+
+
+DELETE FROM `creature` WHERE `id` IN (35252,34478,34481,35248,35247,35249,34435,35250,46894,46908,34479,35246,34484,35259,35258,35261,35260,35243,34483,35244,34476,34477,35251,35253,46891,46901,34482,35254,35256,34480,35252,34382,34383);
+
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+208;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 35260, 530, 1, 1, -1784.905, 4934.787, -22.47924, 3.543018, 120, 0, 0), -- 35260 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+1, 34483, 530, 1, 1, 9417.506, -6851.21, 15.09478, 3.420845, 120, 0, 0), -- 34483 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+2, 35254, 571, 1, 1, 5854.245, 762.4809, 641.1855, 3.316126, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+3, 35254, 571, 1, 1, 5847.708, 772.8854, 640.4623, 4.939282, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+4, 35254, 571, 1, 1, 5850.153, 769.9913, 640.8176, 3.106686, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+5, 35254, 571, 1, 1, 5854.563, 769.9375, 641.3104, 4.153883, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+6, 35256, 571, 1, 1, 5855.538, 766.5486, 641.5667, 3.787364, 120, 0, 0), -- 35256 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+7, 35254, 571, 1, 1, 5850.727, 774.9583, 640.5362, 4.590216, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+8, 35254, 571, 1, 1, 5860.416, 765.408, 640.8058, 4.066617, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+9, 35254, 571, 1, 1, 5858.051, 763.1406, 640.9708, 2.548181, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+10, 35254, 571, 1, 1, 5848.581, 770.5434, 640.6075, 5.445427, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+11, 35254, 571, 1, 1, 5856.316, 764, 641.2667, 6.038839, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+12, 34477, 1, 1, 1, 1186.83, -4472.387, 21.4995, 1.692969, 120, 0, 0), -- 34477 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+13, 35251, 1, 1, 1, 1170.448, -4461.51, 21.47427, 6.178465, 120, 0, 0), -- 35251 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+14, 35253, 1, 1, 1, 1170.01, -4458.33, 21.66283, 3.787364, 120, 0, 0), -- 35253 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+15, 35253, 1, 1, 1, 1181.797, -4458.684, 21.44614, 1.832596, 120, 0, 0), -- 35253 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+16, 46891, 1, 1, 1, 1190.11, -4463.77, 21.46103, 1.448623, 120, 0, 0), -- 46891 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+17, 35251, 1, 1, 1, 1185.262, -4465.974, 21.38922, 2.408554, 120, 0, 0), -- 35251 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+18, 46891, 1, 1, 1, 1181.56, -4467.9, 21.37133, 1.308997, 120, 0, 0), -- 46891 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+19, 46901, 1, 1, 1, 1172.99, -4465.95, 21.30243, 1.064651, 120, 0, 0), -- 46901 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+20, 35253, 1, 1, 1, 1175.844, -4458.79, 21.59825, 1.064651, 120, 0, 0), -- 35253 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+21, 34482, 1, 1, 1, 1178.863, -4471.87, 21.1731, 1.37881, 120, 0, 0), -- 34482 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+22, 35251, 1, 1, 1, 1186.759, -4462.249, 21.24036, 1.27409, 120, 0, 0), -- 35251 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+23, 35253, 1, 1, 1, 1189.15, -4468.89, 21.56683, 0.3665192, 120, 0, 0), -- 35253 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+24, 46891, 1, 1, 1, 1174, -4461.71, 21.47693, 0.5585054, 120, 0, 0), -- 46891 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+25, 35251, 1, 1, 1, 1172.793, -4455.809, 21.6835, 0.06981317, 120, 0, 0), -- 35251 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+26, 35251, 1, 1, 1, 1192.92, -4467.41, 21.63203, 3.228859, 120, 0, 0), -- 35251 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+27, 35244, 0, 1, 1, 1789.22, 213.6858, 59.97234, 4.18879, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+28, 35244, 0, 1, 1, 1786.802, 208.7118, 59.82407, 1.169371, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+29, 35244, 0, 1, 1, 1808.764, 215.559, 65.95557, 1.623156, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+30, 35244, 0, 1, 1, 1781.377, 257.1615, 59.5828, 4.590216, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+31, 35244, 0, 1, 1, 1779.712, 249.8559, 59.92548, 1.37881, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+32, 35244, 0, 1, 1, 1830.108, 221.4705, 60.79235, 2.635447, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+33, 35244, 0, 1, 1, 1823.608, 218.8819, 60.47596, 1.291544, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+34, 35244, 0, 1, 1, 1781.576, 230.7535, 59.88961, 5.864306, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+35, 35244, 0, 1, 1, 1824.793, 210.566, 60.20413, 0.2268928, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+36, 35244, 0, 1, 1, 1776.688, 227.5694, 59.85706, 0.05235988, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+37, 34476, 0, 1, 1, 1778.536, 218.2413, 59.76785, 1.082104, 120, 0, 0), -- 34476 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+38, 35244, 0, 1, 1, 1802.547, 215.5625, 65.95557, 1.658063, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+39, 35244, 0, 1, 1, 1831.293, 213.1545, 60.45892, 3.647738, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+41, 35244, 0, 1, 1, 1825.67, 249.7917, 60.12626, 0.4886922, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+42, 35244, 0, 1, 1, 1825.273, 257.4097, 59.95353, 1.937315, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+43, 35244, 0, 1, 1, 1820.868, 261.9496, 60.0683, 0.1047198, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+44, 35244, 0, 1, 1, 1780.986, 264.3229, 59.71765, 5.358161, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+45, 35244, 0, 1, 1, 1826.116, 263.0382, 59.77779, 3.420845, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+46, 35244, 0, 1, 1, 1835.368, 257.9601, 59.87485, 4.049164, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+47, 35244, 0, 1, 1, 1833.79, 247.5174, 59.92534, 2.024582, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+48, 51384, 0, 1, 1, 1753.352, 220.6099, -46.90949, 1.361957, 120, 0, 0), -- 51384 (Area: 0) (Auras: 18950 - 18950)
+(@CGUID+49, 35243, 530, 1, 1, 9411.27, -6832.328, 16.75128, 3.228859, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+50, 35243, 530, 1, 1, 9409.371, -6860.707, 14.82494, 1.64061, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+51, 35243, 530, 1, 1, 9406.403, -6845.608, 16.06168, 3.996804, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+52, 35243, 530, 1, 1, 9410.404, -6856.34, 14.88649, 4.049164, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+53, 35243, 530, 1, 1, 9421.559, -6836.083, 15.5401, 3.246312, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+54, 35243, 530, 1, 1, 9407.637, -6826.667, 17.45139, 4.45059, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+55, 35243, 530, 1, 1, 9417.469, -6832.569, 16.11979, 4.08407, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+56, 35243, 530, 1, 1, 9406.13, -6857.922, 15.11687, 0.2268928, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+57, 35243, 530, 1, 1, 9403.035, -6833.925, 16.70704, 0.541052, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+58, 35243, 530, 1, 1, 9417.379, -6840.188, 15.81599, 2.129302, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+59, 35243, 530, 1, 1, 9403.671, -6849.658, 15.91331, 1.169371, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+60, 35259, 530, 1, 1, -1792, 4913.055, -21.39983, 2.007129, 120, 0, 0), -- 35259 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+61, 35258, 530, 1, 1, -1781.512, 4932.918, -22.36957, 3.857178, 120, 0, 0), -- 35258 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+62, 35261, 530, 1, 1, -1801.12, 4913.882, -21.89487, 2.268928, 120, 0, 0), -- 35261 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+63, 35259, 530, 1, 1, -1794.462, 4911.293, -21.40075, 2.111848, 120, 0, 0), -- 35259 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+64, 35258, 530, 1, 1, -1834.521, 4926.977, -21.45312, 0.9773844, 120, 0, 0), -- 35258 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+65, 35259, 530, 1, 1, -1803.752, 4906.94, -21.3884, 2.356194, 120, 0, 0), -- 35259 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+66, 35258, 530, 1, 1, -1837.724, 4927.685, -21.15295, 1.291544, 120, 0, 0), -- 35258 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+67, 35259, 530, 1, 1, -1803.531, 4911.097, -21.7488, 2.740167, 120, 0, 0), -- 35259 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+68, 35258, 530, 1, 1, -1785.264, 4938.565, -22.53468, 3.281219, 120, 0, 0), -- 35258 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+69, 35259, 530, 1, 1, -1815.917, 4913.81, -21.4253, 1.53589, 120, 0, 0), -- 35259 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+70, 35258, 530, 1, 1, -1828.839, 4923.352, -21.86371, 1.064651, 120, 0, 0), -- 35258 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+71, 35259, 530, 1, 1, -1812.276, 4911.762, -21.34076, 0.9075712, 120, 0, 0), -- 35259 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+72, 35258, 530, 1, 1, -1824.894, 4920.689, -21.83284, 1.012291, 120, 0, 0), -- 35258 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+73, 35259, 530, 1, 1, -1797.486, 4914.01, -21.70779, 1.500983, 120, 0, 0), -- 35259 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+74, 35258, 530, 1, 1, -1832.877, 4923.171, -21.4525, 1.134464, 120, 0, 0), -- 35258 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+75, 35246, 530, 1, 1, -4322.424, -12449.62, 16.97788, 6.265732, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900)
+(@CGUID+76, 35246, 530, 1, 1, -4322.7, -12456.54, 17.44095, 6.073746, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900)
+(@CGUID+77, 35246, 530, 1, 1, -4329.212, -12448.74, 17.27163, 0.5061455, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900)
+(@CGUID+78, 35246, 530, 1, 1, -4324.264, -12444.34, 17.27715, 4.39823, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900)
+(@CGUID+79, 35246, 530, 1, 1, -4320.297, -12438.93, 17.69792, 5.410521, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900)
+(@CGUID+80, 35246, 530, 1, 1, -4313.64, -12442.5, 17.29663, 4.537856, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900)
+(@CGUID+81, 35246, 530, 1, 1, -4314.906, -12430.29, 17.5585, 3.438299, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900)
+(@CGUID+82, 35246, 530, 1, 1, -4312.236, -12434.6, 17.15653, 3.316126, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900)
+(@CGUID+83, 34484, 530, 1, 1, -4306.76, -12437.7, 17.64093, 4.921828, 120, 0, 0), -- 34484 (Area: 3524) (Auras: 33900 - 33900)
+(@CGUID+84, 35246, 530, 1, 1, -4308.394, -12429.41, 17.04607, 4.206244, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900)
+(@CGUID+85, 35250, 1, 1, 1, 10060, 2132.4, 1329.743, 3.839724, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+86, 46894, 1, 1, 1, 10055.5, 2107.62, 1329.733, 0.5759587, 120, 0, 0), -- 46894 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+87, 35250, 1, 1, 1, 10061, 2110.63, 1329.733, 1.291544, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+88, 46908, 1, 1, 1, 10047.4, 2111.12, 1329.733, 2.548181, 120, 0, 0), -- 46908 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+89, 35250, 1, 1, 1, 10045.9, 2116.87, 1329.743, 3.909538, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+90, 35250, 1, 1, 1, 10067.1, 2129, 1329.743, 3.630285, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+91, 46894, 1, 1, 1, 10067.1, 2126.04, 1329.743, 2.548181, 120, 0, 0), -- 46894 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+92, 35250, 1, 1, 1, 10055.5, 2124, 1329.743, 1.27409, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+93, 35250, 1, 1, 1, 10065.3, 2103.28, 1330.633, 4.066617, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+94, 34479, 1, 1, 1, 10055.25, 2133.33, 1329.741, 3.159046, 120, 0, 0), -- 34479 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+95, 35250, 1, 1, 1, 10051.8, 2133.11, 1329.743, 3.490659, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+96, 35250, 1, 1, 1, 10060, 2126.34, 1329.743, 3.769911, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+97, 35250, 1, 1, 1, 10068.2, 2117.39, 1329.743, 1.832596, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+98, 35250, 1, 1, 1, 10059.1, 2114.84, 1329.743, 0.9250245, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+99, 46894, 1, 1, 1, 10061.7, 2118.54, 1329.743, 4.014257, 120, 0, 0), -- 46894 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+100, 35250, 1, 1, 1, 10051.5, 2114.09, 1329.733, 1.291544, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+101, 35250, 1, 1, 1, 10052.1, 2108.73, 1329.733, 1.37881, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+102, 35250, 1, 1, 1, 10055.7, 2118, 1329.743, 0.6632251, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+103, 46894, 1, 1, 1, 10057.3, 2127.85, 1329.743, 4.39823, 120, 0, 0), -- 46894 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+104, 35250, 1, 1, 1, 10067, 2123.4, 1329.743, 2.96706, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+105, 46894, 1, 1, 1, 10058.7, 2109.92, 1329.733, 3.822271, 120, 0, 0), -- 46894 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+106, 35250, 1, 1, 1, 10043.7, 2113.71, 1329.743, 1.27409, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+107, 46894, 1, 1, 1, 10063.9, 2133.63, 1329.743, 2.268928, 120, 0, 0), -- 46894 (Area: 0) (Auras: 33900 - 33900)
+(@CGUID+108, 35249, 0, 1, 1, -8396.5, 920.899, 98.41144, 0.4363323, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+109, 35249, 0, 1, 1, -8393.97, 922.12, 98.34634, 3.560472, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+110, 35249, 0, 1, 1, -8391.77, 936.267, 97.71254, 2.670354, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+111, 35249, 0, 1, 1, -8395.26, 916.083, 98.55763, 5.061455, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+112, 35249, 0, 1, 1, -8393.45, 932.299, 97.91984, 5.148721, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+113, 35249, 0, 1, 1, -8385.77, 957.957, 97.90134, 3.385939, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+114, 35249, 0, 1, 1, -8400.79, 936.984, 97.95234, 3.630285, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+115, 35249, 0, 1, 1, -8405.12, 915.2, 98.59753, 1.58825, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+116, 35249, 0, 1, 1, -8404.18, 935.061, 98.11253, 0.5061455, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+117, 35249, 0, 1, 1, -8408.69, 930.134, 99.98553, 2.687807, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+118, 35249, 0, 1, 1, -8413.39, 932.293, 99.63573, 5.846853, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+119, 35249, 0, 1, 1, -8381.4, 974.536, 97.69054, 3.752458, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+120, 35249, 0, 1, 1, -8383.96, 972.691, 96.25323, 0.5934119, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+121, 35249, 0, 1, 1, -8420.64, 925.221, 98.78454, 0.5235988, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+122, 35249, 0, 1, 1, -8410.33, 949.292, 98.27094, 2.199115, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+123, 35249, 0, 1, 1, -8417.88, 926.898, 99.42624, 3.647738, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+124, 35249, 0, 1, 1, -8414.98, 946.701, 98.17863, 5.72468, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+125, 35249, 0, 1, 1, -8381.91, 978.53, 96.13673, 1.500983, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+126, 35249, 0, 1, 1, -8422.26, 941.399, 98.49953, 4.590216, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+127, 35249, 0, 1, 1, -8422.86, 937.924, 99.70744, 1.37881, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+128, 35249, 0, 1, 1, -8379.62, 980.628, 96.13364, 3.385939, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+129, 35249, 0, 1, 1, -8384.54, 984.226, 97.20413, 3.996804, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+130, 35249, 0, 1, 1, -8383.9, 980.998, 96.39253, 5.811946, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+131, 35249, 0, 1, 1, -8426.92, 908.559, 98.36664, 4.049164, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+132, 35249, 0, 1, 1, -8408.73, 966.017, 98.29553, 3.996804, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+133, 35249, 0, 1, 1, -8391.48, 985.75, 96.29954, 3.961897, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+134, 35249, 0, 1, 1, -8433.02, 910.476, 102.1563, 4.834562, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+135, 35249, 0, 1, 1, -8412.02, 962.686, 97.83424, 0.7853982, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+136, 35249, 0, 1, 1, -8432.15, 905.196, 101.4733, 1.745329, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+137, 35249, 0, 1, 1, -8392.93, 984.479, 96.33114, 0.5759587, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+138, 35249, 0, 1, 1, -8428.48, 959.679, 98.62543, 3.246312, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+139, 35249, 0, 1, 1, -8409.61, 978.616, 97.45783, 5.410521, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+140, 35249, 0, 1, 1, -8397.85, 986.964, 97.22923, 2.251475, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+141, 35249, 0, 1, 1, -8419.83, 966.818, 98.29414, 2.199115, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+142, 1976, 0, 1, 1, -8436.111, 920.9022, 99.03729, 0.5961183, 120, 10, 1), -- 1976 (Area: 5314) (Auras: ) (possible waypoints or random movement)
+(@CGUID+143, 35249, 0, 1, 1, -8429.07, 944.83, 101.9763, 5.445427, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+144, 35249, 0, 1, 1, -8437.53, 916.356, 100.2913, 2.775074, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+145, 35249, 0, 1, 1, -8444.32, 907.783, 99.47324, 4.328416, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+146, 35249, 0, 1, 1, -8445.07, 904.75, 100.9043, 1.343904, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+147, 35249, 0, 1, 1, -8431.62, 959.427, 98.66714, 0.1745329, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+148, 35249, 0, 1, 1, -8442.05, 941.366, 98.49464, 2.792527, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+149, 35249, 0, 1, 1, -8453.25, 901.116, 99.80254, 3.281219, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+150, 35249, 0, 1, 1, -8447.63, 943.274, 98.89664, 5.77704, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+151, 35249, 0, 1, 1, -8452.36, 895.509, 99.83193, 2.548181, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+152, 35249, 0, 1, 1, -8449.54, 904.948, 99.66324, 5.131268, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+153, 35249, 0, 1, 1, -8456.92, 921.464, 98.79214, 4.852015, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+154, 35249, 0, 1, 1, -8461.88, 912.771, 98.82104, 3.001966, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+155, 35249, 0, 1, 1, -8466.56, 913.479, 98.60764, 6.108652, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+156, 35249, 0, 1, 1, -8457.18, 899.674, 99.79324, 0.3839724, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+157, 35249, 0, 1, 1, -8459.56, 917.681, 99.24693, 2.129302, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900)
+(@CGUID+158, 34478, 0, 1, 1, -5160.715, -882.7049, 507.359, 1.780236, 120, 0, 0), -- 34478 (Area: 809) (Auras: 33900 - 33900)
+(@CGUID+159, 34481, 0, 1, 1, -5166.082, -881.1268, 507.3906, 1.082104, 120, 0, 0), -- 34481 (Area: 809) (Auras: 33900 - 33900)
+(@CGUID+160, 35248, 0, 1, 1, -5162.436, -877.1771, 507.3536, 1.43117, 120, 0, 0), -- 35248 (Area: 809) (Auras: 33900 - 33900)
+(@CGUID+161, 35247, 0, 1, 1, -5153.846, -872.1893, 508.302, 2.775074, 120, 0, 0), -- 35247 (Area: 809) (Auras: 33900 - 33900)
+(@CGUID+162, 35248, 0, 1, 1, -5166.628, -874.4445, 507.213, 0.8377581, 120, 0, 0), -- 35248 (Area: 809) (Auras: 33900 - 33900)
+(@CGUID+163, 35248, 0, 1, 1, -5157.137, -875.7795, 507.7673, 2.076942, 120, 0, 0), -- 35248 (Area: 809) (Auras: 33900 - 33900)
+(@CGUID+164, 35247, 0, 1, 1, -5154.469, -866.9305, 507.9001, 3.420845, 120, 0, 0), -- 35247 (Area: 809) (Auras: 33900 - 33900)
+(@CGUID+165, 35248, 0, 1, 1, -5157.59, -864.2309, 507.5027, 3.996804, 120, 0, 0), -- 35248 (Area: 809) (Auras: 33900 - 33900)
+(@CGUID+166, 35248, 0, 1, 1, -5161.997, -863.6632, 507.2816, 4.834562, 120, 0, 0), -- 35248 (Area: 809) (Auras: 33900 - 33900)
+(@CGUID+167, 53568, 0, 1, 1, -5216.217, -797.8953, 418.7556, 6.064728, 120, 0, 0), -- 53568 (Area: 809) (Auras: 94357 - 94357)
+(@CGUID+168, 35247, 0, 1, 1, -5167.728, -870.4792, 506.7504, 0.2792527, 120, 0, 0), -- 35247 (Area: 809) (Auras: 33900 - 33900)
+(@CGUID+169, 35248, 0, 1, 1, -5165.799, -866.6875, 506.8996, 5.8294, 120, 0, 0), -- 35248 (Area: 809) (Auras: 33900 - 33900)
+(@CGUID+170, 34480, 1, 1, 1, -971.0174, -79.18056, 18.88194, 1.064651, 120, 0, 0), -- 34480 (Area: -1) (Auras: 33900 - 33900)
+(@CGUID+171, 35252, 1, 1, 1, -974.639, -84.059, 20.59403, 1.27409, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900)
+(@CGUID+172, 35252, 1, 1, 1, -988.5018, -70.1875, 22.69486, 6.178465, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900)
+(@CGUID+173, 35252, 1, 1, 1, -983.618, -74.5417, 20.65583, 0.3665192, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900)
+(@CGUID+174, 35252, 1, 1, 1, -984.4879, -82.56944, 21.32398, 1.291544, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900)
+(@CGUID+175, 35252, 1, 1, 1, -979.9114, -67.20834, 20.61612, 3.996804, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900)
+(@CGUID+176, 35252, 1, 1, 1, -982.0035, -65.58334, 21.96181, 0.4537856, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900)
+(@CGUID+177, 35252, 1, 1, 1, -986.094, -79.2986, 21.44523, 1.134464, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900)
+(@CGUID+178, 35252, 1, 1, 1, -988.1962, -76.15452, 22.06944, 1.832596, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900)
+(@CGUID+179, 35252, 1, 1, 1, -981.708, -76.1372, 20.18573, 4.066617, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900)
+(@CGUID+180, 34383, 571, 1, 1, 5852.198, 763.5121, 641.4907, 3.909538, 120, 0, 0), -- 34383 (Area: 4613)
+(@CGUID+181, 34383, 1, 1, 1, 1181.736, -4463.108, 21.3423, 1.22173, 120, 0, 0), -- 34383 (Area: 4982)
+(@CGUID+182, 34383, 0, 1, 1, 1803.745, 219.5972, 60.44122, 1.361357, 120, 0, 0), -- 34383 (Area: 1497)
+(@CGUID+183, 34383, 530, 1, 1, 9409.208, -6841.009, 16.17882, 2.513274, 120, 0, 0), -- 34383 (Area: 3482)
+(@CGUID+184, 34383, 530, 1, 1, -1792.271, 4921.308, -21.54488, 2.583087, 120, 0, 0), -- 34383 (Area: 0)
+(@CGUID+185, 34383, 530, 1, 1, -4314.365, -12451.16, 17.92535, 5.72468, 120, 0, 0), -- 34383 (Area: 3524)
+(@CGUID+186, 34383, 1, 1, 1, 10048.33, 2122.398, 1329.741, 3.141593, 120, 0, 0), -- 34383 (Area: 0)
+(@CGUID+187, 34383, 0, 1, 1, -5145.17, -856.0018, 508.7941, 0.9075712, 120, 0, 0), -- 34383 (Area: 809)
+(@CGUID+188, 34382, 571, 1, 1, 5850.049, 766.3073, 640.999, 4.468043, 120, 0, 0), -- 34382 (Area: 4613)
+(@CGUID+189, 34382, 1, 1, 1, 1179.814, -4461.457, 21.46875, 1.32645, 120, 0, 0), -- 34382 (Area: 4982)
+(@CGUID+190, 34382, 0, 1, 1, 1806.538, 219.4236, 60.46583, 1.658063, 120, 0, 0), -- 34382 (Area: 1497)
+(@CGUID+191, 34382, 530, 1, 1, 9409.198, -6837.913, 16.30556, 3.630285, 120, 0, 0), -- 34382 (Area: 3482)
+(@CGUID+192, 34382, 530, 1, 1, -1788.236, 4925.752, -21.64911, 2.460914, 120, 0, 0), -- 34382 (Area: 0)
+(@CGUID+193, 34382, 530, 1, 1, -4312.234, -12449.04, 17.73958, 5.654867, 120, 0, 0), -- 34382 (Area: 3524)
+(@CGUID+194, 34382, 1, 1, 1, 10047.92, 2119.156, 1329.741, 3.176499, 120, 0, 0), -- 34382 (Area: 0)
+(@CGUID+195, 34382, 0, 1, 1, -8295.12, 911.767, 97.92403, 3.211406, 120, 0, 0), -- 34382 (Area: 5346)
+(@CGUID+196, 34382, 0, 1, 1, -5147.535, -853.8264, 508.6631, 0.6981317, 120, 0, 0), -- 34382 (Area: 809)
+(@CGUID+197, 34383, 1, 1, 1, -977.6268, -74.53125, 19.17006, 0.2443461, 120, 0, 0), -- 34383 (Area: 5345)
+(@CGUID+198, 34382, 1, 1, 1, -978.0226, -72.64584, 19.29325, 0.4014257, 120, 0, 0); -- 34382 (Area: 5345)
+
+DELETE FROM `game_event_creature` WHERE `eventEntry`=51;
+INSERT INTO `game_event_creature` (`eventEntry`, `guid`) VALUES
+(51, @CGUID+0),
+(51, @CGUID+1),
+(51, @CGUID+2),
+(51, @CGUID+3),
+(51, @CGUID+4),
+(51, @CGUID+5),
+(51, @CGUID+6),
+(51, @CGUID+7),
+(51, @CGUID+8),
+(51, @CGUID+9),
+(51, @CGUID+10),
+(51, @CGUID+11),
+(51, @CGUID+12),
+(51, @CGUID+13),
+(51, @CGUID+14),
+(51, @CGUID+15),
+(51, @CGUID+16),
+(51, @CGUID+17),
+(51, @CGUID+18),
+(51, @CGUID+19),
+(51, @CGUID+20),
+(51, @CGUID+21),
+(51, @CGUID+22),
+(51, @CGUID+23),
+(51, @CGUID+24),
+(51, @CGUID+25),
+(51, @CGUID+26),
+(51, @CGUID+27),
+(51, @CGUID+28),
+(51, @CGUID+29),
+(51, @CGUID+30),
+(51, @CGUID+31),
+(51, @CGUID+32),
+(51, @CGUID+33),
+(51, @CGUID+34),
+(51, @CGUID+35),
+(51, @CGUID+36),
+(51, @CGUID+37),
+(51, @CGUID+38),
+(51, @CGUID+39),
+(51, @CGUID+40),
+(51, @CGUID+41),
+(51, @CGUID+42),
+(51, @CGUID+43),
+(51, @CGUID+44),
+(51, @CGUID+45),
+(51, @CGUID+46),
+(51, @CGUID+47),
+(51, @CGUID+48),
+(51, @CGUID+49),
+(51, @CGUID+50),
+(51, @CGUID+51),
+(51, @CGUID+52),
+(51, @CGUID+53),
+(51, @CGUID+54),
+(51, @CGUID+55),
+(51, @CGUID+56),
+(51, @CGUID+57),
+(51, @CGUID+58),
+(51, @CGUID+59),
+(51, @CGUID+60),
+(51, @CGUID+61),
+(51, @CGUID+62),
+(51, @CGUID+63),
+(51, @CGUID+64),
+(51, @CGUID+65),
+(51, @CGUID+66),
+(51, @CGUID+67),
+(51, @CGUID+68),
+(51, @CGUID+69),
+(51, @CGUID+70),
+(51, @CGUID+71),
+(51, @CGUID+72),
+(51, @CGUID+73),
+(51, @CGUID+74),
+(51, @CGUID+75),
+(51, @CGUID+76),
+(51, @CGUID+77),
+(51, @CGUID+78),
+(51, @CGUID+79),
+(51, @CGUID+80),
+(51, @CGUID+81),
+(51, @CGUID+82),
+(51, @CGUID+83),
+(51, @CGUID+84),
+(51, @CGUID+85),
+(51, @CGUID+86),
+(51, @CGUID+87),
+(51, @CGUID+88),
+(51, @CGUID+89),
+(51, @CGUID+90),
+(51, @CGUID+91),
+(51, @CGUID+92),
+(51, @CGUID+93),
+(51, @CGUID+94),
+(51, @CGUID+95),
+(51, @CGUID+96),
+(51, @CGUID+97),
+(51, @CGUID+98),
+(51, @CGUID+99),
+(51, @CGUID+100),
+(51, @CGUID+101),
+(51, @CGUID+102),
+(51, @CGUID+103),
+(51, @CGUID+104),
+(51, @CGUID+105),
+(51, @CGUID+106),
+(51, @CGUID+107),
+(51, @CGUID+108),
+(51, @CGUID+109),
+(51, @CGUID+110),
+(51, @CGUID+111),
+(51, @CGUID+112),
+(51, @CGUID+113),
+(51, @CGUID+114),
+(51, @CGUID+115),
+(51, @CGUID+116),
+(51, @CGUID+117),
+(51, @CGUID+118),
+(51, @CGUID+119),
+(51, @CGUID+120),
+(51, @CGUID+121),
+(51, @CGUID+122),
+(51, @CGUID+123),
+(51, @CGUID+124),
+(51, @CGUID+125),
+(51, @CGUID+126),
+(51, @CGUID+127),
+(51, @CGUID+128),
+(51, @CGUID+129),
+(51, @CGUID+130),
+(51, @CGUID+131),
+(51, @CGUID+132),
+(51, @CGUID+133),
+(51, @CGUID+134),
+(51, @CGUID+135),
+(51, @CGUID+136),
+(51, @CGUID+137),
+(51, @CGUID+138),
+(51, @CGUID+139),
+(51, @CGUID+140),
+(51, @CGUID+141),
+(51, @CGUID+142),
+(51, @CGUID+143),
+(51, @CGUID+144),
+(51, @CGUID+145),
+(51, @CGUID+146),
+(51, @CGUID+147),
+(51, @CGUID+148),
+(51, @CGUID+149),
+(51, @CGUID+150),
+(51, @CGUID+151),
+(51, @CGUID+152),
+(51, @CGUID+153),
+(51, @CGUID+154),
+(51, @CGUID+155),
+(51, @CGUID+156),
+(51, @CGUID+157),
+(51, @CGUID+158),
+(51, @CGUID+159),
+(51, @CGUID+160),
+(51, @CGUID+161),
+(51, @CGUID+162),
+(51, @CGUID+163),
+(51, @CGUID+164),
+(51, @CGUID+165),
+(51, @CGUID+166),
+(51, @CGUID+167),
+(51, @CGUID+168),
+(51, @CGUID+169),
+(51, @CGUID+170),
+(51, @CGUID+171),
+(51, @CGUID+172),
+(51, @CGUID+173),
+(51, @CGUID+174),
+(51, @CGUID+175),
+(51, @CGUID+176),
+(51, @CGUID+177),
+(51, @CGUID+178),
+(51, @CGUID+179),
+(51, @CGUID+180),
+(51, @CGUID+181),
+(51, @CGUID+182),
+(51, @CGUID+183),
+(51, @CGUID+184),
+(51, @CGUID+185),
+(51, @CGUID+186),
+(51, @CGUID+187),
+(51, @CGUID+188),
+(51, @CGUID+189),
+(51, @CGUID+190),
+(51, @CGUID+191),
+(51, @CGUID+192),
+(51, @CGUID+193),
+(51, @CGUID+194),
+(51, @CGUID+195),
+(51, @CGUID+196),
+(51, @CGUID+197),
+(51, @CGUID+198);
diff --git a/sql/updates/world/2015_11_08_01_world.sql b/sql/updates/world/2015_11_08_01_world.sql
new file mode 100644
index 00000000000..f5642f73af4
--- /dev/null
+++ b/sql/updates/world/2015_11_08_01_world.sql
@@ -0,0 +1,154 @@
+SET @CGUID := 86984;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`IN(20102,18927,19177,19169,19175,19171,19172,19176,19178,19173,19148) AND `source_type`=0 AND `id` =12;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(19148,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Dwarf Commoner - On Gossip Hello - Send Gossip'),
+(19171,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Dreanei Commoner - On Gossip Hello - Send Gossip'),
+(20102,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Goblin Commoner - On Gossip Hello - Send Gossip'),
+(19172,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Gnome Commoner - On Gossip Hello - Send Gossip'),
+(19173,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Night Elf Commoner - On Gossip Hello - Send Gossip'),
+(18927,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Human Commoner - On Gossip Hello - Send Gossip'),
+(19175,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Orc Commoner - On Gossip Hello - Send Gossip'),
+(19176,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Tauren Commoner - On Gossip Hello - Send Gossip'),
+(19177,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Troll Commoner - On Gossip Hello - Send Gossip'),
+(19178,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Forsaken Commoner - On Gossip Hello - Send Gossip'),
+(19169,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Blood Elf Commoner - On Gossip Hello - Send Gossip');
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` in(20102,18927,19177,19169,19175,19171,19172,19176,19178,19173,19148) AND `SourceGroup`=13;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(22, 13, 19148, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'),
+(22, 13, 20102, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'),
+(22, 13, 18927, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'),
+(22, 13, 19171, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'),
+(22, 13, 19172, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'),
+(22, 13, 19173, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'),
+(22, 13, 19175, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'),
+(22, 13, 19176, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'),
+(22, 13, 19177, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'),
+(22, 13, 19178, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'),
+(22, 13, 19169, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active');
+
+UPDATE `smart_scripts` SET `target_type`=7 WHERE `entryorguid` IN(20102,18927,19177,19169,19175,19171,19172,19176,19178,19173,19148) AND `source_type`=0 AND `id`=11;
+
+
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+37;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 18927, 571, 1, 1, 5740.709, 686.1215, 643.8965, 3.822271, 120, 0, 0), -- 18927 (Area: 4395) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+1, 18927, 571, 1, 1, 5739.358, 684.6215, 644.1913, 0.8726646, 120, 0, 0), -- 18927 (Area: 4395) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+2, 20102, 571, 1, 1, 5777.649, 728.8993, 618.6356, 0.1396263, 120, 0, 0), -- 20102 (Area: 4739) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+3, 20102, 571, 1, 1, 5779.502, 729.0729, 618.6434, 3.228859, 120, 0, 0), -- 20102 (Area: 4739) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+4, 19169, 571, 1, 1, 5942.946, 629.2344, 650.668, 1.570796, 120, 0, 0), -- 19169 (Area: 4613) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+5, 19169, 571, 1, 1, 5943.168, 630.8941, 650.6661, 4.904375, 120, 0, 0), -- 19169 (Area: 4613) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+6, 19169, 571, 1, 1, 5899.039, 532.7656, 640.9794, 4.904375, 120, 0, 0), -- 19169 (Area: 4613) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+7, 19169, 571, 1, 1, 5899.096, 530.8976, 641.0562, 1.675516, 120, 0, 0), -- 19169 (Area: 4613) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+8, 18927, 571, 1, 1, 5664.31, 666.2726, 652.064, 1.396263, 120, 0, 0), -- 18927 (Area: 4613) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+9, 18927, 571, 1, 1, 5664.366, 668.0469, 652.0507, 4.904375, 120, 0, 0), -- 18927 (Area: 4613) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+10, 19177, 1, 1, 1, 1773.523, -4360.087, 102.4606, 1.291544, 120, 0, 0), -- 19177 (Area: 5166) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+11, 19177, 1, 1, 1, 1774.47, -4356.316, 102.4248, 4.485496, 120, 0, 0), -- 19177 (Area: 5166) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+12, 19175, 1, 1, 1, 1614.998, -4402.952, 15.43872, 0.1570796, 120, 0, 0), -- 19175 (Area: 5170) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+13, 19175, 1, 1, 1, 1616.771, -4402.656, 15.60533, 3.333579, 120, 0, 0), -- 19175 (Area: 5170) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+14, 19178, 0, 1, 1, 1627.801, 224.57, -43.01935, 4.153883, 120, 0, 0), -- 19178 (Area: 1497) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+15, 19178, 0, 1, 1, 1626.697, 222.6995, -43.01934, 1.012291, 120, 0, 0), -- 19178 (Area: 1497) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+16, 19178, 0, 1, 1, 1574.551, 267.5832, -43.01934, 3.769911, 120, 0, 0), -- 19178 (Area: 1497) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+17, 19178, 0, 1, 1, 1573.045, 265.9552, -43.01934, 0.5934119, 120, 0, 0), -- 19178 (Area: 1497) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+18, 19169, 530, 1, 1, 9687.96, -7346.092, 11.95602, 1.500983, 120, 0, 0), -- 19169 (Area: 3487) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+19, 19169, 530, 1, 1, 9689.333, -7345.386, 11.91436, 4.206244, 120, 0, 0), -- 19169 (Area: 3487) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+20, 19169, 530, 1, 1, 9374.669, -7155.088, 9.336748, 4.956735, 120, 0, 0), -- 19169 (Area: 0) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+21, 19169, 530, 1, 1, 9375.072, -7157.061, 9.255877, 1.605703, 120, 0, 0), -- 19169 (Area: 0) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+22, 20102, 530, 1, 1, -1917.814, 5441.85, -12.34484, 2.356194, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+23, 20102, 530, 1, 1, -1920.168, 5443.518, -12.34484, 5.864306, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+24, 20102, 530, 1, 1, -1875.934, 5376.202, -12.34478, 0.8203048, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+25, 20102, 530, 1, 1, -1875.055, 5378.035, -12.34478, 4.363323, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+26, 20102, 530, 1, 1, -1809.925, 5418.637, -12.34485, 5.550147, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+27, 20102, 530, 1, 1, -1808.356, 5417.01, -12.34484, 2.321288, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+28, 20102, 530, 1, 1, -1818.988, 5305.674, -12.34481, 4.031711, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+29, 20102, 530, 1, 1, -1821.118, 5303.345, -12.34481, 0.7679449, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+30, 19171, 530, 1, 1, -4270.058, -11333.09, 5.575455, 4.677482, 120, 0, 0), -- 19171 (Area: 3479) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+31, 19171, 530, 1, 1, -4269.713, -11336.51, 5.809308, 1.692969, 120, 0, 0), -- 19171 (Area: 3479) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+32, 19173, 1, 1, 1, 9922.972, 2498.76, 1317.861, 2.443461, 120, 0, 0), -- 19173 (Area: 0) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+33, 19173, 1, 1, 1, 9921.564, 2499.585, 1317.771, 5.61996, 120, 0, 0), -- 19173 (Area: 0) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+34, 18927, 0, 1, 1, -8366.161, 615.2257, 95.35417, 2.635447, 120, 0, 0), -- 18927 (Area: 5314) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+35, 18927, 0, 1, 1, -8368.196, 616.2344, 95.25559, 5.846853, 120, 0, 0), -- 18927 (Area: 5314) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+36, 19148, 0, 1, 1, -4900.874, -957.3143, 501.5414, 4.171337, 120, 0, 0), -- 19148 (Area: 5719) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+(@CGUID+37, 19148, 0, 1, 1, -4901.802, -958.9554, 501.5429, 1.012291, 120, 0, 0); -- 19148 (Area: 5719) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208)
+
+DELETE FROM `game_event_creature` WHERE `eventEntry`=51 AND `guid` BETWEEN @CGUID+0 AND @CGUID+37 ;
+INSERT INTO `game_event_creature` (`eventEntry`, `guid`) VALUES
+(51, @CGUID+0),
+(51, @CGUID+1),
+(51, @CGUID+2),
+(51, @CGUID+3),
+(51, @CGUID+4),
+(51, @CGUID+5),
+(51, @CGUID+6),
+(51, @CGUID+7),
+(51, @CGUID+8),
+(51, @CGUID+9),
+(51, @CGUID+10),
+(51, @CGUID+11),
+(51, @CGUID+12),
+(51, @CGUID+13),
+(51, @CGUID+14),
+(51, @CGUID+15),
+(51, @CGUID+16),
+(51, @CGUID+17),
+(51, @CGUID+18),
+(51, @CGUID+19),
+(51, @CGUID+20),
+(51, @CGUID+21),
+(51, @CGUID+22),
+(51, @CGUID+23),
+(51, @CGUID+24),
+(51, @CGUID+25),
+(51, @CGUID+26),
+(51, @CGUID+27),
+(51, @CGUID+28),
+(51, @CGUID+29),
+(51, @CGUID+30),
+(51, @CGUID+31),
+(51, @CGUID+32),
+(51, @CGUID+33),
+(51, @CGUID+34),
+(51, @CGUID+35),
+(51, @CGUID+36),
+(51, @CGUID+37);
+
+DELETE FROM `creature_addon` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+37;
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(@CGUID+0, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+1, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+2, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+3, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+4, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+5, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+6, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+7, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+8, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+9, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+10, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+11, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+12, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+13, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+14, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+15, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+16, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+17, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+18, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+19, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+20, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+21, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+22, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+23, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+24, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+25, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+26, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+27, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+28, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+29, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+30, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+31, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+32, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+33, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+34, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+35, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+36, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'),
+(@CGUID+37, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208');
diff --git a/sql/updates/world/2015_11_09_00_world.sql b/sql/updates/world/2015_11_09_00_world.sql
new file mode 100644
index 00000000000..6fd5dec39b7
--- /dev/null
+++ b/sql/updates/world/2015_11_09_00_world.sql
@@ -0,0 +1,6 @@
+--
+SET @obj := 191840;
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@obj;
+DELETE FROM `smart_scripts` WHERE `source_type`=1 AND `entryorguid`=@obj;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@obj,1,0,0,70,0,100,1,2,0,0,0,41,500,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Plagued Proto-Drake Egg - In GO_STATE_CHANGED - despawn');
diff --git a/sql/updates/world/2015_11_09_01_world.sql b/sql/updates/world/2015_11_09_01_world.sql
new file mode 100644
index 00000000000..e9360cf8963
--- /dev/null
+++ b/sql/updates/world/2015_11_09_01_world.sql
@@ -0,0 +1,5 @@
+--
+UPDATE `gossip_menu_option` SET `option_text`="What's on the auction house today?", `OptionBroadcastTextID`=35877 WHERE `menu_id`=10656 AND id=0;
+
+UPDATE `conditions` SET `ConditionTypeOrReference`=17, `ConditionValue1`=2796, `comment`="Only allow players who have the achievement Brew of the Month to access vendor" WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9549 AND `ElseGroup`=0;
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9549 AND `ElseGroup`=2;
diff --git a/sql/updates/world/2015_11_09_02_world335.sql b/sql/updates/world/2015_11_09_02_world335.sql
new file mode 100644
index 00000000000..84c0fd423ad
--- /dev/null
+++ b/sql/updates/world/2015_11_09_02_world335.sql
@@ -0,0 +1,7 @@
+DELETE FROM `creature_template_addon` WHERE `entry` in(46891,46894,46901,46908);
+
+DELETE FROM `creature` WHERE `guid` in(144891,144867,144862,144861,144859,144929,144931,144934,144942,144946,144948,144950,145010);
+
+DELETE FROM `game_event_creature` WHERE `guid` in(144891,144867,144862,144861,144859,144929,144931,144934,144942,144946,144948,144950,145010);
+
+DELETE FROM `game_event_gameobject` WHERE `guid` in (78509,78510,78511,78655,78656,78657,78658,78659,78660,78661,78662,78663,78664,78665,78666,78667,78735,78736,78737,78738,78739,78740,78741,78742,78743,78744,78745,78746,78747,78748,78749,78750,78751,78752,78752,78753,78754);
diff --git a/sql/updates/world/2015_11_10_00_world.sql b/sql/updates/world/2015_11_10_00_world.sql
new file mode 100644
index 00000000000..6e969f288f1
--- /dev/null
+++ b/sql/updates/world/2015_11_10_00_world.sql
@@ -0,0 +1,24 @@
+--
+DELETE FROM `creature_text` WHERE `entry` = 33686;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextId`) VALUES
+(33686, 0, 0, 'I was constructed to serve as a repository for essential information regarding this complex. My primary functions include communicating the status of the frontal defense systems and assessing the status of the entity that this complex was built to imprison.', 12, 0, 0, 0, 0, 0, 'Norgannon SAY_EVENT_1', 33703),
+(33686, 1, 0, 'Access to the interior of the complex is currently restricted. Primary defensive emplacements are active. Secondary systems are currently non-active.', 12, 0, 0, 0, 0, 0, 'Norgannon SAY_EVENT_2', 33705),
+(33686, 2, 0, 'Compromise of complex detected, security override enabled - query permitted.', 12, 0, 0, 0, 0, 0, 'Norgannon SAY_EVENT_3', 33707),
+(33686, 3, 0, 'Primary defensive emplacements consist of iron constructs and Storm Beacons, which will generate additional constructs as necessary. Secondary systems consist of orbital defense emplacements.', 12, 0, 0, 0, 0, 0, 'Norgannon SAY_EVENT_4', 33712),
+(33686, 4, 0, 'Entity designate: Yogg-Saron. Security has been compromised. Prison operational status unknown. Unable to contact Watchers for notification purposes.', 12, 0, 0, 0, 0, 0, 'Norgannon SAY_EVENT_5', 33711);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`IN(3370100) 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
+(3370100, 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, 'High Explorer Dellorah - Script - Say Line 0'),
+(3370100, 9, 1, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 33686, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 0 (Lore Keeper of Norgannon)'),
+(3370100, 9, 2, 0, 0, 0, 100, 0, 13000, 13000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 1'),
+(3370100, 9, 3, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 33686, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 1 (Lore Keeper of Norgannon)'),
+(3370100, 9, 4, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 2'),
+(3370100, 9, 5, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 33686, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 2 (Lore Keeper of Norgannon)'),
+(3370100, 9, 6, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 19, 33686, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 3 (Lore Keeper of Norgannon)'),
+(3370100, 9, 7, 0, 0, 0, 100, 0, 12000, 12000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 3'),
+(3370100, 9, 8, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 4'),
+(3370100, 9, 9, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 5'),
+(3370100, 9, 10, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 33696, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Set Data to Archmage Rhydian'),
+(3370100, 9, 11, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 19, 33686 , 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 4 (Lore Keeper of Norgannon)'),
+(3370100, 9, 12, 0, 0, 0, 100, 0, 13000, 13000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 6');
diff --git a/sql/updates/world/2015_11_10_01_world.sql b/sql/updates/world/2015_11_10_01_world.sql
new file mode 100644
index 00000000000..fe9c0b1b8e2
--- /dev/null
+++ b/sql/updates/world/2015_11_10_01_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `game_event_creature` WHERE `guid`= 144883;
diff --git a/sql/updates/world/2015_11_10_02_world.sql b/sql/updates/world/2015_11_10_02_world.sql
new file mode 100644
index 00000000000..8ff255defa4
--- /dev/null
+++ b/sql/updates/world/2015_11_10_02_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `gameobject_template` SET `faction`=1375, `flags`=32 WHERE `entry` IN (184597, 184596);
diff --git a/sql/updates/world/2015_11_11_00_world.sql b/sql/updates/world/2015_11_11_00_world.sql
new file mode 100644
index 00000000000..07393641f3f
--- /dev/null
+++ b/sql/updates/world/2015_11_11_00_world.sql
@@ -0,0 +1,6 @@
+SET @OGUID:=6354;
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+2;
+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, 185454, 571, 1, 1, 5491.154, -2652.184, 303.9539, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 185454 (Area: 4275)
+(@OGUID+1, 185456, 571, 1, 1, 3393.345, -2801.472, 211.3246, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 185456 (Area: 0)
+(@OGUID+2, 185434, 571, 1, 1, 5527.56, -2646.927, 303.9539, 2.600535, 0, 0, 0, 1, 120, 255, 1); -- 185434 (Area: 4275)
diff --git a/sql/updates/world/2015_11_11_01_world.sql b/sql/updates/world/2015_11_11_01_world.sql
new file mode 100644
index 00000000000..3c1ce85ec17
--- /dev/null
+++ b/sql/updates/world/2015_11_11_01_world.sql
@@ -0,0 +1,2479 @@
+SET @OGUID:=81188;
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+2471;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@OGUID+0001,180415, 571, 1, 1, 5231.531, -1307.568, 242.9937, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0002,180415, 571, 1, 1, 5231.807, -1317.45, 242.3508, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0003,180415, 571, 1, 1, 5232.045, -1311.97, 242.4411, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0004,180415, 571, 1, 1, 5228.543, -1303.112, 242.7879, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0005,180415, 571, 1, 1, 5223.873, -1297.311, 242.7593, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0006,180415, 571, 1, 1, 5219.208, -1294.684, 243.2743, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0007,180415, 571, 1, 1, 5219.888, -1333.076, 242.3786, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0008,180415, 571, 1, 1, 5214.489, -1333.5, 242.7952, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0009,180415, 571, 1, 1, 5200.362, -1331.64, 243.263, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0010,180415, 571, 1, 1, 5205.63, -1333.422, 243.3845, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0011,180415, 571, 1, 1, 5174.615, -2200.075, 237.0793, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0012,180415, 571, 1, 1, 5181.025, -2200.378, 238.9339, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0013,180415, 571, 1, 1, 5147.62, -2198.052, 237.614, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0014,180415, 571, 1, 1, 5179.311, -2200.378, 238.4566, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0015,180415, 571, 1, 1, 5147.989, -2198.857, 237.614, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0016,180415, 571, 1, 1, 5157.23, -2201.726, 237.5309, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0017,180415, 571, 1, 1, 5177.918, -2200.155, 237.9545, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0018,180415, 571, 1, 1, 5176.376, -2200.125, 237.5385, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0019,180415, 571, 1, 1, 5137.146, -2201.73, 237.8019, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0020,180415, 571, 1, 1, 5147.455, -2202.927, 237.0062, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0021,180415, 571, 1, 1, 5150.261, -2211.397, 238.8011, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0022,180415, 571, 1, 1, 5134.615, -2201.333, 238.8165, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0023,180415, 571, 1, 1, 5134.096, -2200.798, 238.8165, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0024,180415, 571, 1, 1, 5174.395, -2217.037, 237.1849, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0025,180415, 571, 1, 1, 5181.015, -2217.125, 238.9904, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0026,180415, 571, 1, 1, 5179.321, -2217.104, 238.5324, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0027,180415, 571, 1, 1, 5177.742, -2217.072, 237.9756, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0028,180415, 571, 1, 1, 5141.178, -2211.442, 238.1585, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0029,180415, 571, 1, 1, 5140.784, -2211.82, 238.1585, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0030,180415, 571, 1, 1, 5176.154, -2217.055, 237.5818, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0031,180415, 571, 1, 1, 5377.697, -2612.275, 305.4919, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0032,180415, 571, 1, 1, 5378.776, -2637.334, 304.966, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0033,180415, 571, 1, 1, 5446.666, -2635.141, 306.7401, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0034,180415, 571, 1, 1, 5443.241, -2628.945, 306.7371, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0035,180415, 571, 1, 1, 5444.132, -2632.507, 306.7371, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0036,180415, 571, 1, 1, 5446.891, -2622.866, 306.733, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0037,180415, 571, 1, 1, 5450.479, -2621.981, 306.7277, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0038,180415, 571, 1, 1, 5453.979, -2622.99, 306.5936, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0039,180415, 571, 1, 1, 5450.222, -2636.167, 306.739, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0040,180415, 571, 1, 1, 5444.251, -2625.413, 306.7368, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0041,180415, 571, 1, 1, 5453.774, -2635.269, 306.7326, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0042,180415, 571, 1, 1, 5456.549, -2625.604, 306.6074, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0043,180415, 571, 1, 1, 5456.413, -2632.691, 306.7231, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0044,180415, 571, 1, 1, 5457.469, -2629.154, 306.7375, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0045,180415, 571, 1, 1, 5528.001, -2665.6, 305.3742, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0046,180415, 571, 1, 1, 5500.662, -2662.148, 304.9659, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0047,180415, 571, 1, 1, 5763.567, -3552.541, 386.5541, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0048,180415, 571, 1, 1, 5768.135, -3553.175, 386.5514, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0049,180415, 571, 1, 1, 5750.391, -3570.385, 386.6082, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0050,180415, 571, 1, 1, 5776.281, -3557.164, 386.5179, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0051,180415, 571, 1, 1, 5762.846, -3557.929, 386.7904, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0052,180415, 571, 1, 1, 5775.812, -3560.629, 386.5844, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0053,180415, 571, 1, 1, 5757.775, -3561.603, 386.7299, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0054,180415, 571, 1, 1, 5776.619, -3565.798, 386.6816, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0055,180415, 571, 1, 1, 5776.687, -3569.371, 386.6979, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0056,180415, 571, 1, 1, 5773.405, -3555.642, 386.5388, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0057,180415, 571, 1, 1, 5769.636, -3555.544, 386.6231, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0058,180415, 571, 1, 1, 5752.563, -3565.215, 386.6399, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0059,180415, 571, 1, 1, 5775.966, -3574.389, 387.2715, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0060,180415, 571, 1, 1, 5760.6, -3586.51, 386.5219, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0061,180415, 571, 1, 1, 5748.784, -3573.642, 386.5444, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0062,180415, 571, 1, 1, 5765.48, -3584.281, 386.6219, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0063,180415, 571, 1, 1, 5755.499, -3578.478, 386.6624, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0064,180415, 571, 1, 1, 5768.435, -3581.585, 386.7327, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0065,180415, 571, 1, 1, 5772.202, -3578.392, 386.7462, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0066,180415, 571, 1, 1, 5759.083, -3583, 386.592, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0067,180415, 571, 1, 1, 3873.8, -4541.213, 210.1521, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0068,180415, 571, 1, 1, 3871.856, -4548.686, 211.1932, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0069,180415, 571, 1, 1, 3873.244, -4548.734, 211.219, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0070,180415, 571, 1, 1, 3862.183, -4548.674, 211.6033, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0071,180415, 571, 1, 1, 3865.728, -4534.643, 211.7069, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0072,180415, 571, 1, 1, 3880.78, -4510.24, 218.4157, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0073,180415, 571, 1, 1, 3833.083, -4531.847, 213.2785, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0074,180415, 571, 1, 1, 3861.911, -4519.634, 211.6107, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0075,180415, 571, 1, 1, 3863.615, -4516.346, 214.1784, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0076,180415, 571, 1, 1, 3830.969, -4499.772, 206.4349, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4211)
+(@OGUID+0077,180415, 571, 1, 1, 3443.286, -2823.03, 202.9982, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0078,180415, 571, 1, 1, 3407.794, -2841.943, 202.67, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0079,180415, 571, 1, 1, 3441.109, -2824.373, 202.9075, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0080,180415, 571, 1, 1, 3438.945, -2825.767, 203.0237, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0081,180415, 571, 1, 1, 3440.277, -2818.991, 203.0136, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0082,180415, 571, 1, 1, 3436.816, -2827.108, 202.9122, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0083,180415, 571, 1, 1, 3441.738, -2820.991, 202.9215, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0084,180415, 571, 1, 1, 3434.637, -2828.344, 202.9919, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0085,180415, 571, 1, 1, 3406.82, -2839.58, 202.8193, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0086,180415, 571, 1, 1, 3437.037, -2814.965, 202.884, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0087,180415, 571, 1, 1, 3438.661, -2816.929, 203.0817, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0088,180415, 571, 1, 1, 3405.275, -2832.076, 202.8215, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0089,180415, 571, 1, 1, 3405.745, -2834.549, 202.8814, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0090,180415, 571, 1, 1, 3406.287, -2837.063, 202.8049, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0091,180415, 571, 1, 1, 3407.031, -2802.89, 212.337, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0092,180415, 571, 1, 1, 3444.464, -2796.757, 203.2364, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0093,180415, 571, 1, 1, 3400.99, -2811.019, 202.6149, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0094,180415, 571, 1, 1, 3413.189, -2802.605, 212.3711, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0095,180415, 571, 1, 1, 3415.103, -2800.74, 202.2157, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0096,180415, 571, 1, 1, 3400.969, -2809.62, 202.0353, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0097,180415, 571, 1, 1, 3400.82, -2811.734, 202.7707, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0098,180415, 571, 1, 1, 3411.195, -2811.007, 202.0898, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0099,180415, 571, 1, 1, 3411.819, -2803.252, 212.5847, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0100,180415, 571, 1, 1, 3441.908, -2797.017, 203.1431, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0101,180415, 571, 1, 1, 3407.968, -2803.407, 213.5988, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0102,180415, 571, 1, 1, 3407.057, -2802.274, 212.4086, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0103,180415, 571, 1, 1, 3457.735, -2786.757, 202.8651, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0104,180415, 571, 1, 1, 3455.872, -2783.97, 202.7178, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0105,180415, 571, 1, 1, 3400.54, -2799.177, 201.4966, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0106,180415, 571, 1, 1, 3456.458, -2789.083, 203.3248, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0107,180415, 571, 1, 1, 3399.834, -2790.558, 212.2449, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0108,180415, 571, 1, 1, 3405.42, -2788.209, 203.0673, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0109,180415, 571, 1, 1, 3400.798, -2792.024, 212.3608, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0110,180415, 571, 1, 1, 3406.408, -2787.522, 203.0332, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0111,180415, 571, 1, 1, 3398.889, -2790.992, 213.4207, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0112,180415, 571, 1, 1, 3400.714, -2792.445, 212.2851, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0113,180415, 571, 1, 1, 3399.956, -2791.192, 212.2966, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0114,180415, 571, 1, 1, 3399.706, -2791.847, 212.3247, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0115,180415, 571, 1, 1, 3413.264, -2780.046, 202.9309, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0116,180415, 571, 1, 1, 3466.171, -2781.337, 202.358, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0117,180415, 571, 1, 1, 3458.188, -2776.3, 201.8077, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0118,180415, 571, 1, 1, 3472.556, -2782.05, 202.3065, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0119,180415, 571, 1, 1, 3404.212, -2786.731, 203.0216, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0120,180415, 571, 1, 1, 3408.607, -2785.961, 202.9851, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0121,180415, 571, 1, 1, 3475.129, -2782.253, 202.1459, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0122,180415, 571, 1, 1, 3412.443, -2783.161, 202.9973, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0123,180415, 571, 1, 1, 3403.424, -2785.687, 202.9964, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0124,180415, 571, 1, 1, 3407.591, -2786.707, 202.9976, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0125,180415, 571, 1, 1, 3470.033, -2781.84, 202.4652, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0126,180415, 571, 1, 1, 3411.324, -2783.891, 202.9264, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0127,180415, 571, 1, 1, 3397.692, -2789.662, 213.2649, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0128,180415, 571, 1, 1, 3402.704, -2784.6, 202.9906, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0129,180415, 571, 1, 1, 3462.118, -2779.648, 202.4681, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0130,180415, 571, 1, 1, 3414.508, -2781.62, 202.9946, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0131,180415, 571, 1, 1, 3413.529, -2782.306, 202.9957, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0132,180415, 571, 1, 1, 3413.155, -2777.403, 206.0491, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0133,180415, 571, 1, 1, 3419.603, -2772.811, 201.5641, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0134,180415, 571, 1, 1, 3425.753, -2769.791, 202.0575, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0135,180415, 571, 1, 1, 3456.768, -2774.179, 201.8534, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0136,180415, 571, 1, 1, 3411.746, -2778.068, 202.9529, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0137,180415, 571, 1, 1, 3406.269, -2781.944, 203.4021, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0138,180415, 571, 1, 1, 3425.471, -2770.199, 202.053, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0139,180415, 571, 1, 1, 3412.486, -2778.925, 202.9093, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0140,180415, 571, 1, 1, 3397.889, -2752.26, 201.1765, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0141,180415, 571, 1, 1, 3397.825, -2754.811, 201.1646, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0142,180415, 571, 1, 1, 3455.441, -2749.057, 200.8513, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0143,180415, 571, 1, 1, 3440.693, -2745.642, 200.7106, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0144,180415, 571, 1, 1, 3427.793, -2745.417, 200.9314, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0145,180415, 571, 1, 1, 3445.042, -2751.564, 199.4239, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0146,180415, 571, 1, 1, 3455.573, -2746.484, 200.8855, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0147,180415, 571, 1, 1, 3443.285, -2745.714, 200.7417, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0148,180415, 571, 1, 1, 3425.394, -2745.384, 200.891, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0149,180415, 571, 1, 1, 3445.895, -2745.695, 200.92, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0150,180415, 571, 1, 1, 3448.288, -2745.802, 200.9623, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0151,180415, 571, 1, 1, 3455.298, -2756.604, 201.076, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0152,180415, 571, 1, 1, 3455.351, -2754.038, 201.1146, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0153,180415, 571, 1, 1, 3422.8, -2745.42, 200.716, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0154,180415, 571, 1, 1, 3455.435, -2751.653, 201.1238, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0155,180415, 571, 1, 1, 3420.21, -2745.375, 200.6848, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0156,180415, 571, 1, 1, 3430.328, -2745.441, 200.9204, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0157,180415, 571, 1, 1, 3449.38, -2752.161, 199.3402, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0158,180415, 571, 1, 1, 3450.814, -2745.738, 201.1831, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0159,180415, 571, 1, 1, 3406.284, -2744.823, 200.6775, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0160,180415, 571, 1, 1, 3398.188, -2744.674, 200.9263, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0161,180415, 571, 1, 1, 3408.93, -2745.019, 200.7298, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0162,180415, 571, 1, 1, 3398.062, -2747.274, 200.9093, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0163,180415, 571, 1, 1, 3411.495, -2744.974, 200.9156, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0164,180415, 571, 1, 1, 3398.008, -2749.851, 201.1351, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0165,180415, 571, 1, 1, 3413.885, -2745.063, 200.9569, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0166,180415, 571, 1, 1, 3416.44, -2745.043, 200.9444, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0167,180415, 571, 1, 1, 3306.957, -2346.275, 114.2688, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0168,180415, 571, 1, 1, 3306.503, -2346.271, 114.2327, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0169,180415, 571, 1, 1, 3314.758, -2336.475, 113.8916, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0170,180415, 571, 1, 1, 3315.174, -2335.131, 112.3857, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0171,180415, 571, 1, 1, 3313.81, -2337.315, 112.3801, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0172,180415, 571, 1, 1, 3314.402, -2336.751, 113.8963, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0173,180415, 571, 1, 1, 3320.02, -2321.913, 114.3211, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0174,180415, 571, 1, 1, 3319.593, -2323.635, 112.2697, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0175,180415, 571, 1, 1, 3319.35, -2324.088, 112.2623, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0176,180415, 571, 1, 1, 3320.5, -2321.387, 114.3223, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0177,180415, 571, 1, 1, 3240.985, -2236.183, 117.2045, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0178,180415, 571, 1, 1, 3240.313, -2236.637, 117.1827, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0179,180415, 571, 1, 1, 3255.964, -2216.654, 117.3241, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0180,180415, 571, 1, 1, 3250.294, -2214.309, 117.3726, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0181,180415, 571, 1, 1, 3266.923, -2221.398, 117.2959, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0182,180415, 571, 1, 1, 3273.234, -2223.792, 117.3726, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0183,180415, 571, 1, 1, 3253.368, -2199.88, 117.029, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0184,180415, 571, 1, 1, 3280.633, -2211.489, 117.029, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0185,180415, 571, 1, 1, 3254.062, -2187.705, 118.7545, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0186,180415, 571, 1, 1, 3256.237, -2188.316, 118.4933, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0187,180415, 571, 1, 1, 1904.515, -6141.503, 19.07745, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000)
+(@OGUID+0188,180415, 571, 1, 1, 1904.164, -6141.786, 19.07746, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000)
+(@OGUID+0189,180415, 571, 1, 1, 730.0452, -2931.608, 7.921721, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0190,180415, 571, 1, 1, 726.9896, -2932.885, 7.942686, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0191,180415, 571, 1, 1, 732.6979, -2930.411, 7.924031, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0192,180415, 571, 1, 1, 732.0417, -2926.337, 7.959949, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0193,180415, 571, 1, 1, 728.4393, -2932.286, 7.933091, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0194,180415, 571, 1, 1, 725.5104, -2932.967, 8.092805, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0195,180415, 571, 1, 1, 731.3733, -2930.993, 7.925742, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0196,180415, 571, 1, 1, 697.434, -2944.288, -1.407539, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0197,180415, 571, 1, 1, 724.4271, -2926.127, 8.093702, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0198,180415, 571, 1, 1, 725.8629, -2925.865, 7.972515, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0199,180415, 571, 1, 1, 729.1215, -2926.113, 7.972516, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0200,180415, 571, 1, 1, 706.757, -2944.646, -1.334748, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0201,180415, 571, 1, 1, 727.4358, -2925.96, 7.973504, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0202,180415, 571, 1, 1, 730.5781, -2926.233, 7.968627, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0203,180415, 571, 1, 1, 694.3993, -2923.686, -1.305829, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0204,180415, 571, 1, 1, 704.0989, -2921.766, -1.33801, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+0205,180415, 571, 1, 1, 1421.866, -3274.431, 175.8965, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0206,180415, 571, 1, 1, 1437.179, -3255.236, 168.5082, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0207,180415, 571, 1, 1, 1423.415, -3272.469, 175.8965, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0208,180415, 571, 1, 1, 1440.88, -3258.736, 168.5083, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0209,180415, 571, 1, 1, 1421.422, -3276.337, 175.8964, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0210,180415, 571, 1, 1, 1421.38, -3278.174, 175.8965, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0211,180415, 571, 1, 1, 1421.837, -3279.875, 175.8964, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0212,180415, 571, 1, 1, 1443.076, -3260.196, 168.5083, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0213,180415, 571, 1, 1, 1443.797, -3259.285, 168.5083, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0214,180415, 571, 1, 1, 1437.932, -3254.321, 168.5089, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0215,180415, 571, 1, 1, 1438.714, -3257.005, 168.5084, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0216,180415, 571, 1, 1, 1424.549, -3281.903, 175.8964, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0217,180415, 571, 1, 1, 1446.208, -3272.655, 171.3525, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0218,180415, 571, 1, 1, 1425.948, -3281.997, 175.8964, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0219,180415, 571, 1, 1, 1449.852, -3275.616, 171.3525, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0220,180415, 571, 1, 1, 1427.842, -3281.715, 175.8965, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0221,180415, 571, 1, 1, 1429.609, -3280.913, 175.8965, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0222,180415, 571, 1, 1, 1431.264, -3278.972, 175.8965, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0223,180415, 571, 1, 1, 1448.076, -3274.135, 171.3525, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0224,180415, 571, 1, 1, 1451.38, -3276.939, 171.3525, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+0225,180415, 571, 1, 1, 607.8405, -4925.881, 24.95922, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0226,180415, 571, 1, 1, 608.6639, -4923.137, 31.06963, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0227,180415, 571, 1, 1, 606.8481, -4923.561, 31.05914, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0228,180415, 571, 1, 1, 592.6419, -4947.118, 27.2703, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0229,180415, 571, 1, 1, 601.7822, -4924.856, 31.09424, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0230,180415, 571, 1, 1, 592.2818, -4945.582, 27.2703, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0231,180415, 571, 1, 1, 602.6741, -4929.257, 22.72639, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0232,180415, 571, 1, 1, 607.1002, -4923.413, 24.95922, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0233,180415, 571, 1, 1, 601.2928, -4929.597, 22.72639, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0234,180415, 571, 1, 1, 599.9999, -4925.255, 31.10255, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0235,180415, 571, 1, 1, 604.4755, -4924.116, 24.96138, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0236,180415, 571, 1, 1, 592.1803, -4952.106, 27.2703, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0237,180415, 571, 1, 1, 591.1564, -4953.459, 27.2703, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0238,180415, 571, 1, 1, 605.0962, -4924.019, 31.05478, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0239,180415, 571, 1, 1, 592.8271, -4950.619, 27.2703, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0240,180415, 571, 1, 1, 603.4061, -4924.424, 31.06834, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0241,180415, 571, 1, 1, 601.9756, -4924.741, 24.95593, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0242,180415, 571, 1, 1, 595.087, -4926.527, 31.06053, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0243,180415, 571, 1, 1, 599.5756, -4929.97, 22.72639, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0244,180415, 571, 1, 1, 587.9566, -4954.577, 27.2703, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0245,180415, 571, 1, 1, 593.6668, -4929.349, 31.07931, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0246,180415, 571, 1, 1, 596.3693, -4930.906, 22.72639, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0247,180415, 571, 1, 1, 597.8043, -4930.463, 22.72639, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0248,180415, 571, 1, 1, 598.4451, -4925.653, 31.07524, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0249,180415, 571, 1, 1, 601.3765, -4922.399, 24.95571, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0250,180415, 571, 1, 1, 586.3301, -4953.981, 27.2703, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0251,180415, 571, 1, 1, 596.6023, -4926.172, 31.03511, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0252,180415, 571, 1, 1, 600.8096, -4920.225, 24.95571, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0253,180415, 571, 1, 1, 590.7567, -4934.542, 31.1084, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0254,180415, 571, 1, 1, 584.8109, -4952.982, 27.2703, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0255,180415, 571, 1, 1, 593.1274, -4927, 31.07476, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0256,180415, 571, 1, 1, 582.5004, -4947.915, 27.2703, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0257,180415, 571, 1, 1, 584.9875, -4936.011, 31.05981, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0258,180415, 571, 1, 1, 586.9916, -4935.478, 31.03452, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0259,180415, 571, 1, 1, 591.3271, -4919.841, 24.76182, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0260,180415, 571, 1, 1, 582.8868, -4949.487, 27.2703, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0261,180415, 571, 1, 1, 589.015, -4934.996, 31.07944, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0262,180415, 571, 1, 1, 589.0734, -4924.763, 19.81484, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0263,180415, 571, 1, 1, 582.024, -4933.135, 31.07914, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0264,180415, 571, 1, 1, 586.677, -4921.894, 24.03878, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0265,180415, 571, 1, 1, 588.6942, -4923.249, 19.81484, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0266,180415, 571, 1, 1, 582.4625, -4934.822, 31.0773, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0267,180415, 571, 1, 1, 589.4875, -4926.273, 19.81484, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+0268,180415, 571, 1, 1, 2492.693, -1907.169, 9.526185, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+0269,180415, 571, 1, 1, 2490.183, -1883.224, 9.115799, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+0270,180415, 571, 1, 1, 2501.102, -1882.176, 8.549006, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+0271,180415, 571, 1, 1, 2501.947, -1893.583, 8.302938, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+0272,180415, 571, 1, 1, 2506.74, -1900.911, 8.029154, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+0273,180415, 571, 1, 1, 2490.393, -1897.489, 9.970935, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+0274,180415, 571, 1, 1, 2477.013, -1901.73, 11.23512, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+0275,180415, 571, 1, 1, 2480.636, -1898.305, 11.20697, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+0276,180415, 571, 1, 1, 2465.555, -1903.595, 11.20657, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+0277,180415, 571, 1, 1, 2470.907, -1903.663, 11.225, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+0278,180415, 571, 1, 1, 3720.282, -703.4149, 216.9913, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0279,180415, 571, 1, 1, 3721.375, -700.6528, 217.3681, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0280,180415, 571, 1, 1, 3724.484, -697.309, 217.4367, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0281,180415, 571, 1, 1, 3723.878, -701.0903, 217.3764, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0282,180415, 571, 1, 1, 3722.675, -704.342, 217.2098, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0283,180415, 571, 1, 1, 3723.472, -693.4011, 217.4225, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0284,180415, 571, 1, 1, 3721.266, -694.7188, 217.1692, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0285,180415, 571, 1, 1, 3719.472, -692.0851, 217.2261, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0286,180415, 571, 1, 1, 3721.933, -697.5799, 217.3843, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0287,180415, 571, 1, 1, 3720.975, -690.0139, 217.1697, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0288,180415, 571, 1, 1, 3673.806, -704.4462, 215.2892, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0289,180415, 571, 1, 1, 3680.288, -702.743, 215.5022, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0290,180415, 571, 1, 1, 3663.695, -709.2948, 213.8031, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0291,180415, 571, 1, 1, 3662.965, -709.1875, 214.0366, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0292,180415, 571, 1, 1, 3663.579, -704.8941, 214.0316, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0293,180415, 571, 1, 1, 3664.109, -705.0291, 213.8467, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0294,180415, 571, 1, 1, 3657.745, -692.2751, 223.6275, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0295,180415, 571, 1, 1, 3660.364, -700.371, 223.6275, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0296,180415, 571, 1, 1, 3650.258, -699.3051, 223.6275, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0297,180415, 571, 1, 1, 3661.816, -704.7014, 214.8959, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0298,180415, 571, 1, 1, 3654.531, -691.826, 223.6275, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0299,180415, 571, 1, 1, 3652.8, -692.9138, 223.6275, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0300,180415, 571, 1, 1, 3655.83, -710.9506, 227.4323, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0301,180415, 571, 1, 1, 3651.423, -694.3221, 223.6275, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0302,180415, 571, 1, 1, 3660.504, -697.7479, 223.6275, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0303,180415, 571, 1, 1, 3662.702, -704.8438, 214.3862, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0304,180415, 571, 1, 1, 3660.119, -695.2737, 223.6275, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0305,180415, 571, 1, 1, 3658.975, -693.3618, 223.6275, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0306,180415, 571, 1, 1, 3650.527, -697.048, 223.6275, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0307,180415, 571, 1, 1, 3661.141, -709.1563, 214.8015, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0308,180415, 571, 1, 1, 3646.771, -712.575, 216.1448, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0309,180415, 571, 1, 1, 3639.381, -715.8611, 227.3913, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0310,180415, 571, 1, 1, 3655.505, -714.1703, 227.4361, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0311,180415, 571, 1, 1, 3643.311, -713.7602, 227.4366, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0312,180415, 571, 1, 1, 3649.78, -710.2109, 227.4335, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0313,180415, 571, 1, 1, 3650.835, -720.3264, 216.1421, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0314,180415, 571, 1, 1, 3641.055, -711.5729, 218.9725, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0315,180415, 571, 1, 1, 3642.938, -716.2329, 227.4314, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0316,180415, 571, 1, 1, 3656.18, -720.6285, 216.1422, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0317,180415, 571, 1, 1, 3662.277, -709.184, 214.3835, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0318,180415, 571, 1, 1, 3653.458, -720.2587, 216.1421, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0319,180415, 571, 1, 1, 3620.047, -714.6027, 227.4171, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0320,180415, 571, 1, 1, 3630.439, -711.8963, 215.451, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0321,180415, 571, 1, 1, 3628.625, -714.6279, 221.3164, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0322,180415, 571, 1, 1, 3647.266, -723.0741, 220.1831, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0323,180415, 571, 1, 1, 3628.823, -712.1104, 221.3164, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0324,180415, 571, 1, 1, 3636.598, -710.9913, 218.9725, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0325,180415, 571, 1, 1, 3642.31, -722.2473, 220.5441, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0326,180415, 571, 1, 1, 3646.166, -718.1907, 216.172, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0327,180415, 571, 1, 1, 3635.955, -715.3896, 227.4597, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0328,180415, 571, 1, 1, 3639.688, -711.3333, 218.9725, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0329,180415, 571, 1, 1, 3633.46, -719.8217, 221.3129, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0330,180415, 571, 1, 1, 3632.302, -715.0294, 227.4236, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0331,180415, 571, 1, 1, 3630.115, -714.7449, 215.4509, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0332,180415, 571, 1, 1, 3633.867, -715.2915, 221.3129, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0333,180415, 571, 1, 1, 3628.883, -714.4942, 227.4169, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0334,180415, 571, 1, 1, 3629.475, -717.1203, 215.4509, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0335,180415, 571, 1, 1, 3635.079, -710.8333, 218.9725, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0336,180415, 571, 1, 1, 3645.829, -721.221, 216.172, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0337,180415, 571, 1, 1, 3619.787, -716.7102, 227.4115, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+0338,180415, 571, 1, 1, 3539.074, 246.8349, 45.82254, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0339,180415, 571, 1, 1, 3560.01, 248.8549, 45.83335, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0340,180415, 571, 1, 1, 3549.851, 245.3113, 45.88549, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0341,180415, 571, 1, 1, 3520.715, 280.9288, 45.78613, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0342,180415, 571, 1, 1, 3564.364, 294.3126, 45.82972, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0343,180415, 571, 1, 1, 3526.05, 290.625, 45.8017, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0344,180415, 571, 1, 1, 3529.681, 251.9887, 45.82568, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0345,180415, 571, 1, 1, 3570.418, 286.1223, 45.8264, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0346,180415, 571, 1, 1, 3534.023, 297.516, 45.87384, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0347,180415, 571, 1, 1, 3573.903, 275.7938, 45.8153, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0348,180415, 571, 1, 1, 3572.999, 265.1364, 45.80965, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0349,180415, 571, 1, 1, 3585.963, 283.0799, 48.30828, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0350,180415, 571, 1, 1, 3554.604, 299.7266, 45.90679, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0351,180415, 571, 1, 1, 3568.259, 255.9597, 45.78259, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0352,180415, 571, 1, 1, 3587.122, 271.1111, 48.3845, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0353,180415, 571, 1, 1, 3522.922, 260.132, 45.7541, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0354,180415, 571, 1, 1, 3596.911, 271.6074, 52.12251, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0355,180415, 571, 1, 1, 3519.316, 270.3384, 45.87571, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0356,180415, 571, 1, 1, 3595.522, 284.4653, 52.2077, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0357,180415, 571, 1, 1, 3544.37, 301.0424, 45.87925, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+0358,180415, 571, 1, 1, 3453.492, 2004.011, 66.48942, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0359,180415, 571, 1, 1, 3451.072, 2013.826, 67.11924, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0360,180415, 571, 1, 1, 3460.914, 1999.812, 64.96242, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0361,180415, 571, 1, 1, 3450.717, 2005.431, 66.47033, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0362,180415, 571, 1, 1, 3464.852, 2005.66, 65.63439, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0363,180415, 571, 1, 1, 3457.145, 2001.683, 65.88113, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0364,180415, 571, 1, 1, 3457.17, 2010.24, 67.18584, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0365,180415, 571, 1, 1, 3461.157, 2007.909, 66.50739, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0366,180415, 571, 1, 1, 3447.548, 2007.21, 66.4343, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0367,180415, 571, 1, 1, 3454.485, 2011.974, 67.24349, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0368,180415, 571, 1, 1, 3485.54, 1982.056, 66.64336, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0369,180415, 571, 1, 1, 3491.24, 1972.217, 66.67846, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0370,180415, 571, 1, 1, 3484.478, 1982.79, 66.10648, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0371,180415, 571, 1, 1, 3486.18, 1980.53, 66.75633, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0372,180415, 571, 1, 1, 3488.036, 1984.502, 66.5727, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0373,180415, 571, 1, 1, 3488.738, 1974.252, 66.48361, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0374,180415, 571, 1, 1, 3486.124, 1985.773, 66.13934, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0375,180415, 571, 1, 1, 3489.454, 1972.877, 66.5388, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0376,180415, 571, 1, 1, 3486.32, 1978.385, 66.64598, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0377,180415, 571, 1, 1, 3484.899, 1984.623, 66.13567, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0378,180415, 571, 1, 1, 3490.6, 1973.335, 66.56937, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0379,180415, 571, 1, 1, 3486.279, 1984.052, 66.72491, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0380,180415, 571, 1, 1, 3488.017, 1982.2, 69.24107, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0381,180415, 571, 1, 1, 3496.877, 1986.814, 66.14459, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0382,180415, 571, 1, 1, 3499.981, 1976.101, 66.6926, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0383,180415, 571, 1, 1, 3498.515, 1987.265, 66.15958, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0384,180415, 571, 1, 1, 3494.6, 1971.783, 69.21862, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0385,180415, 571, 1, 1, 3498.208, 1985.489, 66.55852, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0386,180415, 571, 1, 1, 3492.497, 1984.687, 66.91064, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0387,180415, 571, 1, 1, 3499.862, 1974.142, 66.74924, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0388,180415, 571, 1, 1, 3499.545, 1986.568, 66.14841, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0389,180415, 571, 1, 1, 3497.163, 1972.785, 67.83695, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0390,180415, 571, 1, 1, 3498.545, 1983.968, 66.78958, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0391,180415, 571, 1, 1, 3499.741, 1984.807, 66.1551, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0392,180415, 571, 1, 1, 3496.604, 1985.285, 66.52729, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0393,180415, 571, 1, 1, 3490.234, 1984.203, 66.76582, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0394,180415, 571, 1, 1, 3494.507, 1985.543, 66.86245, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0395,180415, 571, 1, 1, 3492.613, 1987.125, 66.18999, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0396,180415, 571, 1, 1, 3498.044, 1971.96, 67.97525, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0397,180415, 571, 1, 1, 3500.235, 1977.234, 66.79019, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+0398,180415, 571, 1, 1, 8446.374, -338.7054, 906.5311, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+0399,180415, 571, 1, 1, 8441.133, -333.9722, 906.3853, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+0400,180415, 571, 1, 1, 8449.194, -340.0696, 906.42, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+0401,180415, 571, 1, 1, 8438.914, -336.882, 906.3645, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+0402,180415, 571, 1, 1, 8450.9, -342.7731, 906.4547, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+0403,180415, 571, 1, 1, 8436.891, -329.9302, 906.4619, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+0404,180415, 571, 1, 1, 8440.131, -331.5573, 906.4849, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+0405,180415, 571, 1, 1, 8443.484, -341.0681, 906.538, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+0406,180415, 571, 1, 1, 8438.455, -346.809, 906.3992, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484)
+(@OGUID+0407,180415, 571, 1, 1, 8434.126, -342.7607, 906.3992, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484)
+(@OGUID+0408,180415, 571, 1, 1, 6135.286, -1087.107, 403.996, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0409,180415, 571, 1, 1, 6135.75, -1082.272, 403.9787, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0410,180415, 571, 1, 1, 6131.089, -1077.924, 404.0315, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0411,180415, 571, 1, 1, 6124.53, -1100.04, 404.1576, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0412,180415, 571, 1, 1, 6129.471, -1100.338, 404.0967, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0413,180415, 571, 1, 1, 6134.075, -1100.798, 404.0411, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0414,180415, 571, 1, 1, 6135.558, -1078.466, 403.9826, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0415,180415, 571, 1, 1, 6135.308, -1092.608, 404.0045, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0416,180415, 571, 1, 1, 6135.531, -1097.868, 403.998, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0417,180415, 571, 1, 1, 6128.174, -1077.363, 404.1137, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0418,180415, 571, 1, 1, 6114.59, -1100.005, 404.2581, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0419,180415, 571, 1, 1, 6119.64, -1099.892, 404.2052, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0420,180415, 571, 1, 1, 6117.122, -1080.053, 403.8957, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0421,180415, 571, 1, 1, 6110.035, -1085.667, 404.2946, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0422,180415, 571, 1, 1, 6116.569, -1077.83, 403.8956, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0423,180415, 571, 1, 1, 6110.022, -1094.398, 404.3128, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0424,180415, 571, 1, 1, 6113.951, -1077.961, 403.9418, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0425,180415, 571, 1, 1, 6109.78, -1099.722, 404.3831, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0426,180415, 571, 1, 1, 6109.548, -1083.051, 404.3193, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0427,180415, 571, 1, 1, 6108.985, -1078.398, 404.2991, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+0428,180415, 571, 1, 1, 6665.15, -200.775, 950.982, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+0429,180415, 571, 1, 1, 6667.429, -202.9508, 950.2484, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+0430,180415, 571, 1, 1, 6670.192, -202.2401, 950.4054, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+0431,180415, 571, 1, 1, 6676.213, -197.9583, 951.1501, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+0432,180415, 571, 1, 1, 6676.812, -200.8755, 951.2551, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+0433,180415, 571, 1, 1, 6671.391, -199.7399, 951.0316, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+0434,180415, 571, 1, 1, 6671.051, -196.6817, 951.0138, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+0435,180415, 571, 1, 1, 6666.553, -195.6487, 951.7457, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+0436,180415, 571, 1, 1, 6680.188, -200.7511, 955.8945, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+0437,180415, 571, 1, 1, 6664.639, -197.5128, 951.639, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+0438,180415, 571, 1, 1, 5534.743, 5748.256, -76.63572, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0439,180415, 571, 1, 1, 5543.521, 5771.278, -76.01951, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0440,180415, 571, 1, 1, 5523.451, 5778.276, -78.78996, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0441,180415, 571, 1, 1, 5543.232, 5771.354, -76.01951, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0442,180415, 571, 1, 1, 5525.911, 5782.684, -78.17769, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0443,180415, 571, 1, 1, 5555.896, 5763.036, -76.68411, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0444,180415, 571, 1, 1, 5552.697, 5767.842, -75.99409, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0445,180415, 571, 1, 1, 5557.079, 5767.963, -77.05219, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0446,180415, 571, 1, 1, 5557.415, 5769.394, -76.74715, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0447,180415, 571, 1, 1, 5589.266, 5819.588, -69.22645, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0448,180415, 571, 1, 1, 5585.25, 5746.126, -71.12965, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0449,180415, 571, 1, 1, 5589.826, 5820.498, -69.06834, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0450,180415, 571, 1, 1, 5598.222, 5811.789, -69.80727, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0451,180415, 571, 1, 1, 5608.288, 5809.12, -70.3611, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0452,180415, 571, 1, 1, 5629.481, 5831.32, -63.68258, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0453,180415, 571, 1, 1, 5624.22, 5848.555, -62.23083, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0454,180415, 571, 1, 1, 5624.355, 5836.35, -64.11382, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0455,180415, 571, 1, 1, 5615.792, 5854.673, -61.52033, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0456,180415, 571, 1, 1, 5617.778, 5835.836, -64.42644, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0457,180415, 571, 1, 1, 5621.542, 5839.372, -63.8798, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0458,180415, 571, 1, 1, 5620.175, 5851.535, -61.9314, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0459,180415, 571, 1, 1, 5617.97, 5842.27, -63.73035, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0460,180415, 571, 1, 1, 5631.269, 5841.848, -62.78385, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0461,180415, 571, 1, 1, 5614.699, 5845.393, -63.52262, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0462,180415, 571, 1, 1, 5628.023, 5845.315, -62.64318, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0463,180415, 571, 1, 1, 5599.996, 5811.131, -69.81374, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0464,180415, 571, 1, 1, 5610.43, 5848.424, -63.39353, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0465,180415, 571, 1, 1, 5609.851, 5840.359, -64.56908, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+0466,180415, 571, 1, 1, 5638.223, 5830.514, -63.40969, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284)
+(@OGUID+0467,180415, 571, 1, 1, 5635.809, 5835.991, -63.02237, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284)
+(@OGUID+0468,180415, 571, 1, 1, 5512.584, 4747.444, -194.4338, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+0469,180415, 571, 1, 1, 5476.778, 4745.321, -195.5257, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+0470,180415, 571, 1, 1, 5509.279, 4742.423, -194.4338, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+0471,180415, 571, 1, 1, 5498.675, 4751.812, -194.4338, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+0472,180415, 571, 1, 1, 5503.33, 4741.617, -194.4338, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+0473,180415, 571, 1, 1, 5504.156, 4755.996, -194.4338, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+0474,180415, 571, 1, 1, 5498.581, 4745.667, -194.4338, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+0475,180415, 571, 1, 1, 5477.044, 4749.278, -195.3024, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+0476,180415, 571, 1, 1, 5510.276, 4753.492, -194.4338, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+0477,180415, 571, 1, 1, 5485.467, 4727.866, -194.3498, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+0478,180415, 571, 1, 1, 4472.118, 5710.065, 81.82111, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+0479,180415, 571, 1, 1, 4475.728, 5707.702, 81.28061, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+0480,180415, 571, 1, 1, 4474.857, 5707.663, 81.27406, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+0481,180415, 571, 1, 1, 4470.187, 5711.333, 81.82111, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+0482,180415, 571, 1, 1, 4502.521, 5716.321, 83.2894, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+0483,180415, 571, 1, 1, 4501.978, 5716.594, 83.29294, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+0484,180415, 571, 1, 1, 4512.208, 5702.231, 82.31032, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+0485,180415, 571, 1, 1, 4508.148, 5720.678, 81.53056, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+0486,180415, 571, 1, 1, 4508.037, 5721.736, 81.52561, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+0487,180415, 571, 1, 1, 4511.359, 5702.256, 82.3114, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+0488,180415, 571, 1, 1, 4175.995, 5285.556, 39.60876, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+0489,180415, 571, 1, 1, 4174.72, 5282.509, 40.74071, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+0490,180415, 571, 1, 1, 4182.015, 5285.288, 40.89171, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+0491,180415, 571, 1, 1, 4176.526, 5277.981, 41.3796, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+0492,180415, 571, 1, 1, 4182.998, 5284, 40.91432, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+0493,180415, 571, 1, 1, 4175.992, 5278.304, 40.8171, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+0494,180415, 571, 1, 1, 4174.827, 5281.086, 40.75976, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+0495,180415, 571, 1, 1, 4181.757, 5280.178, 39.78754, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+0496,180415, 571, 1, 1, 4177.348, 5277.492, 40.8917, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+0497,180415, 571, 1, 1, 4176.902, 5277.699, 41.40043, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+0498,180415, 571, 1, 1, 2816.064, 6140.755, 84.60281, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0499,180415, 571, 1, 1, 2817.546, 6142.036, 84.77279, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0500,180415, 571, 1, 1, 2808.348, 6133.652, 84.35007, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0501,180415, 571, 1, 1, 2814.547, 6139.239, 84.48197, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0502,180415, 571, 1, 1, 2813.243, 6137.908, 84.43053, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0503,180415, 571, 1, 1, 2811.692, 6136.515, 84.40427, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0504,180415, 571, 1, 1, 2809.904, 6135.145, 84.37815, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0505,180415, 571, 1, 1, 2806.884, 6132.39, 84.32622, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0506,180415, 571, 1, 1, 2787.17, 6166.139, 84.44685, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0507,180415, 571, 1, 1, 2785.56, 6164.665, 84.41692, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0508,180415, 571, 1, 1, 2784.033, 6163.104, 84.38836, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0509,180415, 571, 1, 1, 2791.778, 6170.236, 84.69099, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0510,180415, 571, 1, 1, 2790.21, 6168.888, 84.58121, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0511,180415, 571, 1, 1, 2788.624, 6167.527, 84.47393, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0512,180415, 571, 1, 1, 2781.09, 6160.348, 84.3336, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0513,180415, 571, 1, 1, 2779.682, 6158.85, 84.30719, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0514,180415, 571, 1, 1, 2805.326, 6131.063, 84.3011, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0515,180415, 571, 1, 1, 2791.639, 6139.96, 84.81071, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0516,180415, 571, 1, 1, 2803.804, 6129.789, 84.27695, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0517,180415, 571, 1, 1, 2782.543, 6161.761, 84.36069, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0518,180415, 571, 1, 1, 2788.538, 6143.428, 84.79273, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0519,180415, 571, 1, 1, 2776.865, 6126.743, 91.12935, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0520,180415, 571, 1, 1, 2788.898, 6137.514, 86.33366, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0521,180415, 571, 1, 1, 2774.129, 6129.736, 91.13658, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0522,180415, 571, 1, 1, 2780.254, 6135.889, 89.43606, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0523,180415, 571, 1, 1, 2785.656, 6141.002, 86.35069, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0524,180415, 571, 1, 1, 2778.103, 6157.446, 84.27789, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0525,180415, 571, 1, 1, 2781.07, 6130.521, 90.43552, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0526,180415, 571, 1, 1, 2785.955, 6135.013, 87.93523, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0527,180415, 571, 1, 1, 2777.994, 6133.772, 90.43637, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0528,180415, 571, 1, 1, 2782.876, 6138.491, 87.9035, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0529,180415, 571, 1, 1, 2783.253, 6132.512, 89.46143, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0530,180415, 571, 1, 1, 2779.491, 6129.215, 90.78801, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0531,180415, 571, 1, 1, 2776.609, 6132.236, 90.81976, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0532,180415, 571, 1, 1, 2772.306, 6123.107, 91.52767, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0533,180415, 571, 1, 1, 2768.484, 6124.985, 97.70737, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0534,180415, 571, 1, 1, 2771.088, 6121.854, 97.64502, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0535,180415, 571, 1, 1, 2771.566, 6127.16, 91.71031, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0536,180415, 571, 1, 1, 2773.846, 6124.534, 91.67098, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0537,180415, 571, 1, 1, 2769.93, 6125.85, 91.52602, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+0538,180415, 571, 1, 1, 2297.869, 5280.106, 13.11051, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0539,180415, 571, 1, 1, 2292.861, 5276.689, 13.39523, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0540,180415, 571, 1, 1, 2292.751, 5278.278, 13.39523, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0541,180415, 571, 1, 1, 2293.383, 5279.647, 13.39523, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0542,180415, 571, 1, 1, 2295.305, 5274.703, 13.39523, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0543,180415, 571, 1, 1, 2291.743, 5276.248, 13.28105, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0544,180415, 571, 1, 1, 2293.839, 5275.374, 13.39523, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0545,180415, 571, 1, 1, 2293.025, 5274.428, 13.18383, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0546,180415, 571, 1, 1, 2298.755, 5278.823, 13.17301, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0547,180415, 571, 1, 1, 2298.857, 5277.28, 13.15912, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0548,180415, 571, 1, 1, 2269.472, 5199.901, 11.49839, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0549,180415, 571, 1, 1, 2270.224, 5199.647, 11.84797, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0550,180415, 571, 1, 1, 2267.266, 5195.724, 11.25468, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0551,180415, 571, 1, 1, 2271.104, 5199.311, 12.33314, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0552,180415, 571, 1, 1, 2262.667, 5194.889, 14.41752, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0553,180415, 571, 1, 1, 2269.422, 5194.798, 12.2818, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0554,180415, 571, 1, 1, 2268.748, 5200.188, 11.23592, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0555,180415, 571, 1, 1, 2264.628, 5203.938, 12.71451, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0556,180415, 571, 1, 1, 2268.505, 5195.202, 11.93541, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0557,180415, 571, 1, 1, 2267.729, 5195.542, 11.41191, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0558,180415, 571, 1, 1, 2269.927, 5181.998, 20.93, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0559,180415, 571, 1, 1, 2288.382, 5209.055, 17.64837, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0560,180415, 571, 1, 1, 2268.734, 5184.522, 20.88139, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0561,180415, 571, 1, 1, 2271.566, 5188.706, 20.67995, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0562,180415, 571, 1, 1, 2271.873, 5189.512, 21.19639, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0563,180415, 571, 1, 1, 2272.297, 5190.432, 21.74726, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0564,180415, 571, 1, 1, 2292.874, 5206.81, 17.99297, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0565,180415, 571, 1, 1, 2288.034, 5203.917, 13.63426, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0566,180415, 571, 1, 1, 2289.651, 5198.8, 24.89842, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0567,180415, 571, 1, 1, 2285.987, 5198.663, 13.60694, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0568,180415, 571, 1, 1, 2289.193, 5206.791, 13.63426, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0569,180415, 571, 1, 1, 2277.729, 5188.15, 21.78212, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0570,180415, 571, 1, 1, 2300.695, 5202.11, 18.77489, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0571,180415, 571, 1, 1, 2277.347, 5187.327, 21.23565, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0572,180415, 571, 1, 1, 2299.122, 5197.798, 18.77534, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0573,180415, 571, 1, 1, 2276.96, 5186.483, 20.70242, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0574,180415, 571, 1, 1, 2303.15, 5193.464, 18.77864, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0575,180415, 571, 1, 1, 2273.479, 5180.935, 20.96472, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0576,180415, 571, 1, 1, 2304.057, 5195.878, 18.77864, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0577,180415, 571, 1, 1, 2275.646, 5181.717, 21.01333, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+0578,180415, 571, 1, 1, 3000.993, 4068.12, 30.11452, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0579,180415, 571, 1, 1, 3014.259, 4067.539, 31.04936, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0580,180415, 571, 1, 1, 3001.769, 4049.21, 26.07964, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0581,180415, 571, 1, 1, 3007.144, 4059.308, 26.76467, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0582,180415, 571, 1, 1, 3003.417, 4061.542, 26.18109, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0583,180415, 571, 1, 1, 3003.007, 4059.802, 26.62822, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0584,180415, 571, 1, 1, 3007.312, 4061.112, 26.29614, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0585,180415, 571, 1, 1, 3003.312, 4060.399, 26.59323, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0586,180415, 571, 1, 1, 3007.251, 4060.04, 26.53866, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0587,180415, 571, 1, 1, 3004.535, 4048.617, 26.07964, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0588,180415, 571, 1, 1, 2862.335, 4038.781, 5.057745, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0589,180415, 571, 1, 1, 2860.901, 4036.917, 10.936, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0590,180415, 571, 1, 1, 2863.556, 4030.712, 10.90262, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0591,180415, 571, 1, 1, 2870.361, 4032.718, 5.063904, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0592,180415, 571, 1, 1, 2874.672, 4034.085, 5.337824, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0593,180415, 571, 1, 1, 2871.422, 4041.642, 5.131527, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0594,180415, 571, 1, 1, 2866.514, 4040.803, 5.103539, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0595,180415, 571, 1, 1, 2865.706, 4030.687, 5.018806, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0596,180415, 571, 1, 1, 2852.11, 4024.6, 5.079292, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0597,180415, 571, 1, 1, 2834.966, 4027.097, 5.066519, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0598,180415, 571, 1, 1, 2857.513, 4036.657, 5.022579, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0599,180415, 571, 1, 1, 2847.389, 4022.759, 5.015669, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0600,180415, 571, 1, 1, 2848.344, 4032.73, 5.091734, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0601,180415, 571, 1, 1, 2839.194, 4028.807, 5.034027, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0602,180415, 571, 1, 1, 2861.214, 4028.713, 4.992302, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0603,180415, 571, 1, 1, 2853.19, 4035.031, 5.072161, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0604,180415, 571, 1, 1, 2844.015, 4030.81, 5.057843, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0605,180415, 571, 1, 1, 2842.966, 4020.906, 4.97491, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0606,180415, 571, 1, 1, 2856.586, 4026.636, 5.041717, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0607,180415, 571, 1, 1, 2838.301, 4018.869, 5.02294, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+0608,180415, 571, 1, 1, 3434.656, 4170.812, 14.18469, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0609,180415, 571, 1, 1, 3436.351, 4170.699, 14.72765, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0610,180415, 571, 1, 1, 3434.991, 4175.841, 14.25499, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0611,180415, 571, 1, 1, 3437.776, 4170.405, 15.33066, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0612,180415, 571, 1, 1, 3436.812, 4175.733, 14.72314, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0613,180415, 571, 1, 1, 3438.13, 4175.703, 15.35011, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0614,180415, 571, 1, 1, 3439.169, 4170.2, 15.85179, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0615,180415, 571, 1, 1, 3439.449, 4175.608, 15.88088, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0616,180415, 571, 1, 1, 3441.065, 4175.682, 16.57793, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0617,180415, 571, 1, 1, 3441.056, 4170.128, 16.49479, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0618,180415, 571, 1, 1, 3460.127, 4139.347, 15.29107, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0619,180415, 571, 1, 1, 3460.05, 4142.877, 16.52606, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0620,180415, 571, 1, 1, 3465.668, 4142.377, 16.36272, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0621,180415, 571, 1, 1, 3460.073, 4138.049, 15.04643, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0622,180415, 571, 1, 1, 3459.941, 4140.769, 15.82715, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0623,180415, 571, 1, 1, 3465.849, 4140.417, 15.76362, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0624,180415, 571, 1, 1, 3458.424, 4132.354, 17.18105, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0625,180415, 571, 1, 1, 3465.589, 4138.927, 15.2921, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0626,180415, 571, 1, 1, 3458.859, 4132.616, 17.19908, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0627,180415, 571, 1, 1, 3465.348, 4137.641, 15.11139, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0628,180415, 571, 1, 1, 3491.878, 4167.745, 15.70641, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0629,180415, 571, 1, 1, 3490.802, 4173.49, 16.09687, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0630,180415, 571, 1, 1, 3493.248, 4167.78, 15.00927, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0631,180415, 571, 1, 1, 3490.705, 4167.838, 16.1151, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0632,180415, 571, 1, 1, 3497.003, 4167.765, 13.85431, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0633,180415, 571, 1, 1, 3497.161, 4173.208, 13.8974, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0634,180415, 571, 1, 1, 3495.283, 4173.163, 14.59191, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0635,180415, 571, 1, 1, 3493.558, 4173.144, 15.14168, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0636,180415, 571, 1, 1, 3495.103, 4167.599, 14.42155, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0637,180415, 571, 1, 1, 3492.093, 4173.33, 15.54947, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+0638,180415, 571, 1, 1, 5231.531, -1307.568, 242.9937, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0639,180415, 571, 1, 1, 5231.531, -1307.568, 242.9937, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0640,180415, 571, 1, 1, 5231.807, -1317.45, 242.3508, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0641,180415, 571, 1, 1, 5231.807, -1317.45, 242.3508, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0642,180415, 571, 1, 1, 5232.045, -1311.97, 242.4411, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0643,180415, 571, 1, 1, 5232.045, -1311.97, 242.4411, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0644,180415, 571, 1, 1, 5228.543, -1303.112, 242.7879, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0645,180415, 571, 1, 1, 5228.543, -1303.112, 242.7879, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0646,180415, 571, 1, 1, 5223.873, -1297.311, 242.7593, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0647,180415, 571, 1, 1, 5223.873, -1297.311, 242.7593, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0648,180415, 571, 1, 1, 5219.208, -1294.684, 243.2743, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0649,180415, 571, 1, 1, 5219.208, -1294.684, 243.2743, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0650,180415, 571, 1, 1, 5219.888, -1333.076, 242.3786, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0651,180415, 571, 1, 1, 5219.888, -1333.076, 242.3786, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0652,180415, 571, 1, 1, 5214.489, -1333.5, 242.7952, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0653,180415, 571, 1, 1, 5214.489, -1333.5, 242.7952, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0654,180415, 571, 1, 1, 5200.362, -1331.64, 243.263, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0655,180415, 571, 1, 1, 5200.362, -1331.64, 243.263, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0656,180415, 571, 1, 1, 5205.63, -1333.422, 243.3845, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0657,180415, 571, 1, 1, 5205.63, -1333.422, 243.3845, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+0658,180415, 571, 1, 1, 5174.615, -2200.075, 237.0793, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0659,180415, 571, 1, 1, 5174.615, -2200.075, 237.0793, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0660,180415, 571, 1, 1, 5181.025, -2200.378, 238.9339, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0661,180415, 571, 1, 1, 5181.025, -2200.378, 238.9339, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0662,180415, 571, 1, 1, 5147.62, -2198.052, 237.614, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0663,180415, 571, 1, 1, 5147.62, -2198.052, 237.614, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0664,180415, 571, 1, 1, 5179.311, -2200.378, 238.4566, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0665,180415, 571, 1, 1, 5179.311, -2200.378, 238.4566, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0666,180415, 571, 1, 1, 5147.989, -2198.857, 237.614, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0667,180415, 571, 1, 1, 5147.989, -2198.857, 237.614, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0668,180415, 571, 1, 1, 5157.23, -2201.726, 237.5309, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0669,180415, 571, 1, 1, 5157.23, -2201.726, 237.5309, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0670,180415, 571, 1, 1, 5177.918, -2200.155, 237.9545, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0671,180415, 571, 1, 1, 5177.918, -2200.155, 237.9545, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0672,180415, 571, 1, 1, 5176.376, -2200.125, 237.5385, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0673,180415, 571, 1, 1, 5176.376, -2200.125, 237.5385, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0674,180415, 571, 1, 1, 5137.146, -2201.73, 237.8019, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0675,180415, 571, 1, 1, 5137.146, -2201.73, 237.8019, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0676,180415, 571, 1, 1, 5147.455, -2202.927, 237.0062, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0677,180415, 571, 1, 1, 5147.455, -2202.927, 237.0062, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0678,180415, 571, 1, 1, 5150.261, -2211.397, 238.8011, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0679,180415, 571, 1, 1, 5150.261, -2211.397, 238.8011, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0680,180415, 571, 1, 1, 5134.615, -2201.333, 238.8165, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0681,180415, 571, 1, 1, 5134.615, -2201.333, 238.8165, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0682,180415, 571, 1, 1, 5134.096, -2200.798, 238.8165, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0683,180415, 571, 1, 1, 5134.096, -2200.798, 238.8165, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0684,180415, 571, 1, 1, 5174.395, -2217.037, 237.1849, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0685,180415, 571, 1, 1, 5174.395, -2217.037, 237.1849, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0686,180415, 571, 1, 1, 5181.015, -2217.125, 238.9904, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0687,180415, 571, 1, 1, 5181.015, -2217.125, 238.9904, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0688,180415, 571, 1, 1, 5179.321, -2217.104, 238.5324, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0689,180415, 571, 1, 1, 5179.321, -2217.104, 238.5324, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0690,180415, 571, 1, 1, 5177.742, -2217.072, 237.9756, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0691,180415, 571, 1, 1, 5177.742, -2217.072, 237.9756, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0692,180415, 571, 1, 1, 5141.178, -2211.442, 238.1585, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0693,180415, 571, 1, 1, 5141.178, -2211.442, 238.1585, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0694,180415, 571, 1, 1, 5140.784, -2211.82, 238.1585, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0695,180415, 571, 1, 1, 5140.784, -2211.82, 238.1585, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0696,180415, 571, 1, 1, 5176.154, -2217.055, 237.5818, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0697,180415, 571, 1, 1, 5176.154, -2217.055, 237.5818, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+0698,180415, 571, 1, 1, 5377.697, -2612.275, 305.4919, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0699,180415, 571, 1, 1, 5377.697, -2612.275, 305.4919, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0700,180415, 571, 1, 1, 5378.776, -2637.334, 304.966, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0701,180415, 571, 1, 1, 5378.776, -2637.334, 304.966, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0702,180415, 571, 1, 1, 5446.666, -2635.141, 306.7401, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0703,180415, 571, 1, 1, 5446.666, -2635.141, 306.7401, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0704,180415, 571, 1, 1, 5443.241, -2628.945, 306.7371, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0705,180415, 571, 1, 1, 5443.241, -2628.945, 306.7371, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0706,180415, 571, 1, 1, 5444.132, -2632.507, 306.7371, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0707,180415, 571, 1, 1, 5444.132, -2632.507, 306.7371, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0708,180415, 571, 1, 1, 5446.891, -2622.866, 306.733, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0709,180415, 571, 1, 1, 5446.891, -2622.866, 306.733, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0710,180415, 571, 1, 1, 5450.479, -2621.981, 306.7277, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0711,180415, 571, 1, 1, 5450.479, -2621.981, 306.7277, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0712,180415, 571, 1, 1, 5453.979, -2622.99, 306.5936, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0713,180415, 571, 1, 1, 5453.979, -2622.99, 306.5936, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0714,180415, 571, 1, 1, 5450.222, -2636.167, 306.739, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0715,180415, 571, 1, 1, 5450.222, -2636.167, 306.739, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0716,180415, 571, 1, 1, 5444.251, -2625.413, 306.7368, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0717,180415, 571, 1, 1, 5444.251, -2625.413, 306.7368, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0718,180415, 571, 1, 1, 5453.774, -2635.269, 306.7326, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0719,180415, 571, 1, 1, 5453.774, -2635.269, 306.7326, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0720,180415, 571, 1, 1, 5456.549, -2625.604, 306.6074, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0721,180415, 571, 1, 1, 5456.549, -2625.604, 306.6074, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0722,180415, 571, 1, 1, 5456.413, -2632.691, 306.7231, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0723,180415, 571, 1, 1, 5456.413, -2632.691, 306.7231, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0724,180415, 571, 1, 1, 5457.469, -2629.154, 306.7375, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0725,180415, 571, 1, 1, 5457.469, -2629.154, 306.7375, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0726,180415, 571, 1, 1, 5528.001, -2665.6, 305.3742, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0727,180415, 571, 1, 1, 5528.001, -2665.6, 305.3742, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0728,180415, 571, 1, 1, 5500.662, -2662.148, 304.9659, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0729,180415, 571, 1, 1, 5500.662, -2662.148, 304.9659, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+0730,180415, 571, 1, 1, 5763.567, -3552.541, 386.5541, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0731,180415, 571, 1, 1, 5763.567, -3552.541, 386.5541, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0732,180415, 571, 1, 1, 5768.135, -3553.175, 386.5514, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0733,180415, 571, 1, 1, 5768.135, -3553.175, 386.5514, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0734,180415, 571, 1, 1, 5750.391, -3570.385, 386.6082, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0735,180415, 571, 1, 1, 5750.391, -3570.385, 386.6082, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0736,180415, 571, 1, 1, 5776.281, -3557.164, 386.5179, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0737,180415, 571, 1, 1, 5776.281, -3557.164, 386.5179, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0738,180415, 571, 1, 1, 5762.846, -3557.929, 386.7904, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0739,180415, 571, 1, 1, 5762.846, -3557.929, 386.7904, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0740,180415, 571, 1, 1, 5775.812, -3560.629, 386.5844, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0741,180415, 571, 1, 1, 5775.812, -3560.629, 386.5844, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0742,180415, 571, 1, 1, 5757.775, -3561.603, 386.7299, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0743,180415, 571, 1, 1, 5757.775, -3561.603, 386.7299, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0744,180415, 571, 1, 1, 5776.619, -3565.798, 386.6816, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0745,180415, 571, 1, 1, 5776.619, -3565.798, 386.6816, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0746,180415, 571, 1, 1, 5776.687, -3569.371, 386.6979, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0747,180415, 571, 1, 1, 5776.687, -3569.371, 386.6979, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0748,180415, 571, 1, 1, 5773.405, -3555.642, 386.5388, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0749,180415, 571, 1, 1, 5773.405, -3555.642, 386.5388, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0750,180415, 571, 1, 1, 5769.636, -3555.544, 386.6231, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0751,180415, 571, 1, 1, 5769.636, -3555.544, 386.6231, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0752,180415, 571, 1, 1, 5752.563, -3565.215, 386.6399, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0753,180415, 571, 1, 1, 5752.563, -3565.215, 386.6399, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0754,180415, 571, 1, 1, 5775.966, -3574.389, 387.2715, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0755,180415, 571, 1, 1, 5775.966, -3574.389, 387.2715, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0756,180415, 571, 1, 1, 5760.6, -3586.51, 386.5219, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0757,180415, 571, 1, 1, 5760.6, -3586.51, 386.5219, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0758,180415, 571, 1, 1, 5748.784, -3573.642, 386.5444, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0759,180415, 571, 1, 1, 5748.784, -3573.642, 386.5444, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0760,180415, 571, 1, 1, 5765.48, -3584.281, 386.6219, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0761,180415, 571, 1, 1, 5765.48, -3584.281, 386.6219, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0762,180415, 571, 1, 1, 5755.499, -3578.478, 386.6624, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0763,180415, 571, 1, 1, 5755.499, -3578.478, 386.6624, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0764,180415, 571, 1, 1, 5768.435, -3581.585, 386.7327, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0765,180415, 571, 1, 1, 5768.435, -3581.585, 386.7327, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0766,180415, 571, 1, 1, 5772.202, -3578.392, 386.7462, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0767,180415, 571, 1, 1, 5772.202, -3578.392, 386.7462, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0768,180415, 571, 1, 1, 5759.083, -3583, 386.592, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0769,180415, 571, 1, 1, 5759.083, -3583, 386.592, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+0770,180415, 571, 1, 1, 3873.8, -4541.213, 210.1521, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0771,180415, 571, 1, 1, 3873.8, -4541.213, 210.1521, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0772,180415, 571, 1, 1, 3871.856, -4548.686, 211.1932, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0773,180415, 571, 1, 1, 3871.856, -4548.686, 211.1932, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0774,180415, 571, 1, 1, 3873.244, -4548.734, 211.219, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0775,180415, 571, 1, 1, 3873.244, -4548.734, 211.219, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0776,180415, 571, 1, 1, 3862.183, -4548.674, 211.6033, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0777,180415, 571, 1, 1, 3862.183, -4548.674, 211.6033, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0778,180415, 571, 1, 1, 3865.728, -4534.643, 211.7069, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0779,180415, 571, 1, 1, 3865.728, -4534.643, 211.7069, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0780,180415, 571, 1, 1, 3880.78, -4510.24, 218.4157, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0781,180415, 571, 1, 1, 3880.78, -4510.24, 218.4157, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0782,180415, 571, 1, 1, 3833.083, -4531.847, 213.2785, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0783,180415, 571, 1, 1, 3833.083, -4531.847, 213.2785, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0784,180415, 571, 1, 1, 3861.911, -4519.634, 211.6107, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0785,180415, 571, 1, 1, 3861.911, -4519.634, 211.6107, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0786,180415, 571, 1, 1, 3863.615, -4516.346, 214.1784, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0787,180415, 571, 1, 1, 3863.615, -4516.346, 214.1784, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0788,180415, 571, 1, 1, 3830.969, -4499.772, 206.4349, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4211)
+(@OGUID+0789,180415, 571, 1, 1, 3830.969, -4499.772, 206.4349, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4211)
+(@OGUID+0790,180415, 571, 1, 1, 3443.286, -2823.03, 202.9982, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0791,180415, 571, 1, 1, 3443.286, -2823.03, 202.9982, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0792,180415, 571, 1, 1, 3407.794, -2841.943, 202.67, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0793,180415, 571, 1, 1, 3407.794, -2841.943, 202.67, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0794,180415, 571, 1, 1, 3441.109, -2824.373, 202.9075, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0795,180415, 571, 1, 1, 3441.109, -2824.373, 202.9075, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0796,180415, 571, 1, 1, 3438.945, -2825.767, 203.0237, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0797,180415, 571, 1, 1, 3438.945, -2825.767, 203.0237, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0798,180415, 571, 1, 1, 3440.277, -2818.991, 203.0136, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0799,180415, 571, 1, 1, 3440.277, -2818.991, 203.0136, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0800,180415, 571, 1, 1, 3436.816, -2827.108, 202.9122, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0801,180415, 571, 1, 1, 3436.816, -2827.108, 202.9122, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0802,180415, 571, 1, 1, 3441.738, -2820.991, 202.9215, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0803,180415, 571, 1, 1, 3441.738, -2820.991, 202.9215, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0804,180415, 571, 1, 1, 3434.637, -2828.344, 202.9919, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0805,180415, 571, 1, 1, 3434.637, -2828.344, 202.9919, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0806,180415, 571, 1, 1, 3406.82, -2839.58, 202.8193, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0807,180415, 571, 1, 1, 3406.82, -2839.58, 202.8193, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0808,180415, 571, 1, 1, 3437.037, -2814.965, 202.884, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0809,180415, 571, 1, 1, 3437.037, -2814.965, 202.884, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0810,180415, 571, 1, 1, 3438.661, -2816.929, 203.0817, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0811,180415, 571, 1, 1, 3438.661, -2816.929, 203.0817, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0812,180415, 571, 1, 1, 3405.275, -2832.076, 202.8215, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0813,180415, 571, 1, 1, 3405.275, -2832.076, 202.8215, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0814,180415, 571, 1, 1, 3405.745, -2834.549, 202.8814, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0815,180415, 571, 1, 1, 3405.745, -2834.549, 202.8814, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0816,180415, 571, 1, 1, 3406.287, -2837.063, 202.8049, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0817,180415, 571, 1, 1, 3406.287, -2837.063, 202.8049, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0818,180415, 571, 1, 1, 3407.031, -2802.89, 212.337, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0819,180415, 571, 1, 1, 3407.031, -2802.89, 212.337, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0820,180415, 571, 1, 1, 3444.464, -2796.757, 203.2364, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0821,180415, 571, 1, 1, 3444.464, -2796.757, 203.2364, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0822,180415, 571, 1, 1, 3400.99, -2811.019, 202.6149, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0823,180415, 571, 1, 1, 3400.99, -2811.019, 202.6149, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0824,180415, 571, 1, 1, 3413.189, -2802.605, 212.3711, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0825,180415, 571, 1, 1, 3413.189, -2802.605, 212.3711, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0826,180415, 571, 1, 1, 3415.103, -2800.74, 202.2157, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0827,180415, 571, 1, 1, 3415.103, -2800.74, 202.2157, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0828,180415, 571, 1, 1, 3400.969, -2809.62, 202.0353, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0829,180415, 571, 1, 1, 3400.969, -2809.62, 202.0353, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0830,180415, 571, 1, 1, 3400.82, -2811.734, 202.7707, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0831,180415, 571, 1, 1, 3400.82, -2811.734, 202.7707, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0832,180415, 571, 1, 1, 3411.195, -2811.007, 202.0898, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0833,180415, 571, 1, 1, 3411.195, -2811.007, 202.0898, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0834,180415, 571, 1, 1, 3411.819, -2803.252, 212.5847, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0835,180415, 571, 1, 1, 3411.819, -2803.252, 212.5847, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0836,180415, 571, 1, 1, 3441.908, -2797.017, 203.1431, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0837,180415, 571, 1, 1, 3441.908, -2797.017, 203.1431, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0838,180415, 571, 1, 1, 3407.968, -2803.407, 213.5988, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0839,180415, 571, 1, 1, 3407.968, -2803.407, 213.5988, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0840,180415, 571, 1, 1, 3407.057, -2802.274, 212.4086, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0841,180415, 571, 1, 1, 3407.057, -2802.274, 212.4086, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0842,180415, 571, 1, 1, 3457.735, -2786.757, 202.8651, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0843,180415, 571, 1, 1, 3457.735, -2786.757, 202.8651, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0844,180415, 571, 1, 1, 3455.872, -2783.97, 202.7178, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0845,180415, 571, 1, 1, 3455.872, -2783.97, 202.7178, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0846,180415, 571, 1, 1, 3400.54, -2799.177, 201.4966, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0847,180415, 571, 1, 1, 3400.54, -2799.177, 201.4966, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0848,180415, 571, 1, 1, 3456.458, -2789.083, 203.3248, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0849,180415, 571, 1, 1, 3456.458, -2789.083, 203.3248, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0850,180415, 571, 1, 1, 3399.834, -2790.558, 212.2449, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0851,180415, 571, 1, 1, 3399.834, -2790.558, 212.2449, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0852,180415, 571, 1, 1, 3405.42, -2788.209, 203.0673, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0853,180415, 571, 1, 1, 3405.42, -2788.209, 203.0673, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0854,180415, 571, 1, 1, 3400.798, -2792.024, 212.3608, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0855,180415, 571, 1, 1, 3400.798, -2792.024, 212.3608, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0856,180415, 571, 1, 1, 3406.408, -2787.522, 203.0332, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0857,180415, 571, 1, 1, 3406.408, -2787.522, 203.0332, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0858,180415, 571, 1, 1, 3398.889, -2790.992, 213.4207, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0859,180415, 571, 1, 1, 3398.889, -2790.992, 213.4207, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0860,180415, 571, 1, 1, 3400.714, -2792.445, 212.2851, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0861,180415, 571, 1, 1, 3400.714, -2792.445, 212.2851, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0862,180415, 571, 1, 1, 3399.956, -2791.192, 212.2966, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0863,180415, 571, 1, 1, 3399.956, -2791.192, 212.2966, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0864,180415, 571, 1, 1, 3399.706, -2791.847, 212.3247, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0865,180415, 571, 1, 1, 3399.706, -2791.847, 212.3247, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0866,180415, 571, 1, 1, 3413.264, -2780.046, 202.9309, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0867,180415, 571, 1, 1, 3413.264, -2780.046, 202.9309, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0868,180415, 571, 1, 1, 3466.171, -2781.337, 202.358, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0869,180415, 571, 1, 1, 3466.171, -2781.337, 202.358, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0870,180415, 571, 1, 1, 3458.188, -2776.3, 201.8077, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0871,180415, 571, 1, 1, 3458.188, -2776.3, 201.8077, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0872,180415, 571, 1, 1, 3472.556, -2782.05, 202.3065, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0873,180415, 571, 1, 1, 3472.556, -2782.05, 202.3065, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0874,180415, 571, 1, 1, 3404.212, -2786.731, 203.0216, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0875,180415, 571, 1, 1, 3404.212, -2786.731, 203.0216, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0876,180415, 571, 1, 1, 3408.607, -2785.961, 202.9851, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0877,180415, 571, 1, 1, 3408.607, -2785.961, 202.9851, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0878,180415, 571, 1, 1, 3475.129, -2782.253, 202.1459, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0879,180415, 571, 1, 1, 3475.129, -2782.253, 202.1459, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0880,180415, 571, 1, 1, 3412.443, -2783.161, 202.9973, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0881,180415, 571, 1, 1, 3412.443, -2783.161, 202.9973, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0882,180415, 571, 1, 1, 3403.424, -2785.687, 202.9964, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0883,180415, 571, 1, 1, 3403.424, -2785.687, 202.9964, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0884,180415, 571, 1, 1, 3407.591, -2786.707, 202.9976, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0885,180415, 571, 1, 1, 3407.591, -2786.707, 202.9976, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0886,180415, 571, 1, 1, 3470.033, -2781.84, 202.4652, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0887,180415, 571, 1, 1, 3470.033, -2781.84, 202.4652, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0888,180415, 571, 1, 1, 3411.324, -2783.891, 202.9264, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0889,180415, 571, 1, 1, 3411.324, -2783.891, 202.9264, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0890,180415, 571, 1, 1, 3397.692, -2789.662, 213.2649, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0891,180415, 571, 1, 1, 3397.692, -2789.662, 213.2649, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0892,180415, 571, 1, 1, 3402.704, -2784.6, 202.9906, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0893,180415, 571, 1, 1, 3402.704, -2784.6, 202.9906, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0894,180415, 571, 1, 1, 3462.118, -2779.648, 202.4681, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0895,180415, 571, 1, 1, 3462.118, -2779.648, 202.4681, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0896,180415, 571, 1, 1, 3414.508, -2781.62, 202.9946, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0897,180415, 571, 1, 1, 3414.508, -2781.62, 202.9946, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0898,180415, 571, 1, 1, 3413.529, -2782.306, 202.9957, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0899,180415, 571, 1, 1, 3413.529, -2782.306, 202.9957, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0900,180415, 571, 1, 1, 3413.155, -2777.403, 206.0491, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0901,180415, 571, 1, 1, 3413.155, -2777.403, 206.0491, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0902,180415, 571, 1, 1, 3419.603, -2772.811, 201.5641, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0903,180415, 571, 1, 1, 3419.603, -2772.811, 201.5641, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0904,180415, 571, 1, 1, 3425.753, -2769.791, 202.0575, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0905,180415, 571, 1, 1, 3425.753, -2769.791, 202.0575, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0906,180415, 571, 1, 1, 3456.768, -2774.179, 201.8534, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0907,180415, 571, 1, 1, 3456.768, -2774.179, 201.8534, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0908,180415, 571, 1, 1, 3411.746, -2778.068, 202.9529, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0909,180415, 571, 1, 1, 3411.746, -2778.068, 202.9529, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0910,180415, 571, 1, 1, 3406.269, -2781.944, 203.4021, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0911,180415, 571, 1, 1, 3406.269, -2781.944, 203.4021, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0912,180415, 571, 1, 1, 3425.471, -2770.199, 202.053, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0913,180415, 571, 1, 1, 3425.471, -2770.199, 202.053, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0914,180415, 571, 1, 1, 3412.486, -2778.925, 202.9093, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0915,180415, 571, 1, 1, 3412.486, -2778.925, 202.9093, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+0916,180415, 571, 1, 1, 3397.889, -2752.26, 201.1765, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0917,180415, 571, 1, 1, 3397.889, -2752.26, 201.1765, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0918,180415, 571, 1, 1, 3397.825, -2754.811, 201.1646, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0919,180415, 571, 1, 1, 3397.825, -2754.811, 201.1646, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0920,180415, 571, 1, 1, 3455.441, -2749.057, 200.8513, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0921,180415, 571, 1, 1, 3455.441, -2749.057, 200.8513, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0922,180415, 571, 1, 1, 3440.693, -2745.642, 200.7106, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0923,180415, 571, 1, 1, 3440.693, -2745.642, 200.7106, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0924,180415, 571, 1, 1, 3427.793, -2745.417, 200.9314, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0925,180415, 571, 1, 1, 3427.793, -2745.417, 200.9314, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0926,180415, 571, 1, 1, 3445.042, -2751.564, 199.4239, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0927,180415, 571, 1, 1, 3445.042, -2751.564, 199.4239, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0928,180415, 571, 1, 1, 3455.573, -2746.484, 200.8855, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0929,180415, 571, 1, 1, 3455.573, -2746.484, 200.8855, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0930,180415, 571, 1, 1, 3443.285, -2745.714, 200.7417, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0931,180415, 571, 1, 1, 3443.285, -2745.714, 200.7417, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0932,180415, 571, 1, 1, 3425.394, -2745.384, 200.891, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0933,180415, 571, 1, 1, 3425.394, -2745.384, 200.891, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0934,180415, 571, 1, 1, 3445.895, -2745.695, 200.92, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0935,180415, 571, 1, 1, 3445.895, -2745.695, 200.92, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0936,180415, 571, 1, 1, 3448.288, -2745.802, 200.9623, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0937,180415, 571, 1, 1, 3448.288, -2745.802, 200.9623, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0938,180415, 571, 1, 1, 3455.298, -2756.604, 201.076, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0939,180415, 571, 1, 1, 3455.298, -2756.604, 201.076, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0940,180415, 571, 1, 1, 3455.351, -2754.038, 201.1146, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0941,180415, 571, 1, 1, 3455.351, -2754.038, 201.1146, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0942,180415, 571, 1, 1, 3422.8, -2745.42, 200.716, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0943,180415, 571, 1, 1, 3422.8, -2745.42, 200.716, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0944,180415, 571, 1, 1, 3455.435, -2751.653, 201.1238, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0945,180415, 571, 1, 1, 3455.435, -2751.653, 201.1238, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0946,180415, 571, 1, 1, 3420.21, -2745.375, 200.6848, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0947,180415, 571, 1, 1, 3420.21, -2745.375, 200.6848, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0948,180415, 571, 1, 1, 3430.328, -2745.441, 200.9204, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0949,180415, 571, 1, 1, 3430.328, -2745.441, 200.9204, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0950,180415, 571, 1, 1, 3449.38, -2752.161, 199.3402, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0951,180415, 571, 1, 1, 3449.38, -2752.161, 199.3402, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0952,180415, 571, 1, 1, 3450.814, -2745.738, 201.1831, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0953,180415, 571, 1, 1, 3450.814, -2745.738, 201.1831, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0954,180415, 571, 1, 1, 3406.284, -2744.823, 200.6775, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0955,180415, 571, 1, 1, 3406.284, -2744.823, 200.6775, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0956,180415, 571, 1, 1, 3398.188, -2744.674, 200.9263, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0957,180415, 571, 1, 1, 3398.188, -2744.674, 200.9263, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0958,180415, 571, 1, 1, 3408.93, -2745.019, 200.7298, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0959,180415, 571, 1, 1, 3408.93, -2745.019, 200.7298, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0960,180415, 571, 1, 1, 3398.062, -2747.274, 200.9093, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0961,180415, 571, 1, 1, 3398.062, -2747.274, 200.9093, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0962,180415, 571, 1, 1, 3411.495, -2744.974, 200.9156, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0963,180415, 571, 1, 1, 3411.495, -2744.974, 200.9156, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0964,180415, 571, 1, 1, 3398.008, -2749.851, 201.1351, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0965,180415, 571, 1, 1, 3398.008, -2749.851, 201.1351, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0966,180415, 571, 1, 1, 3413.885, -2745.063, 200.9569, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0967,180415, 571, 1, 1, 3413.885, -2745.063, 200.9569, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0968,180415, 571, 1, 1, 3416.44, -2745.043, 200.9444, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0969,180415, 571, 1, 1, 3416.44, -2745.043, 200.9444, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+0970,180415, 571, 1, 1, 3306.957, -2346.275, 114.2688, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0971,180415, 571, 1, 1, 3306.957, -2346.275, 114.2688, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0972,180415, 571, 1, 1, 3306.503, -2346.271, 114.2327, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0973,180415, 571, 1, 1, 3306.503, -2346.271, 114.2327, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0974,180415, 571, 1, 1, 3314.758, -2336.475, 113.8916, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0975,180415, 571, 1, 1, 3314.758, -2336.475, 113.8916, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0976,180415, 571, 1, 1, 3315.174, -2335.131, 112.3857, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0977,180415, 571, 1, 1, 3315.174, -2335.131, 112.3857, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0978,180415, 571, 1, 1, 3313.81, -2337.315, 112.3801, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0979,180415, 571, 1, 1, 3313.81, -2337.315, 112.3801, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0980,180415, 571, 1, 1, 3314.402, -2336.751, 113.8963, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0981,180415, 571, 1, 1, 3314.402, -2336.751, 113.8963, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+0982,180415, 571, 1, 1, 3320.02, -2321.913, 114.3211, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0983,180415, 571, 1, 1, 3320.02, -2321.913, 114.3211, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0984,180415, 571, 1, 1, 3319.593, -2323.635, 112.2697, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0985,180415, 571, 1, 1, 3319.593, -2323.635, 112.2697, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0986,180415, 571, 1, 1, 3319.35, -2324.088, 112.2623, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0987,180415, 571, 1, 1, 3319.35, -2324.088, 112.2623, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0988,180415, 571, 1, 1, 3320.5, -2321.387, 114.3223, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0989,180415, 571, 1, 1, 3320.5, -2321.387, 114.3223, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0990,180415, 571, 1, 1, 3240.985, -2236.183, 117.2045, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0991,180415, 571, 1, 1, 3240.985, -2236.183, 117.2045, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0992,180415, 571, 1, 1, 3240.313, -2236.637, 117.1827, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0993,180415, 571, 1, 1, 3240.313, -2236.637, 117.1827, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0994,180415, 571, 1, 1, 3255.964, -2216.654, 117.3241, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0995,180415, 571, 1, 1, 3255.964, -2216.654, 117.3241, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0996,180415, 571, 1, 1, 3250.294, -2214.309, 117.3726, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0997,180415, 571, 1, 1, 3250.294, -2214.309, 117.3726, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0998,180415, 571, 1, 1, 3266.923, -2221.398, 117.2959, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+0999,180415, 571, 1, 1, 3266.923, -2221.398, 117.2959, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+1000,180415, 571, 1, 1, 3273.234, -2223.792, 117.3726, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+1001,180415, 571, 1, 1, 3273.234, -2223.792, 117.3726, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+1002,180415, 571, 1, 1, 3253.368, -2199.88, 117.029, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+1003,180415, 571, 1, 1, 3253.368, -2199.88, 117.029, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+1004,180415, 571, 1, 1, 3280.633, -2211.489, 117.029, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+1005,180415, 571, 1, 1, 3280.633, -2211.489, 117.029, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+1006,180415, 571, 1, 1, 3254.062, -2187.705, 118.7545, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+1007,180415, 571, 1, 1, 3254.062, -2187.705, 118.7545, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+1008,180415, 571, 1, 1, 3256.237, -2188.316, 118.4933, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+1009,180415, 571, 1, 1, 3256.237, -2188.316, 118.4933, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+1010,180415, 571, 1, 1, 1904.515, -6141.503, 19.07745, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000)
+(@OGUID+1011,180415, 571, 1, 1, 1904.515, -6141.503, 19.07745, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000)
+(@OGUID+1012,180415, 571, 1, 1, 1904.164, -6141.786, 19.07746, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000)
+(@OGUID+1013,180415, 571, 1, 1, 1904.164, -6141.786, 19.07746, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000)
+(@OGUID+1014,180415, 571, 1, 1, 730.0452, -2931.608, 7.921721, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1015,180415, 571, 1, 1, 730.0452, -2931.608, 7.921721, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1016,180415, 571, 1, 1, 726.9896, -2932.885, 7.942686, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1017,180415, 571, 1, 1, 726.9896, -2932.885, 7.942686, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1018,180415, 571, 1, 1, 732.6979, -2930.411, 7.924031, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1019,180415, 571, 1, 1, 732.6979, -2930.411, 7.924031, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1020,180415, 571, 1, 1, 732.0417, -2926.337, 7.959949, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1021,180415, 571, 1, 1, 732.0417, -2926.337, 7.959949, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1022,180415, 571, 1, 1, 728.4393, -2932.286, 7.933091, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1023,180415, 571, 1, 1, 728.4393, -2932.286, 7.933091, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1024,180415, 571, 1, 1, 725.5104, -2932.967, 8.092805, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1025,180415, 571, 1, 1, 725.5104, -2932.967, 8.092805, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1026,180415, 571, 1, 1, 731.3733, -2930.993, 7.925742, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1027,180415, 571, 1, 1, 731.3733, -2930.993, 7.925742, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1028,180415, 571, 1, 1, 697.434, -2944.288, -1.407539, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1029,180415, 571, 1, 1, 697.434, -2944.288, -1.407539, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1030,180415, 571, 1, 1, 724.4271, -2926.127, 8.093702, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1031,180415, 571, 1, 1, 724.4271, -2926.127, 8.093702, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1032,180415, 571, 1, 1, 725.8629, -2925.865, 7.972515, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1033,180415, 571, 1, 1, 725.8629, -2925.865, 7.972515, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1034,180415, 571, 1, 1, 729.1215, -2926.113, 7.972516, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1035,180415, 571, 1, 1, 729.1215, -2926.113, 7.972516, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1036,180415, 571, 1, 1, 706.757, -2944.646, -1.334748, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1037,180415, 571, 1, 1, 706.757, -2944.646, -1.334748, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1038,180415, 571, 1, 1, 727.4358, -2925.96, 7.973504, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1039,180415, 571, 1, 1, 727.4358, -2925.96, 7.973504, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1040,180415, 571, 1, 1, 730.5781, -2926.233, 7.968627, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1041,180415, 571, 1, 1, 730.5781, -2926.233, 7.968627, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1042,180415, 571, 1, 1, 694.3993, -2923.686, -1.305829, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1043,180415, 571, 1, 1, 694.3993, -2923.686, -1.305829, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1044,180415, 571, 1, 1, 704.0989, -2921.766, -1.33801, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1045,180415, 571, 1, 1, 704.0989, -2921.766, -1.33801, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+1046,180415, 571, 1, 1, 1421.866, -3274.431, 175.8965, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1047,180415, 571, 1, 1, 1421.866, -3274.431, 175.8965, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1048,180415, 571, 1, 1, 1437.179, -3255.236, 168.5082, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1049,180415, 571, 1, 1, 1437.179, -3255.236, 168.5082, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1050,180415, 571, 1, 1, 1423.415, -3272.469, 175.8965, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1051,180415, 571, 1, 1, 1423.415, -3272.469, 175.8965, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1052,180415, 571, 1, 1, 1440.88, -3258.736, 168.5083, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1053,180415, 571, 1, 1, 1440.88, -3258.736, 168.5083, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1054,180415, 571, 1, 1, 1421.422, -3276.337, 175.8964, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1055,180415, 571, 1, 1, 1421.422, -3276.337, 175.8964, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1056,180415, 571, 1, 1, 1421.38, -3278.174, 175.8965, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1057,180415, 571, 1, 1, 1421.38, -3278.174, 175.8965, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1058,180415, 571, 1, 1, 1421.837, -3279.875, 175.8964, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1059,180415, 571, 1, 1, 1421.837, -3279.875, 175.8964, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1060,180415, 571, 1, 1, 1443.076, -3260.196, 168.5083, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1061,180415, 571, 1, 1, 1443.076, -3260.196, 168.5083, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1062,180415, 571, 1, 1, 1443.797, -3259.285, 168.5083, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1063,180415, 571, 1, 1, 1443.797, -3259.285, 168.5083, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1064,180415, 571, 1, 1, 1437.932, -3254.321, 168.5089, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1065,180415, 571, 1, 1, 1437.932, -3254.321, 168.5089, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1066,180415, 571, 1, 1, 1438.714, -3257.005, 168.5084, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1067,180415, 571, 1, 1, 1438.714, -3257.005, 168.5084, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1068,180415, 571, 1, 1, 1424.549, -3281.903, 175.8964, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1069,180415, 571, 1, 1, 1424.549, -3281.903, 175.8964, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1070,180415, 571, 1, 1, 1446.208, -3272.655, 171.3525, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1071,180415, 571, 1, 1, 1446.208, -3272.655, 171.3525, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1072,180415, 571, 1, 1, 1425.948, -3281.997, 175.8964, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1073,180415, 571, 1, 1, 1425.948, -3281.997, 175.8964, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1074,180415, 571, 1, 1, 1449.852, -3275.616, 171.3525, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1075,180415, 571, 1, 1, 1449.852, -3275.616, 171.3525, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1076,180415, 571, 1, 1, 1427.842, -3281.715, 175.8965, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1077,180415, 571, 1, 1, 1427.842, -3281.715, 175.8965, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1078,180415, 571, 1, 1, 1429.609, -3280.913, 175.8965, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1079,180415, 571, 1, 1, 1429.609, -3280.913, 175.8965, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1080,180415, 571, 1, 1, 1431.264, -3278.972, 175.8965, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1081,180415, 571, 1, 1, 1431.264, -3278.972, 175.8965, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1082,180415, 571, 1, 1, 1448.076, -3274.135, 171.3525, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1083,180415, 571, 1, 1, 1448.076, -3274.135, 171.3525, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1084,180415, 571, 1, 1, 1451.38, -3276.939, 171.3525, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1085,180415, 571, 1, 1, 1451.38, -3276.939, 171.3525, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+1086,180415, 571, 1, 1, 607.8405, -4925.881, 24.95922, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1087,180415, 571, 1, 1, 607.8405, -4925.881, 24.95922, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1088,180415, 571, 1, 1, 608.6639, -4923.137, 31.06963, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1089,180415, 571, 1, 1, 608.6639, -4923.137, 31.06963, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1090,180415, 571, 1, 1, 606.8481, -4923.561, 31.05914, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1091,180415, 571, 1, 1, 606.8481, -4923.561, 31.05914, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1092,180415, 571, 1, 1, 592.6419, -4947.118, 27.2703, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1093,180415, 571, 1, 1, 592.6419, -4947.118, 27.2703, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1094,180415, 571, 1, 1, 601.7822, -4924.856, 31.09424, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1095,180415, 571, 1, 1, 601.7822, -4924.856, 31.09424, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1096,180415, 571, 1, 1, 592.2818, -4945.582, 27.2703, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1097,180415, 571, 1, 1, 592.2818, -4945.582, 27.2703, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1098,180415, 571, 1, 1, 602.6741, -4929.257, 22.72639, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1099,180415, 571, 1, 1, 602.6741, -4929.257, 22.72639, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1100,180415, 571, 1, 1, 607.1002, -4923.413, 24.95922, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1101,180415, 571, 1, 1, 607.1002, -4923.413, 24.95922, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1102,180415, 571, 1, 1, 601.2928, -4929.597, 22.72639, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1103,180415, 571, 1, 1, 601.2928, -4929.597, 22.72639, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1104,180415, 571, 1, 1, 599.9999, -4925.255, 31.10255, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1105,180415, 571, 1, 1, 599.9999, -4925.255, 31.10255, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1106,180415, 571, 1, 1, 604.4755, -4924.116, 24.96138, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1107,180415, 571, 1, 1, 604.4755, -4924.116, 24.96138, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1108,180415, 571, 1, 1, 592.1803, -4952.106, 27.2703, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1109,180415, 571, 1, 1, 592.1803, -4952.106, 27.2703, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1110,180415, 571, 1, 1, 591.1564, -4953.459, 27.2703, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1111,180415, 571, 1, 1, 591.1564, -4953.459, 27.2703, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1112,180415, 571, 1, 1, 605.0962, -4924.019, 31.05478, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1113,180415, 571, 1, 1, 605.0962, -4924.019, 31.05478, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1114,180415, 571, 1, 1, 592.8271, -4950.619, 27.2703, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1115,180415, 571, 1, 1, 592.8271, -4950.619, 27.2703, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1116,180415, 571, 1, 1, 603.4061, -4924.424, 31.06834, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1117,180415, 571, 1, 1, 603.4061, -4924.424, 31.06834, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1118,180415, 571, 1, 1, 601.9756, -4924.741, 24.95593, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1119,180415, 571, 1, 1, 601.9756, -4924.741, 24.95593, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1120,180415, 571, 1, 1, 595.087, -4926.527, 31.06053, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1121,180415, 571, 1, 1, 595.087, -4926.527, 31.06053, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1122,180415, 571, 1, 1, 599.5756, -4929.97, 22.72639, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1123,180415, 571, 1, 1, 599.5756, -4929.97, 22.72639, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1124,180415, 571, 1, 1, 587.9566, -4954.577, 27.2703, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1125,180415, 571, 1, 1, 587.9566, -4954.577, 27.2703, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1126,180415, 571, 1, 1, 593.6668, -4929.349, 31.07931, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1127,180415, 571, 1, 1, 593.6668, -4929.349, 31.07931, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1128,180415, 571, 1, 1, 596.3693, -4930.906, 22.72639, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1129,180415, 571, 1, 1, 596.3693, -4930.906, 22.72639, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1130,180415, 571, 1, 1, 597.8043, -4930.463, 22.72639, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1131,180415, 571, 1, 1, 597.8043, -4930.463, 22.72639, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1132,180415, 571, 1, 1, 598.4451, -4925.653, 31.07524, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1133,180415, 571, 1, 1, 598.4451, -4925.653, 31.07524, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1134,180415, 571, 1, 1, 601.3765, -4922.399, 24.95571, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1135,180415, 571, 1, 1, 601.3765, -4922.399, 24.95571, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1136,180415, 571, 1, 1, 586.3301, -4953.981, 27.2703, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1137,180415, 571, 1, 1, 586.3301, -4953.981, 27.2703, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1138,180415, 571, 1, 1, 596.6023, -4926.172, 31.03511, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1139,180415, 571, 1, 1, 596.6023, -4926.172, 31.03511, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1140,180415, 571, 1, 1, 600.8096, -4920.225, 24.95571, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1141,180415, 571, 1, 1, 600.8096, -4920.225, 24.95571, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1142,180415, 571, 1, 1, 590.7567, -4934.542, 31.1084, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1143,180415, 571, 1, 1, 590.7567, -4934.542, 31.1084, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1144,180415, 571, 1, 1, 584.8109, -4952.982, 27.2703, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1145,180415, 571, 1, 1, 584.8109, -4952.982, 27.2703, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1146,180415, 571, 1, 1, 593.1274, -4927, 31.07476, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1147,180415, 571, 1, 1, 593.1274, -4927, 31.07476, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1148,180415, 571, 1, 1, 582.5004, -4947.915, 27.2703, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1149,180415, 571, 1, 1, 582.5004, -4947.915, 27.2703, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1150,180415, 571, 1, 1, 584.9875, -4936.011, 31.05981, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1151,180415, 571, 1, 1, 584.9875, -4936.011, 31.05981, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1152,180415, 571, 1, 1, 586.9916, -4935.478, 31.03452, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1153,180415, 571, 1, 1, 586.9916, -4935.478, 31.03452, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1154,180415, 571, 1, 1, 591.3271, -4919.841, 24.76182, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1155,180415, 571, 1, 1, 591.3271, -4919.841, 24.76182, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1156,180415, 571, 1, 1, 582.8868, -4949.487, 27.2703, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1157,180415, 571, 1, 1, 582.8868, -4949.487, 27.2703, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1158,180415, 571, 1, 1, 589.015, -4934.996, 31.07944, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1159,180415, 571, 1, 1, 589.015, -4934.996, 31.07944, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1160,180415, 571, 1, 1, 589.0734, -4924.763, 19.81484, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1161,180415, 571, 1, 1, 589.0734, -4924.763, 19.81484, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1162,180415, 571, 1, 1, 582.024, -4933.135, 31.07914, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1163,180415, 571, 1, 1, 582.024, -4933.135, 31.07914, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1164,180415, 571, 1, 1, 586.677, -4921.894, 24.03878, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1165,180415, 571, 1, 1, 586.677, -4921.894, 24.03878, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1166,180415, 571, 1, 1, 588.6942, -4923.249, 19.81484, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1167,180415, 571, 1, 1, 588.6942, -4923.249, 19.81484, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1168,180415, 571, 1, 1, 582.4625, -4934.822, 31.0773, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1169,180415, 571, 1, 1, 582.4625, -4934.822, 31.0773, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1170,180415, 571, 1, 1, 589.4875, -4926.273, 19.81484, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1171,180415, 571, 1, 1, 589.4875, -4926.273, 19.81484, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+1172,180415, 571, 1, 1, 2492.693, -1907.169, 9.526185, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1173,180415, 571, 1, 1, 2492.693, -1907.169, 9.526185, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1174,180415, 571, 1, 1, 2490.183, -1883.224, 9.115799, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1175,180415, 571, 1, 1, 2490.183, -1883.224, 9.115799, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1176,180415, 571, 1, 1, 2501.102, -1882.176, 8.549006, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1177,180415, 571, 1, 1, 2501.102, -1882.176, 8.549006, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1178,180415, 571, 1, 1, 2501.947, -1893.583, 8.302938, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1179,180415, 571, 1, 1, 2501.947, -1893.583, 8.302938, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1180,180415, 571, 1, 1, 2506.74, -1900.911, 8.029154, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1181,180415, 571, 1, 1, 2506.74, -1900.911, 8.029154, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1182,180415, 571, 1, 1, 2490.393, -1897.489, 9.970935, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1183,180415, 571, 1, 1, 2490.393, -1897.489, 9.970935, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1184,180415, 571, 1, 1, 2477.013, -1901.73, 11.23512, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1185,180415, 571, 1, 1, 2477.013, -1901.73, 11.23512, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1186,180415, 571, 1, 1, 2480.636, -1898.305, 11.20697, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1187,180415, 571, 1, 1, 2480.636, -1898.305, 11.20697, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1188,180415, 571, 1, 1, 2465.555, -1903.595, 11.20657, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1189,180415, 571, 1, 1, 2465.555, -1903.595, 11.20657, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1190,180415, 571, 1, 1, 2470.907, -1903.663, 11.225, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1191,180415, 571, 1, 1, 2470.907, -1903.663, 11.225, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+1192,180415, 571, 1, 1, 3720.282, -703.4149, 216.9913, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1193,180415, 571, 1, 1, 3720.282, -703.4149, 216.9913, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1194,180415, 571, 1, 1, 3721.375, -700.6528, 217.3681, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1195,180415, 571, 1, 1, 3721.375, -700.6528, 217.3681, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1196,180415, 571, 1, 1, 3724.484, -697.309, 217.4367, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1197,180415, 571, 1, 1, 3724.484, -697.309, 217.4367, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1198,180415, 571, 1, 1, 3723.878, -701.0903, 217.3764, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1199,180415, 571, 1, 1, 3723.878, -701.0903, 217.3764, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1200,180415, 571, 1, 1, 3722.675, -704.342, 217.2098, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1201,180415, 571, 1, 1, 3722.675, -704.342, 217.2098, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1202,180415, 571, 1, 1, 3723.472, -693.4011, 217.4225, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1203,180415, 571, 1, 1, 3723.472, -693.4011, 217.4225, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1204,180415, 571, 1, 1, 3721.266, -694.7188, 217.1692, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1205,180415, 571, 1, 1, 3721.266, -694.7188, 217.1692, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1206,180415, 571, 1, 1, 3719.472, -692.0851, 217.2261, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1207,180415, 571, 1, 1, 3719.472, -692.0851, 217.2261, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1208,180415, 571, 1, 1, 3721.933, -697.5799, 217.3843, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1209,180415, 571, 1, 1, 3721.933, -697.5799, 217.3843, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1210,180415, 571, 1, 1, 3720.975, -690.0139, 217.1697, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1211,180415, 571, 1, 1, 3720.975, -690.0139, 217.1697, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1212,180415, 571, 1, 1, 3673.806, -704.4462, 215.2892, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1213,180415, 571, 1, 1, 3673.806, -704.4462, 215.2892, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1214,180415, 571, 1, 1, 3680.288, -702.743, 215.5022, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1215,180415, 571, 1, 1, 3680.288, -702.743, 215.5022, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1216,180415, 571, 1, 1, 3663.695, -709.2948, 213.8031, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1217,180415, 571, 1, 1, 3663.695, -709.2948, 213.8031, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1218,180415, 571, 1, 1, 3662.965, -709.1875, 214.0366, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1219,180415, 571, 1, 1, 3662.965, -709.1875, 214.0366, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1220,180415, 571, 1, 1, 3663.579, -704.8941, 214.0316, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1221,180415, 571, 1, 1, 3663.579, -704.8941, 214.0316, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1222,180415, 571, 1, 1, 3664.109, -705.0291, 213.8467, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1223,180415, 571, 1, 1, 3664.109, -705.0291, 213.8467, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1224,180415, 571, 1, 1, 3657.745, -692.2751, 223.6275, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1225,180415, 571, 1, 1, 3657.745, -692.2751, 223.6275, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1226,180415, 571, 1, 1, 3660.364, -700.371, 223.6275, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1227,180415, 571, 1, 1, 3660.364, -700.371, 223.6275, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1228,180415, 571, 1, 1, 3650.258, -699.3051, 223.6275, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1229,180415, 571, 1, 1, 3650.258, -699.3051, 223.6275, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1230,180415, 571, 1, 1, 3661.816, -704.7014, 214.8959, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1231,180415, 571, 1, 1, 3661.816, -704.7014, 214.8959, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1232,180415, 571, 1, 1, 3654.531, -691.826, 223.6275, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1233,180415, 571, 1, 1, 3654.531, -691.826, 223.6275, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1234,180415, 571, 1, 1, 3652.8, -692.9138, 223.6275, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1235,180415, 571, 1, 1, 3652.8, -692.9138, 223.6275, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1236,180415, 571, 1, 1, 3655.83, -710.9506, 227.4323, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1237,180415, 571, 1, 1, 3655.83, -710.9506, 227.4323, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1238,180415, 571, 1, 1, 3651.423, -694.3221, 223.6275, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1239,180415, 571, 1, 1, 3651.423, -694.3221, 223.6275, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1240,180415, 571, 1, 1, 3660.504, -697.7479, 223.6275, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1241,180415, 571, 1, 1, 3660.504, -697.7479, 223.6275, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1242,180415, 571, 1, 1, 3662.702, -704.8438, 214.3862, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1243,180415, 571, 1, 1, 3662.702, -704.8438, 214.3862, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1244,180415, 571, 1, 1, 3660.119, -695.2737, 223.6275, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1245,180415, 571, 1, 1, 3660.119, -695.2737, 223.6275, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1246,180415, 571, 1, 1, 3658.975, -693.3618, 223.6275, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1247,180415, 571, 1, 1, 3658.975, -693.3618, 223.6275, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1248,180415, 571, 1, 1, 3650.527, -697.048, 223.6275, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1249,180415, 571, 1, 1, 3650.527, -697.048, 223.6275, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1250,180415, 571, 1, 1, 3661.141, -709.1563, 214.8015, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1251,180415, 571, 1, 1, 3661.141, -709.1563, 214.8015, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1252,180415, 571, 1, 1, 3646.771, -712.575, 216.1448, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1253,180415, 571, 1, 1, 3646.771, -712.575, 216.1448, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1254,180415, 571, 1, 1, 3639.381, -715.8611, 227.3913, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1255,180415, 571, 1, 1, 3639.381, -715.8611, 227.3913, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1256,180415, 571, 1, 1, 3655.505, -714.1703, 227.4361, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1257,180415, 571, 1, 1, 3655.505, -714.1703, 227.4361, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1258,180415, 571, 1, 1, 3643.311, -713.7602, 227.4366, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1259,180415, 571, 1, 1, 3643.311, -713.7602, 227.4366, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1260,180415, 571, 1, 1, 3649.78, -710.2109, 227.4335, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1261,180415, 571, 1, 1, 3649.78, -710.2109, 227.4335, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1262,180415, 571, 1, 1, 3650.835, -720.3264, 216.1421, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1263,180415, 571, 1, 1, 3650.835, -720.3264, 216.1421, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1264,180415, 571, 1, 1, 3641.055, -711.5729, 218.9725, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1265,180415, 571, 1, 1, 3641.055, -711.5729, 218.9725, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1266,180415, 571, 1, 1, 3642.938, -716.2329, 227.4314, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1267,180415, 571, 1, 1, 3642.938, -716.2329, 227.4314, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1268,180415, 571, 1, 1, 3656.18, -720.6285, 216.1422, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1269,180415, 571, 1, 1, 3656.18, -720.6285, 216.1422, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1270,180415, 571, 1, 1, 3662.277, -709.184, 214.3835, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1271,180415, 571, 1, 1, 3662.277, -709.184, 214.3835, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1272,180415, 571, 1, 1, 3653.458, -720.2587, 216.1421, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1273,180415, 571, 1, 1, 3653.458, -720.2587, 216.1421, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1274,180415, 571, 1, 1, 3620.047, -714.6027, 227.4171, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1275,180415, 571, 1, 1, 3620.047, -714.6027, 227.4171, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1276,180415, 571, 1, 1, 3630.439, -711.8963, 215.451, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1277,180415, 571, 1, 1, 3630.439, -711.8963, 215.451, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1278,180415, 571, 1, 1, 3628.625, -714.6279, 221.3164, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1279,180415, 571, 1, 1, 3628.625, -714.6279, 221.3164, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1280,180415, 571, 1, 1, 3647.266, -723.0741, 220.1831, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1281,180415, 571, 1, 1, 3647.266, -723.0741, 220.1831, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1282,180415, 571, 1, 1, 3628.823, -712.1104, 221.3164, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1283,180415, 571, 1, 1, 3628.823, -712.1104, 221.3164, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1284,180415, 571, 1, 1, 3636.598, -710.9913, 218.9725, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1285,180415, 571, 1, 1, 3636.598, -710.9913, 218.9725, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1286,180415, 571, 1, 1, 3642.31, -722.2473, 220.5441, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1287,180415, 571, 1, 1, 3642.31, -722.2473, 220.5441, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1288,180415, 571, 1, 1, 3646.166, -718.1907, 216.172, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1289,180415, 571, 1, 1, 3646.166, -718.1907, 216.172, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1290,180415, 571, 1, 1, 3635.955, -715.3896, 227.4597, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1291,180415, 571, 1, 1, 3635.955, -715.3896, 227.4597, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1292,180415, 571, 1, 1, 3639.688, -711.3333, 218.9725, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1293,180415, 571, 1, 1, 3639.688, -711.3333, 218.9725, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1294,180415, 571, 1, 1, 3633.46, -719.8217, 221.3129, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1295,180415, 571, 1, 1, 3633.46, -719.8217, 221.3129, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1296,180415, 571, 1, 1, 3632.302, -715.0294, 227.4236, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1297,180415, 571, 1, 1, 3632.302, -715.0294, 227.4236, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1298,180415, 571, 1, 1, 3630.115, -714.7449, 215.4509, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1299,180415, 571, 1, 1, 3630.115, -714.7449, 215.4509, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1300,180415, 571, 1, 1, 3633.867, -715.2915, 221.3129, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1301,180415, 571, 1, 1, 3633.867, -715.2915, 221.3129, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1302,180415, 571, 1, 1, 3628.883, -714.4942, 227.4169, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1303,180415, 571, 1, 1, 3628.883, -714.4942, 227.4169, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1304,180415, 571, 1, 1, 3629.475, -717.1203, 215.4509, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1305,180415, 571, 1, 1, 3629.475, -717.1203, 215.4509, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1306,180415, 571, 1, 1, 3635.079, -710.8333, 218.9725, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1307,180415, 571, 1, 1, 3635.079, -710.8333, 218.9725, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1308,180415, 571, 1, 1, 3645.829, -721.221, 216.172, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1309,180415, 571, 1, 1, 3645.829, -721.221, 216.172, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1310,180415, 571, 1, 1, 3619.787, -716.7102, 227.4115, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1311,180415, 571, 1, 1, 3619.787, -716.7102, 227.4115, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+1312,180415, 571, 1, 1, 3539.074, 246.8349, 45.82254, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1313,180415, 571, 1, 1, 3539.074, 246.8349, 45.82254, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1314,180415, 571, 1, 1, 3560.01, 248.8549, 45.83335, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1315,180415, 571, 1, 1, 3560.01, 248.8549, 45.83335, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1316,180415, 571, 1, 1, 3549.851, 245.3113, 45.88549, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1317,180415, 571, 1, 1, 3549.851, 245.3113, 45.88549, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1318,180415, 571, 1, 1, 3520.715, 280.9288, 45.78613, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1319,180415, 571, 1, 1, 3520.715, 280.9288, 45.78613, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1320,180415, 571, 1, 1, 3564.364, 294.3126, 45.82972, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1321,180415, 571, 1, 1, 3564.364, 294.3126, 45.82972, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1322,180415, 571, 1, 1, 3526.05, 290.625, 45.8017, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1323,180415, 571, 1, 1, 3526.05, 290.625, 45.8017, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1324,180415, 571, 1, 1, 3529.681, 251.9887, 45.82568, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1325,180415, 571, 1, 1, 3529.681, 251.9887, 45.82568, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1326,180415, 571, 1, 1, 3570.418, 286.1223, 45.8264, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1327,180415, 571, 1, 1, 3570.418, 286.1223, 45.8264, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1328,180415, 571, 1, 1, 3534.023, 297.516, 45.87384, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1329,180415, 571, 1, 1, 3534.023, 297.516, 45.87384, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1330,180415, 571, 1, 1, 3573.903, 275.7938, 45.8153, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1331,180415, 571, 1, 1, 3573.903, 275.7938, 45.8153, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1332,180415, 571, 1, 1, 3572.999, 265.1364, 45.80965, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1333,180415, 571, 1, 1, 3572.999, 265.1364, 45.80965, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1334,180415, 571, 1, 1, 3585.963, 283.0799, 48.30828, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1335,180415, 571, 1, 1, 3585.963, 283.0799, 48.30828, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1336,180415, 571, 1, 1, 3554.604, 299.7266, 45.90679, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1337,180415, 571, 1, 1, 3554.604, 299.7266, 45.90679, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1338,180415, 571, 1, 1, 3568.259, 255.9597, 45.78259, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1339,180415, 571, 1, 1, 3568.259, 255.9597, 45.78259, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1340,180415, 571, 1, 1, 3587.122, 271.1111, 48.3845, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1341,180415, 571, 1, 1, 3587.122, 271.1111, 48.3845, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1342,180415, 571, 1, 1, 3522.922, 260.132, 45.7541, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1343,180415, 571, 1, 1, 3522.922, 260.132, 45.7541, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1344,180415, 571, 1, 1, 3596.911, 271.6074, 52.12251, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1345,180415, 571, 1, 1, 3596.911, 271.6074, 52.12251, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1346,180415, 571, 1, 1, 3519.316, 270.3384, 45.87571, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1347,180415, 571, 1, 1, 3519.316, 270.3384, 45.87571, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1348,180415, 571, 1, 1, 3595.522, 284.4653, 52.2077, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1349,180415, 571, 1, 1, 3595.522, 284.4653, 52.2077, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1350,180415, 571, 1, 1, 3544.37, 301.0424, 45.87925, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1351,180415, 571, 1, 1, 3544.37, 301.0424, 45.87925, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+1352,180415, 571, 1, 1, 3453.492, 2004.011, 66.48942, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1353,180415, 571, 1, 1, 3453.492, 2004.011, 66.48942, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1354,180415, 571, 1, 1, 3451.072, 2013.826, 67.11924, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1355,180415, 571, 1, 1, 3451.072, 2013.826, 67.11924, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1356,180415, 571, 1, 1, 3460.914, 1999.812, 64.96242, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1357,180415, 571, 1, 1, 3460.914, 1999.812, 64.96242, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1358,180415, 571, 1, 1, 3450.717, 2005.431, 66.47033, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1359,180415, 571, 1, 1, 3450.717, 2005.431, 66.47033, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1360,180415, 571, 1, 1, 3464.852, 2005.66, 65.63439, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1361,180415, 571, 1, 1, 3464.852, 2005.66, 65.63439, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1362,180415, 571, 1, 1, 3457.145, 2001.683, 65.88113, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1363,180415, 571, 1, 1, 3457.145, 2001.683, 65.88113, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1364,180415, 571, 1, 1, 3457.17, 2010.24, 67.18584, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1365,180415, 571, 1, 1, 3457.17, 2010.24, 67.18584, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1366,180415, 571, 1, 1, 3461.157, 2007.909, 66.50739, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1367,180415, 571, 1, 1, 3461.157, 2007.909, 66.50739, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1368,180415, 571, 1, 1, 3447.548, 2007.21, 66.4343, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1369,180415, 571, 1, 1, 3447.548, 2007.21, 66.4343, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1370,180415, 571, 1, 1, 3454.485, 2011.974, 67.24349, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1371,180415, 571, 1, 1, 3454.485, 2011.974, 67.24349, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1372,180415, 571, 1, 1, 3485.54, 1982.056, 66.64336, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1373,180415, 571, 1, 1, 3485.54, 1982.056, 66.64336, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1374,180415, 571, 1, 1, 3491.24, 1972.217, 66.67846, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1375,180415, 571, 1, 1, 3491.24, 1972.217, 66.67846, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1376,180415, 571, 1, 1, 3484.478, 1982.79, 66.10648, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1377,180415, 571, 1, 1, 3484.478, 1982.79, 66.10648, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1378,180415, 571, 1, 1, 3486.18, 1980.53, 66.75633, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1379,180415, 571, 1, 1, 3486.18, 1980.53, 66.75633, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1380,180415, 571, 1, 1, 3488.036, 1984.502, 66.5727, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1381,180415, 571, 1, 1, 3488.036, 1984.502, 66.5727, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1382,180415, 571, 1, 1, 3488.738, 1974.252, 66.48361, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1383,180415, 571, 1, 1, 3488.738, 1974.252, 66.48361, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1384,180415, 571, 1, 1, 3486.124, 1985.773, 66.13934, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1385,180415, 571, 1, 1, 3486.124, 1985.773, 66.13934, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1386,180415, 571, 1, 1, 3489.454, 1972.877, 66.5388, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1387,180415, 571, 1, 1, 3489.454, 1972.877, 66.5388, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1388,180415, 571, 1, 1, 3486.32, 1978.385, 66.64598, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1389,180415, 571, 1, 1, 3486.32, 1978.385, 66.64598, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1390,180415, 571, 1, 1, 3484.899, 1984.623, 66.13567, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1391,180415, 571, 1, 1, 3484.899, 1984.623, 66.13567, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1392,180415, 571, 1, 1, 3490.6, 1973.335, 66.56937, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1393,180415, 571, 1, 1, 3490.6, 1973.335, 66.56937, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1394,180415, 571, 1, 1, 3486.279, 1984.052, 66.72491, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1395,180415, 571, 1, 1, 3486.279, 1984.052, 66.72491, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1396,180415, 571, 1, 1, 3488.017, 1982.2, 69.24107, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1397,180415, 571, 1, 1, 3488.017, 1982.2, 69.24107, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1398,180415, 571, 1, 1, 3496.877, 1986.814, 66.14459, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1399,180415, 571, 1, 1, 3496.877, 1986.814, 66.14459, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1400,180415, 571, 1, 1, 3499.981, 1976.101, 66.6926, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1401,180415, 571, 1, 1, 3499.981, 1976.101, 66.6926, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1402,180415, 571, 1, 1, 3498.515, 1987.265, 66.15958, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1403,180415, 571, 1, 1, 3498.515, 1987.265, 66.15958, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1404,180415, 571, 1, 1, 3494.6, 1971.783, 69.21862, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1405,180415, 571, 1, 1, 3494.6, 1971.783, 69.21862, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1406,180415, 571, 1, 1, 3498.208, 1985.489, 66.55852, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1407,180415, 571, 1, 1, 3498.208, 1985.489, 66.55852, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1408,180415, 571, 1, 1, 3492.497, 1984.687, 66.91064, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1409,180415, 571, 1, 1, 3492.497, 1984.687, 66.91064, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1410,180415, 571, 1, 1, 3499.862, 1974.142, 66.74924, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1411,180415, 571, 1, 1, 3499.862, 1974.142, 66.74924, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1412,180415, 571, 1, 1, 3499.545, 1986.568, 66.14841, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1413,180415, 571, 1, 1, 3499.545, 1986.568, 66.14841, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1414,180415, 571, 1, 1, 3497.163, 1972.785, 67.83695, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1415,180415, 571, 1, 1, 3497.163, 1972.785, 67.83695, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1416,180415, 571, 1, 1, 3498.545, 1983.968, 66.78958, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1417,180415, 571, 1, 1, 3498.545, 1983.968, 66.78958, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1418,180415, 571, 1, 1, 3499.741, 1984.807, 66.1551, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1419,180415, 571, 1, 1, 3499.741, 1984.807, 66.1551, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1420,180415, 571, 1, 1, 3496.604, 1985.285, 66.52729, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1421,180415, 571, 1, 1, 3496.604, 1985.285, 66.52729, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1422,180415, 571, 1, 1, 3490.234, 1984.203, 66.76582, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1423,180415, 571, 1, 1, 3490.234, 1984.203, 66.76582, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1424,180415, 571, 1, 1, 3494.507, 1985.543, 66.86245, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1425,180415, 571, 1, 1, 3494.507, 1985.543, 66.86245, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1426,180415, 571, 1, 1, 3492.613, 1987.125, 66.18999, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1427,180415, 571, 1, 1, 3492.613, 1987.125, 66.18999, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1428,180415, 571, 1, 1, 3498.044, 1971.96, 67.97525, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1429,180415, 571, 1, 1, 3498.044, 1971.96, 67.97525, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1430,180415, 571, 1, 1, 3500.235, 1977.234, 66.79019, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1431,180415, 571, 1, 1, 3500.235, 1977.234, 66.79019, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1432,180415, 571, 1, 1, 8446.374, -338.7054, 906.5311, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1433,180415, 571, 1, 1, 8446.374, -338.7054, 906.5311, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1434,180415, 571, 1, 1, 8441.133, -333.9722, 906.3853, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1435,180415, 571, 1, 1, 8441.133, -333.9722, 906.3853, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1436,180415, 571, 1, 1, 8449.194, -340.0696, 906.42, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1437,180415, 571, 1, 1, 8449.194, -340.0696, 906.42, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1438,180415, 571, 1, 1, 8438.914, -336.882, 906.3645, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1439,180415, 571, 1, 1, 8438.914, -336.882, 906.3645, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1440,180415, 571, 1, 1, 8450.9, -342.7731, 906.4547, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1441,180415, 571, 1, 1, 8450.9, -342.7731, 906.4547, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1442,180415, 571, 1, 1, 8436.891, -329.9302, 906.4619, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1443,180415, 571, 1, 1, 8436.891, -329.9302, 906.4619, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1444,180415, 571, 1, 1, 8440.131, -331.5573, 906.4849, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1445,180415, 571, 1, 1, 8440.131, -331.5573, 906.4849, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1446,180415, 571, 1, 1, 8443.484, -341.0681, 906.538, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1447,180415, 571, 1, 1, 8443.484, -341.0681, 906.538, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1448,180415, 571, 1, 1, 8438.455, -346.809, 906.3992, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484)
+(@OGUID+1449,180415, 571, 1, 1, 8438.455, -346.809, 906.3992, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484)
+(@OGUID+1450,180415, 571, 1, 1, 8434.126, -342.7607, 906.3992, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484)
+(@OGUID+1451,180415, 571, 1, 1, 8434.126, -342.7607, 906.3992, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484)
+(@OGUID+1452,180415, 571, 1, 1, 6135.286, -1087.107, 403.996, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1453,180415, 571, 1, 1, 6135.286, -1087.107, 403.996, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1454,180415, 571, 1, 1, 6135.75, -1082.272, 403.9787, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1455,180415, 571, 1, 1, 6135.75, -1082.272, 403.9787, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1456,180415, 571, 1, 1, 6131.089, -1077.924, 404.0315, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1457,180415, 571, 1, 1, 6131.089, -1077.924, 404.0315, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1458,180415, 571, 1, 1, 6124.53, -1100.04, 404.1576, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1459,180415, 571, 1, 1, 6124.53, -1100.04, 404.1576, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1460,180415, 571, 1, 1, 6129.471, -1100.338, 404.0967, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1461,180415, 571, 1, 1, 6129.471, -1100.338, 404.0967, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1462,180415, 571, 1, 1, 6134.075, -1100.798, 404.0411, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1463,180415, 571, 1, 1, 6134.075, -1100.798, 404.0411, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1464,180415, 571, 1, 1, 6135.558, -1078.466, 403.9826, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1465,180415, 571, 1, 1, 6135.558, -1078.466, 403.9826, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1466,180415, 571, 1, 1, 6135.308, -1092.608, 404.0045, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1467,180415, 571, 1, 1, 6135.308, -1092.608, 404.0045, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1468,180415, 571, 1, 1, 6135.531, -1097.868, 403.998, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1469,180415, 571, 1, 1, 6135.531, -1097.868, 403.998, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1470,180415, 571, 1, 1, 6128.174, -1077.363, 404.1137, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1471,180415, 571, 1, 1, 6128.174, -1077.363, 404.1137, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1472,180415, 571, 1, 1, 6114.59, -1100.005, 404.2581, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1473,180415, 571, 1, 1, 6114.59, -1100.005, 404.2581, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1474,180415, 571, 1, 1, 6119.64, -1099.892, 404.2052, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1475,180415, 571, 1, 1, 6119.64, -1099.892, 404.2052, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1476,180415, 571, 1, 1, 6117.122, -1080.053, 403.8957, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1477,180415, 571, 1, 1, 6117.122, -1080.053, 403.8957, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1478,180415, 571, 1, 1, 6110.035, -1085.667, 404.2946, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1479,180415, 571, 1, 1, 6110.035, -1085.667, 404.2946, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1480,180415, 571, 1, 1, 6116.569, -1077.83, 403.8956, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1481,180415, 571, 1, 1, 6116.569, -1077.83, 403.8956, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1482,180415, 571, 1, 1, 6110.022, -1094.398, 404.3128, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1483,180415, 571, 1, 1, 6110.022, -1094.398, 404.3128, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1484,180415, 571, 1, 1, 6113.951, -1077.961, 403.9418, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1485,180415, 571, 1, 1, 6113.951, -1077.961, 403.9418, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1486,180415, 571, 1, 1, 6109.78, -1099.722, 404.3831, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1487,180415, 571, 1, 1, 6109.78, -1099.722, 404.3831, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1488,180415, 571, 1, 1, 6109.548, -1083.051, 404.3193, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1489,180415, 571, 1, 1, 6109.548, -1083.051, 404.3193, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1490,180415, 571, 1, 1, 6108.985, -1078.398, 404.2991, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1491,180415, 571, 1, 1, 6108.985, -1078.398, 404.2991, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1492,180415, 571, 1, 1, 6665.15, -200.775, 950.982, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1493,180415, 571, 1, 1, 6665.15, -200.775, 950.982, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1494,180415, 571, 1, 1, 6667.429, -202.9508, 950.2484, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1495,180415, 571, 1, 1, 6667.429, -202.9508, 950.2484, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1496,180415, 571, 1, 1, 6670.192, -202.2401, 950.4054, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1497,180415, 571, 1, 1, 6670.192, -202.2401, 950.4054, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1498,180415, 571, 1, 1, 6676.213, -197.9583, 951.1501, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1499,180415, 571, 1, 1, 6676.213, -197.9583, 951.1501, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1500,180415, 571, 1, 1, 6676.812, -200.8755, 951.2551, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1501,180415, 571, 1, 1, 6676.812, -200.8755, 951.2551, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1502,180415, 571, 1, 1, 6671.391, -199.7399, 951.0316, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1503,180415, 571, 1, 1, 6671.391, -199.7399, 951.0316, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1504,180415, 571, 1, 1, 6671.051, -196.6817, 951.0138, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1505,180415, 571, 1, 1, 6671.051, -196.6817, 951.0138, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1506,180415, 571, 1, 1, 6666.553, -195.6487, 951.7457, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1507,180415, 571, 1, 1, 6666.553, -195.6487, 951.7457, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1508,180415, 571, 1, 1, 6680.188, -200.7511, 955.8945, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1509,180415, 571, 1, 1, 6680.188, -200.7511, 955.8945, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1510,180415, 571, 1, 1, 6664.639, -197.5128, 951.639, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1511,180415, 571, 1, 1, 6664.639, -197.5128, 951.639, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1512,180415, 571, 1, 1, 5534.743, 5748.256, -76.63572, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1513,180415, 571, 1, 1, 5534.743, 5748.256, -76.63572, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1514,180415, 571, 1, 1, 5543.521, 5771.278, -76.01951, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1515,180415, 571, 1, 1, 5543.521, 5771.278, -76.01951, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1516,180415, 571, 1, 1, 5523.451, 5778.276, -78.78996, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1517,180415, 571, 1, 1, 5523.451, 5778.276, -78.78996, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1518,180415, 571, 1, 1, 5543.232, 5771.354, -76.01951, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1519,180415, 571, 1, 1, 5543.232, 5771.354, -76.01951, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1520,180415, 571, 1, 1, 5525.911, 5782.684, -78.17769, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1521,180415, 571, 1, 1, 5525.911, 5782.684, -78.17769, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1522,180415, 571, 1, 1, 5555.896, 5763.036, -76.68411, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1523,180415, 571, 1, 1, 5555.896, 5763.036, -76.68411, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1524,180415, 571, 1, 1, 5552.697, 5767.842, -75.99409, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1525,180415, 571, 1, 1, 5552.697, 5767.842, -75.99409, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1526,180415, 571, 1, 1, 5557.079, 5767.963, -77.05219, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1527,180415, 571, 1, 1, 5557.079, 5767.963, -77.05219, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1528,180415, 571, 1, 1, 5557.415, 5769.394, -76.74715, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1529,180415, 571, 1, 1, 5557.415, 5769.394, -76.74715, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1530,180415, 571, 1, 1, 5589.266, 5819.588, -69.22645, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1531,180415, 571, 1, 1, 5589.266, 5819.588, -69.22645, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1532,180415, 571, 1, 1, 5585.25, 5746.126, -71.12965, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1533,180415, 571, 1, 1, 5585.25, 5746.126, -71.12965, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1534,180415, 571, 1, 1, 5589.826, 5820.498, -69.06834, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1535,180415, 571, 1, 1, 5589.826, 5820.498, -69.06834, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1536,180415, 571, 1, 1, 5598.222, 5811.789, -69.80727, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1537,180415, 571, 1, 1, 5598.222, 5811.789, -69.80727, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1538,180415, 571, 1, 1, 5608.288, 5809.12, -70.3611, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1539,180415, 571, 1, 1, 5608.288, 5809.12, -70.3611, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1540,180415, 571, 1, 1, 5629.481, 5831.32, -63.68258, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1541,180415, 571, 1, 1, 5629.481, 5831.32, -63.68258, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1542,180415, 571, 1, 1, 5624.22, 5848.555, -62.23083, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1543,180415, 571, 1, 1, 5624.22, 5848.555, -62.23083, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1544,180415, 571, 1, 1, 5624.355, 5836.35, -64.11382, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1545,180415, 571, 1, 1, 5624.355, 5836.35, -64.11382, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1546,180415, 571, 1, 1, 5615.792, 5854.673, -61.52033, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1547,180415, 571, 1, 1, 5615.792, 5854.673, -61.52033, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1548,180415, 571, 1, 1, 5617.778, 5835.836, -64.42644, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1549,180415, 571, 1, 1, 5617.778, 5835.836, -64.42644, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1550,180415, 571, 1, 1, 5621.542, 5839.372, -63.8798, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1551,180415, 571, 1, 1, 5621.542, 5839.372, -63.8798, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1552,180415, 571, 1, 1, 5620.175, 5851.535, -61.9314, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1553,180415, 571, 1, 1, 5620.175, 5851.535, -61.9314, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1554,180415, 571, 1, 1, 5617.97, 5842.27, -63.73035, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1555,180415, 571, 1, 1, 5617.97, 5842.27, -63.73035, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1556,180415, 571, 1, 1, 5631.269, 5841.848, -62.78385, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1557,180415, 571, 1, 1, 5631.269, 5841.848, -62.78385, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1558,180415, 571, 1, 1, 5614.699, 5845.393, -63.52262, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1559,180415, 571, 1, 1, 5614.699, 5845.393, -63.52262, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1560,180415, 571, 1, 1, 5628.023, 5845.315, -62.64318, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1561,180415, 571, 1, 1, 5628.023, 5845.315, -62.64318, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1562,180415, 571, 1, 1, 5599.996, 5811.131, -69.81374, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1563,180415, 571, 1, 1, 5599.996, 5811.131, -69.81374, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1564,180415, 571, 1, 1, 5610.43, 5848.424, -63.39353, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1565,180415, 571, 1, 1, 5610.43, 5848.424, -63.39353, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1566,180415, 571, 1, 1, 5609.851, 5840.359, -64.56908, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1567,180415, 571, 1, 1, 5609.851, 5840.359, -64.56908, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1568,180415, 571, 1, 1, 5638.223, 5830.514, -63.40969, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284)
+(@OGUID+1569,180415, 571, 1, 1, 5638.223, 5830.514, -63.40969, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284)
+(@OGUID+1570,180415, 571, 1, 1, 5635.809, 5835.991, -63.02237, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284)
+(@OGUID+1571,180415, 571, 1, 1, 5635.809, 5835.991, -63.02237, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284)
+(@OGUID+1572,180415, 571, 1, 1, 5512.584, 4747.444, -194.4338, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1573,180415, 571, 1, 1, 5512.584, 4747.444, -194.4338, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1574,180415, 571, 1, 1, 5476.778, 4745.321, -195.5257, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1575,180415, 571, 1, 1, 5476.778, 4745.321, -195.5257, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1576,180415, 571, 1, 1, 5509.279, 4742.423, -194.4338, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1577,180415, 571, 1, 1, 5509.279, 4742.423, -194.4338, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1578,180415, 571, 1, 1, 5498.675, 4751.812, -194.4338, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1579,180415, 571, 1, 1, 5498.675, 4751.812, -194.4338, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1580,180415, 571, 1, 1, 5503.33, 4741.617, -194.4338, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1581,180415, 571, 1, 1, 5503.33, 4741.617, -194.4338, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1582,180415, 571, 1, 1, 5504.156, 4755.996, -194.4338, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1583,180415, 571, 1, 1, 5504.156, 4755.996, -194.4338, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1584,180415, 571, 1, 1, 5498.581, 4745.667, -194.4338, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1585,180415, 571, 1, 1, 5498.581, 4745.667, -194.4338, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1586,180415, 571, 1, 1, 5477.044, 4749.278, -195.3024, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1587,180415, 571, 1, 1, 5477.044, 4749.278, -195.3024, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1588,180415, 571, 1, 1, 5510.276, 4753.492, -194.4338, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1589,180415, 571, 1, 1, 5510.276, 4753.492, -194.4338, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1590,180415, 571, 1, 1, 5485.467, 4727.866, -194.3498, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1591,180415, 571, 1, 1, 5485.467, 4727.866, -194.3498, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1592,180415, 571, 1, 1, 4472.118, 5710.065, 81.82111, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+1593,180415, 571, 1, 1, 4472.118, 5710.065, 81.82111, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+1594,180415, 571, 1, 1, 4475.728, 5707.702, 81.28061, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+1595,180415, 571, 1, 1, 4475.728, 5707.702, 81.28061, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+1596,180415, 571, 1, 1, 4474.857, 5707.663, 81.27406, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+1597,180415, 571, 1, 1, 4474.857, 5707.663, 81.27406, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+1598,180415, 571, 1, 1, 4470.187, 5711.333, 81.82111, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+1599,180415, 571, 1, 1, 4470.187, 5711.333, 81.82111, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+1600,180415, 571, 1, 1, 4502.521, 5716.321, 83.2894, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1601,180415, 571, 1, 1, 4502.521, 5716.321, 83.2894, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1602,180415, 571, 1, 1, 4501.978, 5716.594, 83.29294, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1603,180415, 571, 1, 1, 4501.978, 5716.594, 83.29294, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1604,180415, 571, 1, 1, 4512.208, 5702.231, 82.31032, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1605,180415, 571, 1, 1, 4512.208, 5702.231, 82.31032, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1606,180415, 571, 1, 1, 4508.148, 5720.678, 81.53056, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1607,180415, 571, 1, 1, 4508.148, 5720.678, 81.53056, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1608,180415, 571, 1, 1, 4508.037, 5721.736, 81.52561, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1609,180415, 571, 1, 1, 4508.037, 5721.736, 81.52561, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1610,180415, 571, 1, 1, 4511.359, 5702.256, 82.3114, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1611,180415, 571, 1, 1, 4511.359, 5702.256, 82.3114, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1612,180415, 571, 1, 1, 4175.995, 5285.556, 39.60876, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1613,180415, 571, 1, 1, 4175.995, 5285.556, 39.60876, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1614,180415, 571, 1, 1, 4174.72, 5282.509, 40.74071, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1615,180415, 571, 1, 1, 4174.72, 5282.509, 40.74071, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1616,180415, 571, 1, 1, 4182.015, 5285.288, 40.89171, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1617,180415, 571, 1, 1, 4182.015, 5285.288, 40.89171, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1618,180415, 571, 1, 1, 4176.526, 5277.981, 41.3796, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1619,180415, 571, 1, 1, 4176.526, 5277.981, 41.3796, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1620,180415, 571, 1, 1, 4182.998, 5284, 40.91432, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1621,180415, 571, 1, 1, 4182.998, 5284, 40.91432, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1622,180415, 571, 1, 1, 4175.992, 5278.304, 40.8171, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1623,180415, 571, 1, 1, 4175.992, 5278.304, 40.8171, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1624,180415, 571, 1, 1, 4174.827, 5281.086, 40.75976, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1625,180415, 571, 1, 1, 4174.827, 5281.086, 40.75976, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1626,180415, 571, 1, 1, 4181.757, 5280.178, 39.78754, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1627,180415, 571, 1, 1, 4181.757, 5280.178, 39.78754, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1628,180415, 571, 1, 1, 4177.348, 5277.492, 40.8917, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1629,180415, 571, 1, 1, 4177.348, 5277.492, 40.8917, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1630,180415, 571, 1, 1, 4176.902, 5277.699, 41.40043, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1631,180415, 571, 1, 1, 4176.902, 5277.699, 41.40043, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1632,180415, 571, 1, 1, 2816.064, 6140.755, 84.60281, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1633,180415, 571, 1, 1, 2816.064, 6140.755, 84.60281, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1634,180415, 571, 1, 1, 2817.546, 6142.036, 84.77279, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1635,180415, 571, 1, 1, 2817.546, 6142.036, 84.77279, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1636,180415, 571, 1, 1, 2808.348, 6133.652, 84.35007, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1637,180415, 571, 1, 1, 2808.348, 6133.652, 84.35007, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1638,180415, 571, 1, 1, 2814.547, 6139.239, 84.48197, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1639,180415, 571, 1, 1, 2814.547, 6139.239, 84.48197, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1640,180415, 571, 1, 1, 2813.243, 6137.908, 84.43053, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1641,180415, 571, 1, 1, 2813.243, 6137.908, 84.43053, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1642,180415, 571, 1, 1, 2811.692, 6136.515, 84.40427, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1643,180415, 571, 1, 1, 2811.692, 6136.515, 84.40427, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1644,180415, 571, 1, 1, 2809.904, 6135.145, 84.37815, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1645,180415, 571, 1, 1, 2809.904, 6135.145, 84.37815, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1646,180415, 571, 1, 1, 2806.884, 6132.39, 84.32622, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1647,180415, 571, 1, 1, 2806.884, 6132.39, 84.32622, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1648,180415, 571, 1, 1, 2787.17, 6166.139, 84.44685, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1649,180415, 571, 1, 1, 2787.17, 6166.139, 84.44685, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1650,180415, 571, 1, 1, 2785.56, 6164.665, 84.41692, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1651,180415, 571, 1, 1, 2785.56, 6164.665, 84.41692, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1652,180415, 571, 1, 1, 2784.033, 6163.104, 84.38836, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1653,180415, 571, 1, 1, 2784.033, 6163.104, 84.38836, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1654,180415, 571, 1, 1, 2791.778, 6170.236, 84.69099, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1655,180415, 571, 1, 1, 2791.778, 6170.236, 84.69099, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1656,180415, 571, 1, 1, 2790.21, 6168.888, 84.58121, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1657,180415, 571, 1, 1, 2790.21, 6168.888, 84.58121, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1658,180415, 571, 1, 1, 2788.624, 6167.527, 84.47393, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1659,180415, 571, 1, 1, 2788.624, 6167.527, 84.47393, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1660,180415, 571, 1, 1, 2781.09, 6160.348, 84.3336, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1661,180415, 571, 1, 1, 2781.09, 6160.348, 84.3336, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1662,180415, 571, 1, 1, 2779.682, 6158.85, 84.30719, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1663,180415, 571, 1, 1, 2779.682, 6158.85, 84.30719, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1664,180415, 571, 1, 1, 2805.326, 6131.063, 84.3011, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1665,180415, 571, 1, 1, 2805.326, 6131.063, 84.3011, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1666,180415, 571, 1, 1, 2791.639, 6139.96, 84.81071, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1667,180415, 571, 1, 1, 2791.639, 6139.96, 84.81071, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1668,180415, 571, 1, 1, 2803.804, 6129.789, 84.27695, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1669,180415, 571, 1, 1, 2803.804, 6129.789, 84.27695, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1670,180415, 571, 1, 1, 2782.543, 6161.761, 84.36069, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1671,180415, 571, 1, 1, 2782.543, 6161.761, 84.36069, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1672,180415, 571, 1, 1, 2788.538, 6143.428, 84.79273, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1673,180415, 571, 1, 1, 2788.538, 6143.428, 84.79273, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1674,180415, 571, 1, 1, 2776.865, 6126.743, 91.12935, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1675,180415, 571, 1, 1, 2776.865, 6126.743, 91.12935, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1676,180415, 571, 1, 1, 2788.898, 6137.514, 86.33366, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1677,180415, 571, 1, 1, 2788.898, 6137.514, 86.33366, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1678,180415, 571, 1, 1, 2774.129, 6129.736, 91.13658, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1679,180415, 571, 1, 1, 2774.129, 6129.736, 91.13658, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1680,180415, 571, 1, 1, 2780.254, 6135.889, 89.43606, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1681,180415, 571, 1, 1, 2780.254, 6135.889, 89.43606, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1682,180415, 571, 1, 1, 2785.656, 6141.002, 86.35069, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1683,180415, 571, 1, 1, 2785.656, 6141.002, 86.35069, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1684,180415, 571, 1, 1, 2778.103, 6157.446, 84.27789, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1685,180415, 571, 1, 1, 2778.103, 6157.446, 84.27789, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1686,180415, 571, 1, 1, 2781.07, 6130.521, 90.43552, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1687,180415, 571, 1, 1, 2781.07, 6130.521, 90.43552, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1688,180415, 571, 1, 1, 2785.955, 6135.013, 87.93523, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1689,180415, 571, 1, 1, 2785.955, 6135.013, 87.93523, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1690,180415, 571, 1, 1, 2777.994, 6133.772, 90.43637, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1691,180415, 571, 1, 1, 2777.994, 6133.772, 90.43637, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1692,180415, 571, 1, 1, 2782.876, 6138.491, 87.9035, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1693,180415, 571, 1, 1, 2782.876, 6138.491, 87.9035, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1694,180415, 571, 1, 1, 2783.253, 6132.512, 89.46143, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1695,180415, 571, 1, 1, 2783.253, 6132.512, 89.46143, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1696,180415, 571, 1, 1, 2779.491, 6129.215, 90.78801, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1697,180415, 571, 1, 1, 2779.491, 6129.215, 90.78801, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1698,180415, 571, 1, 1, 2776.609, 6132.236, 90.81976, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1699,180415, 571, 1, 1, 2776.609, 6132.236, 90.81976, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1700,180415, 571, 1, 1, 2772.306, 6123.107, 91.52767, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1701,180415, 571, 1, 1, 2772.306, 6123.107, 91.52767, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1702,180415, 571, 1, 1, 2768.484, 6124.985, 97.70737, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1703,180415, 571, 1, 1, 2768.484, 6124.985, 97.70737, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1704,180415, 571, 1, 1, 2771.088, 6121.854, 97.64502, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1705,180415, 571, 1, 1, 2771.088, 6121.854, 97.64502, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1706,180415, 571, 1, 1, 2771.566, 6127.16, 91.71031, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1707,180415, 571, 1, 1, 2771.566, 6127.16, 91.71031, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1708,180415, 571, 1, 1, 2773.846, 6124.534, 91.67098, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1709,180415, 571, 1, 1, 2773.846, 6124.534, 91.67098, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1710,180415, 571, 1, 1, 2769.93, 6125.85, 91.52602, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1711,180415, 571, 1, 1, 2769.93, 6125.85, 91.52602, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1712,180415, 571, 1, 1, 2297.869, 5280.106, 13.11051, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1713,180415, 571, 1, 1, 2297.869, 5280.106, 13.11051, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1714,180415, 571, 1, 1, 2292.861, 5276.689, 13.39523, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1715,180415, 571, 1, 1, 2292.861, 5276.689, 13.39523, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1716,180415, 571, 1, 1, 2292.751, 5278.278, 13.39523, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1717,180415, 571, 1, 1, 2292.751, 5278.278, 13.39523, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1718,180415, 571, 1, 1, 2293.383, 5279.647, 13.39523, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1719,180415, 571, 1, 1, 2293.383, 5279.647, 13.39523, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1720,180415, 571, 1, 1, 2295.305, 5274.703, 13.39523, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1721,180415, 571, 1, 1, 2295.305, 5274.703, 13.39523, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1722,180415, 571, 1, 1, 2291.743, 5276.248, 13.28105, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1723,180415, 571, 1, 1, 2291.743, 5276.248, 13.28105, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1724,180415, 571, 1, 1, 2293.839, 5275.374, 13.39523, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1725,180415, 571, 1, 1, 2293.839, 5275.374, 13.39523, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1726,180415, 571, 1, 1, 2293.025, 5274.428, 13.18383, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1727,180415, 571, 1, 1, 2293.025, 5274.428, 13.18383, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1728,180415, 571, 1, 1, 2298.755, 5278.823, 13.17301, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1729,180415, 571, 1, 1, 2298.755, 5278.823, 13.17301, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1730,180415, 571, 1, 1, 2298.857, 5277.28, 13.15912, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1731,180415, 571, 1, 1, 2298.857, 5277.28, 13.15912, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1732,180415, 571, 1, 1, 2269.472, 5199.901, 11.49839, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1733,180415, 571, 1, 1, 2269.472, 5199.901, 11.49839, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1734,180415, 571, 1, 1, 2270.224, 5199.647, 11.84797, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1735,180415, 571, 1, 1, 2270.224, 5199.647, 11.84797, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1736,180415, 571, 1, 1, 2267.266, 5195.724, 11.25468, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1737,180415, 571, 1, 1, 2267.266, 5195.724, 11.25468, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1738,180415, 571, 1, 1, 2271.104, 5199.311, 12.33314, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1739,180415, 571, 1, 1, 2271.104, 5199.311, 12.33314, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1740,180415, 571, 1, 1, 2262.667, 5194.889, 14.41752, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1741,180415, 571, 1, 1, 2262.667, 5194.889, 14.41752, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1742,180415, 571, 1, 1, 2269.422, 5194.798, 12.2818, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1743,180415, 571, 1, 1, 2269.422, 5194.798, 12.2818, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1744,180415, 571, 1, 1, 2268.748, 5200.188, 11.23592, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1745,180415, 571, 1, 1, 2268.748, 5200.188, 11.23592, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1746,180415, 571, 1, 1, 2264.628, 5203.938, 12.71451, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1747,180415, 571, 1, 1, 2264.628, 5203.938, 12.71451, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1748,180415, 571, 1, 1, 2268.505, 5195.202, 11.93541, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1749,180415, 571, 1, 1, 2268.505, 5195.202, 11.93541, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1750,180415, 571, 1, 1, 2267.729, 5195.542, 11.41191, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1751,180415, 571, 1, 1, 2267.729, 5195.542, 11.41191, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1752,180415, 571, 1, 1, 2269.927, 5181.998, 20.93, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1753,180415, 571, 1, 1, 2269.927, 5181.998, 20.93, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1754,180415, 571, 1, 1, 2288.382, 5209.055, 17.64837, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1755,180415, 571, 1, 1, 2288.382, 5209.055, 17.64837, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1756,180415, 571, 1, 1, 2268.734, 5184.522, 20.88139, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1757,180415, 571, 1, 1, 2268.734, 5184.522, 20.88139, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1758,180415, 571, 1, 1, 2271.566, 5188.706, 20.67995, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1759,180415, 571, 1, 1, 2271.566, 5188.706, 20.67995, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1760,180415, 571, 1, 1, 2271.873, 5189.512, 21.19639, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1761,180415, 571, 1, 1, 2271.873, 5189.512, 21.19639, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1762,180415, 571, 1, 1, 2272.297, 5190.432, 21.74726, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1763,180415, 571, 1, 1, 2272.297, 5190.432, 21.74726, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1764,180415, 571, 1, 1, 2292.874, 5206.81, 17.99297, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1765,180415, 571, 1, 1, 2292.874, 5206.81, 17.99297, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1766,180415, 571, 1, 1, 2288.034, 5203.917, 13.63426, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1767,180415, 571, 1, 1, 2288.034, 5203.917, 13.63426, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1768,180415, 571, 1, 1, 2289.651, 5198.8, 24.89842, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1769,180415, 571, 1, 1, 2289.651, 5198.8, 24.89842, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1770,180415, 571, 1, 1, 2285.987, 5198.663, 13.60694, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1771,180415, 571, 1, 1, 2285.987, 5198.663, 13.60694, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1772,180415, 571, 1, 1, 2289.193, 5206.791, 13.63426, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1773,180415, 571, 1, 1, 2289.193, 5206.791, 13.63426, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1774,180415, 571, 1, 1, 2277.729, 5188.15, 21.78212, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1775,180415, 571, 1, 1, 2277.729, 5188.15, 21.78212, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1776,180415, 571, 1, 1, 2300.695, 5202.11, 18.77489, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1777,180415, 571, 1, 1, 2300.695, 5202.11, 18.77489, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1778,180415, 571, 1, 1, 2277.347, 5187.327, 21.23565, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1779,180415, 571, 1, 1, 2277.347, 5187.327, 21.23565, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1780,180415, 571, 1, 1, 2299.122, 5197.798, 18.77534, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1781,180415, 571, 1, 1, 2299.122, 5197.798, 18.77534, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1782,180415, 571, 1, 1, 2276.96, 5186.483, 20.70242, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1783,180415, 571, 1, 1, 2276.96, 5186.483, 20.70242, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1784,180415, 571, 1, 1, 2303.15, 5193.464, 18.77864, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1785,180415, 571, 1, 1, 2303.15, 5193.464, 18.77864, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1786,180415, 571, 1, 1, 2273.479, 5180.935, 20.96472, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1787,180415, 571, 1, 1, 2273.479, 5180.935, 20.96472, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1788,180415, 571, 1, 1, 2304.057, 5195.878, 18.77864, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1789,180415, 571, 1, 1, 2304.057, 5195.878, 18.77864, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1790,180415, 571, 1, 1, 2275.646, 5181.717, 21.01333, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1791,180415, 571, 1, 1, 2275.646, 5181.717, 21.01333, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1792,180415, 571, 1, 1, 3000.993, 4068.12, 30.11452, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1793,180415, 571, 1, 1, 3000.993, 4068.12, 30.11452, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1794,180415, 571, 1, 1, 3014.259, 4067.539, 31.04936, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1795,180415, 571, 1, 1, 3014.259, 4067.539, 31.04936, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1796,180415, 571, 1, 1, 3001.769, 4049.21, 26.07964, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1797,180415, 571, 1, 1, 3001.769, 4049.21, 26.07964, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1798,180415, 571, 1, 1, 3007.144, 4059.308, 26.76467, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1799,180415, 571, 1, 1, 3007.144, 4059.308, 26.76467, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1800,180415, 571, 1, 1, 3003.417, 4061.542, 26.18109, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1801,180415, 571, 1, 1, 3003.417, 4061.542, 26.18109, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1802,180415, 571, 1, 1, 3003.007, 4059.802, 26.62822, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1803,180415, 571, 1, 1, 3003.007, 4059.802, 26.62822, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1804,180415, 571, 1, 1, 3007.312, 4061.112, 26.29614, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1805,180415, 571, 1, 1, 3007.312, 4061.112, 26.29614, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1806,180415, 571, 1, 1, 3003.312, 4060.399, 26.59323, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1807,180415, 571, 1, 1, 3003.312, 4060.399, 26.59323, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1808,180415, 571, 1, 1, 3007.251, 4060.04, 26.53866, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1809,180415, 571, 1, 1, 3007.251, 4060.04, 26.53866, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1810,180415, 571, 1, 1, 3004.535, 4048.617, 26.07964, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1811,180415, 571, 1, 1, 3004.535, 4048.617, 26.07964, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1812,180415, 571, 1, 1, 2862.335, 4038.781, 5.057745, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1813,180415, 571, 1, 1, 2862.335, 4038.781, 5.057745, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1814,180415, 571, 1, 1, 2860.901, 4036.917, 10.936, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1815,180415, 571, 1, 1, 2860.901, 4036.917, 10.936, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1816,180415, 571, 1, 1, 2863.556, 4030.712, 10.90262, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1817,180415, 571, 1, 1, 2863.556, 4030.712, 10.90262, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1818,180415, 571, 1, 1, 2870.361, 4032.718, 5.063904, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1819,180415, 571, 1, 1, 2870.361, 4032.718, 5.063904, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1820,180415, 571, 1, 1, 2874.672, 4034.085, 5.337824, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1821,180415, 571, 1, 1, 2874.672, 4034.085, 5.337824, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1822,180415, 571, 1, 1, 2871.422, 4041.642, 5.131527, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1823,180415, 571, 1, 1, 2871.422, 4041.642, 5.131527, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1824,180415, 571, 1, 1, 2866.514, 4040.803, 5.103539, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1825,180415, 571, 1, 1, 2866.514, 4040.803, 5.103539, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1826,180415, 571, 1, 1, 2865.706, 4030.687, 5.018806, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1827,180415, 571, 1, 1, 2865.706, 4030.687, 5.018806, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1828,180415, 571, 1, 1, 2852.11, 4024.6, 5.079292, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1829,180415, 571, 1, 1, 2852.11, 4024.6, 5.079292, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1830,180415, 571, 1, 1, 2834.966, 4027.097, 5.066519, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1831,180415, 571, 1, 1, 2834.966, 4027.097, 5.066519, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1832,180415, 571, 1, 1, 2857.513, 4036.657, 5.022579, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1833,180415, 571, 1, 1, 2857.513, 4036.657, 5.022579, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1834,180415, 571, 1, 1, 2847.389, 4022.759, 5.015669, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1835,180415, 571, 1, 1, 2847.389, 4022.759, 5.015669, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1836,180415, 571, 1, 1, 2848.344, 4032.73, 5.091734, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1837,180415, 571, 1, 1, 2848.344, 4032.73, 5.091734, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1838,180415, 571, 1, 1, 2839.194, 4028.807, 5.034027, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1839,180415, 571, 1, 1, 2839.194, 4028.807, 5.034027, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1840,180415, 571, 1, 1, 2861.214, 4028.713, 4.992302, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1841,180415, 571, 1, 1, 2861.214, 4028.713, 4.992302, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1842,180415, 571, 1, 1, 2853.19, 4035.031, 5.072161, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1843,180415, 571, 1, 1, 2853.19, 4035.031, 5.072161, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1844,180415, 571, 1, 1, 2844.015, 4030.81, 5.057843, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1845,180415, 571, 1, 1, 2844.015, 4030.81, 5.057843, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1846,180415, 571, 1, 1, 2842.966, 4020.906, 4.97491, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1847,180415, 571, 1, 1, 2842.966, 4020.906, 4.97491, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1848,180415, 571, 1, 1, 2856.586, 4026.636, 5.041717, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1849,180415, 571, 1, 1, 2856.586, 4026.636, 5.041717, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1850,180415, 571, 1, 1, 2838.301, 4018.869, 5.02294, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1851,180415, 571, 1, 1, 2838.301, 4018.869, 5.02294, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1852,180415, 571, 1, 1, 3434.656, 4170.812, 14.18469, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+1853,180415, 571, 1, 1, 3434.656, 4170.812, 14.18469, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+1854,180415, 571, 1, 1, 3436.351, 4170.699, 14.72765, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+1855,180415, 571, 1, 1, 3436.351, 4170.699, 14.72765, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+1856,180415, 571, 1, 1, 3434.991, 4175.841, 14.25499, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+1857,180415, 571, 1, 1, 3434.991, 4175.841, 14.25499, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+1858,180415, 571, 1, 1, 3437.776, 4170.405, 15.33066, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+1859,180415, 571, 1, 1, 3437.776, 4170.405, 15.33066, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+1860,180415, 571, 1, 1, 3436.812, 4175.733, 14.72314, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+1861,180415, 571, 1, 1, 3436.812, 4175.733, 14.72314, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+1862,180415, 571, 1, 1, 3438.13, 4175.703, 15.35011, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1863,180415, 571, 1, 1, 3438.13, 4175.703, 15.35011, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1864,180415, 571, 1, 1, 3439.169, 4170.2, 15.85179, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1865,180415, 571, 1, 1, 3439.169, 4170.2, 15.85179, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1866,180415, 571, 1, 1, 3439.449, 4175.608, 15.88088, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1867,180415, 571, 1, 1, 3439.449, 4175.608, 15.88088, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1868,180415, 571, 1, 1, 3441.065, 4175.682, 16.57793, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1869,180415, 571, 1, 1, 3441.065, 4175.682, 16.57793, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1870,180415, 571, 1, 1, 3441.056, 4170.128, 16.49479, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1871,180415, 571, 1, 1, 3441.056, 4170.128, 16.49479, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1872,180415, 571, 1, 1, 3460.127, 4139.347, 15.29107, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1873,180415, 571, 1, 1, 3460.127, 4139.347, 15.29107, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1874,180415, 571, 1, 1, 3460.05, 4142.877, 16.52606, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1875,180415, 571, 1, 1, 3460.05, 4142.877, 16.52606, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1876,180415, 571, 1, 1, 3465.668, 4142.377, 16.36272, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1877,180415, 571, 1, 1, 3465.668, 4142.377, 16.36272, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1878,180415, 571, 1, 1, 3460.073, 4138.049, 15.04643, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1879,180415, 571, 1, 1, 3460.073, 4138.049, 15.04643, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1880,180415, 571, 1, 1, 3459.941, 4140.769, 15.82715, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1881,180415, 571, 1, 1, 3459.941, 4140.769, 15.82715, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1882,180415, 571, 1, 1, 3465.849, 4140.417, 15.76362, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1883,180415, 571, 1, 1, 3465.849, 4140.417, 15.76362, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1884,180415, 571, 1, 1, 3458.424, 4132.354, 17.18105, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1885,180415, 571, 1, 1, 3458.424, 4132.354, 17.18105, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1886,180415, 571, 1, 1, 3465.589, 4138.927, 15.2921, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1887,180415, 571, 1, 1, 3465.589, 4138.927, 15.2921, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1888,180415, 571, 1, 1, 3458.859, 4132.616, 17.19908, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1889,180415, 571, 1, 1, 3458.859, 4132.616, 17.19908, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1890,180415, 571, 1, 1, 3465.348, 4137.641, 15.11139, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1891,180415, 571, 1, 1, 3465.348, 4137.641, 15.11139, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1892,180415, 571, 1, 1, 3491.878, 4167.745, 15.70641, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1893,180415, 571, 1, 1, 3491.878, 4167.745, 15.70641, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1894,180415, 571, 1, 1, 3490.802, 4173.49, 16.09687, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1895,180415, 571, 1, 1, 3490.802, 4173.49, 16.09687, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1896,180415, 571, 1, 1, 3493.248, 4167.78, 15.00927, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1897,180415, 571, 1, 1, 3493.248, 4167.78, 15.00927, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1898,180415, 571, 1, 1, 3490.705, 4167.838, 16.1151, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1899,180415, 571, 1, 1, 3490.705, 4167.838, 16.1151, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1900,180415, 571, 1, 1, 3497.003, 4167.765, 13.85431, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1901,180415, 571, 1, 1, 3497.003, 4167.765, 13.85431, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1902,180415, 571, 1, 1, 3497.161, 4173.208, 13.8974, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1903,180415, 571, 1, 1, 3497.161, 4173.208, 13.8974, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1904,180415, 571, 1, 1, 3495.283, 4173.163, 14.59191, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1905,180415, 571, 1, 1, 3495.283, 4173.163, 14.59191, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1906,180415, 571, 1, 1, 3493.558, 4173.144, 15.14168, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1907,180415, 571, 1, 1, 3493.558, 4173.144, 15.14168, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1908,180415, 571, 1, 1, 3495.103, 4167.599, 14.42155, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1909,180415, 571, 1, 1, 3495.103, 4167.599, 14.42155, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1910,180415, 571, 1, 1, 3492.093, 4173.33, 15.54947, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1911,180415, 571, 1, 1, 3492.093, 4173.33, 15.54947, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1912,180406, 571, 1, 1, 5233.11, -1303.505, 242.6981, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66)
+(@OGUID+1913,180406, 571, 1, 1, 5223.288, -1292.884, 242.986, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66)
+(@OGUID+1914,180406, 571, 1, 1, 5235.496, -1320.318, 242.1528, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66)
+(@OGUID+1915,180406, 571, 1, 1, 5217.619, -1336.551, 242.0803, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66)
+(@OGUID+1916,180406, 571, 1, 1, 5204.664, -1302.282, 243.929, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66)
+(@OGUID+1917,180406, 571, 1, 1, 5186.655, -1315.126, 244.0308, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66)
+(@OGUID+1918,180406, 571, 1, 1, 5197.557, -1293.151, 245.1381, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66)
+(@OGUID+1919,180406, 571, 1, 1, 5167.86, -2163.789, 244.9229, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1920,180406, 571, 1, 1, 5118.464, -2229.395, 241.3221, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4317)
+(@OGUID+1921,180406, 571, 1, 1, 5200.777, -2213.902, 241.7638, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4317)
+(@OGUID+1922,180406, 571, 1, 1, 5209.903, -2206.08, 240.9178, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4317)
+(@OGUID+1923,180406, 571, 1, 1, 5381.495, -2622.062, 303.9539, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1924,180406, 571, 1, 1, 5432.385, -2649.816, 312.4956, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275)
+(@OGUID+1925,180406, 571, 1, 1, 5380.949, -2686.028, 301.1252, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275)
+(@OGUID+1926,180406, 571, 1, 1, 5492.693, -2604.736, 304.7423, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275)
+(@OGUID+1927,180406, 571, 1, 1, 5528.45, -2651.096, 303.9539, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275)
+(@OGUID+1928,180406, 571, 1, 1, 5750.874, -3530.618, 388.8118, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1929,180406, 571, 1, 1, 5780.643, -3626.452, 387.7118, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4323)
+(@OGUID+1930,180406, 571, 1, 1, 5784.183, -3601.332, 387.882, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4323)
+(@OGUID+1931,180406, 571, 1, 1, 4586.705, -4265.697, 182.0961, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1932,180406, 571, 1, 1, 3867.676, -4566.178, 215.357, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1933,180406, 571, 1, 1, 3832.829, -4549.958, 215.4487, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1934,180406, 571, 1, 1, 3840.872, -4517.668, 216.5039, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1935,180406, 571, 1, 1, 3854.774, -4497.302, 214.1549, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4211)
+(@OGUID+1936,180406, 571, 1, 1, 4507.235, -4229.571, 167.2504, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1937,180406, 571, 1, 1, 4543.993, -4219.068, 170.553, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1938,180406, 571, 1, 1, 4576.085, -4253.777, 182.2079, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4159)
+(@OGUID+1939,180406, 571, 1, 1, 3443.539, -2828.223, 202.6841, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1940,180406, 571, 1, 1, 3440.909, -2781.021, 200.6416, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1941,180406, 571, 1, 1, 3399.112, -2788.302, 211.2246, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1942,180406, 571, 1, 1, 3484.97, -2776.988, 199.2997, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1943,180406, 571, 1, 1, 3429.496, -2767.099, 200.3861, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4204)
+(@OGUID+1944,180406, 571, 1, 1, 3452.409, -2756.081, 199.3898, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4204)
+(@OGUID+1945,180406, 571, 1, 1, 3229.066, -2337.311, 95.43889, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4217)
+(@OGUID+1946,180406, 571, 1, 1, 3219.195, -2355.696, 129.1687, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4217)
+(@OGUID+1947,180406, 571, 1, 1, 3275.07, -2303.272, 120.9754, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4206)
+(@OGUID+1948,180406, 571, 1, 1, 3195.742, -2285.431, 110.5097, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4248)
+(@OGUID+1949,180406, 571, 1, 1, 3305.993, -2292.779, 115.1555, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4248)
+(@OGUID+1950,180406, 571, 1, 1, 3162.851, -2230.15, 121.904, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4206)
+(@OGUID+1951,180406, 571, 1, 1, 3320.307, -2237.068, 124.4572, 4.118979, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4206)
+(@OGUID+1952,180406, 571, 1, 1, 2666.803, -4317.568, 293.4839, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065)
+(@OGUID+1953,180406, 571, 1, 1, 2693.682, -4363.086, 279.9544, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065)
+(@OGUID+1954,180406, 571, 1, 1, 2618.073, -4361.412, 283.4159, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065)
+(@OGUID+1955,180406, 571, 1, 1, 2726.429, -4358.761, 281.7853, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065)
+(@OGUID+1956,180406, 571, 1, 1, 2700.32, -4374.62, 280.271, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065)
+(@OGUID+1957,180406, 571, 1, 1, 2649.371, -4408.653, 290.186, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4018)
+(@OGUID+1958,180406, 571, 1, 1, 2376.891, -4990.313, 257.6985, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1959,180406, 571, 1, 1, 2377.773, -5054.615, 254.4842, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1960,180406, 571, 1, 1, 1854.089, -6015.621, 10.07462, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4060)
+(@OGUID+1961,180406, 571, 1, 1, 1934.119, -6111.237, 27.48708, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4060)
+(@OGUID+1962,180406, 571, 1, 1, 1835.864, -6089.984, 11.71504, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4060)
+(@OGUID+1963,180406, 571, 1, 1, 1917.503, -6158.714, 26.71446, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4000)
+(@OGUID+1964,180406, 571, 1, 1, 1914.023, -6154.183, 26.71475, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4000)
+(@OGUID+1965,180406, 571, 1, 1, 1890.54, -6173.179, 23.86584, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4000)
+(@OGUID+1966,180406, 571, 1, 1, 496.4844, -4643.306, 253.2072, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+1967,180472, 571, 1, 1, 5202.763, -1310.045, 247.7712, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66)
+(@OGUID+1968,180472, 571, 1, 1, 5205.405, -1316.248, 247.7859, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66)
+(@OGUID+1969,180472, 571, 1, 1, 5196.807, -1312.714, 247.8102, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66)
+(@OGUID+1970,180472, 571, 1, 1, 5198.6, -1318.504, 247.8461, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66)
+(@OGUID+1971,180472, 571, 1, 1, 3842.744, -4550, 214.0861, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+1972,180472, 571, 1, 1, 3877.871, -4502.53, 218.5026, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+1973,180472, 571, 1, 1, 3843.904, -4545.311, 213.8107, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+1974,180472, 571, 1, 1, 3839.872, -4542.153, 213.6485, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+1975,180472, 571, 1, 1, 3872.773, -4503.769, 218.4031, 1.239183, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+1976,180472, 571, 1, 1, 3869.185, -4499.854, 218.2175, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211)
+(@OGUID+1977,180472, 571, 1, 1, 3870.929, -4494.531, 218.1595, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211)
+(@OGUID+1978,180472, 571, 1, 1, 3879.285, -4497.91, 218.7872, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211)
+(@OGUID+1979,180472, 571, 1, 1, 3876.223, -4493.979, 218.6851, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211)
+(@OGUID+1980,180472, 571, 1, 1, 2671.557, -4386.672, 291.2738, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4065)
+(@OGUID+1981,180472, 571, 1, 1, 2676.202, -4381.061, 290.9279, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4065)
+(@OGUID+1982,180472, 571, 1, 1, 422.7614, -4514.731, 254.5068, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991)
+(@OGUID+1983,180472, 571, 1, 1, 422.1116, -4519.995, 254.5345, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991)
+(@OGUID+1984,180472, 571, 1, 1, 416.6321, -4519.402, 254.5415, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991)
+(@OGUID+1985,180472, 571, 1, 1, 417.3981, -4513.884, 254.597, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991)
+(@OGUID+1986,180472, 571, 1, 1, 723.5851, -2929.853, 11.01728, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3987)
+(@OGUID+1987,180472, 571, 1, 1, 695.5886, -2934.49, 3.196574, 0, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3987)
+(@OGUID+1988,180472, 571, 1, 1, 811.0573, -2915.457, 17.58987, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3987)
+(@OGUID+1989,180472, 571, 1, 1, 1421.413, -3278.163, 182.3756, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998)
+(@OGUID+1990,180472, 571, 1, 1, 1423.51, -3272.448, 182.0631, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998)
+(@OGUID+1991,180472, 571, 1, 1, 1422.446, -3281.979, 181.9594, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998)
+(@OGUID+1992,180472, 571, 1, 1, 1426.693, -3282.785, 182.3478, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998)
+(@OGUID+1993,180472, 571, 1, 1, 1431.63, -3279.372, 182.0839, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998)
+(@OGUID+1994,180472, 571, 1, 1, 639.705, -5012.253, 8.629839, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981)
+(@OGUID+1995,180472, 571, 1, 1, 592.1059, -4952.096, 34.07586, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981)
+(@OGUID+1996,180472, 571, 1, 1, 610.4792, -4920.491, 22.26099, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981)
+(@OGUID+1997,180472, 571, 1, 1, 586.1684, -4953.842, 33.8328, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981)
+(@OGUID+1998,180472, 571, 1, 1, 596.9149, -5010.774, 7.315163, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981)
+(@OGUID+1999,180472, 571, 1, 1, 580.2164, -4941.878, 23.65312, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981)
+(@OGUID+2000,180472, 571, 1, 1, 548.9089, -5022.439, 15.06125, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981)
+(@OGUID+2001,180472, 571, 1, 1, 2472.567, -5063.961, 290.0428, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4003)
+(@OGUID+2002,180472, 571, 1, 1, 2472.634, -5068.495, 290.1004, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4003)
+(@OGUID+2003,180472, 571, 1, 1, 2546.96, -1842.127, 15.45883, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+2004,180472, 571, 1, 1, 2492.571, -1926.668, 18.88001, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+2005,180472, 571, 1, 1, 2492.924, -1957.088, 19.6185, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+2006,180472, 571, 1, 1, 2497.964, -1933.934, 18.74674, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+2007,180472, 571, 1, 1, 2548.99, -1836.533, 16.33319, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+2008,180472, 571, 1, 1, 2470.893, -1923.861, 19.63781, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+2009,180472, 571, 1, 1, 2492.745, -1840.021, 15.76282, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+2010,180472, 571, 1, 1, 2558.018, -1829.936, 16.32347, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+2011,180472, 571, 1, 1, 2563.788, -1830.118, 15.46013, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+2012,180472, 571, 1, 1, 3654.827, -701.1371, 229.9562, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177)
+(@OGUID+2013,180472, 571, 1, 1, 3660.257, -706.6854, 219.9831, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177)
+(@OGUID+2014,180472, 571, 1, 1, 3650.975, -716.6632, 220.7892, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177)
+(@OGUID+2015,180472, 571, 1, 1, 3624.304, -716.2471, 218.5354, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177)
+(@OGUID+2016,180472, 571, 1, 1, 3472.093, 1983.797, 70.11913, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4158)
+(@OGUID+2017,180472, 571, 1, 1, 3475.918, 2008.681, 70.16867, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4158)
+(@OGUID+2018,180472, 571, 1, 1, 3842.197, 1512.92, 103.3451, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4165)
+(@OGUID+2019,180472, 571, 1, 1, 7777.079, -2831.855, 1230.241, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+2020,180472, 571, 1, 1, 7776.125, -2826.765, 1230.253, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+2021,180472, 571, 1, 1, 7799.851, -2952.78, 1268.356, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4441)
+(@OGUID+2022,180407, 571, 1, 1, 5186.266, -2193.768, 239.013, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2023,180407, 571, 1, 1, 5170.956, -2174.502, 236.5384, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2024,180407, 571, 1, 1, 5131.898, -2198.527, 238.9261, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2025,180407, 571, 1, 1, 5118.4, -2225.201, 241.3221, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4317)
+(@OGUID+2026,180407, 571, 1, 1, 5410.509, -2652.607, 306.231, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275)
+(@OGUID+2027,180407, 571, 1, 1, 5467.847, -2615.898, 312.4956, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275)
+(@OGUID+2028,180407, 571, 1, 1, 5500.174, -2659.385, 303.9539, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275)
+(@OGUID+2029,180407, 571, 1, 1, 5536.58, -2608.138, 304.0076, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275)
+(@OGUID+2030,180407, 571, 1, 1, 5524.991, -2578.385, 303.9539, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275)
+(@OGUID+2031,180407, 571, 1, 1, 5744.013, -3556, 386.8233, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2032,180407, 571, 1, 1, 5773.413, -3601.402, 386.8242, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4323)
+(@OGUID+2033,180407, 571, 1, 1, 5769.374, -3630.634, 386.852, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4323)
+(@OGUID+2034,180407, 571, 1, 1, 4578.956, -4263.669, 182.3578, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2035,180407, 571, 1, 1, 3866.024, -4556.092, 217.1811, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2036,180407, 571, 1, 1, 3839.12, -4556.077, 215.6738, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2037,180407, 571, 1, 1, 3876.9, -4547.333, 210.9542, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2038,180407, 571, 1, 1, 3834.391, -4523.571, 216.3354, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2039,180407, 571, 1, 1, 3845.775, -4506.957, 213.2268, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4211)
+(@OGUID+2040,180407, 571, 1, 1, 4503.457, -4238.322, 166.302, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2041,180407, 571, 1, 1, 4553.079, -4233.049, 170.7654, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2042,180407, 571, 1, 1, 4591.484, -4252.421, 181.7474, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4159)
+(@OGUID+2043,180407, 571, 1, 1, 3419.264, -2808.972, 201.4093, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2044,180407, 571, 1, 1, 3428.19, -2778.842, 263.1267, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2045,180407, 571, 1, 1, 3361.911, -2812.032, 198.3222, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2046,180407, 571, 1, 1, 3414.363, -2778.031, 201.5204, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2047,180407, 571, 1, 1, 3429.28, -2746.916, 199.4592, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4204)
+(@OGUID+2048,180407, 571, 1, 1, 3249.329, -2372.51, 129.9958, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4217)
+(@OGUID+2049,180407, 571, 1, 1, 3309.994, -2284.978, 114.9895, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4248)
+(@OGUID+2050,180407, 571, 1, 1, 3195.763, -2280.448, 110.7325, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4248)
+(@OGUID+2051,180407, 571, 1, 1, 3239.406, -2232.858, 121.1309, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206)
+(@OGUID+2052,180407, 571, 1, 1, 3297.919, -2236.022, 120.9063, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206)
+(@OGUID+2053,180407, 571, 1, 1, 3312.651, -2213.69, 115.9192, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206)
+(@OGUID+2054,180407, 571, 1, 1, 3358.979, -2188.361, 123.8899, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206)
+(@OGUID+2055,180407, 571, 1, 1, 2697.765, -4328.043, 291.2906, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065)
+(@OGUID+2056,180407, 571, 1, 1, 2662.834, -4358.088, 279.7958, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065)
+(@OGUID+2057,180407, 571, 1, 1, 2618.055, -4371.507, 283.3527, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065)
+(@OGUID+2058,180407, 571, 1, 1, 2710.088, -4371.438, 278.8264, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065)
+(@OGUID+2059,180407, 571, 1, 1, 2670.709, -4408.632, 290.6959, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4018)
+(@OGUID+2060,180407, 571, 1, 1, 2382.453, -5014.535, 254.0956, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2061,180407, 571, 1, 1, 2385.039, -5056.534, 253.5052, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2062,180407, 571, 1, 1, 1924.839, -6128.684, 27.42144, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4060)
+(@OGUID+2063,180407, 571, 1, 1, 1846.395, -6081.321, 11.3513, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4060)
+(@OGUID+2064,180407, 571, 1, 1, 1929.122, -6143.407, 26.77677, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4000)
+(@OGUID+2065,180407, 571, 1, 1, 1893.114, -6154.604, 27.42172, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4000)
+(@OGUID+2066,180407, 571, 1, 1, 1890.457, -6159.884, 27.42142, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4000)
+(@OGUID+2067,180407, 571, 1, 1, 485.1177, -4663.222, 253.1473, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2068,180407, 571, 1, 1, 496.8085, -4602.353, 249.5994, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+2069,180407, 571, 1, 1, 401, -4688.146, 248.2407, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991)
+(@OGUID+2070,180407, 571, 1, 1, 399.7902, -4712.554, 231.7376, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991)
+(@OGUID+2071,180407, 571, 1, 1, 389.0826, -4503.428, 242.6498, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991)
+(@OGUID+2072,180407, 571, 1, 1, 388.3697, -4480.479, 233.2288, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991)
+(@OGUID+2073,180407, 571, 1, 1, 490.7223, -4521.801, 248.6068, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991)
+(@OGUID+2074,180407, 571, 1, 1, 756.3785, -2948.583, 15.57896, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3987)
+(@OGUID+2075,180407, 571, 1, 1, 769.6545, -2921.345, 12.84954, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3987)
+(@OGUID+2076,180407, 571, 1, 1, 731.8281, -2922.661, 7.247694, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3987)
+(@OGUID+2077,180411, 571, 1, 1, 5438.724, -2610.023, 317.467, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4275)
+(@OGUID+2078,180411, 571, 1, 1, 5464.751, -2610.872, 317.4325, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4275)
+(@OGUID+2079,180411, 571, 1, 1, 3410.139, -2792.103, 205.9287, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0)
+(@OGUID+2080,180411, 571, 1, 1, 3416.794, -2787.165, 206.333, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0)
+(@OGUID+2081,180411, 571, 1, 1, 3452.579, -2745.875, 191.9798, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4204)
+(@OGUID+2082,180411, 571, 1, 1, 1879.72, -6205.338, 27.26761, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4000)
+(@OGUID+2083,180411, 571, 1, 1, 466.7355, -4532.663, 248.7537, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3991)
+(@OGUID+2084,180411, 571, 1, 1, 700.5764, -2933.623, 0.497556, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3987)
+(@OGUID+2085,180411, 571, 1, 1, 820.6528, -2907.458, 12.73376, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3987)
+(@OGUID+2086,180411, 571, 1, 1, 1372.837, -3207.151, 168.448, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3998)
+(@OGUID+2087,180411, 571, 1, 1, 1421.961, -3261.482, 172.5474, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3998)
+(@OGUID+2088,180411, 571, 1, 1, 627.3833, -4917.144, 35.51801, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3981)
+(@OGUID+2089,180411, 571, 1, 1, 594.2167, -4931.238, 21.88531, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3981)
+(@OGUID+2090,180411, 571, 1, 1, 574.7415, -4943.303, 21.83569, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3981)
+(@OGUID+2091,180411, 571, 1, 1, 2465.79, -5055.773, 303.4811, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4003)
+(@OGUID+2092,180411, 571, 1, 1, 2494.079, -5058.457, 288.5814, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4003)
+(@OGUID+2093,180411, 571, 1, 1, 3667.043, -707.4705, 220.4299, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4177)
+(@OGUID+2094,180411, 571, 1, 1, 2776.893, 930.918, 28.78174, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4152)
+(@OGUID+2095,180411, 571, 1, 1, 3842.228, 1495.968, 101.1961, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4165)
+(@OGUID+2096,180411, 571, 1, 1, 3841.892, 1477.297, 129.234, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4165)
+(@OGUID+2097,180411, 571, 1, 1, 8444.078, -340.1267, 915.4036, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4436)
+(@OGUID+2098,180411, 571, 1, 1, 6124.838, -1085.729, 407.7206, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419)
+(@OGUID+2099,180411, 571, 1, 1, 6125.659, -1090.55, 406.7731, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419)
+(@OGUID+2100,180411, 571, 1, 1, 6120.892, -1091.373, 407.3358, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419)
+(@OGUID+2101,180411, 571, 1, 1, 6120.023, -1086.642, 407.4646, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419)
+(@OGUID+2102,180411, 571, 1, 1, 4513.346, 5709.525, 87.73186, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4122)
+(@OGUID+2103,180411, 571, 1, 1, 4180.499, 5282.511, 41.72525, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4108)
+(@OGUID+2104,180411, 571, 1, 1, 4178.446, 5281.503, 32.45599, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4108)
+(@OGUID+2105,180411, 571, 1, 1, 2805.919, 6152.53, 95.5703, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4129)
+(@OGUID+2106,180411, 571, 1, 1, 3003.288, 4049.86, 32.18251, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4113)
+(@OGUID+2107,180411, 571, 1, 1, 3436.922, 4173.982, 26.38379, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0)
+(@OGUID+2108,180411, 571, 1, 1, 3463.541, 4143.397, 25.56423, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043)
+(@OGUID+2109,180411, 571, 1, 1, 3449.526, 4133.711, 25.4326, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043)
+(@OGUID+2110,180411, 571, 1, 1, 3463.864, 4158.074, 25.55934, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043)
+(@OGUID+2111,180411, 571, 1, 1, 3473.609, 4133.358, 25.26127, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043)
+(@OGUID+2112,180411, 571, 1, 1, 3465.659, 4191.9, 27.78839, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043)
+(@OGUID+2113,180411, 571, 1, 1, 3492.3, 4170.514, 26.55492, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043)
+(@OGUID+2114,180429, 571, 1, 1, 5592.13, 5742.286, -70.11095, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 4285)
+(@OGUID+2115,180410, 571, 1, 1, 5194.279, -2203.303, 239.6697, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+2116,180410, 571, 1, 1, 5797.013, -3553.729, 387.8808, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4323)
+(@OGUID+2117,180410, 571, 1, 1, 5778.559, -3600.916, 387.5585, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4323)
+(@OGUID+2118,180410, 571, 1, 1, 3876.448, -4523.802, 218.1476, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+2119,180410, 571, 1, 1, 4524.988, -4220.689, 171.5719, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+2120,180410, 571, 1, 1, 4546.035, -4198.64, 174.7062, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4159)
+(@OGUID+2121,180410, 571, 1, 1, 4609.126, -4233.917, 181.1064, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4159)
+(@OGUID+2122,180410, 571, 1, 1, 4524.569, -4165.339, 174.2671, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4159)
+(@OGUID+2123,180410, 571, 1, 1, 3416.599, -2799.829, 203.2782, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+2124,180410, 571, 1, 1, 3402.456, -2806.774, 203.5183, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+2125,180410, 571, 1, 1, 3422.075, -2795.796, 203.1454, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+2126,180410, 571, 1, 1, 3259.209, -2267.978, 114.4671, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4248)
+(@OGUID+2127,180410, 571, 1, 1, 3220.739, -2298.016, 108.4389, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4248)
+(@OGUID+2128,180410, 571, 1, 1, 3263.73, -2264.506, 114.3535, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4248)
+(@OGUID+2129,180410, 571, 1, 1, 3252.173, -2171.068, 118.6485, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4206)
+(@OGUID+2130,180410, 571, 1, 1, 3306.331, -2180.179, 118.5948, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4206)
+(@OGUID+2131,180410, 571, 1, 1, 1427.057, -3270.854, 169.2964, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3998)
+(@OGUID+2132,180410, 571, 1, 1, 590.5975, -4936.698, 30.04726, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981)
+(@OGUID+2133,180410, 571, 1, 1, 602.3406, -4924.361, 18.96176, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981)
+(@OGUID+2134,180410, 571, 1, 1, 601.4332, -4918.563, 31.67034, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981)
+(@OGUID+2135,180410, 571, 1, 1, 595.7699, -4919.979, 31.67729, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981)
+(@OGUID+2136,180410, 571, 1, 1, 580.9988, -4922.641, 19.96896, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981)
+(@OGUID+2137,180410, 571, 1, 1, 2487.015, -5066.922, 286.3527, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4003)
+(@OGUID+2138,180410, 571, 1, 1, 3658.518, -702.5648, 216.069, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177)
+(@OGUID+2139,180410, 571, 1, 1, 3649.671, -718.9785, 226.6098, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177)
+(@OGUID+2140,180410, 571, 1, 1, 3655.556, -719.8813, 226.5605, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177)
+(@OGUID+2141,180410, 571, 1, 1, 3633.41, -715.426, 216.1156, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177)
+(@OGUID+2142,180410, 571, 1, 1, 6677.345, -199.9435, 951.5283, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4428)
+(@OGUID+2143,180410, 571, 1, 1, 5534.461, 5748.173, -78.80743, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4285)
+(@OGUID+2144,180410, 571, 1, 1, 2817.708, 6157.477, 87.63675, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129)
+(@OGUID+2145,180410, 571, 1, 1, 2805.012, 6172.209, 87.67882, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129)
+(@OGUID+2146,180410, 571, 1, 1, 2807.23, 6169.249, 87.58257, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129)
+(@OGUID+2147,180410, 571, 1, 1, 2820.371, 6154.916, 87.65291, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129)
+(@OGUID+2148,180410, 571, 1, 1, 2808.551, 6134.94, 87.93844, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129)
+(@OGUID+2149,180410, 571, 1, 1, 2274.451, 5201.288, 13.85912, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+2150,180410, 571, 1, 1, 2279.471, 5208.015, 23.90492, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+2151,180410, 571, 1, 1, 2272.099, 5192.15, 12.74661, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+2152,180410, 571, 1, 1, 2284.942, 5205.83, 24.19367, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+2153,180410, 571, 1, 1, 2291.187, 5207.434, 24.68394, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+2154,180410, 571, 1, 1, 2297.049, 5205.213, 23.75366, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+2155,180410, 571, 1, 1, 2271.727, 5181.195, 21.453, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+2156,180410, 571, 1, 1, 2302.244, 5203.075, 24.58699, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+2157,180410, 571, 1, 1, 3460.282, 4177.789, 22.23072, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4043)
+(@OGUID+2158,180410, 571, 1, 1, 3468.992, 4177.352, 22.22953, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4043)
+(@OGUID+2159,180428, 571, 1, 1, 2284.567, 5211.048, 12.48842, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180428 (Area: 4032)
+(@OGUID+2160,180428, 571, 1, 1, 2280.373, 5188.88, 12.49333, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180428 (Area: 4032)
+(@OGUID+2161,180405, 571, 1, 1, 5235.096, -1315.231, 242.0927, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66)
+(@OGUID+2162,180405, 571, 1, 1, 5216.018, -1290.845, 243.406, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66)
+(@OGUID+2163,180405, 571, 1, 1, 5221.816, -1337.178, 241.8734, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66)
+(@OGUID+2164,180405, 571, 1, 1, 5190.064, -1301.23, 245.2663, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66)
+(@OGUID+2165,180405, 571, 1, 1, 5201.61, -1335.664, 242.9156, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66)
+(@OGUID+2166,180405, 571, 1, 1, 5136.854, -2186.576, 236.5713, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2167,180405, 571, 1, 1, 5180.994, -2197.26, 238.9063, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2168,180405, 571, 1, 1, 5154.888, -2212.581, 237.812, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2169,180405, 571, 1, 1, 5122.884, -2229.666, 241.3221, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4317)
+(@OGUID+2170,180405, 571, 1, 1, 5359.893, -2664.229, 301.0435, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2171,180405, 571, 1, 1, 5433.402, -2615.731, 312.4956, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275)
+(@OGUID+2172,180405, 571, 1, 1, 5467.35, -2650.341, 312.4956, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275)
+(@OGUID+2173,180405, 571, 1, 1, 5526.185, -2673.551, 303.9539, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275)
+(@OGUID+2174,180405, 571, 1, 1, 5536.588, -2625.326, 303.6935, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275)
+(@OGUID+2175,180405, 571, 1, 1, 5449.43, -2564.951, 308.4314, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275)
+(@OGUID+2176,180405, 571, 1, 1, 5763.002, -3528.326, 388.487, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2177,180405, 571, 1, 1, 5786.963, -3540.992, 387.882, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2178,180405, 571, 1, 1, 5754.921, -3608.51, 386.4638, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4323)
+(@OGUID+2179,180405, 571, 1, 1, 3858.005, -4565.136, 215.9988, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2180,180405, 571, 1, 1, 3888.583, -4554.612, 217.6464, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2181,180405, 571, 1, 1, 3830.209, -4542.06, 214.4055, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2182,180405, 571, 1, 1, 3846.518, -4514.354, 213.1539, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2183,180405, 571, 1, 1, 3861.908, -4495.958, 214.0141, 0.6981314, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4211)
+(@OGUID+2184,180405, 571, 1, 1, 4571.689, -4261.007, 182.1285, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159)
+(@OGUID+2185,180405, 571, 1, 1, 4532.587, -4188.319, 173.4792, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159)
+(@OGUID+2186,180405, 571, 1, 1, 4526.884, -4148.059, 172.4744, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159)
+(@OGUID+2187,180405, 571, 1, 1, 4589.202, -4206.561, 178.8516, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159)
+(@OGUID+2188,180405, 571, 1, 1, 4567.845, -4178.61, 175.7076, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159)
+(@OGUID+2189,180405, 571, 1, 1, 3404.216, -2841.716, 201.0336, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2190,180405, 571, 1, 1, 3455.106, -2785.783, 201.4688, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2191,180405, 571, 1, 1, 3393.907, -2804.209, 227.3434, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2192,180405, 571, 1, 1, 3390.204, -2797.654, 200.4411, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2193,180405, 571, 1, 1, 3415.27, -2746.156, 199.3946, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4204)
+(@OGUID+2194,180405, 571, 1, 1, 3268.182, -2366.07, 122.9121, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4217)
+(@OGUID+2195,180405, 571, 1, 1, 3231.953, -2368.505, 132.1824, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4217)
+(@OGUID+2196,180405, 571, 1, 1, 3213.3, -2336.478, 122.9258, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206)
+(@OGUID+2197,180405, 571, 1, 1, 3264.644, -2297.473, 121.0501, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206)
+(@OGUID+2198,180405, 571, 1, 1, 3267.19, -2260.863, 114.0805, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4248)
+(@OGUID+2199,180405, 571, 1, 1, 3231.138, -2257.735, 114.4141, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4248)
+(@OGUID+2200,180405, 571, 1, 1, 3252.991, -2215.066, 117.3726, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206)
+(@OGUID+2201,180405, 571, 1, 1, 3270.524, -2221.896, 117.3726, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206)
+(@OGUID+2202,180405, 571, 1, 1, 3165.017, -2261.948, 121.5571, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206)
+(@OGUID+2203,180405, 571, 1, 1, 3267.909, -2244.548, 121.1477, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206)
+(@OGUID+2204,180405, 571, 1, 1, 3373.89, -2216.506, 124.3674, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206)
+(@OGUID+2205,180405, 571, 1, 1, 2671.809, -4329.921, 293.616, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065)
+(@OGUID+2206,180405, 571, 1, 1, 2622.076, -4352.586, 283.4205, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065)
+(@OGUID+2207,180405, 571, 1, 1, 2645.095, -4365.969, 279.2655, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065)
+(@OGUID+2208,180405, 571, 1, 1, 2621.35, -4382.056, 282.7698, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065)
+(@OGUID+2209,180405, 571, 1, 1, 2720.132, -4365.484, 281.1786, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065)
+(@OGUID+2210,180405, 571, 1, 1, 2660.348, -4411.663, 290.1755, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4018)
+(@OGUID+2211,180405, 571, 1, 1, 2389.726, -4986.201, 258.8515, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2212,180405, 571, 1, 1, 2365.341, -5054.367, 254.0189, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2213,180405, 571, 1, 1, 2397.013, -5053.728, 254.2539, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+2214,180405, 571, 1, 1, 1860.306, -6006.499, 9.963303, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4060)
+(@OGUID+2215,180405, 571, 1, 1, 1949.557, -6101.297, 30.84152, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4060)
+(@OGUID+2216, 180425, 571, 1, 1, 5220.801, -1312.929, 242.096, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+2217, 180425, 571, 1, 1, 5219.449, -1310.885, 242.0745, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+2218, 180425, 571, 1, 1, 5231.815, -1317.981, 242.3635, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+2219, 180425, 571, 1, 1, 5231.988, -1321.641, 242.3571, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+2220, 180425, 571, 1, 1, 5233.578, -1319.166, 242.3319, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+2221, 180425, 571, 1, 1, 5220.486, -1314.131, 242.052, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+2222, 180425, 571, 1, 1, 5218.222, -1315.866, 241.8938, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+2223, 180425, 571, 1, 1, 5220.872, -1331.886, 242.2099, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+2224, 180425, 571, 1, 1, 5222.452, -1332.75, 242.4185, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+2225, 180425, 571, 1, 1, 5213.813, -1299.402, 242.4057, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+2226, 180425, 571, 1, 1, 5221.667, -1334.106, 242.3032, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+2227, 180425, 571, 1, 1, 5219.712, -1332.302, 242.2887, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+2228, 180425, 571, 1, 1, 5214.818, -1299.522, 242.3706, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+2229, 180425, 571, 1, 1, 5763.354, -3564.075, 387.949, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4323)
+(@OGUID+2230, 180425, 571, 1, 1, 5765.062, -3566.035, 388.1909, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4323)
+(@OGUID+2231, 180425, 571, 1, 1, 5766.175, -3563.893, 387.8907, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4323)
+(@OGUID+2232, 180425, 571, 1, 1, 3407.464, -2802.637, 212.434, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0)
+(@OGUID+2233, 180425, 571, 1, 1, 3412.858, -2802.222, 212.7033, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0)
+(@OGUID+2234, 180425, 571, 1, 1, 3408.691, -2804.216, 212.4176, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0)
+(@OGUID+2235, 180425, 571, 1, 1, 3400.027, -2790.777, 212.3845, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0)
+(@OGUID+2236, 180425, 571, 1, 1, 3397.131, -2788.776, 212.3823, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0)
+(@OGUID+2237, 180425, 571, 1, 1, 3398.373, -2790.181, 212.3858, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0)
+(@OGUID+2238, 180425, 571, 1, 1, 1904.425, -6141.741, 19.07745, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4000)
+(@OGUID+2239, 180425, 571, 1, 1, 605.681, -4923.877, 19.09374, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981)
+(@OGUID+2240, 180425, 571, 1, 1, 606.3546, -4926.564, 19.09381, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981)
+(@OGUID+2241, 180425, 571, 1, 1, 587.7562, -4951.589, 27.65986, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981)
+(@OGUID+2242, 180425, 571, 1, 1, 582.8324, -4936.509, 31.0752, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981)
+(@OGUID+2243, 180425, 571, 1, 1, 581.9504, -4926.806, 19.88217, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981)
+(@OGUID+2244, 180425, 571, 1, 1, 5564.997, 5765.261, -74.12132, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285)
+(@OGUID+2245, 180425, 571, 1, 1, 5587.477, 5747.581, -71.46241, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285)
+(@OGUID+2246, 180425, 571, 1, 1, 5587.182, 5750.653, -71.4938, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285)
+(@OGUID+2247, 180425, 571, 1, 1, 5589.738, 5741.145, -69.95851, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285)
+(@OGUID+2248, 180426, 571, 1, 1, 5759.534, -3544.033, 396.188, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2249, 180426, 571, 1, 1, 5761.476, -3543.627, 394.9244, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2250, 180426, 571, 1, 1, 5760.164, -3544.849, 397.1731, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2251, 180426, 571, 1, 1, 5759.306, -3545.708, 394.7601, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2252, 180426, 571, 1, 1, 5761.338, -3545.427, 398.2059, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2253, 180426, 571, 1, 1, 3856.363, -4541.962, 219.7176, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2254, 180426, 571, 1, 1, 3854.806, -4539.307, 220.7594, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2255, 180426, 571, 1, 1, 3856.938, -4540.484, 224.4462, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2256, 180426, 571, 1, 1, 3854.925, -4535.948, 222.5168, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2257, 180426, 571, 1, 1, 3857.097, -4538.585, 223.1828, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2258, 180426, 571, 1, 1, 4590.376, -4234.787, 193.9518, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4159)
+(@OGUID+2259, 180426, 571, 1, 1, 4590.996, -4232.708, 196.9146, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4159)
+(@OGUID+2260, 180426, 571, 1, 1, 4588.499, -4235.377, 199.5923, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4159)
+(@OGUID+2261, 180426, 571, 1, 1, 3413.123, -2821.453, 213.0589, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2262, 180426, 571, 1, 1, 3408.973, -2821.946, 212.8639, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2263, 180426, 571, 1, 1, 3406.235, -2823.066, 211.4089, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2264, 180426, 571, 1, 1, 3407.286, -2820.172, 209.3393, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2265, 180426, 571, 1, 1, 3407.906, -2825.792, 214.426, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2266, 180426, 571, 1, 1, 3444.409, -2768.932, 208.7122, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2267, 180426, 571, 1, 1, 3442.279, -2768.483, 208.9515, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2268, 180426, 571, 1, 1, 3446.616, -2769.13, 209.847, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+2269, 180426, 571, 1, 1, 3442.672, -2767.101, 211.0916, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4204)
+(@OGUID+2270, 180426, 571, 1, 1, 3441.674, -2765.563, 210.9066, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4204)
+(@OGUID+2271, 180426, 571, 1, 1, 3255.571, -2257.918, 124.4686, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4248)
+(@OGUID+2272, 180426, 571, 1, 1, 3261.756, -2252.54, 130.7128, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+2273, 180426, 571, 1, 1, 3255.756, -2251.26, 124.3831, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+2274, 180426, 571, 1, 1, 3245.001, -2244.356, 130.5014, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+2275, 180426, 571, 1, 1, 3245.857, -2254.095, 131.8804, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+2276, 180426, 571, 1, 1, 3249.491, -2250.945, 125.1241, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+2277, 180426, 571, 1, 1, 3242.157, -2246.462, 133.1835, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+2278, 180426, 571, 1, 1, 3251.072, -2245.957, 127.2621, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+2279, 180426, 571, 1, 1, 3253.139, -2253.7, 124.5425, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+2280, 180426, 571, 1, 1, 3258.291, -2247.109, 125.9945, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+2281, 180426, 571, 1, 1, 2665.021, -4365.307, 293.8361, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065)
+(@OGUID+2282, 180426, 571, 1, 1, 2659.459, -4361.625, 304.2402, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065)
+(@OGUID+2283, 180426, 571, 1, 1, 2660.582, -4368.252, 294.3411, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065)
+(@OGUID+2284, 180426, 571, 1, 1, 2671.556, -4363.807, 296.0383, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065)
+(@OGUID+2285, 180426, 571, 1, 1, 762.1302, -2923.717, 34.17405, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+2286, 180426, 571, 1, 1, 761.934, -2924.54, 36.54957, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+2287, 180426, 571, 1, 1, 767.8195, -2920.502, 33.86417, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+2288, 180426, 571, 1, 1, 759.9549, -2911.951, 42.32548, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+2289, 180426, 571, 1, 1, 766.9323, -2913.224, 34.78922, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+2290, 180426, 571, 1, 1, 753.5833, -2915.382, 46.25695, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+2291, 180426, 571, 1, 1, 769.243, -2910.061, 45.63573, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+2292, 180426, 571, 1, 1, 755.2222, -2907.67, 46.01165, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+2293, 180426, 571, 1, 1, 1445.891, -3264.745, 200.1135, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998)
+(@OGUID+2294, 180426, 571, 1, 1, 1426.741, -3276.997, 203.4877, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998)
+(@OGUID+2295, 180426, 571, 1, 1, 1437.927, -3264.418, 201.1698, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998)
+(@OGUID+2296, 180426, 571, 1, 1, 1453.434, -3267.578, 204.6001, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998)
+(@OGUID+2297, 180426, 571, 1, 1, 1453.021, -3271.075, 202.1549, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998)
+(@OGUID+2298, 180426, 571, 1, 1, 585.0469, -4935.894, 57.77173, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981)
+(@OGUID+2299, 180426, 571, 1, 1, 584.2552, -4927.658, 53.76381, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981)
+(@OGUID+2300, 180426, 571, 1, 1, 586.4132, -4924.658, 54.59381, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981)
+(@OGUID+2301, 180426, 571, 1, 1, 579.7292, -4928.83, 52.11523, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981)
+(@OGUID+2302, 180427, 571, 1, 1, 5761.307, -3544.524, 395.4309, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2303, 180427, 571, 1, 1, 5760.497, -3546.056, 402.0221, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2304, 180427, 571, 1, 1, 5759.438, -3544.823, 396.8367, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2305, 180427, 571, 1, 1, 5760.398, -3543.224, 397.3958, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2306, 180427, 571, 1, 1, 5760.684, -3547.167, 398.6145, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2307, 180427, 571, 1, 1, 3853.183, -4534.543, 222.1418, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2308, 180427, 571, 1, 1, 3852.957, -4539.858, 219.1484, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2309, 180427, 571, 1, 1, 3856.241, -4539.436, 221.1546, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2310, 180427, 571, 1, 1, 3854.542, -4540.624, 227.1623, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2311, 180427, 571, 1, 1, 3856.855, -4536.955, 221.3848, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2312, 180427, 571, 1, 1, 4589.936, -4232.887, 187.0824, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4159)
+(@OGUID+2313, 180427, 571, 1, 1, 4590.229, -4234.215, 186.7581, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4159)
+(@OGUID+2314, 180427, 571, 1, 1, 4590.728, -4233.71, 184.4032, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4159)
+(@OGUID+2315, 180427, 571, 1, 1, 3408.324, -2823.502, 209.3464, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2316, 180427, 571, 1, 1, 3406.425, -2821.385, 209.7437, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2317, 180427, 571, 1, 1, 3410.176, -2822.778, 209.1109, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2318, 180427, 571, 1, 1, 3409.967, -2820.047, 210.1583, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2319, 180427, 571, 1, 1, 3407.021, -2824.786, 209.5089, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2320, 180427, 571, 1, 1, 3447.131, -2770.391, 210.325, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2321, 180427, 571, 1, 1, 3444.766, -2768.226, 210.0436, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+2322, 180427, 571, 1, 1, 3444.436, -2767.122, 211.3138, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4204)
+(@OGUID+2323, 180427, 571, 1, 1, 3441.46, -2766.443, 210.7611, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4204)
+(@OGUID+2324, 180427, 571, 1, 1, 3446.277, -2767.188, 208.8508, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4204)
+(@OGUID+2325, 180427, 571, 1, 1, 3251.26, -2253.675, 124.9079, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+2326, 180427, 571, 1, 1, 3251.778, -2250.464, 129.6705, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+2327, 180427, 571, 1, 1, 3247.308, -2252, 130.7534, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+2328, 180427, 571, 1, 1, 3254.531, -2247.668, 129.1577, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+2329, 180427, 571, 1, 1, 3252.336, -2248.873, 122.8677, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+2330, 180427, 571, 1, 1, 3255.591, -2250.547, 129.6846, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+2331, 180427, 571, 1, 1, 3241.862, -2241.349, 122.2494, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+2332, 180427, 571, 1, 1, 3248.178, -2245.37, 125.104, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+2333, 180427, 571, 1, 1, 3247.814, -2247.866, 124.5073, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+2334, 180427, 571, 1, 1, 3245.019, -2248.802, 122.5996, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+2335, 180427, 571, 1, 1, 2663.781, -4367.163, 302.1978, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4065)
+(@OGUID+2336, 180427, 571, 1, 1, 2667.21, -4368.415, 300.2386, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4065)
+(@OGUID+2337, 180427, 571, 1, 1, 2660.796, -4362.103, 307.4751, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4065)
+(@OGUID+2338, 180427, 571, 1, 1, 768.6163, -2922.156, 38.30094, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987)
+(@OGUID+2339, 180427, 571, 1, 1, 762.2813, -2920.307, 44.85577, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987)
+(@OGUID+2340, 180427, 571, 1, 1, 767.7639, -2914.931, 50.20907, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987)
+(@OGUID+2341, 180427, 571, 1, 1, 771.118, -2914.354, 33.8317, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987)
+(@OGUID+2342, 180427, 571, 1, 1, 764.632, -2912.734, 28.99734, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987)
+(@OGUID+2343, 180427, 571, 1, 1, 764.7379, -2907.014, 42.12639, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987)
+(@OGUID+2344, 180427, 571, 1, 1, 1448.717, -3267.089, 201.6755, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998)
+(@OGUID+2345, 180427, 571, 1, 1, 1450.106, -3254.806, 202.5467, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998)
+(@OGUID+2346, 180427, 571, 1, 1, 1432.74, -3253.945, 209.4203, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998)
+(@OGUID+2347, 180427, 571, 1, 1, 1460.863, -3277.345, 207.5119, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998)
+(@OGUID+2348, 180427, 571, 1, 1, 1461.863, -3264.878, 201.965, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998)
+(@OGUID+2349, 180427, 571, 1, 1, 586.9097, -4944.667, 47.7813, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981)
+(@OGUID+2350, 180427, 571, 1, 1, 587.7552, -4923.743, 55.51563, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981)
+(@OGUID+2351, 180427, 571, 1, 1, 584.0382, -4927.713, 53.33385, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981)
+(@OGUID+2352, 180427, 571, 1, 1, 586.8472, -4927.104, 56.76656, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981)
+(@OGUID+2353, 180427, 571, 1, 1, 576.6077, -4929.509, 55.73938, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981)
+(@OGUID+2354, 180427, 571, 1, 1, 2473.661, -5056.833, 313.4054, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4003)
+(@OGUID+2355, 180427, 571, 1, 1, 2484.688, -5057.96, 311.5289, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4003)
+(@OGUID+2356, 180471, 571, 1, 1, 5204.491, -1317.474, 246.2982, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66)
+(@OGUID+2357, 180471, 571, 1, 1, 5204.556, -1311.417, 246.2742, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66)
+(@OGUID+2358, 180471, 571, 1, 1, 5197.808, -1310.934, 246.395, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66)
+(@OGUID+2359, 180471, 571, 1, 1, 5197.694, -1316.509, 246.3158, 0, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66)
+(@OGUID+2360, 180471, 571, 1, 1, 3199.965, -2298.588, 111.0376, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4248)
+(@OGUID+2361, 180471, 571, 1, 1, 1900.167, -6132.452, 23.4388, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+2362, 180471, 571, 1, 1, 1902.965, -6131.993, 23.66091, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+2363, 180471, 571, 1, 1, 1898.609, -6134.413, 23.38325, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+2364, 180471, 571, 1, 1, 1900.699, -6138.649, 23.68888, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+2365, 180471, 571, 1, 1, 1905.079, -6133.762, 23.68171, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+2366, 180471, 571, 1, 1, 1903.922, -6138.372, 23.43309, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+2367, 180471, 571, 1, 1, 1905.227, -6136.752, 23.46658, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+2368, 180471, 571, 1, 1, 1899.095, -6137.361, 23.69575, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+2369, 180471, 571, 1, 1, 588.3511, -4940.63, 23.00664, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981)
+(@OGUID+2370, 180471, 571, 1, 1, 587.6937, -4938.055, 22.97886, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981)
+(@OGUID+2371, 180471, 571, 1, 1, 584.658, -4926.464, 22.94742, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981)
+(@OGUID+2372, 180471, 571, 1, 1, 585.3281, -4928.837, 22.95987, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981)
+(@OGUID+2373, 180471, 571, 1, 1, 3661.782, -704.7066, 218.3424, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177)
+(@OGUID+2374, 180471, 571, 1, 1, 3661.339, -709.0174, 218.379, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177)
+(@OGUID+2375, 180471, 571, 1, 1, 3651.781, -708.625, 219.3715, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177)
+(@OGUID+2376, 180471, 571, 1, 1, 3652.332, -704.342, 219.3648, 6.0912, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177)
+(@OGUID+2377, 180471, 571, 1, 1, 3579.464, 251.9427, 52.88466, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+2378, 180471, 571, 1, 1, 3575.279, 246.6563, 52.87777, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+2379, 180471, 571, 1, 1, 3523.501, 237.7691, 52.94661, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+2380, 180471, 571, 1, 1, 3517.737, 242.4236, 52.90497, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+2381, 180471, 571, 1, 1, 3512.637, 297, 52.89811, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+2382, 180471, 571, 1, 1, 3517.312, 302.6024, 52.912, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+2383, 180471, 571, 1, 1, 3568.188, 304.9097, 52.96114, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+2384, 180471, 571, 1, 1, 3573.999, 300.1875, 52.88476, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+2385, 180471, 571, 1, 1, 3480.169, 1977.233, 70.1636, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4158)
+(@OGUID+2386, 180471, 571, 1, 1, 3484.095, 2013.983, 69.28771, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4158)
+(@OGUID+2387, 180471, 571, 1, 1, 3506.038, 1986.319, 68.24009, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4158)
+(@OGUID+2388, 180471, 571, 1, 1, 4508.732, 5716.75, 84.35536, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122)
+(@OGUID+2389, 180471, 571, 1, 1, 4506.331, 5715.979, 85.08492, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122)
+(@OGUID+2390, 180471, 571, 1, 1, 4506.083, 5715.355, 84.23188, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122)
+(@OGUID+2391, 180471, 571, 1, 1, 4508.761, 5717.552, 85.0927, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122)
+(@OGUID+2392, 180471, 571, 1, 1, 2869.387, 6211.827, 213.7105, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4020)
+(@OGUID+2393, 180471, 571, 1, 1, 2867.295, 6213.874, 213.6728, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4020)
+(@OGUID+2394, 180471, 571, 1, 1, 2816.863, 6165.138, 90.56039, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129)
+(@OGUID+2395, 180471, 571, 1, 1, 2814.848, 6167.205, 90.52396, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129)
+(@OGUID+2396, 180471, 571, 1, 1, 2791.958, 6145.722, 91.96442, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129)
+(@OGUID+2397, 180471, 571, 1, 1, 2793.936, 6143.066, 92.17467, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129)
+(@OGUID+2398, 180471, 571, 1, 1, 2769.591, 6124.062, 95.95924, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129)
+(@OGUID+2399, 180471, 571, 1, 1, 2770.471, 6122.91, 95.92594, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129)
+(@OGUID+2400, 180471, 571, 1, 1, 2278.516, 5192.333, 16.84088, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4032)
+(@OGUID+2401, 180471, 571, 1, 1, 2280.049, 5196.121, 16.84082, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4032)
+(@OGUID+2402, 180471, 571, 1, 1, 3003.927, 4062.122, 33.84514, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113)
+(@OGUID+2403, 180471, 571, 1, 1, 3006.915, 4061.78, 33.92781, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113)
+(@OGUID+2404, 180471, 571, 1, 1, 3006.462, 4067.487, 34.17837, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113)
+(@OGUID+2405, 180471, 571, 1, 1, 3026.681, 4045.708, 28.72306, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113)
+(@OGUID+2406, 180471, 571, 1, 1, 3005.008, 4059.406, 34.61089, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113)
+(@OGUID+2407, 180471, 571, 1, 1, 2979.829, 4053.98, 28.70936, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113)
+(@OGUID+2408, 180523, 571, 1, 1, 5471.11, -2643.376, 307.0311, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4275)
+(@OGUID+2409, 180523, 571, 1, 1, 5757.718, -3563.73, 386.8262, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4323)
+(@OGUID+2410, 180523, 571, 1, 1, 3864.262, -4536.794, 209.4336, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0)
+(@OGUID+2411, 180523, 571, 1, 1, 4604.042, -4237.24, 178.9002, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4159)
+(@OGUID+2412, 180523, 571, 1, 1, 3402.777, -2788.145, 201.5207, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0)
+(@OGUID+2413, 180523, 571, 1, 1, 3256.107, -2192.384, 117.3726, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4206)
+(@OGUID+2414, 180523, 571, 1, 1, 2678.036, -4392.695, 284.8349, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4018)
+(@OGUID+2415, 180523, 571, 1, 1, 1889.731, -6193.472, 23.6236, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4000)
+(@OGUID+2416, 180523, 571, 1, 1, 452.467, -4536.335, 244.877, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3991)
+(@OGUID+2417, 180523, 571, 1, 1, 698.1771, -2928.019, -2.640473, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3987)
+(@OGUID+2418, 180523, 571, 1, 1, 1436.052, -3258.58, 167.779, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3998)
+(@OGUID+2419, 180523, 571, 1, 1, 578.6011, -4929.339, 19.16861, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3981)
+(@OGUID+2420, 180523, 571, 1, 1, 2481.56, -5054.175, 284.8836, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4003)
+(@OGUID+2421, 180523, 571, 1, 1, 3211.594, -677.0414, 167.9602, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0)
+(@OGUID+2422, 180523, 571, 1, 1, 3657.321, -716.2959, 215.2677, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4177)
+(@OGUID+2423, 180523, 571, 1, 1, 3575.916, 257.0831, 47.28813, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4161)
+(@OGUID+2424, 180523, 571, 1, 1, 2775.545, 925.4372, 22.99003, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4152)
+(@OGUID+2425, 180523, 571, 1, 1, 3468.981, 2004.253, 64.86234, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4158)
+(@OGUID+2426, 180523, 571, 1, 1, 3847.863, 1505.001, 92.51198, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4165)
+(@OGUID+2427, 180523, 571, 1, 1, 8437.674, -355.5473, 906.4015, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4484)
+(@OGUID+2428, 180523, 571, 1, 1, 7839.014, -805.3143, 1183.294, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0)
+(@OGUID+2429, 180523, 571, 1, 1, 7798.68, -2973.132, 1259.494, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4441)
+(@OGUID+2430, 180523, 571, 1, 1, 6128.351, -1083.17, 402.6452, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4419)
+(@OGUID+2431, 180523, 571, 1, 1, 6675.385, -195.2562, 951.1111, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4428)
+(@OGUID+2432, 180523, 571, 1, 1, 5565.757, 5759.502, -75.22591, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4285)
+(@OGUID+2433, 180523, 571, 1, 1, 4506.858, 5710.637, 81.51824, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4122)
+(@OGUID+2434, 180523, 571, 1, 1, 4175.616, 5283.527, 26.69308, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4108)
+(@OGUID+2435, 180523, 571, 1, 1, 2804.783, 6168.423, 85.37867, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4129)
+(@OGUID+2436, 180523, 571, 1, 1, 2299.602, 5193.956, 11.70278, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4032)
+(@OGUID+2437, 180523, 571, 1, 1, 3007.872, 4052.658, 26.60726, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4113)
+(@OGUID+2438, 180523, 571, 1, 1, 3468.352, 4151.25, 17.5926, 4.118979, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4043)
+(@OGUID+2439, 180431, 571, 1, 1, 5448.499, -2687.353, 317.0294, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+2440, 180431, 571, 1, 1, 3885.052, -4516.659, 244.4485, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+2441, 180431, 571, 1, 1, 3326.384, -2324.99, 148.8137, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+2442, 180431, 571, 1, 1, 3249.887, -2332.044, 113.358, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+2443, 180431, 571, 1, 1, 3228.007, -2376.978, 142.2661, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+2444, 180431, 571, 1, 1, 3194.981, -2324.08, 142.3525, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+2445, 180431, 571, 1, 1, 3355.472, -2264.87, 151.9365, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+2446, 180431, 571, 1, 1, 2534.615, -1939.123, 6.753963, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 394)
+(@OGUID+2447, 180431, 571, 1, 1, 2505.454, -1955.444, 11.24014, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 394)
+(@OGUID+2448, 180431, 571, 1, 1, 2576.156, -1817.301, 10.01707, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 394)
+(@OGUID+2449, 180431, 571, 1, 1, 2545.243, -1802.575, 11.32091, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 4242)
+(@OGUID+2450, 180431, 571, 1, 1, 3690.41, 272.8268, 52.22741, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 4254)
+(@OGUID+2451, 180431, 571, 1, 1, 3687.912, 302.2261, 52.22742, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 4254)
+(@OGUID+2452, 180431, 571, 1, 1, 4512.567, 5708.924, 97.69891, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 4123)
+(@OGUID+2453, 180408, 571, 1, 1, 5764.419, -3572.029, 400.4677, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4323)
+(@OGUID+2454, 180408, 571, 1, 1, 5796.51, -3596.129, 396.4, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4323)
+(@OGUID+2455, 180408, 571, 1, 1, 3874.124, -4526.177, 220.1032, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 0)
+(@OGUID+2456, 180408, 571, 1, 1, 3839.224, -4546.804, 217.41, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 0)
+(@OGUID+2457, 180408, 571, 1, 1, 3874.079, -4498.493, 223.8581, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4211)
+(@OGUID+2458, 180408, 571, 1, 1, 3256.49, -2269.653, 114.1506, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4248)
+(@OGUID+2459, 180408, 571, 1, 1, 3517.16, 2000.169, 64.86235, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4158)
+(@OGUID+2460, 180408, 571, 1, 1, 8478.776, -335.0133, 907.4905, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4436)
+(@OGUID+2461, 180408, 571, 1, 1, 5547.182, 5734.344, -70.37753, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4285)
+(@OGUID+2462, 180408, 571, 1, 1, 5570.323, 5767.202, -65.55209, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4285)
+(@OGUID+2463, 180408, 571, 1, 1, 5590.967, 5749.478, -66.40426, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4285)
+(@OGUID+2464, 180408, 571, 1, 1, 4146.889, 5330.113, 33.63815, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108)
+(@OGUID+2465, 180408, 571, 1, 1, 4154.61, 5340.539, 33.98043, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108)
+(@OGUID+2466, 180408, 571, 1, 1, 4136.229, 5321.447, 33.53545, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108)
+(@OGUID+2467, 180408, 571, 1, 1, 4119.863, 5304.662, 33.65726, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108)
+(@OGUID+2468, 180408, 571, 1, 1, 4248.604, 5256.001, 76.13831, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108)
+(@OGUID+2469, 180408, 571, 1, 1, 2923.913, 6238.717, 208.8952, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4020)
+(@OGUID+2470, 180408, 571, 1, 1, 2925.917, 6235.095, 216.3796, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4020)
+(@OGUID+2471, 180408, 571, 1, 1, 2927.372, 6251.385, 216.4442, 5.515242, 0, 0, 0, 1, 120, 255, 1); -- 180408 (Area: 4020)
+
+SET @OGUID:=81188;
+SET @Event:=12;
+DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+2471 AND `eventEntry`=@Event;
+INSERT INTO game_event_gameobject SELECT @Event, gameobject.guid FROM `gameobject` WHERE gameobject.guid BETWEEN @OGUID+0 AND @OGUID+2471;
diff --git a/sql/updates/world/2015_11_12_00_world.sql b/sql/updates/world/2015_11_12_00_world.sql
new file mode 100644
index 00000000000..79c2461e5ff
--- /dev/null
+++ b/sql/updates/world/2015_11_12_00_world.sql
@@ -0,0 +1,1739 @@
+SET @OGUID:=81188;
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+2471;
+
+SET @OGUID:=81188;
+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 , 180405, 571, 1, 1, 5235.096, -1315.231, 242.0927, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66)
+(@OGUID+1 , 180405, 571, 1, 1, 5216.018, -1290.845, 243.406, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66)
+(@OGUID+2 , 180405, 571, 1, 1, 5221.816, -1337.178, 241.8734, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66)
+(@OGUID+3 , 180405, 571, 1, 1, 5190.064, -1301.23, 245.2663, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66)
+(@OGUID+4 , 180405, 571, 1, 1, 5201.61, -1335.664, 242.9156, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66)
+(@OGUID+5 , 180405, 571, 1, 1, 5136.854, -2186.576, 236.5713, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+6 , 180405, 571, 1, 1, 5180.994, -2197.26, 238.9063, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+7 , 180405, 571, 1, 1, 5154.888, -2212.581, 237.812, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+8 , 180405, 571, 1, 1, 5122.884, -2229.666, 241.3221, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4317)
+(@OGUID+9 , 180405, 571, 1, 1, 5359.893, -2664.229, 301.0435, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+10 , 180405, 571, 1, 1, 5433.402, -2615.731, 312.4956, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275)
+(@OGUID+11 , 180405, 571, 1, 1, 5467.35, -2650.341, 312.4956, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275)
+(@OGUID+12 , 180405, 571, 1, 1, 5526.185, -2673.551, 303.9539, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275)
+(@OGUID+13 , 180405, 571, 1, 1, 5536.588, -2625.326, 303.6935, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275)
+(@OGUID+14 , 180405, 571, 1, 1, 5449.43, -2564.951, 308.4314, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275)
+(@OGUID+15 , 180405, 571, 1, 1, 5763.002, -3528.326, 388.487, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+16 , 180405, 571, 1, 1, 5786.963, -3540.992, 387.882, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+17 , 180405, 571, 1, 1, 5754.921, -3608.51, 386.4638, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4323)
+(@OGUID+18 , 180405, 571, 1, 1, 3858.005, -4565.136, 215.9988, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+19 , 180405, 571, 1, 1, 3888.583, -4554.612, 217.6464, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+20 , 180405, 571, 1, 1, 3830.209, -4542.06, 214.4055, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+21 , 180405, 571, 1, 1, 3846.518, -4514.354, 213.1539, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+22 , 180405, 571, 1, 1, 3861.908, -4495.958, 214.0141, 0.6981314, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4211)
+(@OGUID+23 , 180405, 571, 1, 1, 4571.689, -4261.007, 182.1285, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159)
+(@OGUID+24 , 180405, 571, 1, 1, 4532.587, -4188.319, 173.4792, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159)
+(@OGUID+25 , 180405, 571, 1, 1, 4526.884, -4148.059, 172.4744, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159)
+(@OGUID+26 , 180405, 571, 1, 1, 4589.202, -4206.561, 178.8516, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159)
+(@OGUID+27 , 180405, 571, 1, 1, 4567.845, -4178.61, 175.7076, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159)
+(@OGUID+28 , 180405, 571, 1, 1, 3404.216, -2841.716, 201.0336, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+29 , 180405, 571, 1, 1, 3455.106, -2785.783, 201.4688, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+30 , 180405, 571, 1, 1, 3393.907, -2804.209, 227.3434, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+31 , 180405, 571, 1, 1, 3390.204, -2797.654, 200.4411, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+32 , 180405, 571, 1, 1, 3415.27, -2746.156, 199.3946, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4204)
+(@OGUID+33 , 180405, 571, 1, 1, 3268.182, -2366.07, 122.9121, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4217)
+(@OGUID+34 , 180405, 571, 1, 1, 3231.953, -2368.505, 132.1824, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4217)
+(@OGUID+35 , 180405, 571, 1, 1, 3213.3, -2336.478, 122.9258, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206)
+(@OGUID+36 , 180405, 571, 1, 1, 3264.644, -2297.473, 121.0501, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206)
+(@OGUID+37 , 180405, 571, 1, 1, 3267.19, -2260.863, 114.0805, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4248)
+(@OGUID+38 , 180405, 571, 1, 1, 3231.138, -2257.735, 114.4141, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4248)
+(@OGUID+39 , 180405, 571, 1, 1, 3252.991, -2215.066, 117.3726, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206)
+(@OGUID+40 , 180405, 571, 1, 1, 3270.524, -2221.896, 117.3726, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206)
+(@OGUID+41 , 180405, 571, 1, 1, 3165.017, -2261.948, 121.5571, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206)
+(@OGUID+42 , 180405, 571, 1, 1, 3267.909, -2244.548, 121.1477, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206)
+(@OGUID+43 , 180405, 571, 1, 1, 3373.89, -2216.506, 124.3674, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206)
+(@OGUID+44 , 180405, 571, 1, 1, 2671.809, -4329.921, 293.616, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065)
+(@OGUID+45 , 180405, 571, 1, 1, 2622.076, -4352.586, 283.4205, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065)
+(@OGUID+46 , 180405, 571, 1, 1, 2645.095, -4365.969, 279.2655, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065)
+(@OGUID+47 , 180405, 571, 1, 1, 2621.35, -4382.056, 282.7698, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065)
+(@OGUID+48 , 180405, 571, 1, 1, 2720.132, -4365.484, 281.1786, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065)
+(@OGUID+49 , 180405, 571, 1, 1, 2660.348, -4411.663, 290.1755, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4018)
+(@OGUID+50 , 180405, 571, 1, 1, 2389.726, -4986.201, 258.8515, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+51 , 180405, 571, 1, 1, 2365.341, -5054.367, 254.0189, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+52 , 180405, 571, 1, 1, 2397.013, -5053.728, 254.2539, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+53 , 180405, 571, 1, 1, 1860.306, -6006.499, 9.963303, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4060)
+(@OGUID+54 , 180405, 571, 1, 1, 1949.557, -6101.297, 30.84152, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4060)
+(@OGUID+55 , 180405, 571, 1, 1, 1874.136, -6124.242, 27.42142, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4060)
+(@OGUID+56 , 180405, 571, 1, 1, 1919.801, -6125.821, 27.42174, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4060)
+(@OGUID+57 , 180405, 571, 1, 1, 1932.311, -6147.982, 26.77648, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4000)
+(@OGUID+58 , 180405, 571, 1, 1, 1896.94, -6176.019, 23.88414, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4000)
+(@OGUID+59 , 180405, 571, 1, 1, 500.0282, -4625.844, 249.6229, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+60 , 180405, 571, 1, 1, 448.2436, -4689.455, 248.3156, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+61 , 180405, 571, 1, 1, 400.814, -4664.87, 248.9721, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991)
+(@OGUID+62 , 180405, 571, 1, 1, 437.1691, -4547.266, 245.5937, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991)
+(@OGUID+63 , 180405, 571, 1, 1, 498.3495, -4543.512, 249.0318, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991)
+(@OGUID+64 , 180405, 571, 1, 1, 383.7737, -4704.653, 246.4204, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991)
+(@OGUID+65 , 180405, 571, 1, 1, 341.7077, -4663.656, 252.0559, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991)
+(@OGUID+66 , 180405, 571, 1, 1, 324.1059, -4619.823, 236.087, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991)
+(@OGUID+67 , 180405, 571, 1, 1, 400.9474, -4492.049, 233.8787, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991)
+(@OGUID+68 , 180405, 571, 1, 1, 401.9044, -4511.179, 250.6629, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991)
+(@OGUID+69 , 180405, 571, 1, 1, 360.6213, -4478.643, 242.9844, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991)
+(@OGUID+70 , 180405, 571, 1, 1, 454.7388, -4499.015, 248.8951, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991)
+(@OGUID+71 , 180405, 571, 1, 1, 734.592, -2933.09, 7.260227, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3987)
+(@OGUID+72 , 180405, 571, 1, 1, 797.5989, -2948.066, 6.855769, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3987)
+(@OGUID+73 , 180405, 571, 1, 1, 803.2014, -2915.014, 7.161566, 0, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3987)
+(@OGUID+74 , 180405, 571, 1, 1, 786.0313, -2859.193, 4.484391, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3988)
+(@OGUID+75 , 180405, 571, 1, 1, 1360.858, -3212.248, 186.6853, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+76 , 180405, 571, 1, 1, 1369.589, -3177.692, 164.0921, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+77 , 180405, 571, 1, 1, 1371.091, -3219.997, 164.9762, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3998)
+(@OGUID+78 , 180405, 571, 1, 1, 1458.077, -3181.131, 170.4188, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3998)
+(@OGUID+79 , 180405, 571, 1, 1, 1427.257, -3256.968, 165.5387, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3998)
+(@OGUID+80 , 180405, 571, 1, 1, 1344.667, -3284.161, 174.4178, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3998)
+(@OGUID+81 , 180405, 571, 1, 1, 1426.128, -3314.11, 168.664, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3998)
+(@OGUID+82 , 180405, 571, 1, 1, 651.1013, -5033.48, 8.628246, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3981)
+(@OGUID+83 , 180405, 571, 1, 1, 601.5671, -5000.274, 8.872829, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3981)
+(@OGUID+84 , 180405, 571, 1, 1, 597.5203, -5013.503, 3.252731, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3981)
+(@OGUID+85 , 180405, 571, 1, 1, 571.9734, -4937.067, 17.71497, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3981)
+(@OGUID+86 , 180405, 571, 1, 1, 522.7151, -4947.288, 32.97911, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3981)
+(@OGUID+87 , 180405, 571, 1, 1, 570.3427, -5099.132, 8.790771, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3981)
+(@OGUID+88 , 180405, 571, 1, 1, 2475.441, -5066.366, 305.6736, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4003)
+(@OGUID+89 , 180405, 571, 1, 1, 2432.477, -5157.805, 281.0374, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4003)
+(@OGUID+90 , 180405, 571, 1, 1, 2424.413, -5138.231, 281.4278, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4003)
+(@OGUID+91 , 180405, 571, 1, 1, 2494.666, -5065.818, 284.7478, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4003)
+(@OGUID+92 , 180405, 571, 1, 1, 2513.709, -5000.823, 286.0405, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4003)
+(@OGUID+93 , 180405, 571, 1, 1, 3241.704, -654.431, 166.4061, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+94 , 180405, 571, 1, 1, 3227.741, -670.722, 167.4637, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+95 , 180405, 571, 1, 1, 3254.793, -668.5916, 174.1517, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+96 , 180405, 571, 1, 1, 3217.112, -730.1161, 173.5844, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4186)
+(@OGUID+97 , 180405, 571, 1, 1, 3281.125, -720.5612, 175.8869, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4186)
+(@OGUID+98 , 180405, 571, 1, 1, 3247.021, -717.0428, 167.3728, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4186)
+(@OGUID+99 , 180405, 571, 1, 1, 3261.009, -755.8375, 174.2986, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4186)
+(@OGUID+100 , 180405, 571, 1, 1, 2566.921, -1911.748, 3.159494, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4242)
+(@OGUID+101 , 180405, 571, 1, 1, 2513.8, -1885.403, 12.88906, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4242)
+(@OGUID+102 , 180405, 571, 1, 1, 2424.383, -1848.096, 3.90364, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4242)
+(@OGUID+103 , 180405, 571, 1, 1, 2495.073, -1815.667, 11.99702, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4242)
+(@OGUID+104 , 180405, 571, 1, 1, 2601.156, -1804.928, 12.57094, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4242)
+(@OGUID+105 , 180405, 571, 1, 1, 3694.363, -742.5368, 213.9544, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4177)
+(@OGUID+106 , 180405, 571, 1, 1, 3843.085, -705.7463, 225.1528, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4177)
+(@OGUID+107 , 180405, 571, 1, 1, 3880.034, -784.3032, 221.0895, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4177)
+(@OGUID+108 , 180405, 571, 1, 1, 3666.556, -707.39, 228.8305, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4177)
+(@OGUID+109 , 180405, 571, 1, 1, 3649.726, -701.9913, 215.0304, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4177)
+(@OGUID+110 , 180405, 571, 1, 1, 3542.812, 202.7465, 52.22747, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4254)
+(@OGUID+111 , 180405, 571, 1, 1, 3538.371, 244.3045, 47.28843, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161)
+(@OGUID+112 , 180405, 571, 1, 1, 3575.413, 264.5829, 47.28846, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161)
+(@OGUID+113 , 180405, 571, 1, 1, 3564.399, 258.56, 122.2979, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161)
+(@OGUID+114 , 180405, 571, 1, 1, 3544.587, 296.3797, 122.2979, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161)
+(@OGUID+115 , 180405, 571, 1, 1, 3480.402, 254.7602, 52.25331, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161)
+(@OGUID+116 , 180405, 571, 1, 1, 3524.332, 270.6145, 122.2979, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161)
+(@OGUID+117 , 180405, 571, 1, 1, 3532.921, 299.8601, 47.28838, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161)
+(@OGUID+118 , 180405, 571, 1, 1, 3529.778, 341.6897, 52.22746, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161)
+(@OGUID+119 , 180405, 571, 1, 1, 2802.93, 889.9564, 12.99052, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4152)
+(@OGUID+120 , 180405, 571, 1, 1, 2766.088, 896.6517, 10.43985, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4152)
+(@OGUID+121 , 180405, 571, 1, 1, 2780.375, 916.6542, 22.35928, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4152)
+(@OGUID+122 , 180405, 571, 1, 1, 2782.104, 959.6036, 22.56974, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4152)
+(@OGUID+123 , 180405, 571, 1, 1, 2713.333, 904.954, 4.644395, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4152)
+(@OGUID+124 , 180405, 571, 1, 1, 3459.519, 1994.401, 64.16402, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4158)
+(@OGUID+125 , 180405, 571, 1, 1, 3487.954, 1962.221, 64.86233, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4158)
+(@OGUID+126 , 180405, 571, 1, 1, 3488.449, 2022.323, 64.86241, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4158)
+(@OGUID+127 , 180405, 571, 1, 1, 3526.152, 1989.084, 65.00359, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4158)
+(@OGUID+128 , 180405, 571, 1, 1, 3543.308, 2012.801, 67.83711, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4158)
+(@OGUID+129 , 180405, 571, 1, 1, 8478.809, -335.0501, 905.8823, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4436)
+(@OGUID+130 , 180405, 571, 1, 1, 8442.125, -343.2864, 906.6075, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4484)
+(@OGUID+131 , 180405, 571, 1, 1, 8439.769, -360.4051, 910.7804, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4484)
+(@OGUID+132 , 180405, 571, 1, 1, 8431.716, -369.2213, 910.7804, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4484)
+(@OGUID+133 , 180405, 571, 1, 1, 7857.659, -740.2723, 1178.374, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+134 , 180405, 571, 1, 1, 7783.667, -2801.49, 1220.847, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+135 , 180405, 571, 1, 1, 7807.762, -2817.106, 1222.603, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+136 , 180405, 571, 1, 1, 7816.426, -2858.509, 1228.606, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4441)
+(@OGUID+137 , 180405, 571, 1, 1, 7868.84, -2788.675, 1143.72, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4441)
+(@OGUID+138 , 180405, 571, 1, 1, 7817.629, -2897.441, 1246.089, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4441)
+(@OGUID+139 , 180405, 571, 1, 1, 7809.628, -2931.258, 1257.037, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4441)
+(@OGUID+140 , 180405, 571, 1, 1, 7809.809, -2961.031, 1257.285, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4441)
+(@OGUID+141 , 180405, 571, 1, 1, 7841.398, -2981.669, 1266.466, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4441)
+(@OGUID+142 , 180405, 571, 1, 1, 6200.735, -1057.431, 417.0221, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4419)
+(@OGUID+143 , 180405, 571, 1, 1, 6124.892, -1075.259, 411.6781, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4419)
+(@OGUID+144 , 180405, 571, 1, 1, 6138.141, -1046.391, 412.701, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4419)
+(@OGUID+145 , 180405, 571, 1, 1, 6107.655, -1084.122, 413.654, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4419)
+(@OGUID+146 , 180405, 571, 1, 1, 6112.512, -1025.256, 414.1365, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4419)
+(@OGUID+147 , 180405, 571, 1, 1, 6664.644, -251.6691, 962.2526, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4428)
+(@OGUID+148 , 180405, 571, 1, 1, 6679.855, -261.4221, 961.9869, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4428)
+(@OGUID+149 , 180405, 571, 1, 1, 6683.386, -201.5864, 951.2874, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4428)
+(@OGUID+150 , 180405, 571, 1, 1, 5560.767, 5743.191, -75.39922, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4285)
+(@OGUID+151 , 180405, 571, 1, 1, 5521.055, 5775.581, -77.84254, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4285)
+(@OGUID+152 , 180405, 571, 1, 1, 5587.409, 5831.001, -67.94295, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4285)
+(@OGUID+153 , 180405, 571, 1, 1, 5495.171, 4739.647, -195.2901, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4290)
+(@OGUID+154 , 180405, 571, 1, 1, 5522.425, 4744.925, -188.8901, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4290)
+(@OGUID+155 , 180405, 571, 1, 1, 4472.997, 5697.727, 84.70158, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4123)
+(@OGUID+156 , 180405, 571, 1, 1, 4519.887, 5708.41, 84.29858, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4122)
+(@OGUID+157 , 180405, 571, 1, 1, 4128.227, 5302.944, 30.827, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4108)
+(@OGUID+158 , 180405, 571, 1, 1, 4064.082, 5254.847, 27.40729, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4108)
+(@OGUID+159 , 180405, 571, 1, 1, 4052.241, 5303.074, 27.85353, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4108)
+(@OGUID+160 , 180405, 571, 1, 1, 2899.752, 6243.547, 208.8471, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4020)
+(@OGUID+161 , 180405, 571, 1, 1, 2825.619, 6186.017, 124.1293, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4129)
+(@OGUID+162 , 180405, 571, 1, 1, 2806.39, 6171.232, 91.58034, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4129)
+(@OGUID+163 , 180405, 571, 1, 1, 2777.328, 6130.342, 97.58146, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4129)
+(@OGUID+164 , 180405, 571, 1, 1, 2248.339, 5206.908, 14.71353, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4032)
+(@OGUID+165 , 180405, 571, 1, 1, 2262.972, 5191.829, 13.71622, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4032)
+(@OGUID+166 , 180405, 571, 1, 1, 2238.288, 5169.116, 14.44349, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4032)
+(@OGUID+167 , 180405, 571, 1, 1, 2266.964, 5169.439, 11.26108, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4032)
+(@OGUID+168 , 180405, 571, 1, 1, 2242.774, 5143.132, 6.842498, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4032)
+(@OGUID+169 , 180405, 571, 1, 1, 3014.273, 4067.549, 26.34313, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4113)
+(@OGUID+170 , 180405, 571, 1, 1, 2998.225, 4050.244, 26.61139, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4113)
+(@OGUID+171 , 180405, 571, 1, 1, 2922.996, 4039.652, 1.847561, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4113)
+(@OGUID+172 , 180405, 571, 1, 1, 2873.578, 4044.563, 5.168859, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4113)
+(@OGUID+173 , 180405, 571, 1, 1, 3382.788, 4113.637, 29.84352, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+174 , 180405, 571, 1, 1, 3392.099, 4155.976, 30.3478, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0)
+(@OGUID+175 , 180405, 571, 1, 1, 3459.185, 4145.886, 17.19302, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4043)
+(@OGUID+176 , 180405, 571, 1, 1, 3444.382, 4152.429, 31.86185, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4043)
+(@OGUID+177 , 180405, 571, 1, 1, 3435.074, 4077.38, 27.98145, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4043)
+(@OGUID+178 , 180405, 571, 1, 1, 3476.852, 4086.253, 28.05615, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4043)
+(@OGUID+179 , 180405, 571, 1, 1, 3494.191, 4124.338, 29.75336, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4043)
+(@OGUID+180 , 180406, 571, 1, 1, 5233.11, -1303.505, 242.6981, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66)
+(@OGUID+181 , 180406, 571, 1, 1, 5223.288, -1292.884, 242.986, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66)
+(@OGUID+182 , 180406, 571, 1, 1, 5235.496, -1320.318, 242.1528, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66)
+(@OGUID+183 , 180406, 571, 1, 1, 5217.619, -1336.551, 242.0803, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66)
+(@OGUID+184 , 180406, 571, 1, 1, 5204.664, -1302.282, 243.929, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66)
+(@OGUID+185 , 180406, 571, 1, 1, 5186.655, -1315.126, 244.0308, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66)
+(@OGUID+186 , 180406, 571, 1, 1, 5197.557, -1293.151, 245.1381, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66)
+(@OGUID+187 , 180406, 571, 1, 1, 5167.86, -2163.789, 244.9229, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+188 , 180406, 571, 1, 1, 5118.464, -2229.395, 241.3221, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4317)
+(@OGUID+189 , 180406, 571, 1, 1, 5200.777, -2213.902, 241.7638, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4317)
+(@OGUID+190 , 180406, 571, 1, 1, 5209.903, -2206.08, 240.9178, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4317)
+(@OGUID+191 , 180406, 571, 1, 1, 5381.495, -2622.062, 303.9539, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+192 , 180406, 571, 1, 1, 5432.385, -2649.816, 312.4956, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275)
+(@OGUID+193 , 180406, 571, 1, 1, 5380.949, -2686.028, 301.1252, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275)
+(@OGUID+194 , 180406, 571, 1, 1, 5492.693, -2604.736, 304.7423, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275)
+(@OGUID+195 , 180406, 571, 1, 1, 5528.45, -2651.096, 303.9539, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275)
+(@OGUID+196 , 180406, 571, 1, 1, 5750.874, -3530.618, 388.8118, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+197 , 180406, 571, 1, 1, 5780.643, -3626.452, 387.7118, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4323)
+(@OGUID+198 , 180406, 571, 1, 1, 5784.183, -3601.332, 387.882, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4323)
+(@OGUID+199 , 180406, 571, 1, 1, 4586.705, -4265.697, 182.0961, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+200 , 180406, 571, 1, 1, 3867.676, -4566.178, 215.357, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+201 , 180406, 571, 1, 1, 3832.829, -4549.958, 215.4487, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+202 , 180406, 571, 1, 1, 3840.872, -4517.668, 216.5039, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+203 , 180406, 571, 1, 1, 3854.774, -4497.302, 214.1549, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4211)
+(@OGUID+204 , 180406, 571, 1, 1, 4507.235, -4229.571, 167.2504, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+205 , 180406, 571, 1, 1, 4543.993, -4219.068, 170.553, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+206 , 180406, 571, 1, 1, 4576.085, -4253.777, 182.2079, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4159)
+(@OGUID+207 , 180406, 571, 1, 1, 3443.539, -2828.223, 202.6841, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+208 , 180406, 571, 1, 1, 3440.909, -2781.021, 200.6416, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+209 , 180406, 571, 1, 1, 3399.112, -2788.302, 211.2246, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+210 , 180406, 571, 1, 1, 3484.97, -2776.988, 199.2997, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+211 , 180406, 571, 1, 1, 3429.496, -2767.099, 200.3861, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4204)
+(@OGUID+212 , 180406, 571, 1, 1, 3452.409, -2756.081, 199.3898, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4204)
+(@OGUID+213 , 180406, 571, 1, 1, 3229.066, -2337.311, 95.43889, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4217)
+(@OGUID+214 , 180406, 571, 1, 1, 3219.195, -2355.696, 129.1687, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4217)
+(@OGUID+215 , 180406, 571, 1, 1, 3275.07, -2303.272, 120.9754, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4206)
+(@OGUID+216 , 180406, 571, 1, 1, 3195.742, -2285.431, 110.5097, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4248)
+(@OGUID+217 , 180406, 571, 1, 1, 3305.993, -2292.779, 115.1555, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4248)
+(@OGUID+218 , 180406, 571, 1, 1, 3162.851, -2230.15, 121.904, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4206)
+(@OGUID+219 , 180406, 571, 1, 1, 3320.307, -2237.068, 124.4572, 4.118979, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4206)
+(@OGUID+220 , 180406, 571, 1, 1, 2666.803, -4317.568, 293.4839, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065)
+(@OGUID+221 , 180406, 571, 1, 1, 2693.682, -4363.086, 279.9544, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065)
+(@OGUID+222 , 180406, 571, 1, 1, 2618.073, -4361.412, 283.4159, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065)
+(@OGUID+223 , 180406, 571, 1, 1, 2726.429, -4358.761, 281.7853, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065)
+(@OGUID+224 , 180406, 571, 1, 1, 2700.32, -4374.62, 280.271, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065)
+(@OGUID+225 , 180406, 571, 1, 1, 2649.371, -4408.653, 290.186, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4018)
+(@OGUID+226 , 180406, 571, 1, 1, 2376.891, -4990.313, 257.6985, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+227 , 180406, 571, 1, 1, 2377.773, -5054.615, 254.4842, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+228 , 180406, 571, 1, 1, 1854.089, -6015.621, 10.07462, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4060)
+(@OGUID+229 , 180406, 571, 1, 1, 1934.119, -6111.237, 27.48708, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4060)
+(@OGUID+230 , 180406, 571, 1, 1, 1835.864, -6089.984, 11.71504, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4060)
+(@OGUID+231 , 180406, 571, 1, 1, 1917.503, -6158.714, 26.71446, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4000)
+(@OGUID+232 , 180406, 571, 1, 1, 1914.023, -6154.183, 26.71475, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4000)
+(@OGUID+233 , 180406, 571, 1, 1, 1890.54, -6173.179, 23.86584, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4000)
+(@OGUID+234 , 180406, 571, 1, 1, 496.4844, -4643.306, 253.2072, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+235 , 180406, 571, 1, 1, 424.201, -4690.684, 248.2388, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991)
+(@OGUID+236 , 180406, 571, 1, 1, 499.7206, -4566.931, 248.0764, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991)
+(@OGUID+237 , 180406, 571, 1, 1, 411.8591, -4705.089, 229.9662, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991)
+(@OGUID+238 , 180406, 571, 1, 1, 440.6808, -4553.362, 245.5923, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991)
+(@OGUID+239 , 180406, 571, 1, 1, 367.8212, -4687.587, 250.9387, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991)
+(@OGUID+240 , 180406, 571, 1, 1, 337.9065, -4640.5, 252.0777, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991)
+(@OGUID+241 , 180406, 571, 1, 1, 322.0139, -4605.215, 237.0853, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991)
+(@OGUID+242 , 180406, 571, 1, 1, 393.0851, -4532.665, 250.5189, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991)
+(@OGUID+243 , 180406, 571, 1, 1, 376.1369, -4496.113, 243.0968, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991)
+(@OGUID+244 , 180406, 571, 1, 1, 476.5408, -4503.842, 248.7666, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991)
+(@OGUID+245 , 180406, 571, 1, 1, 749.118, -2942.905, 14.74626, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3987)
+(@OGUID+246 , 180406, 571, 1, 1, 809.5295, -2922.639, 7.219683, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3987)
+(@OGUID+247 , 180406, 571, 1, 1, 737.8038, -2880.736, 12.96916, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3987)
+(@OGUID+248 , 180406, 571, 1, 1, 773.0608, -2857.431, 4.171994, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3988)
+(@OGUID+249 , 180406, 571, 1, 1, 1350.321, -3187.949, 164.0921, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+250 , 180406, 571, 1, 1, 1384.49, -3212.88, 164.9762, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3998)
+(@OGUID+251 , 180406, 571, 1, 1, 1383.839, -3200.095, 186.5387, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3998)
+(@OGUID+252 , 180406, 571, 1, 1, 1445.219, -3170.617, 170.5733, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3998)
+(@OGUID+253 , 180406, 571, 1, 1, 1418.566, -3267.669, 165.7693, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3998)
+(@OGUID+254 , 180406, 571, 1, 1, 1346.671, -3289.737, 174.4856, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3998)
+(@OGUID+255 , 180406, 571, 1, 1, 1450.951, -3303.339, 174.5696, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3998)
+(@OGUID+256 , 180406, 571, 1, 1, 652.8952, -5019.987, 9.652404, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3981)
+(@OGUID+257 , 180406, 571, 1, 1, 592.6992, -4995.24, 8.920918, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3981)
+(@OGUID+258 , 180406, 571, 1, 1, 575.4783, -4949.882, 18.02069, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3981)
+(@OGUID+259 , 180406, 571, 1, 1, 540.7355, -4991.499, 13.16528, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3981)
+(@OGUID+260 , 180406, 571, 1, 1, 568.0436, -5086.117, 8.824213, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3981)
+(@OGUID+261 , 180406, 571, 1, 1, 2464.109, -5036.51, 283.7771, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4003)
+(@OGUID+262 , 180406, 571, 1, 1, 2468.727, -5061.739, 283.3975, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4003)
+(@OGUID+263 , 180406, 571, 1, 1, 2477.372, -5022.343, 286.6729, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4003)
+(@OGUID+264 , 180406, 571, 1, 1, 2402.191, -5126.706, 280.6651, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4003)
+(@OGUID+265 , 180406, 571, 1, 1, 2439.455, -5132.638, 280.9637, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4003)
+(@OGUID+266 , 180406, 571, 1, 1, 2501.871, -4993.182, 286.451, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4003)
+(@OGUID+267 , 180406, 571, 1, 1, 3224.599, -659.952, 166.9673, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+268 , 180406, 571, 1, 1, 3201.955, -673.2883, 172.2883, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+269 , 180406, 571, 1, 1, 3209.774, -708.1309, 173.0541, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+270 , 180406, 571, 1, 1, 3267.898, -688.9091, 173.7409, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+271 , 180406, 571, 1, 1, 3240.571, -713.4294, 167.4516, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4186)
+(@OGUID+272 , 180406, 571, 1, 1, 3296.688, -736.2324, 176.0992, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4186)
+(@OGUID+273 , 180406, 571, 1, 1, 3280.63, -760.1717, 168.7784, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4186)
+(@OGUID+274 , 180406, 571, 1, 1, 2552.256, -1990.83, 10.36751, 0.6108634, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4242)
+(@OGUID+275 , 180406, 571, 1, 1, 2507.034, -1887.285, 12.20286, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4242)
+(@OGUID+276 , 180406, 571, 1, 1, 2430.692, -1832.366, 3.701085, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4242)
+(@OGUID+277 , 180406, 571, 1, 1, 2478.468, -1812.107, 14.6144, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4242)
+(@OGUID+278 , 180406, 571, 1, 1, 2595.189, -1786.51, 12.77725, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4242)
+(@OGUID+279 , 180406, 571, 1, 1, 3799.054, -793.6374, 197.2281, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4177)
+(@OGUID+280 , 180406, 571, 1, 1, 3848.534, -691.816, 225.1527, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4177)
+(@OGUID+281 , 180406, 571, 1, 1, 3915.329, -690.8716, 242.072, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4177)
+(@OGUID+282 , 180406, 571, 1, 1, 3669.287, -725.0473, 213.785, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4177)
+(@OGUID+283 , 180406, 571, 1, 1, 3646.642, -722.6217, 226.0129, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4177)
+(@OGUID+284 , 180406, 571, 1, 1, 3561.289, 246.9043, 47.2885, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161)
+(@OGUID+285 , 180406, 571, 1, 1, 3518.306, 281.8258, 47.28857, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161)
+(@OGUID+286 , 180406, 571, 1, 1, 3529.198, 287.327, 122.2979, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161)
+(@OGUID+287 , 180406, 571, 1, 1, 3569.296, 275.4532, 122.2979, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161)
+(@OGUID+288 , 180406, 571, 1, 1, 3555.43, 302.0915, 47.28843, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161)
+(@OGUID+289 , 180406, 571, 1, 1, 3616.88, 268.3244, 52.26091, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161)
+(@OGUID+290 , 180406, 571, 1, 1, 3532.421, 255.4469, 122.2979, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161)
+(@OGUID+291 , 180406, 571, 1, 1, 3477.259, 278.0847, 52.25702, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161)
+(@OGUID+292 , 180406, 571, 1, 1, 2809.934, 900.2016, 21.38731, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4152)
+(@OGUID+293 , 180406, 571, 1, 1, 2776.956, 897.387, 14.16927, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4152)
+(@OGUID+294 , 180406, 571, 1, 1, 2735.234, 880.1124, 6.758276, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4152)
+(@OGUID+295 , 180406, 571, 1, 1, 2714.933, 887.4085, 4.232737, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4152)
+(@OGUID+296 , 180406, 571, 1, 1, 3501.767, 1985.325, 65.36996, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4158)
+(@OGUID+297 , 180406, 571, 1, 1, 3488.581, 1995.478, 64.86234, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4158)
+(@OGUID+298 , 180406, 571, 1, 1, 3506.409, 2022.095, 64.86234, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4158)
+(@OGUID+299 , 180406, 571, 1, 1, 3534.448, 1993.511, 65.57285, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4158)
+(@OGUID+300 , 180406, 571, 1, 1, 3533.5, 2028.148, 67.83711, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4158)
+(@OGUID+301 , 180406, 571, 1, 1, 3797.447, 1625.543, 91.86301, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+302 , 180406, 571, 1, 1, 3811.2, 1676.326, 116.9827, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+303 , 180406, 571, 1, 1, 3826.005, 1580.641, 86.69843, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165)
+(@OGUID+304 , 180406, 571, 1, 1, 3792.57, 1555.635, 90.08284, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165)
+(@OGUID+305 , 180406, 571, 1, 1, 3892.407, 1621.969, 93.93169, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165)
+(@OGUID+306 , 180406, 571, 1, 1, 3763.325, 1539.438, 87.04325, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165)
+(@OGUID+307 , 180406, 571, 1, 1, 3857.26, 1532.173, 95.70817, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165)
+(@OGUID+308 , 180406, 571, 1, 1, 3825.578, 1499.48, 91.71698, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165)
+(@OGUID+309 , 180406, 571, 1, 1, 3839.292, 1480.273, 92.05128, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165)
+(@OGUID+310 , 180406, 571, 1, 1, 3854.936, 1480.276, 92.05779, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165)
+(@OGUID+311 , 180406, 571, 1, 1, 8436.645, -338.5753, 906.6075, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4436)
+(@OGUID+312 , 180406, 571, 1, 1, 8420.556, -342.8851, 910.7804, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4484)
+(@OGUID+313 , 180406, 571, 1, 1, 8412.648, -351.5258, 910.7804, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4484)
+(@OGUID+314 , 180406, 571, 1, 1, 7834.21, -795.5672, 1183.377, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+315 , 180406, 571, 1, 1, 7764.518, -2819.573, 1220.469, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+316 , 180406, 571, 1, 1, 7791.312, -2800.402, 1221.756, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+317 , 180406, 571, 1, 1, 7808.44, -2839.265, 1226.409, 5.235988, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+318 , 180406, 571, 1, 1, 7856.201, -2797.805, 1145.121, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4441)
+(@OGUID+319 , 180406, 571, 1, 1, 7797.143, -2902.636, 1248.202, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4441)
+(@OGUID+320 , 180406, 571, 1, 1, 7817.669, -2875.495, 1238.228, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4441)
+(@OGUID+321 , 180406, 571, 1, 1, 7827.663, -2901.533, 1246.536, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4441)
+(@OGUID+322 , 180406, 571, 1, 1, 7797.608, -2953.877, 1257.636, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4441)
+(@OGUID+323 , 180406, 571, 1, 1, 7834.471, -2989.303, 1265.23, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4441)
+(@OGUID+324 , 180406, 571, 1, 1, 6185.55, -1068.802, 417.2573, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4419)
+(@OGUID+325 , 180406, 571, 1, 1, 6137.813, -1086.493, 412.2495, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4419)
+(@OGUID+326 , 180406, 571, 1, 1, 6120.12, -1075.182, 411.8575, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4419)
+(@OGUID+327 , 180406, 571, 1, 1, 6128.455, -1024.129, 414.0439, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4419)
+(@OGUID+328 , 180406, 571, 1, 1, 6102.482, -1047.252, 413.5006, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4419)
+(@OGUID+329 , 180406, 571, 1, 1, 6659.226, -249.2723, 962.2037, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4428)
+(@OGUID+330 , 180406, 571, 1, 1, 6654.979, -197.8785, 952.4429, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4428)
+(@OGUID+331 , 180406, 571, 1, 1, 6681.767, -266.9733, 961.7059, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4428)
+(@OGUID+332 , 180406, 571, 1, 1, 5540.28, 5732.585, -75.04021, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4285)
+(@OGUID+333 , 180406, 571, 1, 1, 5595.533, 5770.859, -71.57546, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4285)
+(@OGUID+334 , 180406, 571, 1, 1, 5611.217, 5824.185, -67.32271, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4285)
+(@OGUID+335 , 180406, 571, 1, 1, 5515.897, 4742.963, -194.0693, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4290)
+(@OGUID+336 , 180406, 571, 1, 1, 5490.307, 4729.871, -194.7691, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4290)
+(@OGUID+337 , 180406, 571, 1, 1, 4483.99, 5693.269, 84.82285, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4123)
+(@OGUID+338 , 180406, 571, 1, 1, 4499.713, 5716.173, 84.6351, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4122)
+(@OGUID+339 , 180406, 571, 1, 1, 4518.85, 5706.549, 82.58364, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4122)
+(@OGUID+340 , 180406, 571, 1, 1, 4121.668, 5281.876, 25.64887, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4108)
+(@OGUID+341 , 180406, 571, 1, 1, 4040.769, 5277.135, 27.53135, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4108)
+(@OGUID+342 , 180406, 571, 1, 1, 4131.17, 5250.665, 28.56509, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4108)
+(@OGUID+343 , 180406, 571, 1, 1, 2903.725, 6231.557, 208.8394, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4020)
+(@OGUID+344 , 180406, 571, 1, 1, 2931.82, 6242.545, 214.88, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4020)
+(@OGUID+345 , 180406, 571, 1, 1, 2836.468, 6174.838, 124.0885, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4129)
+(@OGUID+346 , 180406, 571, 1, 1, 2789.779, 6148.222, 86.61843, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4129)
+(@OGUID+347 , 180406, 571, 1, 1, 2255.002, 5225.886, 14.71353, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4032)
+(@OGUID+348 , 180406, 571, 1, 1, 2238.76, 5180.222, 14.71353, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4032)
+(@OGUID+349 , 180406, 571, 1, 1, 2230.155, 5147.772, 6.842682, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4032)
+(@OGUID+350 , 180406, 571, 1, 1, 3007.184, 4071.53, 37.50875, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4113)
+(@OGUID+351 , 180406, 571, 1, 1, 2982.732, 4080.248, 26.95294, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4113)
+(@OGUID+352 , 180406, 571, 1, 1, 2911.799, 4046.192, 1.700204, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4113)
+(@OGUID+353 , 180406, 571, 1, 1, 2845.697, 4021.456, 5.048532, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4113)
+(@OGUID+354 , 180406, 571, 1, 1, 3395.545, 4103.316, 30.25075, 6.0912, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+355 , 180406, 571, 1, 1, 3426.093, 4154.369, 31.73266, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+356 , 180406, 571, 1, 1, 3380.001, 4144.935, 31.45782, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0)
+(@OGUID+357 , 180406, 571, 1, 1, 3466.665, 4145.107, 17.19302, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4043)
+(@OGUID+358 , 180406, 571, 1, 1, 3482.742, 4135.432, 30.13783, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4043)
+(@OGUID+359 , 180406, 571, 1, 1, 3459.587, 4199.699, 18.93058, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4043)
+(@OGUID+360 , 180406, 571, 1, 1, 3446.437, 4083.459, 26.36699, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4043)
+(@OGUID+361 , 180406, 571, 1, 1, 3490.993, 4093.242, 27.72779, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4043)
+(@OGUID+362 , 180407, 571, 1, 1, 5186.266, -2193.768, 239.013, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+363 , 180407, 571, 1, 1, 5170.956, -2174.502, 236.5384, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+364 , 180407, 571, 1, 1, 5131.898, -2198.527, 238.9261, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+365 , 180407, 571, 1, 1, 5118.4, -2225.201, 241.3221, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4317)
+(@OGUID+366 , 180407, 571, 1, 1, 5410.509, -2652.607, 306.231, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275)
+(@OGUID+367 , 180407, 571, 1, 1, 5467.847, -2615.898, 312.4956, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275)
+(@OGUID+368 , 180407, 571, 1, 1, 5500.174, -2659.385, 303.9539, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275)
+(@OGUID+369 , 180407, 571, 1, 1, 5536.58, -2608.138, 304.0076, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275)
+(@OGUID+370 , 180407, 571, 1, 1, 5524.991, -2578.385, 303.9539, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275)
+(@OGUID+371 , 180407, 571, 1, 1, 5744.013, -3556, 386.8233, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+372 , 180407, 571, 1, 1, 5773.413, -3601.402, 386.8242, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4323)
+(@OGUID+373 , 180407, 571, 1, 1, 5769.374, -3630.634, 386.852, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4323)
+(@OGUID+374 , 180407, 571, 1, 1, 4578.956, -4263.669, 182.3578, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+375 , 180407, 571, 1, 1, 3866.024, -4556.092, 217.1811, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+376 , 180407, 571, 1, 1, 3839.12, -4556.077, 215.6738, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+377 , 180407, 571, 1, 1, 3876.9, -4547.333, 210.9542, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+378 , 180407, 571, 1, 1, 3834.391, -4523.571, 216.3354, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+379 , 180407, 571, 1, 1, 3845.775, -4506.957, 213.2268, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4211)
+(@OGUID+380 , 180407, 571, 1, 1, 4503.457, -4238.322, 166.302, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+381 , 180407, 571, 1, 1, 4553.079, -4233.049, 170.7654, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+382 , 180407, 571, 1, 1, 4591.484, -4252.421, 181.7474, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4159)
+(@OGUID+383 , 180407, 571, 1, 1, 3419.264, -2808.972, 201.4093, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+384 , 180407, 571, 1, 1, 3428.19, -2778.842, 263.1267, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+385 , 180407, 571, 1, 1, 3361.911, -2812.032, 198.3222, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+386 , 180407, 571, 1, 1, 3414.363, -2778.031, 201.5204, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+387 , 180407, 571, 1, 1, 3429.28, -2746.916, 199.4592, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4204)
+(@OGUID+388 , 180407, 571, 1, 1, 3249.329, -2372.51, 129.9958, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4217)
+(@OGUID+389 , 180407, 571, 1, 1, 3309.994, -2284.978, 114.9895, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4248)
+(@OGUID+390 , 180407, 571, 1, 1, 3195.763, -2280.448, 110.7325, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4248)
+(@OGUID+391 , 180407, 571, 1, 1, 3239.406, -2232.858, 121.1309, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206)
+(@OGUID+392 , 180407, 571, 1, 1, 3297.919, -2236.022, 120.9063, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206)
+(@OGUID+393 , 180407, 571, 1, 1, 3312.651, -2213.69, 115.9192, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206)
+(@OGUID+394 , 180407, 571, 1, 1, 3358.979, -2188.361, 123.8899, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206)
+(@OGUID+395 , 180407, 571, 1, 1, 2697.765, -4328.043, 291.2906, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065)
+(@OGUID+396 , 180407, 571, 1, 1, 2662.834, -4358.088, 279.7958, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065)
+(@OGUID+397 , 180407, 571, 1, 1, 2618.055, -4371.507, 283.3527, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065)
+(@OGUID+398 , 180407, 571, 1, 1, 2710.088, -4371.438, 278.8264, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065)
+(@OGUID+399 , 180407, 571, 1, 1, 2670.709, -4408.632, 290.6959, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4018)
+(@OGUID+400 , 180407, 571, 1, 1, 2382.453, -5014.535, 254.0956, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+401 , 180407, 571, 1, 1, 2385.039, -5056.534, 253.5052, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+402 , 180407, 571, 1, 1, 1924.839, -6128.684, 27.42144, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4060)
+(@OGUID+403 , 180407, 571, 1, 1, 1846.395, -6081.321, 11.3513, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4060)
+(@OGUID+404 , 180407, 571, 1, 1, 1929.122, -6143.407, 26.77677, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4000)
+(@OGUID+405 , 180407, 571, 1, 1, 1893.114, -6154.604, 27.42172, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4000)
+(@OGUID+406 , 180407, 571, 1, 1, 1890.457, -6159.884, 27.42142, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4000)
+(@OGUID+407 , 180407, 571, 1, 1, 485.1177, -4663.222, 253.1473, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+408 , 180407, 571, 1, 1, 496.8085, -4602.353, 249.5994, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+409 , 180407, 571, 1, 1, 401, -4688.146, 248.2407, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991)
+(@OGUID+410 , 180407, 571, 1, 1, 399.7902, -4712.554, 231.7376, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991)
+(@OGUID+411 , 180407, 571, 1, 1, 389.0826, -4503.428, 242.6498, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991)
+(@OGUID+412 , 180407, 571, 1, 1, 388.3697, -4480.479, 233.2288, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991)
+(@OGUID+413 , 180407, 571, 1, 1, 490.7223, -4521.801, 248.6068, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991)
+(@OGUID+414 , 180407, 571, 1, 1, 756.3785, -2948.583, 15.57896, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3987)
+(@OGUID+415 , 180407, 571, 1, 1, 769.6545, -2921.345, 12.84954, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3987)
+(@OGUID+416 , 180407, 571, 1, 1, 731.8281, -2922.661, 7.247694, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3987)
+(@OGUID+417 , 180407, 571, 1, 1, 801.8958, -2922.491, 17.85299, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3987)
+(@OGUID+418 , 180407, 571, 1, 1, 1346.989, -3181.646, 164.0921, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+419 , 180407, 571, 1, 1, 1366.228, -3171.427, 164.0921, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+420 , 180407, 571, 1, 1, 1434.518, -3152.928, 167.3012, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3998)
+(@OGUID+421 , 180407, 571, 1, 1, 1384.498, -3242.309, 168.7519, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3998)
+(@OGUID+422 , 180407, 571, 1, 1, 1423.141, -3262.486, 181.0846, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3998)
+(@OGUID+423 , 180407, 571, 1, 1, 1461.795, -3320.668, 174.4624, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3998)
+(@OGUID+424 , 180407, 571, 1, 1, 637.7101, -5010.153, 4.615479, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3981)
+(@OGUID+425 , 180407, 571, 1, 1, 574.2803, -4943.381, 32.46601, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3981)
+(@OGUID+426 , 180407, 571, 1, 1, 592.1497, -5042.62, 6.364627, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3981)
+(@OGUID+427 , 180407, 571, 1, 1, 519.3365, -4952.292, 32.97431, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3981)
+(@OGUID+428 , 180407, 571, 1, 1, 611.5425, -5094.039, 8.544552, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3981)
+(@OGUID+429 , 180407, 571, 1, 1, 2413.909, -5123.429, 280.2519, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4003)
+(@OGUID+430 , 180407, 571, 1, 1, 2429.419, -5167.8, 277.2554, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4003)
+(@OGUID+431 , 180407, 571, 1, 1, 2446.935, -5152.328, 280.9121, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4003)
+(@OGUID+432 , 180407, 571, 1, 1, 2475.557, -5077.68, 282.9327, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4003)
+(@OGUID+433 , 180407, 571, 1, 1, 2556.758, -5010.462, 293.3214, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4003)
+(@OGUID+434 , 180407, 571, 1, 1, 2488.596, -5032.713, 286.0028, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4003)
+(@OGUID+435 , 180407, 571, 1, 1, 3216.365, -654.7118, 173.1727, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+436 , 180407, 571, 1, 1, 3202.009, -689.5071, 172.0019, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+437 , 180407, 571, 1, 1, 3228.639, -707.2554, 167.6969, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+438 , 180407, 571, 1, 1, 3266.271, -712.002, 172.5156, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4186)
+(@OGUID+439 , 180407, 571, 1, 1, 3269.517, -726.0446, 169.1231, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4186)
+(@OGUID+440 , 180407, 571, 1, 1, 2567.745, -1931.37, 3.347648, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4242)
+(@OGUID+441 , 180407, 571, 1, 1, 2535.844, -2001.418, 10.57551, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4242)
+(@OGUID+442 , 180407, 571, 1, 1, 2513.919, -1892.11, 12.3828, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4242)
+(@OGUID+443 , 180407, 571, 1, 1, 2499.634, -1811.967, 22.76959, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4242)
+(@OGUID+444 , 180407, 571, 1, 1, 3794.182, -798.6522, 196.8896, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4177)
+(@OGUID+445 , 180407, 571, 1, 1, 3934.507, -711.8297, 242.3191, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4177)
+(@OGUID+446 , 180407, 571, 1, 1, 3718.244, -692.4291, 215.5753, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4177)
+(@OGUID+447 , 180407, 571, 1, 1, 3670.186, -714.9221, 213.7414, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4177)
+(@OGUID+448 , 180407, 571, 1, 1, 3655.985, -670.6024, 233.3351, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4177)
+(@OGUID+449 , 180407, 571, 1, 1, 3564.145, 205.2086, 52.22747, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4254)
+(@OGUID+450 , 180407, 571, 1, 1, 3549.064, 250.287, 122.2979, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4161)
+(@OGUID+451 , 180407, 571, 1, 1, 3572.962, 287.3582, 47.28861, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4161)
+(@OGUID+452 , 180407, 571, 1, 1, 3520.549, 258.9889, 47.28859, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4161)
+(@OGUID+453 , 180407, 571, 1, 1, 3614.126, 292.0934, 52.2594, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4161)
+(@OGUID+454 , 180407, 571, 1, 1, 3561.172, 290.9487, 122.2979, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4161)
+(@OGUID+455 , 180407, 571, 1, 1, 3551.001, 343.66, 52.22747, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4161)
+(@OGUID+456 , 180407, 571, 1, 1, 2786.32, 920.1965, 22.35873, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4152)
+(@OGUID+457 , 180407, 571, 1, 1, 2790.073, 894.4512, 14.68251, 0, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4152)
+(@OGUID+458 , 180407, 571, 1, 1, 2742.038, 884.5179, 6.728371, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4152)
+(@OGUID+459 , 180407, 571, 1, 1, 3493.868, 2016.275, 64.86234, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4158)
+(@OGUID+460 , 180407, 571, 1, 1, 3512.788, 1992.762, 64.86221, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4158)
+(@OGUID+461 , 180407, 571, 1, 1, 3519.225, 1980.357, 64.9095, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4158)
+(@OGUID+462 , 180407, 571, 1, 1, 3509.91, 2013.012, 64.87511, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4158)
+(@OGUID+463 , 180407, 571, 1, 1, 3513.616, 2026.584, 65.0184, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4158)
+(@OGUID+464 , 180407, 571, 1, 1, 3792.06, 1680.653, 117.8903, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+465 , 180407, 571, 1, 1, 3771.654, 1604.742, 90.19121, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165)
+(@OGUID+466 , 180407, 571, 1, 1, 3876.597, 1645.691, 96.41532, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165)
+(@OGUID+467 , 180407, 571, 1, 1, 3835.953, 1580.846, 86.69843, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165)
+(@OGUID+468 , 180407, 571, 1, 1, 3798.435, 1543.227, 90.20327, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165)
+(@OGUID+469 , 180407, 571, 1, 1, 3826.736, 1532.038, 95.74288, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165)
+(@OGUID+470 , 180407, 571, 1, 1, 3772.262, 1518.21, 87.58628, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165)
+(@OGUID+471 , 180407, 571, 1, 1, 3845.135, 1480.392, 92.04202, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165)
+(@OGUID+472 , 180407, 571, 1, 1, 3829.847, 1480.661, 92.05907, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165)
+(@OGUID+473 , 180407, 571, 1, 1, 7849.781, -777.4718, 1180.518, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+474 , 180407, 571, 1, 1, 7769.292, -2813.385, 1219.706, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+475 , 180407, 571, 1, 1, 7798.998, -2801.392, 1221.274, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+476 , 180407, 571, 1, 1, 7816.222, -2886.335, 1241.734, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4441)
+(@OGUID+477 , 180407, 571, 1, 1, 7800.365, -2891.346, 1244.112, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4441)
+(@OGUID+478 , 180407, 571, 1, 1, 7815.249, -2847.6, 1226.733, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4441)
+(@OGUID+479 , 180407, 571, 1, 1, 7815.913, -2922.443, 1253.22, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4441)
+(@OGUID+480 , 180407, 571, 1, 1, 7823.335, -2991.151, 1264.953, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4441)
+(@OGUID+481 , 180407, 571, 1, 1, 6188.896, -1062.919, 409.9726, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419)
+(@OGUID+482 , 180407, 571, 1, 1, 6160.541, -1068.3, 414.0189, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419)
+(@OGUID+483 , 180407, 571, 1, 1, 6122.874, -1074.873, 409.5521, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419)
+(@OGUID+484 , 180407, 571, 1, 1, 6130.21, -1071.851, 402.8137, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419)
+(@OGUID+485 , 180407, 571, 1, 1, 6129.499, -1046.194, 413.8744, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419)
+(@OGUID+486 , 180407, 571, 1, 1, 6111.876, -1089.197, 404.6797, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419)
+(@OGUID+487 , 180407, 571, 1, 1, 6111.486, -1046.028, 413.9368, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419)
+(@OGUID+488 , 180407, 571, 1, 1, 6089.37, -1063.561, 413.63, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419)
+(@OGUID+489 , 180407, 571, 1, 1, 6651.599, -247.5624, 962.2744, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+490 , 180407, 571, 1, 1, 6660.406, -183.2028, 954.8659, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4428)
+(@OGUID+491 , 180407, 571, 1, 1, 5578.406, 5763.015, -75.20139, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4285)
+(@OGUID+492 , 180407, 571, 1, 1, 5608.686, 5805.967, -70.46122, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4285)
+(@OGUID+493 , 180407, 571, 1, 1, 5591.252, 5728.178, -71.99928, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4284)
+(@OGUID+494 , 180407, 571, 1, 1, 5480.453, 4743.266, -196.4773, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4290)
+(@OGUID+495 , 180407, 571, 1, 1, 5521.717, 4750.083, -188.2182, 5.235988, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4290)
+(@OGUID+496 , 180407, 571, 1, 1, 5500.287, 4733.095, -194.4314, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4290)
+(@OGUID+497 , 180407, 571, 1, 1, 4169.929, 5290.662, 28.58986, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4108)
+(@OGUID+498 , 180407, 571, 1, 1, 4089.737, 5249.827, 25.98461, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4108)
+(@OGUID+499 , 180407, 571, 1, 1, 4030.189, 5336.436, 27.57404, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4108)
+(@OGUID+500 , 180407, 571, 1, 1, 4190.916, 5221.139, 27.44952, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4108)
+(@OGUID+501 , 180407, 571, 1, 1, 2888.924, 6248.153, 208.8295, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4020)
+(@OGUID+502 , 180407, 571, 1, 1, 2265.474, 5199.011, 26.29611, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4032)
+(@OGUID+503 , 180407, 571, 1, 1, 2272.925, 5219.881, 13.58492, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4032)
+(@OGUID+504 , 180407, 571, 1, 1, 2250.998, 5164.212, 14.44375, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4032)
+(@OGUID+505 , 180407, 571, 1, 1, 3023.779, 4059.767, 26.16735, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4113)
+(@OGUID+506 , 180407, 571, 1, 1, 2915.491, 4041.218, 1.718314, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4113)
+(@OGUID+507 , 180407, 571, 1, 1, 2878.346, 4033.684, 5.24339, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4113)
+(@OGUID+508 , 180407, 571, 1, 1, 2841.972, 4030.163, 5.0511, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4113)
+(@OGUID+509 , 180407, 571, 1, 1, 3378.039, 4127.827, 30.85807, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+510 , 180407, 571, 1, 1, 3410.067, 4095.503, 30.58323, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+511 , 180407, 571, 1, 1, 3409.243, 4154.036, 31.87858, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0)
+(@OGUID+512 , 180407, 571, 1, 1, 3477.146, 4149.458, 28.31626, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4043)
+(@OGUID+513 , 180407, 571, 1, 1, 3458.126, 4079.161, 26.78951, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4043)
+(@OGUID+514 , 180407, 571, 1, 1, 3496.528, 4108.67, 28.63537, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4043)
+(@OGUID+515 , 180407, 571, 1, 1, 3474.94, 4199.34, 18.7451, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4043)
+(@OGUID+516 , 180408, 571, 1, 1, 5764.419, -3572.029, 400.4677, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4323)
+(@OGUID+517 , 180408, 571, 1, 1, 5796.51, -3596.129, 396.4, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4323)
+(@OGUID+518 , 180408, 571, 1, 1, 3874.124, -4526.177, 220.1032, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 0)
+(@OGUID+519 , 180408, 571, 1, 1, 3839.224, -4546.804, 217.41, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 0)
+(@OGUID+520 , 180408, 571, 1, 1, 3874.079, -4498.493, 223.8581, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4211)
+(@OGUID+521 , 180408, 571, 1, 1, 3256.49, -2269.653, 114.1506, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4248)
+(@OGUID+522 , 180408, 571, 1, 1, 3517.16, 2000.169, 64.86235, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4158)
+(@OGUID+523 , 180408, 571, 1, 1, 8478.776, -335.0133, 907.4905, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4436)
+(@OGUID+524 , 180408, 571, 1, 1, 5547.182, 5734.344, -70.37753, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4285)
+(@OGUID+525 , 180408, 571, 1, 1, 5570.323, 5767.202, -65.55209, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4285)
+(@OGUID+526 , 180408, 571, 1, 1, 5590.967, 5749.478, -66.40426, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4285)
+(@OGUID+527 , 180408, 571, 1, 1, 4146.889, 5330.113, 33.63815, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108)
+(@OGUID+528 , 180408, 571, 1, 1, 4154.61, 5340.539, 33.98043, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108)
+(@OGUID+529 , 180408, 571, 1, 1, 4136.229, 5321.447, 33.53545, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108)
+(@OGUID+530 , 180408, 571, 1, 1, 4119.863, 5304.662, 33.65726, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108)
+(@OGUID+531 , 180408, 571, 1, 1, 4248.604, 5256.001, 76.13831, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108)
+(@OGUID+532 , 180408, 571, 1, 1, 2923.913, 6238.717, 208.8952, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4020)
+(@OGUID+533 , 180408, 571, 1, 1, 2925.917, 6235.095, 216.3796, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4020)
+(@OGUID+534 , 180408, 571, 1, 1, 2927.372, 6251.385, 216.4442, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4020)
+(@OGUID+535 , 180410, 571, 1, 1, 5194.279, -2203.303, 239.6697, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+536 , 180410, 571, 1, 1, 5797.013, -3553.729, 387.8808, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4323)
+(@OGUID+537 , 180410, 571, 1, 1, 5778.559, -3600.916, 387.5585, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4323)
+(@OGUID+538 , 180410, 571, 1, 1, 3876.448, -4523.802, 218.1476, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+539 , 180410, 571, 1, 1, 4524.988, -4220.689, 171.5719, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+540 , 180410, 571, 1, 1, 4546.035, -4198.64, 174.7062, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4159)
+(@OGUID+541 , 180410, 571, 1, 1, 4609.126, -4233.917, 181.1064, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4159)
+(@OGUID+542 , 180410, 571, 1, 1, 4524.569, -4165.339, 174.2671, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4159)
+(@OGUID+543 , 180410, 571, 1, 1, 3416.599, -2799.829, 203.2782, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+544 , 180410, 571, 1, 1, 3402.456, -2806.774, 203.5183, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+545 , 180410, 571, 1, 1, 3422.075, -2795.796, 203.1454, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0)
+(@OGUID+546 , 180410, 571, 1, 1, 3259.209, -2267.978, 114.4671, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4248)
+(@OGUID+547 , 180410, 571, 1, 1, 3220.739, -2298.016, 108.4389, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4248)
+(@OGUID+548 , 180410, 571, 1, 1, 3263.73, -2264.506, 114.3535, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4248)
+(@OGUID+549 , 180410, 571, 1, 1, 3252.173, -2171.068, 118.6485, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4206)
+(@OGUID+550 , 180410, 571, 1, 1, 3306.331, -2180.179, 118.5948, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4206)
+(@OGUID+551 , 180410, 571, 1, 1, 1427.057, -3270.854, 169.2964, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3998)
+(@OGUID+552 , 180410, 571, 1, 1, 590.5975, -4936.698, 30.04726, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981)
+(@OGUID+553 , 180410, 571, 1, 1, 602.3406, -4924.361, 18.96176, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981)
+(@OGUID+554 , 180410, 571, 1, 1, 601.4332, -4918.563, 31.67034, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981)
+(@OGUID+555 , 180410, 571, 1, 1, 595.7699, -4919.979, 31.67729, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981)
+(@OGUID+556 , 180410, 571, 1, 1, 580.9988, -4922.641, 19.96896, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981)
+(@OGUID+557 , 180410, 571, 1, 1, 2487.015, -5066.922, 286.3527, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4003)
+(@OGUID+558 , 180410, 571, 1, 1, 3658.518, -702.5648, 216.069, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177)
+(@OGUID+559 , 180410, 571, 1, 1, 3649.671, -718.9785, 226.6098, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177)
+(@OGUID+560 , 180410, 571, 1, 1, 3655.556, -719.8813, 226.5605, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177)
+(@OGUID+561 , 180410, 571, 1, 1, 3633.41, -715.426, 216.1156, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177)
+(@OGUID+562 , 180410, 571, 1, 1, 6677.345, -199.9435, 951.5283, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4428)
+(@OGUID+563 , 180410, 571, 1, 1, 5534.461, 5748.173, -78.80743, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4285)
+(@OGUID+564 , 180410, 571, 1, 1, 2817.708, 6157.477, 87.63675, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129)
+(@OGUID+565 , 180410, 571, 1, 1, 2805.012, 6172.209, 87.67882, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129)
+(@OGUID+566 , 180410, 571, 1, 1, 2807.23, 6169.249, 87.58257, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129)
+(@OGUID+567 , 180410, 571, 1, 1, 2820.371, 6154.916, 87.65291, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129)
+(@OGUID+568 , 180410, 571, 1, 1, 2808.551, 6134.94, 87.93844, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129)
+(@OGUID+569 , 180410, 571, 1, 1, 2274.451, 5201.288, 13.85912, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+570 , 180410, 571, 1, 1, 2279.471, 5208.015, 23.90492, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+571 , 180410, 571, 1, 1, 2272.099, 5192.15, 12.74661, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+572 , 180410, 571, 1, 1, 2284.942, 5205.83, 24.19367, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+573 , 180410, 571, 1, 1, 2291.187, 5207.434, 24.68394, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+574 , 180410, 571, 1, 1, 2297.049, 5205.213, 23.75366, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+575 , 180410, 571, 1, 1, 2271.727, 5181.195, 21.453, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+576 , 180410, 571, 1, 1, 2302.244, 5203.075, 24.58699, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032)
+(@OGUID+577 , 180410, 571, 1, 1, 3460.282, 4177.789, 22.23072, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4043)
+(@OGUID+578 , 180410, 571, 1, 1, 3468.992, 4177.352, 22.22953, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4043)
+(@OGUID+579 , 180411, 571, 1, 1, 5438.724, -2610.023, 317.467, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4275)
+(@OGUID+580 , 180411, 571, 1, 1, 5464.751, -2610.872, 317.4325, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4275)
+(@OGUID+581 , 180411, 571, 1, 1, 3410.139, -2792.103, 205.9287, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0)
+(@OGUID+582 , 180411, 571, 1, 1, 3416.794, -2787.165, 206.333, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0)
+(@OGUID+583 , 180411, 571, 1, 1, 3452.579, -2745.875, 191.9798, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4204)
+(@OGUID+584 , 180411, 571, 1, 1, 1879.72, -6205.338, 27.26761, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4000)
+(@OGUID+585 , 180411, 571, 1, 1, 466.7355, -4532.663, 248.7537, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3991)
+(@OGUID+586 , 180411, 571, 1, 1, 700.5764, -2933.623, 0.497556, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3987)
+(@OGUID+587 , 180411, 571, 1, 1, 820.6528, -2907.458, 12.73376, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3987)
+(@OGUID+588 , 180411, 571, 1, 1, 1372.837, -3207.151, 168.448, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3998)
+(@OGUID+589 , 180411, 571, 1, 1, 1421.961, -3261.482, 172.5474, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3998)
+(@OGUID+590 , 180411, 571, 1, 1, 627.3833, -4917.144, 35.51801, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3981)
+(@OGUID+591 , 180411, 571, 1, 1, 594.2167, -4931.238, 21.88531, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3981)
+(@OGUID+592 , 180411, 571, 1, 1, 574.7415, -4943.303, 21.83569, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3981)
+(@OGUID+593 , 180411, 571, 1, 1, 2465.79, -5055.773, 303.4811, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4003)
+(@OGUID+594 , 180411, 571, 1, 1, 2494.079, -5058.457, 288.5814, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4003)
+(@OGUID+595 , 180411, 571, 1, 1, 3667.043, -707.4705, 220.4299, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4177)
+(@OGUID+596 , 180411, 571, 1, 1, 2776.893, 930.918, 28.78174, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4152)
+(@OGUID+597 , 180411, 571, 1, 1, 3842.228, 1495.968, 101.1961, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4165)
+(@OGUID+598 , 180411, 571, 1, 1, 3841.892, 1477.297, 129.234, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4165)
+(@OGUID+599 , 180411, 571, 1, 1, 8444.078, -340.1267, 915.4036, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4436)
+(@OGUID+600 , 180411, 571, 1, 1, 6124.838, -1085.729, 407.7206, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419)
+(@OGUID+601 , 180411, 571, 1, 1, 6125.659, -1090.55, 406.7731, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419)
+(@OGUID+602 , 180411, 571, 1, 1, 6120.892, -1091.373, 407.3358, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419)
+(@OGUID+603 , 180411, 571, 1, 1, 6120.023, -1086.642, 407.4646, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419)
+(@OGUID+604 , 180411, 571, 1, 1, 4513.346, 5709.525, 87.73186, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4122)
+(@OGUID+605 , 180411, 571, 1, 1, 4180.499, 5282.511, 41.72525, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4108)
+(@OGUID+606 , 180411, 571, 1, 1, 4178.446, 5281.503, 32.45599, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4108)
+(@OGUID+607 , 180411, 571, 1, 1, 2805.919, 6152.53, 95.5703, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4129)
+(@OGUID+608 , 180411, 571, 1, 1, 3003.288, 4049.86, 32.18251, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4113)
+(@OGUID+609 , 180411, 571, 1, 1, 3436.922, 4173.982, 26.38379, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0)
+(@OGUID+610 , 180411, 571, 1, 1, 3463.541, 4143.397, 25.56423, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043)
+(@OGUID+611 , 180411, 571, 1, 1, 3449.526, 4133.711, 25.4326, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043)
+(@OGUID+612 , 180411, 571, 1, 1, 3463.864, 4158.074, 25.55934, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043)
+(@OGUID+613 , 180411, 571, 1, 1, 3473.609, 4133.358, 25.26127, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043)
+(@OGUID+614 , 180411, 571, 1, 1, 3465.659, 4191.9, 27.78839, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043)
+(@OGUID+615 , 180411, 571, 1, 1, 3492.3, 4170.514, 26.55492, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043)
+(@OGUID+616 , 180415, 571, 1, 1, 5231.531, -1307.568, 242.9937, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+617 , 180415, 571, 1, 1, 5231.807, -1317.45, 242.3508, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+618 , 180415, 571, 1, 1, 5232.045, -1311.97, 242.4411, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+619 , 180415, 571, 1, 1, 5228.543, -1303.112, 242.7879, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+620 , 180415, 571, 1, 1, 5223.873, -1297.311, 242.7593, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+621 , 180415, 571, 1, 1, 5219.208, -1294.684, 243.2743, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+622 , 180415, 571, 1, 1, 5219.888, -1333.076, 242.3786, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+623 , 180415, 571, 1, 1, 5214.489, -1333.5, 242.7952, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+624 , 180415, 571, 1, 1, 5200.362, -1331.64, 243.263, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+625 , 180415, 571, 1, 1, 5205.63, -1333.422, 243.3845, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66)
+(@OGUID+626 , 180415, 571, 1, 1, 5174.615, -2200.075, 237.0793, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+627 , 180415, 571, 1, 1, 5181.025, -2200.378, 238.9339, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+628 , 180415, 571, 1, 1, 5147.62, -2198.052, 237.614, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+629 , 180415, 571, 1, 1, 5179.311, -2200.378, 238.4566, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+630 , 180415, 571, 1, 1, 5147.989, -2198.857, 237.614, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+631 , 180415, 571, 1, 1, 5157.23, -2201.726, 237.5309, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+632 , 180415, 571, 1, 1, 5177.918, -2200.155, 237.9545, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+633 , 180415, 571, 1, 1, 5176.376, -2200.125, 237.5385, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+634 , 180415, 571, 1, 1, 5137.146, -2201.73, 237.8019, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+635 , 180415, 571, 1, 1, 5147.455, -2202.927, 237.0062, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+636 , 180415, 571, 1, 1, 5150.261, -2211.397, 238.8011, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+637 , 180415, 571, 1, 1, 5134.615, -2201.333, 238.8165, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+638 , 180415, 571, 1, 1, 5134.096, -2200.798, 238.8165, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+639 , 180415, 571, 1, 1, 5174.395, -2217.037, 237.1849, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+640 , 180415, 571, 1, 1, 5181.015, -2217.125, 238.9904, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+641 , 180415, 571, 1, 1, 5179.321, -2217.104, 238.5324, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+642 , 180415, 571, 1, 1, 5177.742, -2217.072, 237.9756, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+643 , 180415, 571, 1, 1, 5141.178, -2211.442, 238.1585, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+644 , 180415, 571, 1, 1, 5140.784, -2211.82, 238.1585, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+645 , 180415, 571, 1, 1, 5176.154, -2217.055, 237.5818, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317)
+(@OGUID+646 , 180415, 571, 1, 1, 5377.697, -2612.275, 305.4919, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+647 , 180415, 571, 1, 1, 5378.776, -2637.334, 304.966, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+648 , 180415, 571, 1, 1, 5446.666, -2635.141, 306.7401, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+649 , 180415, 571, 1, 1, 5443.241, -2628.945, 306.7371, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+650 , 180415, 571, 1, 1, 5444.132, -2632.507, 306.7371, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+651 , 180415, 571, 1, 1, 5446.891, -2622.866, 306.733, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+652 , 180415, 571, 1, 1, 5450.479, -2621.981, 306.7277, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+653 , 180415, 571, 1, 1, 5453.979, -2622.99, 306.5936, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+654 , 180415, 571, 1, 1, 5450.222, -2636.167, 306.739, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+655 , 180415, 571, 1, 1, 5444.251, -2625.413, 306.7368, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+656 , 180415, 571, 1, 1, 5453.774, -2635.269, 306.7326, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+657 , 180415, 571, 1, 1, 5456.549, -2625.604, 306.6074, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+658 , 180415, 571, 1, 1, 5456.413, -2632.691, 306.7231, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+659 , 180415, 571, 1, 1, 5457.469, -2629.154, 306.7375, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+660 , 180415, 571, 1, 1, 5528.001, -2665.6, 305.3742, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+661 , 180415, 571, 1, 1, 5500.662, -2662.148, 304.9659, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275)
+(@OGUID+662 , 180415, 571, 1, 1, 5763.567, -3552.541, 386.5541, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+663 , 180415, 571, 1, 1, 5768.135, -3553.175, 386.5514, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+664 , 180415, 571, 1, 1, 5750.391, -3570.385, 386.6082, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+665 , 180415, 571, 1, 1, 5776.281, -3557.164, 386.5179, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+666 , 180415, 571, 1, 1, 5762.846, -3557.929, 386.7904, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+667 , 180415, 571, 1, 1, 5775.812, -3560.629, 386.5844, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+668 , 180415, 571, 1, 1, 5757.775, -3561.603, 386.7299, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+669 , 180415, 571, 1, 1, 5776.619, -3565.798, 386.6816, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+670 , 180415, 571, 1, 1, 5776.687, -3569.371, 386.6979, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+671 , 180415, 571, 1, 1, 5773.405, -3555.642, 386.5388, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+672 , 180415, 571, 1, 1, 5769.636, -3555.544, 386.6231, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+673 , 180415, 571, 1, 1, 5752.563, -3565.215, 386.6399, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+674 , 180415, 571, 1, 1, 5775.966, -3574.389, 387.2715, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+675 , 180415, 571, 1, 1, 5760.6, -3586.51, 386.5219, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+676 , 180415, 571, 1, 1, 5748.784, -3573.642, 386.5444, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+677 , 180415, 571, 1, 1, 5765.48, -3584.281, 386.6219, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+678 , 180415, 571, 1, 1, 5755.499, -3578.478, 386.6624, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+679 , 180415, 571, 1, 1, 5768.435, -3581.585, 386.7327, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+680 , 180415, 571, 1, 1, 5772.202, -3578.392, 386.7462, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+681 , 180415, 571, 1, 1, 5759.083, -3583, 386.592, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323)
+(@OGUID+682 , 180415, 571, 1, 1, 3873.8, -4541.213, 210.1521, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+683 , 180415, 571, 1, 1, 3871.856, -4548.686, 211.1932, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+684 , 180415, 571, 1, 1, 3873.244, -4548.734, 211.219, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+685 , 180415, 571, 1, 1, 3862.183, -4548.674, 211.6033, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+686 , 180415, 571, 1, 1, 3865.728, -4534.643, 211.7069, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+687 , 180415, 571, 1, 1, 3880.78, -4510.24, 218.4157, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+688 , 180415, 571, 1, 1, 3833.083, -4531.847, 213.2785, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+689 , 180415, 571, 1, 1, 3861.911, -4519.634, 211.6107, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+690 , 180415, 571, 1, 1, 3863.615, -4516.346, 214.1784, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+691 , 180415, 571, 1, 1, 3830.969, -4499.772, 206.4349, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4211)
+(@OGUID+692 , 180415, 571, 1, 1, 3443.286, -2823.03, 202.9982, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+693 , 180415, 571, 1, 1, 3407.794, -2841.943, 202.67, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+694 , 180415, 571, 1, 1, 3441.109, -2824.373, 202.9075, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+695 , 180415, 571, 1, 1, 3438.945, -2825.767, 203.0237, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+696 , 180415, 571, 1, 1, 3440.277, -2818.991, 203.0136, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+697 , 180415, 571, 1, 1, 3436.816, -2827.108, 202.9122, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+698 , 180415, 571, 1, 1, 3441.738, -2820.991, 202.9215, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+699 , 180415, 571, 1, 1, 3434.637, -2828.344, 202.9919, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+700 , 180415, 571, 1, 1, 3406.82, -2839.58, 202.8193, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+701 , 180415, 571, 1, 1, 3437.037, -2814.965, 202.884, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+702 , 180415, 571, 1, 1, 3438.661, -2816.929, 203.0817, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+703 , 180415, 571, 1, 1, 3405.275, -2832.076, 202.8215, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+704 , 180415, 571, 1, 1, 3405.745, -2834.549, 202.8814, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+705 , 180415, 571, 1, 1, 3406.287, -2837.063, 202.8049, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+706 , 180415, 571, 1, 1, 3407.031, -2802.89, 212.337, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+707 , 180415, 571, 1, 1, 3444.464, -2796.757, 203.2364, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+708 , 180415, 571, 1, 1, 3400.99, -2811.019, 202.6149, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+709 , 180415, 571, 1, 1, 3413.189, -2802.605, 212.3711, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+710 , 180415, 571, 1, 1, 3415.103, -2800.74, 202.2157, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+711 , 180415, 571, 1, 1, 3400.969, -2809.62, 202.0353, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+712 , 180415, 571, 1, 1, 3400.82, -2811.734, 202.7707, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+713 , 180415, 571, 1, 1, 3411.195, -2811.007, 202.0898, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+714 , 180415, 571, 1, 1, 3411.819, -2803.252, 212.5847, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+715 , 180415, 571, 1, 1, 3441.908, -2797.017, 203.1431, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+716 , 180415, 571, 1, 1, 3407.968, -2803.407, 213.5988, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+717 , 180415, 571, 1, 1, 3407.057, -2802.274, 212.4086, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+718 , 180415, 571, 1, 1, 3457.735, -2786.757, 202.8651, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+719 , 180415, 571, 1, 1, 3455.872, -2783.97, 202.7178, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+720 , 180415, 571, 1, 1, 3400.54, -2799.177, 201.4966, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+721 , 180415, 571, 1, 1, 3456.458, -2789.083, 203.3248, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+722 , 180415, 571, 1, 1, 3399.834, -2790.558, 212.2449, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+723 , 180415, 571, 1, 1, 3405.42, -2788.209, 203.0673, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+724 , 180415, 571, 1, 1, 3400.798, -2792.024, 212.3608, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+725 , 180415, 571, 1, 1, 3406.408, -2787.522, 203.0332, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+726 , 180415, 571, 1, 1, 3398.889, -2790.992, 213.4207, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+727 , 180415, 571, 1, 1, 3400.714, -2792.445, 212.2851, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+728 , 180415, 571, 1, 1, 3399.956, -2791.192, 212.2966, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+729 , 180415, 571, 1, 1, 3399.706, -2791.847, 212.3247, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+730 , 180415, 571, 1, 1, 3413.264, -2780.046, 202.9309, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+731 , 180415, 571, 1, 1, 3466.171, -2781.337, 202.358, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+732 , 180415, 571, 1, 1, 3458.188, -2776.3, 201.8077, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+733 , 180415, 571, 1, 1, 3472.556, -2782.05, 202.3065, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+734 , 180415, 571, 1, 1, 3404.212, -2786.731, 203.0216, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+735 , 180415, 571, 1, 1, 3408.607, -2785.961, 202.9851, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+736 , 180415, 571, 1, 1, 3475.129, -2782.253, 202.1459, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+737 , 180415, 571, 1, 1, 3412.443, -2783.161, 202.9973, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+738 , 180415, 571, 1, 1, 3403.424, -2785.687, 202.9964, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+739 , 180415, 571, 1, 1, 3407.591, -2786.707, 202.9976, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+740 , 180415, 571, 1, 1, 3470.033, -2781.84, 202.4652, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+741 , 180415, 571, 1, 1, 3411.324, -2783.891, 202.9264, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+742 , 180415, 571, 1, 1, 3397.692, -2789.662, 213.2649, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+743 , 180415, 571, 1, 1, 3402.704, -2784.6, 202.9906, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+744 , 180415, 571, 1, 1, 3462.118, -2779.648, 202.4681, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+745 , 180415, 571, 1, 1, 3414.508, -2781.62, 202.9946, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+746 , 180415, 571, 1, 1, 3413.529, -2782.306, 202.9957, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+747 , 180415, 571, 1, 1, 3413.155, -2777.403, 206.0491, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+748 , 180415, 571, 1, 1, 3419.603, -2772.811, 201.5641, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+749 , 180415, 571, 1, 1, 3425.753, -2769.791, 202.0575, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+750 , 180415, 571, 1, 1, 3456.768, -2774.179, 201.8534, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+751 , 180415, 571, 1, 1, 3411.746, -2778.068, 202.9529, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+752 , 180415, 571, 1, 1, 3406.269, -2781.944, 203.4021, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+753 , 180415, 571, 1, 1, 3425.471, -2770.199, 202.053, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+754 , 180415, 571, 1, 1, 3412.486, -2778.925, 202.9093, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+755 , 180415, 571, 1, 1, 3397.889, -2752.26, 201.1765, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+756 , 180415, 571, 1, 1, 3397.825, -2754.811, 201.1646, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+757 , 180415, 571, 1, 1, 3455.441, -2749.057, 200.8513, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+758 , 180415, 571, 1, 1, 3440.693, -2745.642, 200.7106, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+759 , 180415, 571, 1, 1, 3427.793, -2745.417, 200.9314, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+760 , 180415, 571, 1, 1, 3445.042, -2751.564, 199.4239, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+761 , 180415, 571, 1, 1, 3455.573, -2746.484, 200.8855, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+762 , 180415, 571, 1, 1, 3443.285, -2745.714, 200.7417, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+763 , 180415, 571, 1, 1, 3425.394, -2745.384, 200.891, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+764 , 180415, 571, 1, 1, 3445.895, -2745.695, 200.92, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+765 , 180415, 571, 1, 1, 3448.288, -2745.802, 200.9623, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+766 , 180415, 571, 1, 1, 3455.298, -2756.604, 201.076, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+767 , 180415, 571, 1, 1, 3455.351, -2754.038, 201.1146, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+768 , 180415, 571, 1, 1, 3422.8, -2745.42, 200.716, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+769 , 180415, 571, 1, 1, 3455.435, -2751.653, 201.1238, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+770 , 180415, 571, 1, 1, 3420.21, -2745.375, 200.6848, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+771 , 180415, 571, 1, 1, 3430.328, -2745.441, 200.9204, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+772 , 180415, 571, 1, 1, 3449.38, -2752.161, 199.3402, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+773 , 180415, 571, 1, 1, 3450.814, -2745.738, 201.1831, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+774 , 180415, 571, 1, 1, 3406.284, -2744.823, 200.6775, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+775 , 180415, 571, 1, 1, 3398.188, -2744.674, 200.9263, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+776 , 180415, 571, 1, 1, 3408.93, -2745.019, 200.7298, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+777 , 180415, 571, 1, 1, 3398.062, -2747.274, 200.9093, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+778 , 180415, 571, 1, 1, 3411.495, -2744.974, 200.9156, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+779 , 180415, 571, 1, 1, 3398.008, -2749.851, 201.1351, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+780 , 180415, 571, 1, 1, 3413.885, -2745.063, 200.9569, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+781 , 180415, 571, 1, 1, 3416.44, -2745.043, 200.9444, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204)
+(@OGUID+782 , 180415, 571, 1, 1, 3306.957, -2346.275, 114.2688, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+783 , 180415, 571, 1, 1, 3306.503, -2346.271, 114.2327, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+784 , 180415, 571, 1, 1, 3314.758, -2336.475, 113.8916, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+785 , 180415, 571, 1, 1, 3315.174, -2335.131, 112.3857, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+786 , 180415, 571, 1, 1, 3313.81, -2337.315, 112.3801, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+787 , 180415, 571, 1, 1, 3314.402, -2336.751, 113.8963, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217)
+(@OGUID+788 , 180415, 571, 1, 1, 3320.02, -2321.913, 114.3211, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+789 , 180415, 571, 1, 1, 3319.593, -2323.635, 112.2697, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+790 , 180415, 571, 1, 1, 3319.35, -2324.088, 112.2623, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+791 , 180415, 571, 1, 1, 3320.5, -2321.387, 114.3223, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+792 , 180415, 571, 1, 1, 3240.985, -2236.183, 117.2045, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+793 , 180415, 571, 1, 1, 3240.313, -2236.637, 117.1827, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+794 , 180415, 571, 1, 1, 3255.964, -2216.654, 117.3241, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+795 , 180415, 571, 1, 1, 3250.294, -2214.309, 117.3726, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+796 , 180415, 571, 1, 1, 3266.923, -2221.398, 117.2959, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+797 , 180415, 571, 1, 1, 3273.234, -2223.792, 117.3726, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+798 , 180415, 571, 1, 1, 3253.368, -2199.88, 117.029, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+799 , 180415, 571, 1, 1, 3280.633, -2211.489, 117.029, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+800 , 180415, 571, 1, 1, 3254.062, -2187.705, 118.7545, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+801 , 180415, 571, 1, 1, 3256.237, -2188.316, 118.4933, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206)
+(@OGUID+802 , 180415, 571, 1, 1, 1904.515, -6141.503, 19.07745, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000)
+(@OGUID+803 , 180415, 571, 1, 1, 1904.164, -6141.786, 19.07746, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000)
+(@OGUID+804 , 180415, 571, 1, 1, 730.0452, -2931.608, 7.921721, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+805 , 180415, 571, 1, 1, 726.9896, -2932.885, 7.942686, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+806 , 180415, 571, 1, 1, 732.6979, -2930.411, 7.924031, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+807 , 180415, 571, 1, 1, 732.0417, -2926.337, 7.959949, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+808 , 180415, 571, 1, 1, 728.4393, -2932.286, 7.933091, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+809 , 180415, 571, 1, 1, 725.5104, -2932.967, 8.092805, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+810 , 180415, 571, 1, 1, 731.3733, -2930.993, 7.925742, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+811 , 180415, 571, 1, 1, 697.434, -2944.288, -1.407539, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+812 , 180415, 571, 1, 1, 724.4271, -2926.127, 8.093702, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+813 , 180415, 571, 1, 1, 725.8629, -2925.865, 7.972515, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+814 , 180415, 571, 1, 1, 729.1215, -2926.113, 7.972516, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+815 , 180415, 571, 1, 1, 706.757, -2944.646, -1.334748, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+816 , 180415, 571, 1, 1, 727.4358, -2925.96, 7.973504, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+817 , 180415, 571, 1, 1, 730.5781, -2926.233, 7.968627, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+818 , 180415, 571, 1, 1, 694.3993, -2923.686, -1.305829, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+819 , 180415, 571, 1, 1, 704.0989, -2921.766, -1.33801, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987)
+(@OGUID+820 , 180415, 571, 1, 1, 1421.866, -3274.431, 175.8965, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+821 , 180415, 571, 1, 1, 1437.179, -3255.236, 168.5082, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+822 , 180415, 571, 1, 1, 1423.415, -3272.469, 175.8965, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+823 , 180415, 571, 1, 1, 1440.88, -3258.736, 168.5083, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+824 , 180415, 571, 1, 1, 1421.422, -3276.337, 175.8964, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+825 , 180415, 571, 1, 1, 1421.38, -3278.174, 175.8965, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+826 , 180415, 571, 1, 1, 1421.837, -3279.875, 175.8964, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+827 , 180415, 571, 1, 1, 1443.076, -3260.196, 168.5083, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+828 , 180415, 571, 1, 1, 1443.797, -3259.285, 168.5083, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+829 , 180415, 571, 1, 1, 1437.932, -3254.321, 168.5089, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+830 , 180415, 571, 1, 1, 1438.714, -3257.005, 168.5084, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+831 , 180415, 571, 1, 1, 1424.549, -3281.903, 175.8964, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+832 , 180415, 571, 1, 1, 1446.208, -3272.655, 171.3525, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+833 , 180415, 571, 1, 1, 1425.948, -3281.997, 175.8964, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+834 , 180415, 571, 1, 1, 1449.852, -3275.616, 171.3525, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+835 , 180415, 571, 1, 1, 1427.842, -3281.715, 175.8965, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+836 , 180415, 571, 1, 1, 1429.609, -3280.913, 175.8965, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+837 , 180415, 571, 1, 1, 1431.264, -3278.972, 175.8965, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+838 , 180415, 571, 1, 1, 1448.076, -3274.135, 171.3525, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+839 , 180415, 571, 1, 1, 1451.38, -3276.939, 171.3525, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998)
+(@OGUID+840 , 180415, 571, 1, 1, 607.8405, -4925.881, 24.95922, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+841 , 180415, 571, 1, 1, 608.6639, -4923.137, 31.06963, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+842 , 180415, 571, 1, 1, 606.8481, -4923.561, 31.05914, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+843 , 180415, 571, 1, 1, 592.6419, -4947.118, 27.2703, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+844 , 180415, 571, 1, 1, 601.7822, -4924.856, 31.09424, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+845 , 180415, 571, 1, 1, 592.2818, -4945.582, 27.2703, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+846 , 180415, 571, 1, 1, 602.6741, -4929.257, 22.72639, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+847 , 180415, 571, 1, 1, 607.1002, -4923.413, 24.95922, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+848 , 180415, 571, 1, 1, 601.2928, -4929.597, 22.72639, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+849 , 180415, 571, 1, 1, 599.9999, -4925.255, 31.10255, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+850 , 180415, 571, 1, 1, 604.4755, -4924.116, 24.96138, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+851 , 180415, 571, 1, 1, 592.1803, -4952.106, 27.2703, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+852 , 180415, 571, 1, 1, 591.1564, -4953.459, 27.2703, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+853 , 180415, 571, 1, 1, 605.0962, -4924.019, 31.05478, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+854 , 180415, 571, 1, 1, 592.8271, -4950.619, 27.2703, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+855 , 180415, 571, 1, 1, 603.4061, -4924.424, 31.06834, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+856 , 180415, 571, 1, 1, 601.9756, -4924.741, 24.95593, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+857 , 180415, 571, 1, 1, 595.087, -4926.527, 31.06053, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+858 , 180415, 571, 1, 1, 599.5756, -4929.97, 22.72639, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+859 , 180415, 571, 1, 1, 587.9566, -4954.577, 27.2703, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+860 , 180415, 571, 1, 1, 593.6668, -4929.349, 31.07931, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+861 , 180415, 571, 1, 1, 596.3693, -4930.906, 22.72639, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+862 , 180415, 571, 1, 1, 597.8043, -4930.463, 22.72639, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+863 , 180415, 571, 1, 1, 598.4451, -4925.653, 31.07524, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+864 , 180415, 571, 1, 1, 601.3765, -4922.399, 24.95571, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+865 , 180415, 571, 1, 1, 586.3301, -4953.981, 27.2703, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+866 , 180415, 571, 1, 1, 596.6023, -4926.172, 31.03511, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+867 , 180415, 571, 1, 1, 600.8096, -4920.225, 24.95571, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+868 , 180415, 571, 1, 1, 590.7567, -4934.542, 31.1084, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+869 , 180415, 571, 1, 1, 584.8109, -4952.982, 27.2703, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+870 , 180415, 571, 1, 1, 593.1274, -4927, 31.07476, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+871 , 180415, 571, 1, 1, 582.5004, -4947.915, 27.2703, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+872 , 180415, 571, 1, 1, 584.9875, -4936.011, 31.05981, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+873 , 180415, 571, 1, 1, 586.9916, -4935.478, 31.03452, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+874 , 180415, 571, 1, 1, 591.3271, -4919.841, 24.76182, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+875 , 180415, 571, 1, 1, 582.8868, -4949.487, 27.2703, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+876 , 180415, 571, 1, 1, 589.015, -4934.996, 31.07944, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+877 , 180415, 571, 1, 1, 589.0734, -4924.763, 19.81484, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+878 , 180415, 571, 1, 1, 582.024, -4933.135, 31.07914, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+879 , 180415, 571, 1, 1, 586.677, -4921.894, 24.03878, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+880 , 180415, 571, 1, 1, 588.6942, -4923.249, 19.81484, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+881 , 180415, 571, 1, 1, 582.4625, -4934.822, 31.0773, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+882 , 180415, 571, 1, 1, 589.4875, -4926.273, 19.81484, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981)
+(@OGUID+883 , 180415, 571, 1, 1, 2492.693, -1907.169, 9.526185, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+884 , 180415, 571, 1, 1, 2490.183, -1883.224, 9.115799, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+885 , 180415, 571, 1, 1, 2501.102, -1882.176, 8.549006, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+886 , 180415, 571, 1, 1, 2501.947, -1893.583, 8.302938, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+887 , 180415, 571, 1, 1, 2506.74, -1900.911, 8.029154, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+888 , 180415, 571, 1, 1, 2490.393, -1897.489, 9.970935, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+889 , 180415, 571, 1, 1, 2477.013, -1901.73, 11.23512, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+890 , 180415, 571, 1, 1, 2480.636, -1898.305, 11.20697, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+891 , 180415, 571, 1, 1, 2465.555, -1903.595, 11.20657, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+892 , 180415, 571, 1, 1, 2470.907, -1903.663, 11.225, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242)
+(@OGUID+893 , 180415, 571, 1, 1, 3720.282, -703.4149, 216.9913, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+894 , 180415, 571, 1, 1, 3721.375, -700.6528, 217.3681, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+895 , 180415, 571, 1, 1, 3724.484, -697.309, 217.4367, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+896 , 180415, 571, 1, 1, 3723.878, -701.0903, 217.3764, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+897 , 180415, 571, 1, 1, 3722.675, -704.342, 217.2098, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+898 , 180415, 571, 1, 1, 3723.472, -693.4011, 217.4225, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+899 , 180415, 571, 1, 1, 3721.266, -694.7188, 217.1692, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+900 , 180415, 571, 1, 1, 3719.472, -692.0851, 217.2261, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+901 , 180415, 571, 1, 1, 3721.933, -697.5799, 217.3843, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+902 , 180415, 571, 1, 1, 3720.975, -690.0139, 217.1697, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+903 , 180415, 571, 1, 1, 3673.806, -704.4462, 215.2892, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+904 , 180415, 571, 1, 1, 3680.288, -702.743, 215.5022, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+905 , 180415, 571, 1, 1, 3663.695, -709.2948, 213.8031, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+906 , 180415, 571, 1, 1, 3662.965, -709.1875, 214.0366, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+907 , 180415, 571, 1, 1, 3663.579, -704.8941, 214.0316, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+908 , 180415, 571, 1, 1, 3664.109, -705.0291, 213.8467, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+909 , 180415, 571, 1, 1, 3657.745, -692.2751, 223.6275, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+910 , 180415, 571, 1, 1, 3660.364, -700.371, 223.6275, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+911 , 180415, 571, 1, 1, 3650.258, -699.3051, 223.6275, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+912 , 180415, 571, 1, 1, 3661.816, -704.7014, 214.8959, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+913 , 180415, 571, 1, 1, 3654.531, -691.826, 223.6275, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+914 , 180415, 571, 1, 1, 3652.8, -692.9138, 223.6275, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+915 , 180415, 571, 1, 1, 3655.83, -710.9506, 227.4323, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+916 , 180415, 571, 1, 1, 3651.423, -694.3221, 223.6275, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+917 , 180415, 571, 1, 1, 3660.504, -697.7479, 223.6275, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+918 , 180415, 571, 1, 1, 3662.702, -704.8438, 214.3862, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+919 , 180415, 571, 1, 1, 3660.119, -695.2737, 223.6275, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+920 , 180415, 571, 1, 1, 3658.975, -693.3618, 223.6275, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+921 , 180415, 571, 1, 1, 3650.527, -697.048, 223.6275, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+922 , 180415, 571, 1, 1, 3661.141, -709.1563, 214.8015, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+923 , 180415, 571, 1, 1, 3646.771, -712.575, 216.1448, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+924 , 180415, 571, 1, 1, 3639.381, -715.8611, 227.3913, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+925 , 180415, 571, 1, 1, 3655.505, -714.1703, 227.4361, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+926 , 180415, 571, 1, 1, 3643.311, -713.7602, 227.4366, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+927 , 180415, 571, 1, 1, 3649.78, -710.2109, 227.4335, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+928 , 180415, 571, 1, 1, 3650.835, -720.3264, 216.1421, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+929 , 180415, 571, 1, 1, 3641.055, -711.5729, 218.9725, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+930 , 180415, 571, 1, 1, 3642.938, -716.2329, 227.4314, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+931 , 180415, 571, 1, 1, 3656.18, -720.6285, 216.1422, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+932 , 180415, 571, 1, 1, 3662.277, -709.184, 214.3835, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+933 , 180415, 571, 1, 1, 3653.458, -720.2587, 216.1421, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+934 , 180415, 571, 1, 1, 3620.047, -714.6027, 227.4171, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+935 , 180415, 571, 1, 1, 3630.439, -711.8963, 215.451, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+936 , 180415, 571, 1, 1, 3628.625, -714.6279, 221.3164, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+937 , 180415, 571, 1, 1, 3647.266, -723.0741, 220.1831, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+938 , 180415, 571, 1, 1, 3628.823, -712.1104, 221.3164, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+939 , 180415, 571, 1, 1, 3636.598, -710.9913, 218.9725, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+940 , 180415, 571, 1, 1, 3642.31, -722.2473, 220.5441, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+941 , 180415, 571, 1, 1, 3646.166, -718.1907, 216.172, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+942 , 180415, 571, 1, 1, 3635.955, -715.3896, 227.4597, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+943 , 180415, 571, 1, 1, 3639.688, -711.3333, 218.9725, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+944 , 180415, 571, 1, 1, 3633.46, -719.8217, 221.3129, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+945 , 180415, 571, 1, 1, 3632.302, -715.0294, 227.4236, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+946 , 180415, 571, 1, 1, 3630.115, -714.7449, 215.4509, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+947 , 180415, 571, 1, 1, 3633.867, -715.2915, 221.3129, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+948 , 180415, 571, 1, 1, 3628.883, -714.4942, 227.4169, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+949 , 180415, 571, 1, 1, 3629.475, -717.1203, 215.4509, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+950 , 180415, 571, 1, 1, 3635.079, -710.8333, 218.9725, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+951 , 180415, 571, 1, 1, 3645.829, -721.221, 216.172, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+952 , 180415, 571, 1, 1, 3619.787, -716.7102, 227.4115, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177)
+(@OGUID+953 , 180415, 571, 1, 1, 3539.074, 246.8349, 45.82254, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+954 , 180415, 571, 1, 1, 3560.01, 248.8549, 45.83335, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+955 , 180415, 571, 1, 1, 3549.851, 245.3113, 45.88549, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+956 , 180415, 571, 1, 1, 3520.715, 280.9288, 45.78613, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+957 , 180415, 571, 1, 1, 3564.364, 294.3126, 45.82972, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+958 , 180415, 571, 1, 1, 3526.05, 290.625, 45.8017, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+959 , 180415, 571, 1, 1, 3529.681, 251.9887, 45.82568, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+960 , 180415, 571, 1, 1, 3570.418, 286.1223, 45.8264, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+961 , 180415, 571, 1, 1, 3534.023, 297.516, 45.87384, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+962 , 180415, 571, 1, 1, 3573.903, 275.7938, 45.8153, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+963 , 180415, 571, 1, 1, 3572.999, 265.1364, 45.80965, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+964 , 180415, 571, 1, 1, 3585.963, 283.0799, 48.30828, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+965 , 180415, 571, 1, 1, 3554.604, 299.7266, 45.90679, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+966 , 180415, 571, 1, 1, 3568.259, 255.9597, 45.78259, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+967 , 180415, 571, 1, 1, 3587.122, 271.1111, 48.3845, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+968 , 180415, 571, 1, 1, 3522.922, 260.132, 45.7541, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+969 , 180415, 571, 1, 1, 3596.911, 271.6074, 52.12251, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+970 , 180415, 571, 1, 1, 3519.316, 270.3384, 45.87571, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+971 , 180415, 571, 1, 1, 3595.522, 284.4653, 52.2077, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+972 , 180415, 571, 1, 1, 3544.37, 301.0424, 45.87925, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161)
+(@OGUID+973 , 180415, 571, 1, 1, 3453.492, 2004.011, 66.48942, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+974 , 180415, 571, 1, 1, 3451.072, 2013.826, 67.11924, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+975 , 180415, 571, 1, 1, 3460.914, 1999.812, 64.96242, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+976 , 180415, 571, 1, 1, 3450.717, 2005.431, 66.47033, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+977 , 180415, 571, 1, 1, 3464.852, 2005.66, 65.63439, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+978 , 180415, 571, 1, 1, 3457.145, 2001.683, 65.88113, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+979 , 180415, 571, 1, 1, 3457.17, 2010.24, 67.18584, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+980 , 180415, 571, 1, 1, 3461.157, 2007.909, 66.50739, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+981 , 180415, 571, 1, 1, 3447.548, 2007.21, 66.4343, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+982 , 180415, 571, 1, 1, 3454.485, 2011.974, 67.24349, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+983 , 180415, 571, 1, 1, 3485.54, 1982.056, 66.64336, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+984 , 180415, 571, 1, 1, 3491.24, 1972.217, 66.67846, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+985 , 180415, 571, 1, 1, 3484.478, 1982.79, 66.10648, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+986 , 180415, 571, 1, 1, 3486.18, 1980.53, 66.75633, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+987 , 180415, 571, 1, 1, 3488.036, 1984.502, 66.5727, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+988 , 180415, 571, 1, 1, 3488.738, 1974.252, 66.48361, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+989 , 180415, 571, 1, 1, 3486.124, 1985.773, 66.13934, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+990 , 180415, 571, 1, 1, 3489.454, 1972.877, 66.5388, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+991 , 180415, 571, 1, 1, 3486.32, 1978.385, 66.64598, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+992 , 180415, 571, 1, 1, 3484.899, 1984.623, 66.13567, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+993 , 180415, 571, 1, 1, 3490.6, 1973.335, 66.56937, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+994 , 180415, 571, 1, 1, 3486.279, 1984.052, 66.72491, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+995 , 180415, 571, 1, 1, 3488.017, 1982.2, 69.24107, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+996 , 180415, 571, 1, 1, 3496.877, 1986.814, 66.14459, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+997 , 180415, 571, 1, 1, 3499.981, 1976.101, 66.6926, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+998 , 180415, 571, 1, 1, 3498.515, 1987.265, 66.15958, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+999 , 180415, 571, 1, 1, 3494.6, 1971.783, 69.21862, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1000, 180415, 571, 1, 1, 3498.208, 1985.489, 66.55852, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1001, 180415, 571, 1, 1, 3492.497, 1984.687, 66.91064, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1002, 180415, 571, 1, 1, 3499.862, 1974.142, 66.74924, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1003, 180415, 571, 1, 1, 3499.545, 1986.568, 66.14841, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1004, 180415, 571, 1, 1, 3497.163, 1972.785, 67.83695, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1005, 180415, 571, 1, 1, 3498.545, 1983.968, 66.78958, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1006, 180415, 571, 1, 1, 3499.741, 1984.807, 66.1551, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1007, 180415, 571, 1, 1, 3496.604, 1985.285, 66.52729, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1008, 180415, 571, 1, 1, 3490.234, 1984.203, 66.76582, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1009, 180415, 571, 1, 1, 3494.507, 1985.543, 66.86245, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1010, 180415, 571, 1, 1, 3492.613, 1987.125, 66.18999, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1011, 180415, 571, 1, 1, 3498.044, 1971.96, 67.97525, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1012, 180415, 571, 1, 1, 3500.235, 1977.234, 66.79019, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158)
+(@OGUID+1013, 180415, 571, 1, 1, 8446.374, -338.7054, 906.5311, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1014, 180415, 571, 1, 1, 8441.133, -333.9722, 906.3853, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1015, 180415, 571, 1, 1, 8449.194, -340.0696, 906.42, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1016, 180415, 571, 1, 1, 8438.914, -336.882, 906.3645, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1017, 180415, 571, 1, 1, 8450.9, -342.7731, 906.4547, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1018, 180415, 571, 1, 1, 8436.891, -329.9302, 906.4619, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1019, 180415, 571, 1, 1, 8440.131, -331.5573, 906.4849, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1020, 180415, 571, 1, 1, 8443.484, -341.0681, 906.538, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436)
+(@OGUID+1021, 180415, 571, 1, 1, 8438.455, -346.809, 906.3992, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484)
+(@OGUID+1022, 180415, 571, 1, 1, 8434.126, -342.7607, 906.3992, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484)
+(@OGUID+1023, 180415, 571, 1, 1, 6135.286, -1087.107, 403.996, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1024, 180415, 571, 1, 1, 6135.75, -1082.272, 403.9787, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1025, 180415, 571, 1, 1, 6131.089, -1077.924, 404.0315, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1026, 180415, 571, 1, 1, 6124.53, -1100.04, 404.1576, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1027, 180415, 571, 1, 1, 6129.471, -1100.338, 404.0967, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1028, 180415, 571, 1, 1, 6134.075, -1100.798, 404.0411, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1029, 180415, 571, 1, 1, 6135.558, -1078.466, 403.9826, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1030, 180415, 571, 1, 1, 6135.308, -1092.608, 404.0045, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1031, 180415, 571, 1, 1, 6135.531, -1097.868, 403.998, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1032, 180415, 571, 1, 1, 6128.174, -1077.363, 404.1137, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1033, 180415, 571, 1, 1, 6114.59, -1100.005, 404.2581, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1034, 180415, 571, 1, 1, 6119.64, -1099.892, 404.2052, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1035, 180415, 571, 1, 1, 6117.122, -1080.053, 403.8957, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1036, 180415, 571, 1, 1, 6110.035, -1085.667, 404.2946, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1037, 180415, 571, 1, 1, 6116.569, -1077.83, 403.8956, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1038, 180415, 571, 1, 1, 6110.022, -1094.398, 404.3128, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1039, 180415, 571, 1, 1, 6113.951, -1077.961, 403.9418, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1040, 180415, 571, 1, 1, 6109.78, -1099.722, 404.3831, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1041, 180415, 571, 1, 1, 6109.548, -1083.051, 404.3193, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1042, 180415, 571, 1, 1, 6108.985, -1078.398, 404.2991, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419)
+(@OGUID+1043, 180415, 571, 1, 1, 6665.15, -200.775, 950.982, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1044, 180415, 571, 1, 1, 6667.429, -202.9508, 950.2484, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1045, 180415, 571, 1, 1, 6670.192, -202.2401, 950.4054, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1046, 180415, 571, 1, 1, 6676.213, -197.9583, 951.1501, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1047, 180415, 571, 1, 1, 6676.812, -200.8755, 951.2551, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1048, 180415, 571, 1, 1, 6671.391, -199.7399, 951.0316, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1049, 180415, 571, 1, 1, 6671.051, -196.6817, 951.0138, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1050, 180415, 571, 1, 1, 6666.553, -195.6487, 951.7457, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1051, 180415, 571, 1, 1, 6680.188, -200.7511, 955.8945, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1052, 180415, 571, 1, 1, 6664.639, -197.5128, 951.639, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428)
+(@OGUID+1053, 180415, 571, 1, 1, 5534.743, 5748.256, -76.63572, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1054, 180415, 571, 1, 1, 5543.521, 5771.278, -76.01951, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1055, 180415, 571, 1, 1, 5523.451, 5778.276, -78.78996, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1056, 180415, 571, 1, 1, 5543.232, 5771.354, -76.01951, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1057, 180415, 571, 1, 1, 5525.911, 5782.684, -78.17769, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1058, 180415, 571, 1, 1, 5555.896, 5763.036, -76.68411, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1059, 180415, 571, 1, 1, 5552.697, 5767.842, -75.99409, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1060, 180415, 571, 1, 1, 5557.079, 5767.963, -77.05219, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1061, 180415, 571, 1, 1, 5557.415, 5769.394, -76.74715, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1062, 180415, 571, 1, 1, 5589.266, 5819.588, -69.22645, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1063, 180415, 571, 1, 1, 5585.25, 5746.126, -71.12965, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1064, 180415, 571, 1, 1, 5589.826, 5820.498, -69.06834, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1065, 180415, 571, 1, 1, 5598.222, 5811.789, -69.80727, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1066, 180415, 571, 1, 1, 5608.288, 5809.12, -70.3611, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1067, 180415, 571, 1, 1, 5629.481, 5831.32, -63.68258, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1068, 180415, 571, 1, 1, 5624.22, 5848.555, -62.23083, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1069, 180415, 571, 1, 1, 5624.355, 5836.35, -64.11382, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1070, 180415, 571, 1, 1, 5615.792, 5854.673, -61.52033, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1071, 180415, 571, 1, 1, 5617.778, 5835.836, -64.42644, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1072, 180415, 571, 1, 1, 5621.542, 5839.372, -63.8798, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1073, 180415, 571, 1, 1, 5620.175, 5851.535, -61.9314, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1074, 180415, 571, 1, 1, 5617.97, 5842.27, -63.73035, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1075, 180415, 571, 1, 1, 5631.269, 5841.848, -62.78385, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1076, 180415, 571, 1, 1, 5614.699, 5845.393, -63.52262, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1077, 180415, 571, 1, 1, 5628.023, 5845.315, -62.64318, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1078, 180415, 571, 1, 1, 5599.996, 5811.131, -69.81374, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1079, 180415, 571, 1, 1, 5610.43, 5848.424, -63.39353, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1080, 180415, 571, 1, 1, 5609.851, 5840.359, -64.56908, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285)
+(@OGUID+1081, 180415, 571, 1, 1, 5638.223, 5830.514, -63.40969, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284)
+(@OGUID+1082, 180415, 571, 1, 1, 5635.809, 5835.991, -63.02237, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284)
+(@OGUID+1083, 180415, 571, 1, 1, 5512.584, 4747.444, -194.4338, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1084, 180415, 571, 1, 1, 5476.778, 4745.321, -195.5257, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1085, 180415, 571, 1, 1, 5509.279, 4742.423, -194.4338, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1086, 180415, 571, 1, 1, 5498.675, 4751.812, -194.4338, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1087, 180415, 571, 1, 1, 5503.33, 4741.617, -194.4338, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1088, 180415, 571, 1, 1, 5504.156, 4755.996, -194.4338, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1089, 180415, 571, 1, 1, 5498.581, 4745.667, -194.4338, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1090, 180415, 571, 1, 1, 5477.044, 4749.278, -195.3024, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1091, 180415, 571, 1, 1, 5510.276, 4753.492, -194.4338, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1092, 180415, 571, 1, 1, 5485.467, 4727.866, -194.3498, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290)
+(@OGUID+1093, 180415, 571, 1, 1, 4472.118, 5710.065, 81.82111, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+1094, 180415, 571, 1, 1, 4475.728, 5707.702, 81.28061, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+1095, 180415, 571, 1, 1, 4474.857, 5707.663, 81.27406, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+1096, 180415, 571, 1, 1, 4470.187, 5711.333, 81.82111, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123)
+(@OGUID+1097, 180415, 571, 1, 1, 4502.521, 5716.321, 83.2894, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1098, 180415, 571, 1, 1, 4501.978, 5716.594, 83.29294, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1099, 180415, 571, 1, 1, 4512.208, 5702.231, 82.31032, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1100, 180415, 571, 1, 1, 4508.148, 5720.678, 81.53056, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1101, 180415, 571, 1, 1, 4508.037, 5721.736, 81.52561, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1102, 180415, 571, 1, 1, 4511.359, 5702.256, 82.3114, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122)
+(@OGUID+1103, 180415, 571, 1, 1, 4175.995, 5285.556, 39.60876, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1104, 180415, 571, 1, 1, 4174.72, 5282.509, 40.74071, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1105, 180415, 571, 1, 1, 4182.015, 5285.288, 40.89171, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1106, 180415, 571, 1, 1, 4176.526, 5277.981, 41.3796, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1107, 180415, 571, 1, 1, 4182.998, 5284, 40.91432, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1108, 180415, 571, 1, 1, 4175.992, 5278.304, 40.8171, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1109, 180415, 571, 1, 1, 4174.827, 5281.086, 40.75976, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1110, 180415, 571, 1, 1, 4181.757, 5280.178, 39.78754, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1111, 180415, 571, 1, 1, 4177.348, 5277.492, 40.8917, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1112, 180415, 571, 1, 1, 4176.902, 5277.699, 41.40043, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108)
+(@OGUID+1113, 180415, 571, 1, 1, 2816.064, 6140.755, 84.60281, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1114, 180415, 571, 1, 1, 2817.546, 6142.036, 84.77279, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1115, 180415, 571, 1, 1, 2808.348, 6133.652, 84.35007, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1116, 180415, 571, 1, 1, 2814.547, 6139.239, 84.48197, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1117, 180415, 571, 1, 1, 2813.243, 6137.908, 84.43053, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1118, 180415, 571, 1, 1, 2811.692, 6136.515, 84.40427, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1119, 180415, 571, 1, 1, 2809.904, 6135.145, 84.37815, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1120, 180415, 571, 1, 1, 2806.884, 6132.39, 84.32622, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1121, 180415, 571, 1, 1, 2787.17, 6166.139, 84.44685, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1122, 180415, 571, 1, 1, 2785.56, 6164.665, 84.41692, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1123, 180415, 571, 1, 1, 2784.033, 6163.104, 84.38836, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1124, 180415, 571, 1, 1, 2791.778, 6170.236, 84.69099, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1125, 180415, 571, 1, 1, 2790.21, 6168.888, 84.58121, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1126, 180415, 571, 1, 1, 2788.624, 6167.527, 84.47393, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1127, 180415, 571, 1, 1, 2781.09, 6160.348, 84.3336, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1128, 180415, 571, 1, 1, 2779.682, 6158.85, 84.30719, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1129, 180415, 571, 1, 1, 2805.326, 6131.063, 84.3011, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1130, 180415, 571, 1, 1, 2791.639, 6139.96, 84.81071, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1131, 180415, 571, 1, 1, 2803.804, 6129.789, 84.27695, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1132, 180415, 571, 1, 1, 2782.543, 6161.761, 84.36069, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1133, 180415, 571, 1, 1, 2788.538, 6143.428, 84.79273, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1134, 180415, 571, 1, 1, 2776.865, 6126.743, 91.12935, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1135, 180415, 571, 1, 1, 2788.898, 6137.514, 86.33366, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1136, 180415, 571, 1, 1, 2774.129, 6129.736, 91.13658, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1137, 180415, 571, 1, 1, 2780.254, 6135.889, 89.43606, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1138, 180415, 571, 1, 1, 2785.656, 6141.002, 86.35069, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1139, 180415, 571, 1, 1, 2778.103, 6157.446, 84.27789, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1140, 180415, 571, 1, 1, 2781.07, 6130.521, 90.43552, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1141, 180415, 571, 1, 1, 2785.955, 6135.013, 87.93523, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1142, 180415, 571, 1, 1, 2777.994, 6133.772, 90.43637, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1143, 180415, 571, 1, 1, 2782.876, 6138.491, 87.9035, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1144, 180415, 571, 1, 1, 2783.253, 6132.512, 89.46143, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1145, 180415, 571, 1, 1, 2779.491, 6129.215, 90.78801, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1146, 180415, 571, 1, 1, 2776.609, 6132.236, 90.81976, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1147, 180415, 571, 1, 1, 2772.306, 6123.107, 91.52767, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1148, 180415, 571, 1, 1, 2768.484, 6124.985, 97.70737, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1149, 180415, 571, 1, 1, 2771.088, 6121.854, 97.64502, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1150, 180415, 571, 1, 1, 2771.566, 6127.16, 91.71031, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1151, 180415, 571, 1, 1, 2773.846, 6124.534, 91.67098, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1152, 180415, 571, 1, 1, 2769.93, 6125.85, 91.52602, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129)
+(@OGUID+1153, 180415, 571, 1, 1, 2297.869, 5280.106, 13.11051, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1154, 180415, 571, 1, 1, 2292.861, 5276.689, 13.39523, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1155, 180415, 571, 1, 1, 2292.751, 5278.278, 13.39523, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1156, 180415, 571, 1, 1, 2293.383, 5279.647, 13.39523, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1157, 180415, 571, 1, 1, 2295.305, 5274.703, 13.39523, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1158, 180415, 571, 1, 1, 2291.743, 5276.248, 13.28105, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1159, 180415, 571, 1, 1, 2293.839, 5275.374, 13.39523, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1160, 180415, 571, 1, 1, 2293.025, 5274.428, 13.18383, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1161, 180415, 571, 1, 1, 2298.755, 5278.823, 13.17301, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1162, 180415, 571, 1, 1, 2298.857, 5277.28, 13.15912, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1163, 180415, 571, 1, 1, 2269.472, 5199.901, 11.49839, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1164, 180415, 571, 1, 1, 2270.224, 5199.647, 11.84797, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1165, 180415, 571, 1, 1, 2267.266, 5195.724, 11.25468, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1166, 180415, 571, 1, 1, 2271.104, 5199.311, 12.33314, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1167, 180415, 571, 1, 1, 2262.667, 5194.889, 14.41752, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1168, 180415, 571, 1, 1, 2269.422, 5194.798, 12.2818, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1169, 180415, 571, 1, 1, 2268.748, 5200.188, 11.23592, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1170, 180415, 571, 1, 1, 2264.628, 5203.938, 12.71451, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1171, 180415, 571, 1, 1, 2268.505, 5195.202, 11.93541, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1172, 180415, 571, 1, 1, 2267.729, 5195.542, 11.41191, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1173, 180415, 571, 1, 1, 2269.927, 5181.998, 20.93, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1174, 180415, 571, 1, 1, 2288.382, 5209.055, 17.64837, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1175, 180415, 571, 1, 1, 2268.734, 5184.522, 20.88139, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1176, 180415, 571, 1, 1, 2271.566, 5188.706, 20.67995, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1177, 180415, 571, 1, 1, 2271.873, 5189.512, 21.19639, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1178, 180415, 571, 1, 1, 2272.297, 5190.432, 21.74726, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1179, 180415, 571, 1, 1, 2292.874, 5206.81, 17.99297, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1180, 180415, 571, 1, 1, 2288.034, 5203.917, 13.63426, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1181, 180415, 571, 1, 1, 2289.651, 5198.8, 24.89842, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1182, 180415, 571, 1, 1, 2285.987, 5198.663, 13.60694, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1183, 180415, 571, 1, 1, 2289.193, 5206.791, 13.63426, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1184, 180415, 571, 1, 1, 2277.729, 5188.15, 21.78212, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1185, 180415, 571, 1, 1, 2300.695, 5202.11, 18.77489, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1186, 180415, 571, 1, 1, 2277.347, 5187.327, 21.23565, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1187, 180415, 571, 1, 1, 2299.122, 5197.798, 18.77534, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1188, 180415, 571, 1, 1, 2276.96, 5186.483, 20.70242, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1189, 180415, 571, 1, 1, 2303.15, 5193.464, 18.77864, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1190, 180415, 571, 1, 1, 2273.479, 5180.935, 20.96472, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1191, 180415, 571, 1, 1, 2304.057, 5195.878, 18.77864, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1192, 180415, 571, 1, 1, 2275.646, 5181.717, 21.01333, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032)
+(@OGUID+1193, 180415, 571, 1, 1, 3000.993, 4068.12, 30.11452, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1194, 180415, 571, 1, 1, 3014.259, 4067.539, 31.04936, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1195, 180415, 571, 1, 1, 3001.769, 4049.21, 26.07964, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1196, 180415, 571, 1, 1, 3007.144, 4059.308, 26.76467, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1197, 180415, 571, 1, 1, 3003.417, 4061.542, 26.18109, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1198, 180415, 571, 1, 1, 3003.007, 4059.802, 26.62822, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1199, 180415, 571, 1, 1, 3007.312, 4061.112, 26.29614, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1200, 180415, 571, 1, 1, 3003.312, 4060.399, 26.59323, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1201, 180415, 571, 1, 1, 3007.251, 4060.04, 26.53866, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1202, 180415, 571, 1, 1, 3004.535, 4048.617, 26.07964, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1203, 180415, 571, 1, 1, 2862.335, 4038.781, 5.057745, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1204, 180415, 571, 1, 1, 2860.901, 4036.917, 10.936, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1205, 180415, 571, 1, 1, 2863.556, 4030.712, 10.90262, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1206, 180415, 571, 1, 1, 2870.361, 4032.718, 5.063904, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1207, 180415, 571, 1, 1, 2874.672, 4034.085, 5.337824, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1208, 180415, 571, 1, 1, 2871.422, 4041.642, 5.131527, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1209, 180415, 571, 1, 1, 2866.514, 4040.803, 5.103539, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1210, 180415, 571, 1, 1, 2865.706, 4030.687, 5.018806, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1211, 180415, 571, 1, 1, 2852.11, 4024.6, 5.079292, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1212, 180415, 571, 1, 1, 2834.966, 4027.097, 5.066519, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1213, 180415, 571, 1, 1, 2857.513, 4036.657, 5.022579, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1214, 180415, 571, 1, 1, 2847.389, 4022.759, 5.015669, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1215, 180415, 571, 1, 1, 2848.344, 4032.73, 5.091734, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1216, 180415, 571, 1, 1, 2839.194, 4028.807, 5.034027, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1217, 180415, 571, 1, 1, 2861.214, 4028.713, 4.992302, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1218, 180415, 571, 1, 1, 2853.19, 4035.031, 5.072161, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1219, 180415, 571, 1, 1, 2844.015, 4030.81, 5.057843, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1220, 180415, 571, 1, 1, 2842.966, 4020.906, 4.97491, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1221, 180415, 571, 1, 1, 2856.586, 4026.636, 5.041717, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1222, 180415, 571, 1, 1, 2838.301, 4018.869, 5.02294, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113)
+(@OGUID+1223, 180415, 571, 1, 1, 3434.656, 4170.812, 14.18469, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+1224, 180415, 571, 1, 1, 3436.351, 4170.699, 14.72765, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+1225, 180415, 571, 1, 1, 3434.991, 4175.841, 14.25499, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+1226, 180415, 571, 1, 1, 3437.776, 4170.405, 15.33066, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+1227, 180415, 571, 1, 1, 3436.812, 4175.733, 14.72314, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0)
+(@OGUID+1228, 180415, 571, 1, 1, 3438.13, 4175.703, 15.35011, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1229, 180415, 571, 1, 1, 3439.169, 4170.2, 15.85179, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1230, 180415, 571, 1, 1, 3439.449, 4175.608, 15.88088, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1231, 180415, 571, 1, 1, 3441.065, 4175.682, 16.57793, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1232, 180415, 571, 1, 1, 3441.056, 4170.128, 16.49479, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1233, 180415, 571, 1, 1, 3460.127, 4139.347, 15.29107, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1234, 180415, 571, 1, 1, 3460.05, 4142.877, 16.52606, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1235, 180415, 571, 1, 1, 3465.668, 4142.377, 16.36272, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1236, 180415, 571, 1, 1, 3460.073, 4138.049, 15.04643, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1237, 180415, 571, 1, 1, 3459.941, 4140.769, 15.82715, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1238, 180415, 571, 1, 1, 3465.849, 4140.417, 15.76362, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1239, 180415, 571, 1, 1, 3458.424, 4132.354, 17.18105, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1240, 180415, 571, 1, 1, 3465.589, 4138.927, 15.2921, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1241, 180415, 571, 1, 1, 3458.859, 4132.616, 17.19908, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1242, 180415, 571, 1, 1, 3465.348, 4137.641, 15.11139, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1243, 180415, 571, 1, 1, 3491.878, 4167.745, 15.70641, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1244, 180415, 571, 1, 1, 3490.802, 4173.49, 16.09687, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1245, 180415, 571, 1, 1, 3493.248, 4167.78, 15.00927, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1246, 180415, 571, 1, 1, 3490.705, 4167.838, 16.1151, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1247, 180415, 571, 1, 1, 3497.003, 4167.765, 13.85431, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1248, 180415, 571, 1, 1, 3497.161, 4173.208, 13.8974, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1249, 180415, 571, 1, 1, 3495.283, 4173.163, 14.59191, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1250, 180415, 571, 1, 1, 3493.558, 4173.144, 15.14168, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1251, 180415, 571, 1, 1, 3495.103, 4167.599, 14.42155, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1252, 180415, 571, 1, 1, 3492.093, 4173.33, 15.54947, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043)
+(@OGUID+1253, 180472, 571, 1, 1, 5202.763, -1310.045, 247.7712, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66)
+(@OGUID+1254, 180472, 571, 1, 1, 5205.405, -1316.248, 247.7859, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66)
+(@OGUID+1255, 180472, 571, 1, 1, 5196.807, -1312.714, 247.8102, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66)
+(@OGUID+1256, 180472, 571, 1, 1, 5198.6, -1318.504, 247.8461, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66)
+(@OGUID+1257, 180472, 571, 1, 1, 3842.744, -4550, 214.0861, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+1258, 180472, 571, 1, 1, 3877.871, -4502.53, 218.5026, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+1259, 180472, 571, 1, 1, 3843.904, -4545.311, 213.8107, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+1260, 180472, 571, 1, 1, 3839.872, -4542.153, 213.6485, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+1261, 180472, 571, 1, 1, 3872.773, -4503.769, 218.4031, 1.239183, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+1262, 180472, 571, 1, 1, 3869.185, -4499.854, 218.2175, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211)
+(@OGUID+1263, 180472, 571, 1, 1, 3870.929, -4494.531, 218.1595, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211)
+(@OGUID+1264, 180472, 571, 1, 1, 3879.285, -4497.91, 218.7872, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211)
+(@OGUID+1265, 180472, 571, 1, 1, 3876.223, -4493.979, 218.6851, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211)
+(@OGUID+1266, 180472, 571, 1, 1, 2671.557, -4386.672, 291.2738, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4065)
+(@OGUID+1267, 180472, 571, 1, 1, 2676.202, -4381.061, 290.9279, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4065)
+(@OGUID+1268, 180472, 571, 1, 1, 422.7614, -4514.731, 254.5068, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991)
+(@OGUID+1269, 180472, 571, 1, 1, 422.1116, -4519.995, 254.5345, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991)
+(@OGUID+1270, 180472, 571, 1, 1, 416.6321, -4519.402, 254.5415, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991)
+(@OGUID+1271, 180472, 571, 1, 1, 417.3981, -4513.884, 254.597, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991)
+(@OGUID+1272, 180472, 571, 1, 1, 723.5851, -2929.853, 11.01728, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3987)
+(@OGUID+1273, 180472, 571, 1, 1, 695.5886, -2934.49, 3.196574, 0, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3987)
+(@OGUID+1274, 180472, 571, 1, 1, 811.0573, -2915.457, 17.58987, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3987)
+(@OGUID+1275, 180472, 571, 1, 1, 1421.413, -3278.163, 182.3756, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998)
+(@OGUID+1276, 180472, 571, 1, 1, 1423.51, -3272.448, 182.0631, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998)
+(@OGUID+1277, 180472, 571, 1, 1, 1422.446, -3281.979, 181.9594, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998)
+(@OGUID+1278, 180472, 571, 1, 1, 1426.693, -3282.785, 182.3478, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998)
+(@OGUID+1279, 180472, 571, 1, 1, 1431.63, -3279.372, 182.0839, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998)
+(@OGUID+1280, 180472, 571, 1, 1, 639.705, -5012.253, 8.629839, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981)
+(@OGUID+1281, 180472, 571, 1, 1, 592.1059, -4952.096, 34.07586, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981)
+(@OGUID+1282, 180472, 571, 1, 1, 610.4792, -4920.491, 22.26099, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981)
+(@OGUID+1283, 180472, 571, 1, 1, 586.1684, -4953.842, 33.8328, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981)
+(@OGUID+1284, 180472, 571, 1, 1, 596.9149, -5010.774, 7.315163, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981)
+(@OGUID+1285, 180472, 571, 1, 1, 580.2164, -4941.878, 23.65312, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981)
+(@OGUID+1286, 180472, 571, 1, 1, 548.9089, -5022.439, 15.06125, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981)
+(@OGUID+1287, 180472, 571, 1, 1, 2472.567, -5063.961, 290.0428, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4003)
+(@OGUID+1288, 180472, 571, 1, 1, 2472.634, -5068.495, 290.1004, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4003)
+(@OGUID+1289, 180472, 571, 1, 1, 2546.96, -1842.127, 15.45883, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+1290, 180472, 571, 1, 1, 2492.571, -1926.668, 18.88001, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+1291, 180472, 571, 1, 1, 2492.924, -1957.088, 19.6185, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+1292, 180472, 571, 1, 1, 2497.964, -1933.934, 18.74674, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+1293, 180472, 571, 1, 1, 2548.99, -1836.533, 16.33319, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+1294, 180472, 571, 1, 1, 2470.893, -1923.861, 19.63781, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+1295, 180472, 571, 1, 1, 2492.745, -1840.021, 15.76282, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+1296, 180472, 571, 1, 1, 2558.018, -1829.936, 16.32347, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+1297, 180472, 571, 1, 1, 2563.788, -1830.118, 15.46013, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242)
+(@OGUID+1298, 180472, 571, 1, 1, 3654.827, -701.1371, 229.9562, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177)
+(@OGUID+1299, 180472, 571, 1, 1, 3660.257, -706.6854, 219.9831, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177)
+(@OGUID+1300, 180472, 571, 1, 1, 3650.975, -716.6632, 220.7892, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177)
+(@OGUID+1301, 180472, 571, 1, 1, 3624.304, -716.2471, 218.5354, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177)
+(@OGUID+1302, 180472, 571, 1, 1, 3472.093, 1983.797, 70.11913, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4158)
+(@OGUID+1303, 180472, 571, 1, 1, 3475.918, 2008.681, 70.16867, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4158)
+(@OGUID+1304, 180472, 571, 1, 1, 3842.197, 1512.92, 103.3451, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4165)
+(@OGUID+1305, 180472, 571, 1, 1, 7777.079, -2831.855, 1230.241, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+1306, 180472, 571, 1, 1, 7776.125, -2826.765, 1230.253, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0)
+(@OGUID+1307, 180472, 571, 1, 1, 7799.851, -2952.78, 1268.356, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4441)
+(@OGUID+1308, 180472, 571, 1, 1, 7809.275, -2957.787, 1268.587, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4441)
+(@OGUID+1309, 180472, 571, 1, 1, 6133.882, -1074.452, 408.0246, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4419)
+(@OGUID+1310, 180472, 571, 1, 1, 6122.911, -1073.775, 408.7633, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4419)
+(@OGUID+1311, 180472, 571, 1, 1, 6111.259, -1074.321, 408.5562, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4419)
+(@OGUID+1312, 180472, 571, 1, 1, 6676.293, -199.2238, 957.2843, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4428)
+(@OGUID+1313, 180472, 571, 1, 1, 5550.766, 5732.24, -72.42144, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285)
+(@OGUID+1314, 180472, 571, 1, 1, 5543.742, 5736.505, -72.40427, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285)
+(@OGUID+1315, 180472, 571, 1, 1, 5545.069, 5730.92, -72.33108, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285)
+(@OGUID+1316, 180472, 571, 1, 1, 5549.416, 5737.876, -72.36977, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285)
+(@OGUID+1317, 180472, 571, 1, 1, 5563.28, 5767.702, -68.84998, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285)
+(@OGUID+1318, 180472, 571, 1, 1, 5570.772, 5774.083, -68.8186, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285)
+(@OGUID+1319, 180472, 571, 1, 1, 5577.149, 5766.814, -68.80267, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285)
+(@OGUID+1320, 180472, 571, 1, 1, 5569.961, 5760.628, -68.76757, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285)
+(@OGUID+1321, 180472, 571, 1, 1, 5482.561, 4728.407, -190.2393, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4290)
+(@OGUID+1322, 180472, 571, 1, 1, 4496.243, 5710.914, 87.39838, 4.118979, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4123)
+(@OGUID+1323, 180472, 571, 1, 1, 4504.742, 5718.78, 88.16618, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4122)
+(@OGUID+1324, 180472, 571, 1, 1, 4510.791, 5692.819, 87.46987, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4122)
+(@OGUID+1325, 180472, 571, 1, 1, 4514.077, 5725.089, 87.45109, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4122)
+(@OGUID+1326, 180472, 571, 1, 1, 4528.651, 5707.221, 87.4934, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4122)
+(@OGUID+1327, 180472, 571, 1, 1, 4166.699, 5280.941, 32.17652, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4108)
+(@OGUID+1328, 180472, 571, 1, 1, 2816.226, 6166.392, 93.11073, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4129)
+(@OGUID+1329, 180472, 571, 1, 1, 2271.969, 5196.342, 17.54031, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4032)
+(@OGUID+1330, 180472, 571, 1, 1, 2283.616, 5204.792, 18.22377, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4032)
+(@OGUID+1331, 180472, 571, 1, 1, 2275.164, 5189.711, 27.38649, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4032)
+(@OGUID+1332, 180472, 571, 1, 1, 3463.354, 4178.378, 23.5975, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4043)
+(@OGUID+1333, 180472, 571, 1, 1, 3467.106, 4178.543, 23.5734, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4043)
+(@OGUID+1334, 180425, 571, 1, 1, 5220.801, -1312.929, 242.096, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+1335, 180425, 571, 1, 1, 5219.449, -1310.885, 242.0745, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+1336, 180425, 571, 1, 1, 5231.815, -1317.981, 242.3635, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+1337, 180425, 571, 1, 1, 5231.988, -1321.641, 242.3571, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+1338, 180425, 571, 1, 1, 5233.578, -1319.166, 242.3319, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+1339, 180425, 571, 1, 1, 5220.486, -1314.131, 242.052, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+1340, 180425, 571, 1, 1, 5218.222, -1315.866, 241.8938, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+1341, 180425, 571, 1, 1, 5220.872, -1331.886, 242.2099, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+1342, 180425, 571, 1, 1, 5222.452, -1332.75, 242.4185, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+1343, 180425, 571, 1, 1, 5213.813, -1299.402, 242.4057, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+1344, 180425, 571, 1, 1, 5221.667, -1334.106, 242.3032, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+1345, 180425, 571, 1, 1, 5219.712, -1332.302, 242.2887, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+1346, 180425, 571, 1, 1, 5214.818, -1299.522, 242.3706, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66)
+(@OGUID+1347, 180425, 571, 1, 1, 5763.354, -3564.075, 387.949, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4323)
+(@OGUID+1348, 180425, 571, 1, 1, 5765.062, -3566.035, 388.1909, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4323)
+(@OGUID+1349, 180425, 571, 1, 1, 5766.175, -3563.893, 387.8907, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4323)
+(@OGUID+1350, 180425, 571, 1, 1, 3407.464, -2802.637, 212.434, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0)
+(@OGUID+1351, 180425, 571, 1, 1, 3412.858, -2802.222, 212.7033, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0)
+(@OGUID+1352, 180425, 571, 1, 1, 3408.691, -2804.216, 212.4176, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0)
+(@OGUID+1353, 180425, 571, 1, 1, 3400.027, -2790.777, 212.3845, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0)
+(@OGUID+1354, 180425, 571, 1, 1, 3397.131, -2788.776, 212.3823, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0)
+(@OGUID+1355, 180425, 571, 1, 1, 3398.373, -2790.181, 212.3858, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0)
+(@OGUID+1356, 180425, 571, 1, 1, 1904.425, -6141.741, 19.07745, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4000)
+(@OGUID+1357, 180425, 571, 1, 1, 605.681, -4923.877, 19.09374, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981)
+(@OGUID+1358, 180425, 571, 1, 1, 606.3546, -4926.564, 19.09381, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981)
+(@OGUID+1359, 180425, 571, 1, 1, 587.7562, -4951.589, 27.65986, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981)
+(@OGUID+1360, 180425, 571, 1, 1, 582.8324, -4936.509, 31.0752, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981)
+(@OGUID+1361, 180425, 571, 1, 1, 581.9504, -4926.806, 19.88217, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981)
+(@OGUID+1362, 180425, 571, 1, 1, 5564.997, 5765.261, -74.12132, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285)
+(@OGUID+1363, 180425, 571, 1, 1, 5587.477, 5747.581, -71.46241, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285)
+(@OGUID+1364, 180425, 571, 1, 1, 5587.182, 5750.653, -71.4938, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285)
+(@OGUID+1365, 180425, 571, 1, 1, 5589.738, 5741.145, -69.95851, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285)
+(@OGUID+1366, 180426, 571, 1, 1, 5759.534, -3544.033, 396.188, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1367, 180426, 571, 1, 1, 5761.476, -3543.627, 394.9244, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1368, 180426, 571, 1, 1, 5760.164, -3544.849, 397.1731, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1369, 180426, 571, 1, 1, 5759.306, -3545.708, 394.7601, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1370, 180426, 571, 1, 1, 5761.338, -3545.427, 398.2059, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1371, 180426, 571, 1, 1, 3856.363, -4541.962, 219.7176, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1372, 180426, 571, 1, 1, 3854.806, -4539.307, 220.7594, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1373, 180426, 571, 1, 1, 3856.938, -4540.484, 224.4462, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1374, 180426, 571, 1, 1, 3854.925, -4535.948, 222.5168, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1375, 180426, 571, 1, 1, 3857.097, -4538.585, 223.1828, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1376, 180426, 571, 1, 1, 4590.376, -4234.787, 193.9518, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4159)
+(@OGUID+1377, 180426, 571, 1, 1, 4590.996, -4232.708, 196.9146, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4159)
+(@OGUID+1378, 180426, 571, 1, 1, 4588.499, -4235.377, 199.5923, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4159)
+(@OGUID+1379, 180426, 571, 1, 1, 3413.123, -2821.453, 213.0589, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1380, 180426, 571, 1, 1, 3408.973, -2821.946, 212.8639, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1381, 180426, 571, 1, 1, 3406.235, -2823.066, 211.4089, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1382, 180426, 571, 1, 1, 3407.286, -2820.172, 209.3393, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1383, 180426, 571, 1, 1, 3407.906, -2825.792, 214.426, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1384, 180426, 571, 1, 1, 3444.409, -2768.932, 208.7122, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1385, 180426, 571, 1, 1, 3442.279, -2768.483, 208.9515, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1386, 180426, 571, 1, 1, 3446.616, -2769.13, 209.847, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1387, 180426, 571, 1, 1, 3442.672, -2767.101, 211.0916, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4204)
+(@OGUID+1388, 180426, 571, 1, 1, 3441.674, -2765.563, 210.9066, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4204)
+(@OGUID+1389, 180426, 571, 1, 1, 3255.571, -2257.918, 124.4686, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4248)
+(@OGUID+1390, 180426, 571, 1, 1, 3261.756, -2252.54, 130.7128, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+1391, 180426, 571, 1, 1, 3255.756, -2251.26, 124.3831, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+1392, 180426, 571, 1, 1, 3245.001, -2244.356, 130.5014, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+1393, 180426, 571, 1, 1, 3245.857, -2254.095, 131.8804, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+1394, 180426, 571, 1, 1, 3249.491, -2250.945, 125.1241, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+1395, 180426, 571, 1, 1, 3242.157, -2246.462, 133.1835, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+1396, 180426, 571, 1, 1, 3251.072, -2245.957, 127.2621, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+1397, 180426, 571, 1, 1, 3253.139, -2253.7, 124.5425, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+1398, 180426, 571, 1, 1, 3258.291, -2247.109, 125.9945, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206)
+(@OGUID+1399, 180426, 571, 1, 1, 2665.021, -4365.307, 293.8361, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065)
+(@OGUID+1400, 180426, 571, 1, 1, 2659.459, -4361.625, 304.2402, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065)
+(@OGUID+1401, 180426, 571, 1, 1, 2660.582, -4368.252, 294.3411, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065)
+(@OGUID+1402, 180426, 571, 1, 1, 2671.556, -4363.807, 296.0383, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065)
+(@OGUID+1403, 180426, 571, 1, 1, 762.1302, -2923.717, 34.17405, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+1404, 180426, 571, 1, 1, 761.934, -2924.54, 36.54957, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+1405, 180426, 571, 1, 1, 767.8195, -2920.502, 33.86417, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+1406, 180426, 571, 1, 1, 759.9549, -2911.951, 42.32548, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+1407, 180426, 571, 1, 1, 766.9323, -2913.224, 34.78922, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+1408, 180426, 571, 1, 1, 753.5833, -2915.382, 46.25695, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+1409, 180426, 571, 1, 1, 769.243, -2910.061, 45.63573, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+1410, 180426, 571, 1, 1, 755.2222, -2907.67, 46.01165, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987)
+(@OGUID+1411, 180426, 571, 1, 1, 1445.891, -3264.745, 200.1135, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998)
+(@OGUID+1412, 180426, 571, 1, 1, 1426.741, -3276.997, 203.4877, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998)
+(@OGUID+1413, 180426, 571, 1, 1, 1437.927, -3264.418, 201.1698, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998)
+(@OGUID+1414, 180426, 571, 1, 1, 1453.434, -3267.578, 204.6001, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998)
+(@OGUID+1415, 180426, 571, 1, 1, 1453.021, -3271.075, 202.1549, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998)
+(@OGUID+1416, 180426, 571, 1, 1, 585.0469, -4935.894, 57.77173, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981)
+(@OGUID+1417, 180426, 571, 1, 1, 584.2552, -4927.658, 53.76381, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981)
+(@OGUID+1418, 180426, 571, 1, 1, 586.4132, -4924.658, 54.59381, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981)
+(@OGUID+1419, 180426, 571, 1, 1, 579.7292, -4928.83, 52.11523, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981)
+(@OGUID+1420, 180426, 571, 1, 1, 582.1268, -4925.632, 54.62183, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981)
+(@OGUID+1421, 180426, 571, 1, 1, 2474.248, -5056.83, 313.3344, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4003)
+(@OGUID+1422, 180426, 571, 1, 1, 2485.361, -5057.889, 309.7409, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4003)
+(@OGUID+1423, 180426, 571, 1, 1, 2484.832, -5065.577, 312.5736, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4003)
+(@OGUID+1424, 180426, 571, 1, 1, 2496.339, -5058.946, 314.3534, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4003)
+(@OGUID+1425, 180426, 571, 1, 1, 2494.715, -5066.793, 317.6408, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4003)
+(@OGUID+1426, 180426, 571, 1, 1, 3677.996, -706.5052, 228.3673, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4177)
+(@OGUID+1427, 180426, 571, 1, 1, 3677.367, -707.6371, 229.6971, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4177)
+(@OGUID+1428, 180426, 571, 1, 1, 3678.253, -708.9809, 226.644, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4177)
+(@OGUID+1429, 180426, 571, 1, 1, 3676.219, -710.4948, 225.2403, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4177)
+(@OGUID+1430, 180426, 571, 1, 1, 3676.188, -708.6979, 224.8116, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4177)
+(@OGUID+1431, 180426, 571, 1, 1, 2785.015, 901.6146, 48.99309, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4152)
+(@OGUID+1432, 180426, 571, 1, 1, 2783.98, 899.7049, 45.72382, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4152)
+(@OGUID+1433, 180426, 571, 1, 1, 2782.839, 900.9566, 42.67208, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4152)
+(@OGUID+1434, 180426, 571, 1, 1, 2784.394, 900.7917, 45.83669, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4152)
+(@OGUID+1435, 180426, 571, 1, 1, 2785.267, 900.8837, 44.81691, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4152)
+(@OGUID+1436, 180426, 571, 1, 1, 2791.718, 899.5538, 46.09661, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4152)
+(@OGUID+1437, 180426, 571, 1, 1, 3476.73, 2003.599, 73.99326, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4158)
+(@OGUID+1438, 180426, 571, 1, 1, 3478.633, 2003.365, 74.23189, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4158)
+(@OGUID+1439, 180426, 571, 1, 1, 3477.792, 2004.891, 73.60688, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4158)
+(@OGUID+1440, 180426, 571, 1, 1, 3832.804, 1582.106, 131.3168, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4165)
+(@OGUID+1441, 180426, 571, 1, 1, 3834.938, 1583.884, 120.4484, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4165)
+(@OGUID+1442, 180426, 571, 1, 1, 3833.898, 1575.861, 122.9623, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4165)
+(@OGUID+1443, 180426, 571, 1, 1, 3832.198, 1579.66, 132.7393, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4165)
+(@OGUID+1444, 180426, 571, 1, 1, 3832.526, 1581.196, 115.3859, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4165)
+(@OGUID+1445, 180426, 571, 1, 1, 3828.906, 1584.929, 118.9345, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4165)
+(@OGUID+1446, 180426, 571, 1, 1, 8451.43, -327.9097, 914.515, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4436)
+(@OGUID+1447, 180426, 571, 1, 1, 8455.598, -326.3663, 917.7674, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4436)
+(@OGUID+1448, 180426, 571, 1, 1, 8452.833, -325.8889, 914.8189, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4436)
+(@OGUID+1449, 180426, 571, 1, 1, 8453.292, -324.0052, 920.886, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4436)
+(@OGUID+1450, 180426, 571, 1, 1, 8455.642, -323.2222, 920.7881, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4436)
+(@OGUID+1451, 180426, 571, 1, 1, 7844.746, -767.5608, 1191.334, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1452, 180426, 571, 1, 1, 7842.545, -767.6215, 1194.276, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1453, 180426, 571, 1, 1, 7852.141, -767.2952, 1195.834, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1454, 180426, 571, 1, 1, 7848.913, -766.7743, 1195.129, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1455, 180426, 571, 1, 1, 7846.739, -767.25, 1197.022, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1456, 180426, 571, 1, 1, 7784.639, -2821.964, 1236.108, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1457, 180426, 571, 1, 1, 7787.075, -2819.984, 1232.689, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1458, 180426, 571, 1, 1, 7785.59, -2818.872, 1223.526, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1459, 180426, 571, 1, 1, 7786.157, -2818.262, 1232.046, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1460, 180426, 571, 1, 1, 7786.893, -2823.276, 1229.596, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0)
+(@OGUID+1461, 180426, 571, 1, 1, 7809.587, -2948.196, 1286.938, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4441)
+(@OGUID+1462, 180426, 571, 1, 1, 7808.482, -2948.068, 1278.769, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4441)
+(@OGUID+1463, 180426, 571, 1, 1, 7811.129, -2948.326, 1271.424, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4441)
+(@OGUID+1464, 180426, 571, 1, 1, 7809.795, -2948.993, 1281.115, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4441)
+(@OGUID+1465, 180426, 571, 1, 1, 7809.976, -2947.82, 1273.044, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4441)
+(@OGUID+1466, 180426, 571, 1, 1, 6124.135, -1068.075, 411.8809, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4419)
+(@OGUID+1467, 180426, 571, 1, 1, 6122.108, -1068.535, 420.491, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4419)
+(@OGUID+1468, 180426, 571, 1, 1, 6123.244, -1067.774, 409.9026, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4419)
+(@OGUID+1469, 180426, 571, 1, 1, 6122.385, -1067.681, 413.6337, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4419)
+(@OGUID+1470, 180426, 571, 1, 1, 6122.577, -1068.896, 413.7191, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4419)
+(@OGUID+1471, 180426, 571, 1, 1, 6669.006, -214.7808, 958.1622, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4428)
+(@OGUID+1472, 180426, 571, 1, 1, 6664.553, -212.3703, 959.6836, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4428)
+(@OGUID+1473, 180426, 571, 1, 1, 6666.44, -213.5402, 956.314, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4428)
+(@OGUID+1474, 180426, 571, 1, 1, 6664.914, -213.9151, 950.6545, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4428)
+(@OGUID+1475, 180426, 571, 1, 1, 6666.836, -214.4378, 958.3149, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4428)
+(@OGUID+1476, 180426, 571, 1, 1, 5567.995, 5752.299, -62.10584, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4285)
+(@OGUID+1477, 180426, 571, 1, 1, 5568.181, 5751.221, -65.01084, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4285)
+(@OGUID+1478, 180426, 571, 1, 1, 5568.765, 5752.361, -63.27361, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4285)
+(@OGUID+1479, 180426, 571, 1, 1, 5568.257, 5751.483, -56.20333, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4285)
+(@OGUID+1480, 180426, 571, 1, 1, 5567.479, 5751.587, -63.41621, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4285)
+(@OGUID+1481, 180426, 571, 1, 1, 5568.979, 5751.631, -64.44835, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4285)
+(@OGUID+1482, 180426, 571, 1, 1, 5568.839, 5751.018, -65.4025, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4285)
+(@OGUID+1483, 180426, 571, 1, 1, 4499.143, 5724.713, 94.13822, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4122)
+(@OGUID+1484, 180426, 571, 1, 1, 4498.088, 5725.452, 96.62789, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4122)
+(@OGUID+1485, 180426, 571, 1, 1, 4500.556, 5723.295, 96.2418, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4122)
+(@OGUID+1486, 180426, 571, 1, 1, 4500.435, 5726.292, 99.393, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4122)
+(@OGUID+1487, 180426, 571, 1, 1, 4499.346, 5726.276, 93.53715, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4122)
+(@OGUID+1488, 180426, 571, 1, 1, 4157.167, 5280.416, 44.40583, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4108)
+(@OGUID+1489, 180426, 571, 1, 1, 4156.833, 5281.772, 41.02469, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4108)
+(@OGUID+1490, 180426, 571, 1, 1, 4158.027, 5280.627, 37.15991, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4108)
+(@OGUID+1491, 180426, 571, 1, 1, 4154.264, 5279.829, 46.06804, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4108)
+(@OGUID+1492, 180426, 571, 1, 1, 4155.604, 5278.076, 34.83815, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4108)
+(@OGUID+1493, 180426, 571, 1, 1, 2257.031, 5204.031, 24.98001, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4032)
+(@OGUID+1494, 180426, 571, 1, 1, 2254.734, 5204.108, 23.51893, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4032)
+(@OGUID+1495, 180426, 571, 1, 1, 2257.891, 5202.354, 23.84128, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4032)
+(@OGUID+1496, 180426, 571, 1, 1, 2255.429, 5202.67, 27.84299, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4032)
+(@OGUID+1497, 180426, 571, 1, 1, 2254.955, 5201.296, 28.10752, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4032)
+(@OGUID+1498, 180426, 571, 1, 1, 3005.91, 4082.433, 33.96024, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4113)
+(@OGUID+1499, 180426, 571, 1, 1, 3008.585, 4082.515, 34.65242, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4113)
+(@OGUID+1500, 180426, 571, 1, 1, 3010.312, 4081.898, 33.98342, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4113)
+(@OGUID+1501, 180426, 571, 1, 1, 3007.68, 4082.023, 37.0425, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4113)
+(@OGUID+1502, 180426, 571, 1, 1, 3008.446, 4080.726, 38.37628, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4113)
+(@OGUID+1503, 180427, 571, 1, 1, 5761.307, -3544.524, 395.4309, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1504, 180427, 571, 1, 1, 5760.497, -3546.056, 402.0221, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1505, 180427, 571, 1, 1, 5759.438, -3544.823, 396.8367, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1506, 180427, 571, 1, 1, 5760.398, -3543.224, 397.3958, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1507, 180427, 571, 1, 1, 5760.684, -3547.167, 398.6145, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1508, 180427, 571, 1, 1, 3853.183, -4534.543, 222.1418, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1509, 180427, 571, 1, 1, 3852.957, -4539.858, 219.1484, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1510, 180427, 571, 1, 1, 3856.241, -4539.436, 221.1546, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1511, 180427, 571, 1, 1, 3854.542, -4540.624, 227.1623, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1512, 180427, 571, 1, 1, 3856.855, -4536.955, 221.3848, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1513, 180427, 571, 1, 1, 4589.936, -4232.887, 187.0824, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4159)
+(@OGUID+1514, 180427, 571, 1, 1, 4590.229, -4234.215, 186.7581, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4159)
+(@OGUID+1515, 180427, 571, 1, 1, 4590.728, -4233.71, 184.4032, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4159)
+(@OGUID+1516, 180427, 571, 1, 1, 3408.324, -2823.502, 209.3464, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1517, 180427, 571, 1, 1, 3406.425, -2821.385, 209.7437, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1518, 180427, 571, 1, 1, 3410.176, -2822.778, 209.1109, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1519, 180427, 571, 1, 1, 3409.967, -2820.047, 210.1583, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1520, 180427, 571, 1, 1, 3407.021, -2824.786, 209.5089, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1521, 180427, 571, 1, 1, 3447.131, -2770.391, 210.325, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1522, 180427, 571, 1, 1, 3444.766, -2768.226, 210.0436, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1523, 180427, 571, 1, 1, 3444.436, -2767.122, 211.3138, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4204)
+(@OGUID+1524, 180427, 571, 1, 1, 3441.46, -2766.443, 210.7611, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4204)
+(@OGUID+1525, 180427, 571, 1, 1, 3446.277, -2767.188, 208.8508, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4204)
+(@OGUID+1526, 180427, 571, 1, 1, 3251.26, -2253.675, 124.9079, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+1527, 180427, 571, 1, 1, 3251.778, -2250.464, 129.6705, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+1528, 180427, 571, 1, 1, 3247.308, -2252, 130.7534, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+1529, 180427, 571, 1, 1, 3254.531, -2247.668, 129.1577, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+1530, 180427, 571, 1, 1, 3252.336, -2248.873, 122.8677, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+1531, 180427, 571, 1, 1, 3255.591, -2250.547, 129.6846, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+1532, 180427, 571, 1, 1, 3241.862, -2241.349, 122.2494, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+1533, 180427, 571, 1, 1, 3248.178, -2245.37, 125.104, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+1534, 180427, 571, 1, 1, 3247.814, -2247.866, 124.5073, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+1535, 180427, 571, 1, 1, 3245.019, -2248.802, 122.5996, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206)
+(@OGUID+1536, 180427, 571, 1, 1, 2663.781, -4367.163, 302.1978, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4065)
+(@OGUID+1537, 180427, 571, 1, 1, 2667.21, -4368.415, 300.2386, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4065)
+(@OGUID+1538, 180427, 571, 1, 1, 2660.796, -4362.103, 307.4751, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4065)
+(@OGUID+1539, 180427, 571, 1, 1, 768.6163, -2922.156, 38.30094, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987)
+(@OGUID+1540, 180427, 571, 1, 1, 762.2813, -2920.307, 44.85577, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987)
+(@OGUID+1541, 180427, 571, 1, 1, 767.7639, -2914.931, 50.20907, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987)
+(@OGUID+1542, 180427, 571, 1, 1, 771.118, -2914.354, 33.8317, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987)
+(@OGUID+1543, 180427, 571, 1, 1, 764.632, -2912.734, 28.99734, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987)
+(@OGUID+1544, 180427, 571, 1, 1, 764.7379, -2907.014, 42.12639, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987)
+(@OGUID+1545, 180427, 571, 1, 1, 1448.717, -3267.089, 201.6755, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998)
+(@OGUID+1546, 180427, 571, 1, 1, 1450.106, -3254.806, 202.5467, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998)
+(@OGUID+1547, 180427, 571, 1, 1, 1432.74, -3253.945, 209.4203, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998)
+(@OGUID+1548, 180427, 571, 1, 1, 1460.863, -3277.345, 207.5119, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998)
+(@OGUID+1549, 180427, 571, 1, 1, 1461.863, -3264.878, 201.965, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998)
+(@OGUID+1550, 180427, 571, 1, 1, 586.9097, -4944.667, 47.7813, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981)
+(@OGUID+1551, 180427, 571, 1, 1, 587.7552, -4923.743, 55.51563, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981)
+(@OGUID+1552, 180427, 571, 1, 1, 584.0382, -4927.713, 53.33385, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981)
+(@OGUID+1553, 180427, 571, 1, 1, 586.8472, -4927.104, 56.76656, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981)
+(@OGUID+1554, 180427, 571, 1, 1, 576.6077, -4929.509, 55.73938, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981)
+(@OGUID+1555, 180427, 571, 1, 1, 2473.661, -5056.833, 313.4054, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4003)
+(@OGUID+1556, 180427, 571, 1, 1, 2484.688, -5057.96, 311.5289, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4003)
+(@OGUID+1557, 180427, 571, 1, 1, 2496.554, -5058.851, 314.3859, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4003)
+(@OGUID+1558, 180427, 571, 1, 1, 2485.07, -5065.702, 312.3187, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4003)
+(@OGUID+1559, 180427, 571, 1, 1, 2494.877, -5066.533, 313.6038, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4003)
+(@OGUID+1560, 180427, 571, 1, 1, 3678.568, -707.9114, 225.9042, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4177)
+(@OGUID+1561, 180427, 571, 1, 1, 3677.82, -709.7309, 223.8333, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4177)
+(@OGUID+1562, 180427, 571, 1, 1, 3677.2, -708.3906, 226.7975, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4177)
+(@OGUID+1563, 180427, 571, 1, 1, 3676.558, -707.3646, 227.4937, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4177)
+(@OGUID+1564, 180427, 571, 1, 1, 3676.709, -706.5208, 226.6307, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4177)
+(@OGUID+1565, 180427, 571, 1, 1, 2788.414, 901.0035, 36.56704, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4152)
+(@OGUID+1566, 180427, 571, 1, 1, 2785.122, 899.9236, 47.7719, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4152)
+(@OGUID+1567, 180427, 571, 1, 1, 2777.589, 900.8507, 38.11501, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4152)
+(@OGUID+1568, 180427, 571, 1, 1, 2781.267, 897.5538, 39.2057, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4152)
+(@OGUID+1569, 180427, 571, 1, 1, 3478.735, 2004.005, 74.2953, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4158)
+(@OGUID+1570, 180427, 571, 1, 1, 3477.231, 2002.613, 75.02769, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4158)
+(@OGUID+1571, 180427, 571, 1, 1, 3477.298, 2003.34, 75.31145, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4158)
+(@OGUID+1572, 180427, 571, 1, 1, 3827.1, 1578.188, 128.2818, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4165)
+(@OGUID+1573, 180427, 571, 1, 1, 3830.623, 1585.576, 119.5804, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4165)
+(@OGUID+1574, 180427, 571, 1, 1, 3828.786, 1575.78, 123.5387, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4165)
+(@OGUID+1575, 180427, 571, 1, 1, 3835.45, 1577.592, 123.1637, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4165)
+(@OGUID+1576, 180427, 571, 1, 1, 3826.248, 1582.507, 126.0943, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4165)
+(@OGUID+1577, 180427, 571, 1, 1, 3835.907, 1582.106, 112.2748, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4165)
+(@OGUID+1578, 180427, 571, 1, 1, 8456.487, -325.2882, 919.9067, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4436)
+(@OGUID+1579, 180427, 571, 1, 1, 8455.944, -329.2031, 921.132, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4436)
+(@OGUID+1580, 180427, 571, 1, 1, 8453.988, -324.809, 919.7067, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4436)
+(@OGUID+1581, 180427, 571, 1, 1, 8454.191, -327.691, 920.1603, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4436)
+(@OGUID+1582, 180427, 571, 1, 1, 8456.37, -323.9236, 922.8885, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4436)
+(@OGUID+1583, 180427, 571, 1, 1, 7843.921, -768.7327, 1192.044, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1584, 180427, 571, 1, 1, 7850.358, -768.4479, 1195.303, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1585, 180427, 571, 1, 1, 7845.897, -769.2344, 1196.449, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1586, 180427, 571, 1, 1, 7849.522, -769.5695, 1199.962, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1587, 180427, 571, 1, 1, 7848.237, -768.1614, 1194.201, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1588, 180427, 571, 1, 1, 7784.186, -2819.071, 1242.727, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1589, 180427, 571, 1, 1, 7785.482, -2818.214, 1235.832, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1590, 180427, 571, 1, 1, 7784.766, -2818.804, 1243.944, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1591, 180427, 571, 1, 1, 7786.441, -2820.347, 1243.845, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0)
+(@OGUID+1592, 180427, 571, 1, 1, 7809.966, -2947.446, 1282.999, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4441)
+(@OGUID+1593, 180427, 571, 1, 1, 7808.862, -2947.845, 1287.751, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4441)
+(@OGUID+1594, 180427, 571, 1, 1, 7810.013, -2948.613, 1278.556, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4441)
+(@OGUID+1595, 180427, 571, 1, 1, 6124.222, -1067.016, 412.4096, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4419)
+(@OGUID+1596, 180427, 571, 1, 1, 6123.186, -1068.443, 417.4877, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4419)
+(@OGUID+1597, 180427, 571, 1, 1, 6121.662, -1067.535, 412.6524, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4419)
+(@OGUID+1598, 180427, 571, 1, 1, 6122.928, -1067.632, 413.933, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4419)
+(@OGUID+1599, 180427, 571, 1, 1, 6123.296, -1066.87, 411.8166, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4419)
+(@OGUID+1600, 180427, 571, 1, 1, 6667.715, -213.3303, 956.631, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4428)
+(@OGUID+1601, 180427, 571, 1, 1, 6669.567, -213.4681, 959.522, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4428)
+(@OGUID+1602, 180427, 571, 1, 1, 6668.282, -214.2138, 957.4736, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4428)
+(@OGUID+1603, 180427, 571, 1, 1, 6666.536, -212.2774, 960.9269, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4428)
+(@OGUID+1604, 180427, 571, 1, 1, 6668.823, -212.848, 958.5125, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4428)
+(@OGUID+1605, 180427, 571, 1, 1, 5567.438, 5750.866, -63.57895, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4285)
+(@OGUID+1606, 180427, 571, 1, 1, 5566.66, 5750.427, -61.74266, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4285)
+(@OGUID+1607, 180427, 571, 1, 1, 5567.792, 5750.745, -66.3998, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4285)
+(@OGUID+1608, 180427, 571, 1, 1, 5567.268, 5752.111, -65.63297, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4285)
+(@OGUID+1609, 180427, 571, 1, 1, 5568.124, 5751.938, -64.30065, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4285)
+(@OGUID+1610, 180427, 571, 1, 1, 5566.167, 5751.143, -59.03475, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4285)
+(@OGUID+1611, 180427, 571, 1, 1, 5569.404, 5750.22, -68.71603, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4285)
+(@OGUID+1612, 180427, 571, 1, 1, 4497.501, 5724.35, 92.66317, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4122)
+(@OGUID+1613, 180427, 571, 1, 1, 4499.618, 5724.213, 92.10083, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4122)
+(@OGUID+1614, 180427, 571, 1, 1, 4498.766, 5723.341, 92.95933, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4122)
+(@OGUID+1615, 180427, 571, 1, 1, 4500.167, 5725.043, 93.06795, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4122)
+(@OGUID+1616, 180427, 571, 1, 1, 4498.657, 5724.655, 94.03511, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4122)
+(@OGUID+1617, 180427, 571, 1, 1, 4155.36, 5279.535, 41.24209, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4108)
+(@OGUID+1618, 180427, 571, 1, 1, 4155.128, 5281.559, 43.11319, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4108)
+(@OGUID+1619, 180427, 571, 1, 1, 4158.647, 5282.077, 43.25044, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4108)
+(@OGUID+1620, 180427, 571, 1, 1, 4157.104, 5278.291, 42.53542, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4108)
+(@OGUID+1621, 180427, 571, 1, 1, 4155.704, 5276.774, 34.64015, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4108)
+(@OGUID+1622, 180427, 571, 1, 1, 2254.229, 5202.443, 25.58039, 1.239183, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4032)
+(@OGUID+1623, 180427, 571, 1, 1, 2255.703, 5204.931, 32.91465, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4032)
+(@OGUID+1624, 180427, 571, 1, 1, 2253.278, 5203.004, 26.03876, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4032)
+(@OGUID+1625, 180427, 571, 1, 1, 2253.696, 5204.979, 23.99093, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4032)
+(@OGUID+1626, 180427, 571, 1, 1, 2256.316, 5206.545, 25.55317, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4032)
+(@OGUID+1627, 180427, 571, 1, 1, 3007.375, 4081.898, 36.05743, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4113)
+(@OGUID+1628, 180427, 571, 1, 1, 3009.335, 4081.919, 33.73442, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4113)
+(@OGUID+1629, 180427, 571, 1, 1, 3009.694, 4083.431, 32.96307, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4113)
+(@OGUID+1630, 180427, 571, 1, 1, 3006.938, 4083.318, 34.42048, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4113)
+(@OGUID+1631, 180427, 571, 1, 1, 3009.286, 4080.991, 33.72022, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4113)
+(@OGUID+1632, 180471, 571, 1, 1, 5204.491, -1317.474, 246.2982, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66)
+(@OGUID+1633, 180471, 571, 1, 1, 5204.556, -1311.417, 246.2742, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66)
+(@OGUID+1634, 180471, 571, 1, 1, 5197.808, -1310.934, 246.395, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66)
+(@OGUID+1635, 180471, 571, 1, 1, 5197.694, -1316.509, 246.3158, 0, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66)
+(@OGUID+1636, 180471, 571, 1, 1, 3199.965, -2298.588, 111.0376, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4248)
+(@OGUID+1637, 180471, 571, 1, 1, 1900.167, -6132.452, 23.4388, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+1638, 180471, 571, 1, 1, 1902.965, -6131.993, 23.66091, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+1639, 180471, 571, 1, 1, 1898.609, -6134.413, 23.38325, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+1640, 180471, 571, 1, 1, 1900.699, -6138.649, 23.68888, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+1641, 180471, 571, 1, 1, 1905.079, -6133.762, 23.68171, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+1642, 180471, 571, 1, 1, 1903.922, -6138.372, 23.43309, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+1643, 180471, 571, 1, 1, 1905.227, -6136.752, 23.46658, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+1644, 180471, 571, 1, 1, 1899.095, -6137.361, 23.69575, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060)
+(@OGUID+1645, 180471, 571, 1, 1, 588.3511, -4940.63, 23.00664, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981)
+(@OGUID+1646, 180471, 571, 1, 1, 587.6937, -4938.055, 22.97886, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981)
+(@OGUID+1647, 180471, 571, 1, 1, 584.658, -4926.464, 22.94742, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981)
+(@OGUID+1648, 180471, 571, 1, 1, 585.3281, -4928.837, 22.95987, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981)
+(@OGUID+1649, 180471, 571, 1, 1, 3661.782, -704.7066, 218.3424, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177)
+(@OGUID+1650, 180471, 571, 1, 1, 3661.339, -709.0174, 218.379, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177)
+(@OGUID+1651, 180471, 571, 1, 1, 3651.781, -708.625, 219.3715, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177)
+(@OGUID+1652, 180471, 571, 1, 1, 3652.332, -704.342, 219.3648, 6.0912, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177)
+(@OGUID+1653, 180471, 571, 1, 1, 3579.464, 251.9427, 52.88466, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+1654, 180471, 571, 1, 1, 3575.279, 246.6563, 52.87777, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+1655, 180471, 571, 1, 1, 3523.501, 237.7691, 52.94661, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+1656, 180471, 571, 1, 1, 3517.737, 242.4236, 52.90497, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+1657, 180471, 571, 1, 1, 3512.637, 297, 52.89811, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+1658, 180471, 571, 1, 1, 3517.312, 302.6024, 52.912, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+1659, 180471, 571, 1, 1, 3568.188, 304.9097, 52.96114, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+1660, 180471, 571, 1, 1, 3573.999, 300.1875, 52.88476, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161)
+(@OGUID+1661, 180471, 571, 1, 1, 3480.169, 1977.233, 70.1636, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4158)
+(@OGUID+1662, 180471, 571, 1, 1, 3484.095, 2013.983, 69.28771, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4158)
+(@OGUID+1663, 180471, 571, 1, 1, 3506.038, 1986.319, 68.24009, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4158)
+(@OGUID+1664, 180471, 571, 1, 1, 4508.732, 5716.75, 84.35536, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122)
+(@OGUID+1665, 180471, 571, 1, 1, 4506.331, 5715.979, 85.08492, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122)
+(@OGUID+1666, 180471, 571, 1, 1, 4506.083, 5715.355, 84.23188, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122)
+(@OGUID+1667, 180471, 571, 1, 1, 4508.761, 5717.552, 85.0927, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122)
+(@OGUID+1668, 180471, 571, 1, 1, 2869.387, 6211.827, 213.7105, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4020)
+(@OGUID+1669, 180471, 571, 1, 1, 2867.295, 6213.874, 213.6728, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4020)
+(@OGUID+1670, 180471, 571, 1, 1, 2816.863, 6165.138, 90.56039, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129)
+(@OGUID+1671, 180471, 571, 1, 1, 2814.848, 6167.205, 90.52396, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129)
+(@OGUID+1672, 180471, 571, 1, 1, 2791.958, 6145.722, 91.96442, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129)
+(@OGUID+1673, 180471, 571, 1, 1, 2793.936, 6143.066, 92.17467, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129)
+(@OGUID+1674, 180471, 571, 1, 1, 2769.591, 6124.062, 95.95924, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129)
+(@OGUID+1675, 180471, 571, 1, 1, 2770.471, 6122.91, 95.92594, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129)
+(@OGUID+1676, 180471, 571, 1, 1, 2278.516, 5192.333, 16.84088, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4032)
+(@OGUID+1677, 180471, 571, 1, 1, 2280.049, 5196.121, 16.84082, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4032)
+(@OGUID+1678, 180471, 571, 1, 1, 3003.927, 4062.122, 33.84514, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113)
+(@OGUID+1679, 180471, 571, 1, 1, 3006.915, 4061.78, 33.92781, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113)
+(@OGUID+1680, 180471, 571, 1, 1, 3006.462, 4067.487, 34.17837, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113)
+(@OGUID+1681, 180471, 571, 1, 1, 3026.681, 4045.708, 28.72306, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113)
+(@OGUID+1682, 180471, 571, 1, 1, 3005.008, 4059.406, 34.61089, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113)
+(@OGUID+1683, 180471, 571, 1, 1, 2979.829, 4053.98, 28.70936, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113)
+(@OGUID+1684, 180523, 571, 1, 1, 5471.11, -2643.376, 307.0311, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4275)
+(@OGUID+1685, 180523, 571, 1, 1, 5757.718, -3563.73, 386.8262, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4323)
+(@OGUID+1686, 180523, 571, 1, 1, 3864.262, -4536.794, 209.4336, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0)
+(@OGUID+1687, 180523, 571, 1, 1, 4604.042, -4237.24, 178.9002, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4159)
+(@OGUID+1688, 180523, 571, 1, 1, 3402.777, -2788.145, 201.5207, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0)
+(@OGUID+1689, 180523, 571, 1, 1, 3256.107, -2192.384, 117.3726, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4206)
+(@OGUID+1690, 180523, 571, 1, 1, 2678.036, -4392.695, 284.8349, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4018)
+(@OGUID+1691, 180523, 571, 1, 1, 1889.731, -6193.472, 23.6236, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4000)
+(@OGUID+1692, 180523, 571, 1, 1, 452.467, -4536.335, 244.877, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3991)
+(@OGUID+1693, 180523, 571, 1, 1, 698.1771, -2928.019, -2.640473, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3987)
+(@OGUID+1694, 180523, 571, 1, 1, 1436.052, -3258.58, 167.779, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3998)
+(@OGUID+1695, 180523, 571, 1, 1, 578.6011, -4929.339, 19.16861, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3981)
+(@OGUID+1696, 180523, 571, 1, 1, 2481.56, -5054.175, 284.8836, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4003)
+(@OGUID+1697, 180523, 571, 1, 1, 3211.594, -677.0414, 167.9602, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0)
+(@OGUID+1698, 180523, 571, 1, 1, 3657.321, -716.2959, 215.2677, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4177)
+(@OGUID+1699, 180523, 571, 1, 1, 3575.916, 257.0831, 47.28813, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4161)
+(@OGUID+1700, 180523, 571, 1, 1, 2775.545, 925.4372, 22.99003, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4152)
+(@OGUID+1701, 180523, 571, 1, 1, 3468.981, 2004.253, 64.86234, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4158)
+(@OGUID+1702, 180523, 571, 1, 1, 3847.863, 1505.001, 92.51198, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4165)
+(@OGUID+1703, 180523, 571, 1, 1, 8437.674, -355.5473, 906.4015, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4484)
+(@OGUID+1704, 180523, 571, 1, 1, 7839.014, -805.3143, 1183.294, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0)
+(@OGUID+1705, 180523, 571, 1, 1, 7798.68, -2973.132, 1259.494, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4441)
+(@OGUID+1706, 180523, 571, 1, 1, 6128.351, -1083.17, 402.6452, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4419)
+(@OGUID+1707, 180523, 571, 1, 1, 6675.385, -195.2562, 951.1111, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4428)
+(@OGUID+1708, 180523, 571, 1, 1, 5565.757, 5759.502, -75.22591, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4285)
+(@OGUID+1709, 180523, 571, 1, 1, 4506.858, 5710.637, 81.51824, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4122)
+(@OGUID+1710, 180523, 571, 1, 1, 4175.616, 5283.527, 26.69308, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4108)
+(@OGUID+1711, 180523, 571, 1, 1, 2804.783, 6168.423, 85.37867, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4129)
+(@OGUID+1712, 180523, 571, 1, 1, 2299.602, 5193.956, 11.70278, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4032)
+(@OGUID+1713, 180523, 571, 1, 1, 3007.872, 4052.658, 26.60726, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4113)
+(@OGUID+1714, 180523, 571, 1, 1, 3468.352, 4151.25, 17.5926, 4.118979, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4043)
+(@OGUID+1715, 180431, 571, 1, 1, 5448.499, -2687.353, 317.0294, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+1716, 180431, 571, 1, 1, 3885.052, -4516.659, 244.4485, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+1717, 180431, 571, 1, 1, 3326.384, -2324.99, 148.8137, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+1718, 180431, 571, 1, 1, 3249.887, -2332.044, 113.358, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+1719, 180431, 571, 1, 1, 3228.007, -2376.978, 142.2661, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+1720, 180431, 571, 1, 1, 3194.981, -2324.08, 142.3525, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+1721, 180431, 571, 1, 1, 3355.472, -2264.87, 151.9365, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0)
+(@OGUID+1722, 180431, 571, 1, 1, 2534.615, -1939.123, 6.753963, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 394)
+(@OGUID+1723, 180431, 571, 1, 1, 2505.454, -1955.444, 11.24014, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 394)
+(@OGUID+1724, 180431, 571, 1, 1, 2576.156, -1817.301, 10.01707, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 394)
+(@OGUID+1725, 180431, 571, 1, 1, 2545.243, -1802.575, 11.32091, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 4242)
+(@OGUID+1726, 180431, 571, 1, 1, 3690.41, 272.8268, 52.22741, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 4254)
+(@OGUID+1727, 180431, 571, 1, 1, 3687.912, 302.2261, 52.22742, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 4254)
+(@OGUID+1728, 180431, 571, 1, 1, 4512.567, 5708.924, 97.69891, 4.433136, 0, 0, 0, 1, 120, 255, 1); -- 180431 (Area: 4123)
+
+SET @OGUID:=81188;
+SET @Event:=12;
+DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+2471 AND `eventEntry`=@Event;
+INSERT INTO game_event_gameobject SELECT @Event, gameobject.guid FROM `gameobject` WHERE gameobject.guid BETWEEN @OGUID+0 AND @OGUID+1728;
diff --git a/sql/updates/world/2015_11_12_01_world.sql b/sql/updates/world/2015_11_12_01_world.sql
new file mode 100644
index 00000000000..c08ebda2471
--- /dev/null
+++ b/sql/updates/world/2015_11_12_01_world.sql
@@ -0,0 +1,93 @@
+-- creature (2 entries)
+SET @CGUID = 49818;
+-- gameobject (2 entries)
+SET @OGUID = 5747;
+
+-- ensure spell data for difficulties is there
+DELETE FROM `spelldifficulty_dbc` WHERE `id` IN (28134,28135,28167);
+INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`,`spellid2`,`spellid3`) VALUES
+(28134,54529,28134,0,0), -- Stalagg - Power Surge (yes, these are supposed to be backwards)
+(28135,28135,54528,0,0), -- Feugen - Static Field
+(28167,28167,54531,0,0); -- Thaddius - Chain Lightning
+
+-- magnetic pull
+DELETE FROM `spell_scripts` WHERE `id`=54517;
+DELETE FROM `spell_script_names` WHERE `spell_id`=54517;
+INSERT INTO `spell_script_names` (`spell_id`,`scriptname`) VALUES (54517,"spell_thaddius_magnetic_pull");
+
+-- thaddius
+UPDATE `creature_template` set `unit_flags`=64 WHERE `entry`=15928;
+UPDATE `creature` set `MovementType`=0 WHERE `id`=15928;
+
+-- tesla coil
+UPDATE `creature_template` set `inhabittype`=4,`unit_flags`=33554688,`unit_flags2`=2048,`ScriptName`="npc_tesla",`MovementType`=0,`flags_extra`=0 WHERE `entry`=16218;
+DELETE FROM `creature_addon` WHERE `guid` IN (select `guid` from `creature` WHERE `id` = 16218);
+DELETE FROM `creature` WHERE `id` = 16218;
+INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`movementtype`,`VerifiedBuild`) VALUES
+(@CGUID+0,16218,533,3,1,3527.807,-2952.382,319.3258,3.909538,0,0,0,0),
+(@CGUID+1,16218,533,3,1,3487.762,-2911.198,319.4061,3.909538,0,0,0,0);
+INSERT INTO `creature_addon` (`guid`,`auras`) VALUES
+(@CGUID+0,28109),
+(@CGUID+1,28097);
+
+-- tesla coil search trigger range (index 30 is 500 yards)
+UPDATE `spell_dbc` set `EffectRadiusIndex1`=30, `AttributesEx2`=0 WHERE `Id` IN (28098,28110);
+-- tesla coil search ignores LoS
+DELETE FROM `disables` WHERE `sourceType`=0 AND `entry` IN (28096,28098,28110,28111);
+INSERT INTO `disables` (`sourceType`,`entry`,`flags`,`comment`) VALUES
+(0,28098,64,"Stalagg Tesla Periodic - Ignore LoS"),
+(0,28096,64,"Stalagg Tesla Visual - Ignore LoS"),
+(0,28110,64,"Feugen Tesla Periodic - Ignore LoS"),
+(0,28111,64,"Feugen Tesla Visual - Ignore LoS");
+-- tesla coil shock visual needs implicit target
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (28096,28111,28159);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`Comment`) VALUES
+(13,1,28096,0,0,31,0,3,15929,0,0,"Stalagg Chain Visual - Target Stalagg"),
+(13,1,28111,0,0,31,0,3,15930,0,0,"Feugen Chain Visual - Target Feugen"),
+(13,1,28159,0,0,31,0,3,15928,0,0,"Thaddius Shock Visual - Target Thaddius");
+
+-- tesla coil visual
+DELETE FROM `gameobject` WHERE `id` IN (181477,181478);
+INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`VerifiedBuild`) VALUES
+(@OGUID+0,181477,533,3,1,3527.94,-2952.263,318.8983,3.141593,0,0,-1,0,0,0),
+(@OGUID+1,181478,533,3,1,3487.324,-2911.383,318.8983,3.141593,0,0,-1,0,0,0);
+
+-- polarity shift scripts
+DELETE FROM `spell_scripts` WHERE `id` IN (28059,28062,28084,28085,28089,29659,29660);
+DELETE FROM `spell_script_names` WHERE `spell_id` IN (28059,28062,28084,28085,28089,29659,29660);
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(28062,"spell_thaddius_polarity_charge"),
+(28085,"spell_thaddius_polarity_charge"),
+(28089,"spell_thaddius_polarity_shift");
+
+-- shocking! achievement
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (7604,7605);
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`) VALUES
+(7604,11,0,0,"achievement_thaddius_shocking"),
+(7604,12,0,0,""),
+(7605,11,0,0,"achievement_thaddius_shocking"),
+(7605,12,1,0,"");
+
+-- move 20% trigger rate for "killed target" texts from script to DB
+UPDATE `creature_text` set `probability`=20 WHERE `entry`=15929 AND `groupid`=1;
+UPDATE `creature_text` set `probability`=20 WHERE `entry`=15930 AND `groupid`=1;
+UPDATE `creature_text` set `probability`=20 WHERE `entry`=15928 AND `groupid`=2;
+
+-- add missing creature_text entries for thaddius, feugen, stalagg and tesla coil
+DELETE FROM `creature_text` WHERE `entry`=15928 AND `groupid`=6;
+DELETE FROM `creature_text` WHERE `entry` IN (15929,15930) AND `groupid` IN (3,4);
+DELETE FROM `creature_text` WHERE `entry`=16218;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
+(15928,6,0,"The polarity has shifted!",41,100,32324,3,"Thaddius EMOTE_POLARITY_SHIFTED"),
+(15929,3,0,"%s dies.",16,100,10453,3,"Stalagg EMOTE_FEIGN_DEATH"),
+(15930,3,0,"%s dies.",16,100,10453,3,"Feugen EMOTE_FEIGN_DEATH"),
+(15929,4,0,"%s is jolted back to life!",16,100,12155,3,"Stalagg EMOTE_FEIGN_REVIVE"),
+(15930,4,0,"%s is jolted back to life!",16,100,12155,3,"Feugen EMOTE_FEIGN_REVIVE"),
+(16218,0,0,"%s loses its link!",41,100,12156,3,"Tesla Coil EMOTE_TESLA_LINK_BREAKS"),
+(16218,1,0,"%s overloads!",41,100,12178,3,"Tesla Coil EMOTE_TESLA_OVERLOAD");
+
+
+-- trigger when entering thaddius' room
+DELETE FROM `areatrigger_scripts` WHERE `entry`=4113;
+INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES
+(4113,"at_thaddius_entrance");
diff --git a/sql/updates/world/2015_11_20_00_world.sql b/sql/updates/world/2015_11_20_00_world.sql
new file mode 100644
index 00000000000..7c5fe7ea426
--- /dev/null
+++ b/sql/updates/world/2015_11_20_00_world.sql
@@ -0,0 +1,35 @@
+--
+UPDATE `creature_addon` SET `auras`="44792" WHERE `guid`=100024;
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (24883, 24876, 24877, 24875);
+UPDATE `creature` SET `MovementType`=0, `spawndist`=0, `position_z`=329.648 WHERE `id`=24883;
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (24883);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (24883) 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
+(24883,0,0,0,1,0,70,0,0,5000,6000,10000,11,44788,0,0,0,0,0,19,24876,20,0,0,0,0,0,"Rodin Lightning Enabler - Ooc - Cast Rodin's Lightning Bolt"),
+(24883,0,1,0,1,0,70,0,0,5000,6000,10000,11,44787,0,0,0,0,0,19,24876,20,0,0,0,0,0,"Rodin Lightning Enabler - Ooc - Cast Rodin's Lightning Bolt"),
+(24883,0,2,0,1,0,70,0,0,5000,6000,10000,11,44789,0,0,0,0,0,19,24876,20,0,0,0,0,0,"Rodin Lightning Enabler - Ooc - Cast Rodin's Lightning Bolt"),
+(24883,0,3,0,1,0,70,0,0,5000,6000,10000,11,44791,0,0,0,0,0,19,24876,20,0,0,0,0,0,"Rodin Lightning Enabler - Ooc - Cast Rodin's Lightning Bolt"),
+(24883,0,4,0,1,0,70,0,0,5000,6000,10000,11,44790,0,0,0,0,0,19,24876,20,0,0,0,0,0,"Rodin Lightning Enabler - Ooc - Cast Rodin's Lightning Bolt");
+
+DELETE FROM `creature_text` WHERE `entry` IN (24876, 24875, 24877, 24874) AND `groupid`=1;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextId`) VALUES
+(24874, 1, 0, 'From sundered ground the sacrament was stolen. The Shield of Aesirites is lost. Unrest will be eternal.', 12, 0, 100, 0, 0, 0, 'Fengir the Disgraced', 23970),
+(24876, 1, 0, 'The Staff of Storm''s Fury pilfered. A curse upon this land! The storms will never cease!', 12, 0, 100, 0, 0, 0, 'Rodin the Reckless', 23971),
+(24877, 1, 0, 'The Frozen Heart of Isuldof will consume this land until it is returned. Woe unto those that hold the heart as the curse of frozen blood besets them...', 12, 0, 100, 0, 0, 0, 'Isuldof Iceheart', 23972),
+(24875, 1, 0, 'The anguish of ten-thousand years awaits any foolish enough to don the Ancient Armor of the Kvaldir. Beware the mist and fog, mortals; for with them comes your end.', 12, 0, 100, 0, 0, 0, 'Windan of the Kvaldir', 23973);
+
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry` IN (187023, 187026, 187022, 187027);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (187023, 187026, 187022, 187027) AND `source_type`=1;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (24876, 24875, 24877, 24874) 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
+(187023, 1, 0, 0, 70, 0, 100, 0, 1, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 24876, 30, 0, 0, 0, 0, 0, 'Relic - On State 1 - Set data'),
+(187026, 1, 0, 0, 70, 0, 100, 0, 1, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 24877, 30, 0, 0, 0, 0, 0, 'Relic - On State 1 - Set data'),
+(187022, 1, 0, 0, 70, 0, 100, 0, 1, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 24874, 30, 0, 0, 0, 0, 0, 'Relic - On State 1 - Set data'),
+(187027, 1, 0, 0, 70, 0, 100, 0, 1, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 24875, 30, 0, 0, 0, 0, 0, 'Relic - On State 1 - Set data'),
+(24876, 0, 2, 0, 38, 0, 100, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Rodin the Reckless - On data set - Say line 2'),
+(24877, 0, 2, 0, 38, 0, 100, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Isuldof Iceheart - On data set - Say line 2'),
+(24874, 0, 2, 0, 38, 0, 100, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Fengir the Disgraced - On data set - Say line 2'),
+(24875, 0, 2, 0, 38, 0, 100, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Windan of the Kvaldir - On data set - Say line 2');
+
+UPDATE `creature_template` SET `MovementType`=0 WHERE `entry`=30331; -- fix a DB error not related to the quest
diff --git a/sql/updates/world/2015_11_22_00_world.sql b/sql/updates/world/2015_11_22_00_world.sql
new file mode 100644
index 00000000000..2b70a2c97b6
--- /dev/null
+++ b/sql/updates/world/2015_11_22_00_world.sql
@@ -0,0 +1,2 @@
+-- Remove wrong spawn of Cornish Rex Cat in Dun Morogh:
+DELETE FROM `creature` WHERE `guid`= 1528 and `id`= 7384;
diff --git a/sql/updates/world/2015_11_22_01_world.sql b/sql/updates/world/2015_11_22_01_world.sql
new file mode 100644
index 00000000000..ba63c72ba16
--- /dev/null
+++ b/sql/updates/world/2015_11_22_01_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `game_tele` SET `name` = 'OdesyusLanding' WHERE `id` = 693;
diff --git a/sql/updates/world/2015_11_22_02_world.sql b/sql/updates/world/2015_11_22_02_world.sql
new file mode 100644
index 00000000000..7fcbc7ec9aa
--- /dev/null
+++ b/sql/updates/world/2015_11_22_02_world.sql
@@ -0,0 +1,22 @@
+DELETE FROM `spell_custom_attr` WHERE `entry` IN (1130,1725,3600,14323,14324,14325,32375,32592,35009,39897,42650,43263,43264,53338,58831,58832,58833,58834,58838);
+INSERT INTO `spell_custom_attr` (`entry`, `attributes`) VALUES
+(1130, 64), -- Hunter spell 1130, Hunter's Mark Rank 1
+(1725, 64), -- Rogue spell 1725, Distract
+(3600, 64), -- Greater Earthbind Totem spell 3600, Earthbind
+(14323, 64), -- Hunter spell 14323, Hunter's Mark Rank 2
+(14324, 64), -- Hunter spell 14324, Hunter's Mark Rank 3
+(14325, 64), -- Hunter spell 14325, Hunter's Mark Rank 4
+(32375, 64), -- Priest Discipline spell 32375, Mass Dispel
+(32592, 64), -- Priest Discipline spell 32592, Mass Dispel
+-- Spell ID 35009 - Server-side - Invisibility - Reducing threat
+(35009, 64), -- Triggered by Mage Invisibility (Level 68), spells 66 & 67765
+(39897, 64), -- Priest Discipline spell 39897, Mass Dispel
+(42650, 64), -- Death Knight Unholy spell 42650, Army of the Dead
+(43263, 64), -- Ghoul level 66 spell 43263, Ghoul Taunt
+(43264, 64), -- Periodic Taunt, Trigger for Ghoul Taunt
+(53338, 64), -- Hunter spell 53338, Hunter's Mark Rank 5
+(58831, 64), -- Mirror Image, spawns left Mirror Image NPC
+(58832, 64), -- Mirror Image, Triggers 58831,58833,58834
+(58833, 64), -- Mirror Image, spawns center Mirror Image NPC
+(58834, 64), -- Mirror Image, spawns right Mirror Image NPC
+(58838, 64); -- Inherit Master's Threat List
diff --git a/sql/updates/world/2015_11_22_03_world_355.sql b/sql/updates/world/2015_11_22_03_world_355.sql
new file mode 100644
index 00000000000..9bf71a146d0
--- /dev/null
+++ b/sql/updates/world/2015_11_22_03_world_355.sql
@@ -0,0 +1,17 @@
+-- Seal of Ascension 4743
+
+-- Emberstrife Template
+UPDATE creature_template SET spell8=16054, AIName="SmartAI" WHERE entry=10321;
+
+-- Emberstrife Text
+DELETE FROM creature_text WHERE entry=10321;
+INSERT INTO creature_text (entry, groupid, id, TEXT, TYPE, LANGUAGE, probability, emote, duration, textrange, COMMENT) VALUES
+(10321, 0, 0, "Emberstrife will falters!", 41, 0, 100, 0, 2000, 50, "Emberstrife Emote when below 10%");
+
+-- Emberstrife AI
+DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = 10321);
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(10321, 0, 0, 0, 2, 0, 100, 0, 0, 10, 60000, 60000, 1, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Emberstrife - Emote Below 10%'),
+(10321, 0, 1, 0, 0, 0, 100, 0, 2000, 5000, 5000, 12000, 11, 9573, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Emberstrife - Flame Breath'),
+(10321, 0, 2, 0, 0, 0, 100, 0, 2000, 5000, 4000, 10000, 11, 40504, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Emberstrife - Cleave'),
+(10321, 0, 3, 0, 2, 0, 100, 0, 0, 10, 60000, 60000, 11, 8269, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Emberstrife - Frenzy below 10%');
diff --git a/sql/updates/world/2015_11_23_00_world_335.sql b/sql/updates/world/2015_11_23_00_world_335.sql
new file mode 100644
index 00000000000..fffc4531e5e
--- /dev/null
+++ b/sql/updates/world/2015_11_23_00_world_335.sql
@@ -0,0 +1,74 @@
+--
+-- Quest Tomb of the Lighbringer - 9446
+-- Old scripts cleanup
+DELETE FROM `script_waypoint` WHERE `entry`=17238;
+-- Creature text
+DELETE FROM `creature_text` WHERE `entry`=17238;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `TEXT`, `TYPE`, `LANGUAGE`, `probability`, `emote`, `duration`, `sound`, `TextRange`, `COMMENT`, `BroadcastTextId`) VALUES
+(17238, 0, 0, "Shall we begin, my friend?", 12, 7, 100, 6, 0, 0, 0, "Q Tomb of the Lighbringer", 13613),
+(17238, 1, 0, "This area is known to be full of foul Scourge. You may want to take a moment to prepare any defenses at your disposal.", 12, 7, 100, 1, 0, 0, 0, "Q Tomb of the Lighbringer", 13614),
+(17238, 2, 0, "Beware! We are attacked!", 12, 7, 100, 5, 0, 0, 0, "Q Tomb of the Lighbringer", 13616),
+(17238, 3, 0, "It must be the purity of the Mark of the Lightbringer that is drawing forth the Scourge to us. We must proceed with caution lest we be overwhelmed!", 12, 7, 100, 1, 0, 0, 0, "Q Tomb of the Lighbringer", 13617),
+(17238, 4, 0, "We are beset upon again! Defend yourself!", 12, 7, 100, 5, 0, 0, 0, "Q Tomb of the Lighbringer", 13618),
+(17238, 5, 0, "This land truly needs to be cleansed by the Light! Let us continue on to the tomb. It isn't far now.", 12, 7, 100, 1, 0, 0, 0, "Q Tomb of the Lighbringer", 13619),
+(17238, 6, 0, "Very well, let us continue.", 12, 7, 100, 1, 0, 0, 0, "Q Tomb of the Lighbringer", 13615),
+(17238, 7, 0, "Thank you my friend for making this possible. This is a day that I shall never forget! I think I will stay a while. Please return to High Priestess MacDonnell at the camp. I know that she'll be keenly interested to know of what has transpired here.", 12, 7, 100, 2, 0, 0, 0, "Q Tomb of the Lighbringer", 13624);
+
+-- Anchorite Truuen AI
+UPDATE `creature_template` SET `scriptname`="", `AIName`="SmartAI" WHERE `entry` IN (17238, 17233);
+DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryorguid` IN (17238, 17233);
+DELETE FROM `smart_scripts` WHERE `source_type` = 9 AND `entryorguid` IN (1723800, 1723801, 1723300);
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(17238, 0, 0, 1, 19, 0, 100, 0, 9446, 0, 0, 0, 1, 0, 2000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - Quest Taken - Say text'),
+(17238, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 53, 0, 17238, 0, 9446, 45000, 1, 17, 0, 30, 0, 0, 0, 0, 0, 'Anchorite Truuen - Quest Taken - Start WP'),
+(17238, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 54, 5000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - Quest Taken - Pause before movements'),
+(17238, 0, 3, 18, 61, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - Quest Taken - Remove npc flag'),
+(17238, 0, 4, 5, 40, 0, 100, 0, 3, 0, 0, 0, 54, 15000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - Pause at WP 3'),
+(17238, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 1, 1, 6000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - Speak'),
+(17238, 0, 6, 7, 40, 0, 100, 0, 5, 0, 0, 0, 12, 4472, 3, 60000, 1, 0, 0, 8, 0, 0, 0, 1039.984, -1577.659, 61.437, 1.753951, 'Anchorite Truuen - On wp reached - Summon creature'),
+(17238, 0, 7, 8, 61, 0, 100, 0, 0, 0, 0, 0, 12, 1802, 3, 60000, 1, 0, 0, 8, 0, 0, 0, 1031.033, -1576.279, 62.436, 0.265621, 'Anchorite Truuen - On wp reached - Summon creature'),
+(17238, 0, 8, 0, 61, 0, 100, 0, 0, 0, 0, 0, 1, 2, 2000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - Say text'),
+(17238, 0, 9, 0, 40, 0, 100, 0, 7, 0, 0, 0, 1, 3, 2000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - Say text'),
+(17238, 0, 10, 11, 40, 0, 100, 0, 11, 0, 0, 0, 1, 4, 2000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - Say text'),
+(17238, 0, 11, 12, 61, 0, 100, 0, 0, 0, 0, 0, 12, 4475, 3, 60000, 1, 0, 0, 8, 0, 0, 0, 1110.658, -1742.137, 61.019, 2.413687, 'Anchorite Truuen - On wp reached - Summon creature'),
+(17238, 0, 12, 13, 61, 0, 100, 0, 0, 0, 0, 0, 12, 4475, 3, 60000, 1, 0, 0, 8, 0, 0, 0, 1106.837, -1750.592, 61.174, 2.409762, 'Anchorite Truuen - On wp reached - Summon creature'),
+(17238, 0, 13, 14, 61, 0, 100, 0, 0, 0, 0, 0, 12, 4475, 3, 60000, 1, 0, 0, 8, 0, 0, 0, 1111.725, -1753.404, 61.459, 2.755339, 'Anchorite Truuen - On wp reached - Summon creature'),
+(17238, 0, 14, 0, 61, 0, 100, 0, 0, 0, 0, 0, 12, 4475, 3, 60000, 1, 0, 0, 8, 0, 0, 0, 1117.459, -1743.327, 61.000, 2.853514, 'Anchorite Truuen - On wp reached - Summon creature'),
+(17238, 0, 15, 0, 40, 0, 100, 0, 12, 0, 0, 0, 1, 5, 2000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - say text'),
+(17238, 0, 16, 17, 40, 0, 100, 0, 17, 0, 0, 0, 12, 17233, 3, 60000, 0, 0, 0, 8, 0, 0, 0, 971.86, -1825.42, 84, 0, 'Anchorite Truuen - On wp reached - Summon creature'),
+(17238, 0, 17, 0, 61, 0, 100, 0, 0, 0, 0, 0, 90, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - Kneels'),
+(17238, 0, 18, 0, 61, 0, 100, 0, 0, 0, 0, 0, 2, 250, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On quest taken - Set Faction'),
+(17238, 0, 19, 0, 40, 0, 100, 0, 3, 0, 0, 0, 80, 1723800, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - Action list'),
+(1723800, 9, 0, 0, 0, 0, 100, 0, 15000, 15000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - Action list - Say text'),
+(17238, 0, 20, 0, 38, 0, 100, 0, 0, 1, 0, 0, 80, 1723801, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On data set - Action list'),
+(1723801, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 91, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - Action list - remove kneel'),
+(1723801, 9, 1, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 1, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - Action list - Say text'),
+(1723801, 9, 2, 0, 0, 0, 100, 0, 12000, 12000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - Action list - Despawns'),
+(17233, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 80, 1723300, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghost of Uther - Just summoned - Action list'),
+(1723300, 9, 0, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghost of Uther - Action list - Say text'),
+(1723300, 9, 1, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghost of Uther - Action list - Say text'),
+(1723300, 9, 2, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 17238, 20, 0, 0, 0, 0, 0, 'Ghost of Uther - Action list - Set data'),
+(1723300, 9, 3, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghost of Uther - Action list - Despawn');
+
+-- Waypoints
+DELETE FROM `waypoints` WHERE `entry`=17238;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(17238, 1, 946, -1430, 64, "anchorite_truuen_Q9446"),
+(17238, 2, 974, -1439, 66, "anchorite_truuen_Q9446"),
+(17238, 3, 1031, -1474, 64, "anchorite_truuen_Q9446"),
+(17238, 4, 1039, -1503, 66, "anchorite_truuen_Q9446"),
+(17238, 5, 1036, -1566, 62, "anchorite_truuen_Q9446"),
+(17238, 6, 1036, -1568, 62, "anchorite_truuen_Q9446"),
+(17238, 7, 1038, -1662, 61, "anchorite_truuen_Q9446"),
+(17238, 8, 1047, -1683, 61, "anchorite_truuen_Q9446"),
+(17238, 9, 1064, -1710, 61, "anchorite_truuen_Q9446"),
+(17238, 10, 1099, -1738, 61, "anchorite_truuen_Q9446"),
+(17238, 11, 1113, -1746, 61, "anchorite_truuen_Q9446"),
+(17238, 12, 1118, -1750, 61, "anchorite_truuen_Q9446"),
+(17238, 13, 1156, -1761, 61, "anchorite_truuen_Q9446"),
+(17238, 14, 1152, -1773, 61, "anchorite_truuen_Q9446"),
+(17238, 15, 1080, -1802, 65, "anchorite_truuen_Q9446"),
+(17238, 16, 1019, -1810, 78, "anchorite_truuen_Q9446"),
+(17238, 17, 976, -1823, 81, "anchorite_truuen_Q9446");
+
+UPDATE `creature_text` SET `text`="%s's will falters.", `BroadcastTextId`=5594 WHERE `entry`=10321 AND `groupid`=0 AND `id`=0; -- Fix text for a previous commit
diff --git a/sql/updates/world/2015_11_23_01_world_335.sql b/sql/updates/world/2015_11_23_01_world_335.sql
new file mode 100644
index 00000000000..8432c2d14fd
--- /dev/null
+++ b/sql/updates/world/2015_11_23_01_world_335.sql
@@ -0,0 +1,3 @@
+UPDATE `creature_template` SET `skinloot` = 0 WHERE `entry` IN (721,883,890,1933,2098,2442,2620,4166,5951,10780,12296,12297,12298,12299,17467);
+-- Remove unreferenced skinning_loot_template entries because of this update:
+DELETE FROM `skinning_loot_template` WHERE `Entry` IN (1933,12299,100000);
diff --git a/sql/updates/world/2015_11_23_02_world_335.sql b/sql/updates/world/2015_11_23_02_world_335.sql
new file mode 100644
index 00000000000..ba569d1420f
--- /dev/null
+++ b/sql/updates/world/2015_11_23_02_world_335.sql
@@ -0,0 +1,134 @@
+--
+-- Fill in the blanks in the `Comment` fields in `skinning_loot_template`:
+UPDATE `skinning_loot_template` SET `Comment`= 'Light Hide' WHERE `Item`= 783 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Light Leather' WHERE `Item`= 2318 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Medium Leather' WHERE `Item`= 2319 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Wool Cloth' WHERE `Item`= 2592 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Ruined Leather Scraps' WHERE `Item`= 2934 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Medium Hide' WHERE `Item`= 4232 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Heavy Leather' WHERE `Item`= 4234 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Heavy Hide' WHERE `Item`= 4235 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Thick Leather' WHERE `Item`= 4304 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Deviate Scale' WHERE `Item`= 6470 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Perfect Deviate Scale' WHERE `Item`= 6471 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Black Whelp Scale' WHERE `Item`= 7286 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Red Whelp Scale' WHERE `Item`= 7287 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Green Whelp Scale' WHERE `Item`= 7392 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Shadowcat Hide' WHERE `Item`= 7428 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Zesty Clam Meat' WHERE `Item`= 7974 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Scorpid Scale' WHERE `Item`= 8154 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Worn Dragonscale' WHERE `Item`= 8165 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Turtle Scale' WHERE `Item`= 8167 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Thick Hide' WHERE `Item`= 8169 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Rugged Leather' WHERE `Item`= 8170 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Rugged Hide' WHERE `Item`= 8171 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Thick Wolfhide' WHERE `Item`= 8368 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Thick Yeti Hide' WHERE `Item`= 8973 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Patch of Tainted Skin' WHERE `Item`= 11512 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Thick Yeti Fur' WHERE `Item`= 12366 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Brilliant Chromatic Scale' WHERE `Item`= 12607 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Pristine Hide of the Beast' WHERE `Item`= 12731 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Heavy Scorpid Scale' WHERE `Item`= 15408 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Scale of Onyxia' WHERE `Item`= 15410 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Green Dragonscale' WHERE `Item`= 15412 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Red Dragonscale' WHERE `Item`= 15414 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Blue Dragonscale' WHERE `Item`= 15415 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Black Dragonscale' WHERE `Item`= 15416 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Devilsaur Leather' WHERE `Item`= 15417 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Warbear Leather' WHERE `Item`= 15419 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Frostsaber Leather' WHERE `Item`= 15422 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Chimera Leather' WHERE `Item`= 15423 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Core Leather' WHERE `Item`= 17012 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Shiny Fish Scales' WHERE `Item`= 17057 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Rage Scar Yeti Hide' WHERE `Item`= 18947 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Primal Bat Leather' WHERE `Item`= 19767 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Primal Tiger Leather' WHERE `Item`= 19768 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Silithid Chitin' WHERE `Item`= 20498 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Broken Silithid Chitin' WHERE `Item`= 20499 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Light Silithid Carapace' WHERE `Item`= 20500 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Heavy Silithid Carapace' WHERE `Item`= 20501 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Knothide Leather' WHERE `Item`= 21887 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Flame Spessarite' WHERE `Item`= 21929 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Mote of Air' WHERE `Item`= 22572 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Mote of Earth' WHERE `Item`= 22573 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Mote of Life' WHERE `Item`= 22575 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Mote of Mana' WHERE `Item`= 22576 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Mote of Shadow' WHERE `Item`= 22577 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Mote of Water' WHERE `Item`= 22578 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Felweed' WHERE `Item`= 22785 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Dreaming Glory' WHERE `Item`= 22786 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Ragveil' WHERE `Item`= 22787 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Terocone' WHERE `Item`= 22789 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Ancient Lichen' WHERE `Item`= 22790 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Mana Thistle' WHERE `Item`= 22793 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Fel Lotus' WHERE `Item`= 22794 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Blood Garnet' WHERE `Item`= 23077 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Deep Peridot' WHERE `Item`= 23079 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Shadow Draenite' WHERE `Item`= 23107 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Golden Draenite' WHERE `Item`= 23112 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Azure Moonstone' WHERE `Item`= 23117 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Adamantite Ore' WHERE `Item`= 23425 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Living Ruby' WHERE `Item`= 23436 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Talasite' WHERE `Item`= 23437 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Star of Elune' WHERE `Item`= 23438 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Noble Topaz' WHERE `Item`= 23439 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Dawnstone' WHERE `Item`= 23440 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Nightseye' WHERE `Item`= 23441 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Moongraze Buck Hide' WHERE `Item`= 23677 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Crystalline Fragments' WHERE `Item`= 24189 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Unidentified Plant Parts' WHERE `Item`= 24401 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Knothide Leather Scraps' WHERE `Item`= 25649 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Crystal Infused Leather' WHERE `Item`= 25699 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Fel Scales' WHERE `Item`= 25700 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Fel Hide' WHERE `Item`= 25707 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Thick Clefthoof Leather' WHERE `Item`= 25708 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Small Mushroom' WHERE `Item`= 25813 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Zangar Caps' WHERE `Item`= 27859 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Sporeggar Mushroom' WHERE `Item`= 29453 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Cobra Scales' WHERE `Item`= 29539 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Wind Scales' WHERE `Item`= 29547 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Nether Dragonscales' WHERE `Item`= 29548 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Lionseye' WHERE `Item`= 32229 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Nethermine Flayer Hide' WHERE `Item`= 32470 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Honey-Spiced Lichen' WHERE `Item`= 33452 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Borean Leather Scraps' WHERE `Item`= 33567 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Borean Leather' WHERE `Item`= 33568 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Nether Residue' WHERE `Item`= 35229 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Ice Shard Cluster' WHERE `Item`= 36728 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Sprung Sprocket' WHERE `Item`= 36813 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Goldclover' WHERE `Item`= 36901 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Constrictor Grass' WHERE `Item`= 36902 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Adder\'s Tongue' WHERE `Item`= 36903 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Tiger Lily' WHERE `Item`= 36904 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Lichbloom' WHERE `Item`= 36905 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Icethorn' WHERE `Item`= 36906 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Talandra\'s Rose' WHERE `Item`= 36907 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Crystallized Air' WHERE `Item`= 37700 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Crystallized Earth' WHERE `Item`= 37701 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Crystallized Fire' WHERE `Item`= 37702 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Crystallized Life' WHERE `Item`= 37704 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Crystallized Water' WHERE `Item`= 37705 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Icy Dragonscale' WHERE `Item`= 38557 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Nerubian Chitin' WHERE `Item`= 38558 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Jormungar Scale' WHERE `Item`= 38561 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Geodesic Fragments' WHERE `Item`= 39220 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Frosty Mushroom' WHERE `Item`= 39516 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Handful of Cobalt Bolts' WHERE `Item`= 39681 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Overcharged Capacitor' WHERE `Item`= 39682 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Hair Trigger' WHERE `Item`= 39684 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Indestructible Frame' WHERE `Item`= 39685 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Volatile Blasting Trigger' WHERE `Item`= 39690 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Arctic Fur' WHERE `Item`= 44128 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Whizzed-Out Gizmo' WHERE `Item`= 41337 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Sprung Whirlygig' WHERE `Item`= 41338 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Stoic Mammoth Hide' WHERE `Item`= 42542 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Loque\'Nahak\'s Pelt' WHERE `Item`= 44687 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Schematic: Jeeves' WHERE `Item`= 49050 AND `Comment` IS NULL;
+-- Reference loot
+UPDATE `skinning_loot_template` SET `Comment`= 'Pattern: Cobrascale Gloves' WHERE `Entry`= 29724 and `Reference`= 50017 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Pattern: Windscale Hood' WHERE `Entry`= 29725 and `Reference`= 50013 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Pattern: Hood of Primal Life' WHERE `Entry`= 29726 and `Reference`= 50014 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Pattern: Gloves of the Living Touch' WHERE `Entry`= 29727 and `Reference`= 50016 AND `Comment` IS NULL;
+UPDATE `skinning_loot_template` SET `Comment`= 'Pattern: Windslayer Wraps' WHERE `Entry`= 29728 and `Reference`= 50015 AND `Comment` IS NULL;UPDATE `creature_template` SET `skinloot` = 0 WHERE `entry` IN (721,883,890,1933,2098,2442,2620,4166,5951,10780,12296,12297,12298,12299,17467);
+-- Remove unreferenced skinning_loot_template entries because of this update:
+DELETE FROM `skinning_loot_template` WHERE `Entry` IN (1933,12299,100000);
diff --git a/sql/updates/world/2015_11_23_03_world_335.sql b/sql/updates/world/2015_11_23_03_world_335.sql
new file mode 100644
index 00000000000..9ef011f551e
--- /dev/null
+++ b/sql/updates/world/2015_11_23_03_world_335.sql
@@ -0,0 +1,13 @@
+-- Mottled Boar - Skinning Loot
+UPDATE `creature_template` SET `skinloot`= 3098 WHERE `entry` = 3098;
+DELETE FROM `skinning_loot_template` WHERE `Entry`=3098;
+INSERT INTO `skinning_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
+(3098, 2318, 0, 10, 0, 1, 1, 1, 1, NULL), -- Light Leather, 10% chance
+(3098, 2934, 0, 88, 0, 1, 1, 1, 1, NULL); -- Ruined Leather Scraps, 88% chance
+
+-- Scorpid Worker - Skinning Loot
+UPDATE `creature_template` SET `skinloot`= 3124 WHERE `entry` = 3124;
+DELETE FROM `skinning_loot_template` WHERE `Entry`= 3124;
+INSERT INTO `skinning_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
+(3124, 2318, 0, 10, 0, 1, 1, 1, 1, NULL), -- Light Leather, 10% chance
+(3124, 2934, 0, 88, 0, 1, 1, 1, 1, NULL); -- Ruined Leather Scraps, 88% chance
diff --git a/sql/updates/world/2015_11_23_04_world_335.sql b/sql/updates/world/2015_11_23_04_world_335.sql
new file mode 100644
index 00000000000..845eefeb7ca
--- /dev/null
+++ b/sql/updates/world/2015_11_23_04_world_335.sql
@@ -0,0 +1,29 @@
+SET @NPCTEXT= 724006;
+
+DELETE FROM `gossip_menu` WHERE `entry`=6539 AND `text_id`=@NPCTEXT;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(6539, @NPCTEXT);
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=6539 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
+(6539,0,0,'I am ready, Anachronos. Please grant me the Scepter of the Shifting Sands.',11331,1,1,0,0,0,0,'',0);
+
+DELETE FROM `npc_text` WHERE `ID`=@NPCTEXT;
+INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`, `lang0`, `Probability0`, `em0_0`, `em0_1`, `em0_2`, `em0_3`, `em0_4`, `em0_5`, `text1_0`, `text1_1`, `lang1`, `Probability1`, `em1_0`, `em1_1`, `em1_2`, `em1_3`, `em1_4`, `em1_5`, `text2_0`, `text2_1`, `lang2`, `Probability2`, `em2_0`, `em2_1`, `em2_2`, `em2_3`, `em2_4`, `em2_5`, `text3_0`, `text3_1`, `lang3`, `Probability3`, `em3_0`, `em3_1`, `em3_2`, `em3_3`, `em3_4`, `em3_5`, `text4_0`, `text4_1`, `lang4`, `Probability4`, `em4_0`, `em4_1`, `em4_2`, `em4_3`, `em4_4`, `em4_5`, `text5_0`, `text5_1`, `lang5`, `Probability5`, `em5_0`, `em5_1`, `em5_2`, `em5_3`, `em5_4`, `em5_5`, `text6_0`, `text6_1`, `lang6`, `Probability6`, `em6_0`, `em6_1`, `em6_2`, `em6_3`, `em6_4`, `em6_5`, `text7_0`, `text7_1`, `lang7`, `Probability7`, `em7_0`, `em7_1`, `em7_2`, `em7_3`, `em7_4`, `em7_5`, `VerifiedBuild`) VALUES
+(@NPCTEXT, "The Scepter of the Shifting Sands is whole once more, $n.$B$BIt is you who must lead your armies into the cursed fortress city of Ahn'Qiraj and mete justice to its inhabitants.$B$BVenture to Silithus and present the Scepter of the Shifting Sands to Jonathan the Revelator.", '', 11333, 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, -1);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=6539 AND `SourceEntry`=@NPCTEXT;
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=6539 AND `SourceEntry`=0;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(14,6539,@NPCTEXT,0,0,8,0,8742,0,0,0,0,0,'','Show gossip text after quest The Might of Kalimdor rewarded'),
+(14,6539,@NPCTEXT,0,0,2,0,21175,1,1,1,0,0,'','Show gossip text if doesnt have item The Scepter of the Shifting Sands'),
+(14,6539,@NPCTEXT,0,0,8,0,8745,0,0,1,0,0,'','Show gossip text if Treasure of the Timeless One is not rewarded'),
+(15,6539,0,0,0,8,0,8742,0,0,0,0,0,'','Show gossip menu option after quest The Might of Kalimdor rewarded'),
+(15,6539,0,0,0,2,0,21175,1,1,1,0,0,'','Show gossip menu option if doesnt have item The Scepter of the Shifting Sands'),
+(15,6539,0,0,0,8,0,8745,0,0,1,0,0,'','Show gossip menu option if Treasure of the Timeless One is not rewarded');
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=15192;
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=15192;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(15192,0,0,1,62,0,100,0,6539,0,0,0,11,25861,0,0,0,0,0,7,0,0,0,0,0,0,0,'Anachronos - On Gossip Option 0 Selected - Cast \'Call Scepter DND\''),
+(15192,0,1,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Anachronos - On Gossip Option 0 Selected - Close Gossip');
diff --git a/sql/updates/world/2015_11_23_05_world.sql b/sql/updates/world/2015_11_23_05_world.sql
new file mode 100644
index 00000000000..579af5a5ca1
--- /dev/null
+++ b/sql/updates/world/2015_11_23_05_world.sql
@@ -0,0 +1,6 @@
+--
+DELETE FROM `conditions` WHERE `SourceEntry` = 56099 AND `SourceTypeOrReferenceId` = 13;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,1,56099,0,0,31,0,3,30169,0,0,0,'','Essence of Ice target Smoldering Scrap Bunny');
+
+DELETE FROM `creature` WHERE `guid` IN (116640, 116641, 116642); -- duplicated spawns
diff --git a/sql/updates/world/2015_11_24_00_world_355.sql b/sql/updates/world/2015_11_24_00_world_355.sql
new file mode 100644
index 00000000000..0983d03e649
--- /dev/null
+++ b/sql/updates/world/2015_11_24_00_world_355.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_text` SET `TextRange`=0 WHERE `entry`=10321 AND `groupid`=0 AND `id`=0;
diff --git a/sql/updates/world/2015_11_27_00_world.sql b/sql/updates/world/2015_11_27_00_world.sql
new file mode 100644
index 00000000000..632dec537dd
--- /dev/null
+++ b/sql/updates/world/2015_11_27_00_world.sql
@@ -0,0 +1,15 @@
+UPDATE `spell_dbc` SET `Effect1`=28,`EffectMiscValueB1`=64 WHERE `Id` IN(38922,38928);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=21251 AND `source_type`=0 AND `id`>6;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN(2125100,2125101,2125102,2125103) 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
+(21251, 0, 7, 0, 11, 0, 100, 0, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Underbog Colossus - On Spawn - Set Invincibility HP'),
+(21251, 0, 8, 0, 2, 0, 100, 1, 0, 1, 0, 0, 87, 2125100, 2125101, 2125102, 2125103, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Underbog Colossus - On Less than 1% HP - Run Random Script'),
+(2125100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 38718, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Underbog Colossus - Script 1 - Cast \'Toxic Pool\' '),
+(2125100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Underbog Colossus - Script 1 - Die'),
+(2125101, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 38922, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Underbog Colossus - Script 2 - Cast \'Summon Colossus Lurkers\' '),
+(2125101, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Underbog Colossus - Script 2 - Die'),
+(2125102, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 38928, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Underbog Colossus - Script 3 - Cast \'Summon Colossus Ragers\' '),
+(2125102, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Underbog Colossus - Script 3 - Die'),
+(2125103, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Underbog Colossus - Script 4 - Die');
diff --git a/sql/updates/world/2015_11_28_00_world.sql b/sql/updates/world/2015_11_28_00_world.sql
new file mode 100644
index 00000000000..0a1dd574fb4
--- /dev/null
+++ b/sql/updates/world/2015_11_28_00_world.sql
@@ -0,0 +1,16 @@
+--
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (22268, 22460);
+UPDATE `gameobject` SET `position_z`=-16.9 WHERE `guid`=99984 AND `id`= 185307;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `Entry` IN (22268, 22460);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (22268, 22460) AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (2226800, 2246000) 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
+(22460, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 80, 2246000, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit - Just summoned - action list'),
+(2246000, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 3672.275635, 5286.437988, 20.585167, 5.40622, 'Spirit - action list - move to pos'),
+(2246000, 9, 1, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 3672.275635, 5286.437988, 20.585167, 5.40622, 'Spirit - action list - Set Orientation'),
+(2246000, 9, 2, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 9, 0, 0, 0, 0, 0, 0, 20, 185296, 20, 0, 0, 0, 0, 0, 'Spirit - action list - Activate object'),
+(2246000, 9, 3, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 22268, 20, 0, 0, 0, 0, 0, 'Spirit - action list - Set data'),
+(2246000, 9, 4, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit - action list - Despawn'),
+(22268, 0, 0, 0, 38, 0, 100, 0, 0, 1, 0, 0, 80, 2226800, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Leok - On data set - action list'),
+(2226800, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 3638.89575, 5343.02978, 23.28319, 2.086646, 'Leok - action list - Move to pos'),
+(2226800, 9, 1, 0, 0, 0, 100, 0, 12000, 12000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Leok - action list - Despawn');
diff --git a/sql/updates/world/2015_11_28_01_world_335.sql b/sql/updates/world/2015_11_28_01_world_335.sql
new file mode 100644
index 00000000000..4bec178ecee
--- /dev/null
+++ b/sql/updates/world/2015_11_28_01_world_335.sql
@@ -0,0 +1,3 @@
+DELETE FROM `trinity_string` WHERE `entry` = 11010;
+INSERT INTO `trinity_string` (`entry`,`content_default`) VALUES
+(11010, 'You didn''t get kicked out of the instance even if Player::CheckInstanceLoginValid() returned false and without .gm on flag');
diff --git a/sql/updates/world/2015_11_29_00_world.sql b/sql/updates/world/2015_11_29_00_world.sql
new file mode 100644
index 00000000000..fd64b65bd02
--- /dev/null
+++ b/sql/updates/world/2015_11_29_00_world.sql
@@ -0,0 +1,41 @@
+-- Talbuk Doe SAI
+SET @ENTRY := 20610; -- Talbuk Doe
+SET @SPELL_GORE := 32019; -- Gore
+SET @SPELL_TAG := 35771; -- Tag Subbued Talbuk
+SET @SPELL_TAG_CREDIT := 40347; -- Talbuk Tagging Credit
+SET @SPELL_SLEEPING := 14915; -- Sleeping Sleep
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - On Aggro - Say text 0"),
+(@ENTRY,0,1,0,0,0,100,0,1000,1000,8000,11000,11,@SPELL_GORE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Talbuk Doe - In Combat - Cast Gore"),
+(@ENTRY,0,2,0,2,0,100,1,0,20,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - At 20% HP - Say Text 1"),
+(@ENTRY,0,5,0,4,0,100,0,0,0,0,0,45,0,1,0,0,0,0,19,20777,30,0,0,0,0,0,"Talbuk Doe - On Aggro - Set data"),
+(@ENTRY,0,3,0,8,0,100,0,@SPELL_TAG,0,0,0,80,@ENTRY*100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - On Spellhit - Run Script"),
+(@ENTRY,0,4,0,11,0,100,0,0,0,0,0,19,386,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - On Respawn - Remove Unit Flag"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,85,@SPELL_TAG_CREDIT ,0,0,0,0,0,7,0,0,0,0,0,0,0,"Talbuk Doe - Script - Give Quest Credit"),
+(@ENTRY*100,9,1,0,0,0,100,1,0,0,0,0,27,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - Script - Stop combat"),
+(@ENTRY*100,9,2,0,0,0,100,0,0,0,0,0,18,386,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - Script - Set Unit Flag"),
+(@ENTRY*100,9,3,0,0,0,100,0,0,0,0,0,11,@SPELL_SLEEPING,1,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - Script - Cast Sleeping Sleep"),
+(@ENTRY*100,9,4,0,0,0,100,0,0,0,0,0,11,55795,1,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - Script - Cast visual death state"),
+(@ENTRY*100, 9, 5, 0, 0, 0, 100, 0, 30000, 30000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Talbuk Doe - On Script - Despawn');
+
+-- Talbuk Sire SAI
+SET @ENTRY := 20777; -- Talbuk Sire
+SET @SPELL_STOMP := 32023; -- Hoof Stomp
+SET @SPELL_TAG := 35771; -- Tag Subbued Talbuk
+SET @SPELL_SLEEPING := 14915; -- Sleeping Sleep
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,4000,6000,8000,11000,11,@SPELL_STOMP,0,0,0,0,0,2,0,0,0,0,0,0,0,"Talbuk Sire - In Combat - Cast Hoof Stomp"),
+(@ENTRY,0,1,0,2,0,100,1,0,20,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - At 20% HP - Say Text 0"),
+(@ENTRY,0,4,0,38,0,100,0,0,1,0,0,49,0,0,0,0,0,0,21,40,0,0,0,0,0,0,"Talbuk Sire - On data set - Start attack"),
+(@ENTRY,0,2,0,8,0,100,0,@SPELL_TAG,0,0,0,80,@ENTRY*100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - On Spellhit - Run Script"),
+(@ENTRY,0,3,0,11,0,100,0,0,0,0,0,19,386,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - On Respawn - Remove Unit Flag"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,85,@SPELL_TAG_CREDIT ,0,0,0,0,0,7,0,0,0,0,0,0,0,"Talbuk Sire - Script - Give Quest Credit"),
+(@ENTRY*100,9,1,0,0,0,100,1,0,0,0,0,27,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - Script - Stop combat"),
+(@ENTRY*100,9,2,0,0,0,100,0,0,0,0,0,18,386,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - Script - Set Unit Flag"),
+(@ENTRY*100,9,3,0,0,0,100,0,0,0,0,0,11,@SPELL_SLEEPING,1,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - Script - Cast Sleeping Sleep"),
+(@ENTRY*100,9,4,0,0,0,100,0,0,0,0,0,11,55795,1,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - Script - Cast visual death state"),
+(@ENTRY*100, 9, 5, 0, 0, 0, 100, 0, 30000, 30000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Talbuk Sire - On Script - Despawn');
diff --git a/sql/updates/world/2015_11_29_01_world.sql b/sql/updates/world/2015_11_29_01_world.sql
new file mode 100644
index 00000000000..cd46800c5dd
--- /dev/null
+++ b/sql/updates/world/2015_11_29_01_world.sql
@@ -0,0 +1,15 @@
+--
+DELETE FROM `creature_text` WHERE `entry` = 22293;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `TextRange`, `comment`, `BroadcastTextId`) VALUES
+(22293, 0, 0, "%s begins to sputter as its engine malfunctions.", 16, 0, 100, 0, 0, 0, 0, "Inactive Fel Reaver", 20103);
+
+-- Creature Script - Inactive Fel Reaver
+DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = 22293);
+DELETE FROM `smart_scripts` WHERE (source_type = 9 AND entryorguid = 2229300);
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(22293, 0, 0, 0, 20, 0, 100, 0, 10850, 0, 0, 0, 80, 2229300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Inactive Fel Reaver - On Quest complete - Action list'),
+(2229300, 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, 'Inactive Fel Reaver - Action list - Say text'),
+(2229300, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Inactive Fel Reaver - Action list - Remove npc flag'),
+(2229300, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 89, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Inactive Fel Reaver - Action list - Random Move'),
+(2229300, 9, 3, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 33, 22293, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Inactive Fel Reaver - Action list - Give Credit'),
+(2229300, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Inactive Fel Reaver - Action list - Kill Itself');
diff --git a/sql/updates/world/2015_12_01_00_world.sql b/sql/updates/world/2015_12_01_00_world.sql
new file mode 100644
index 00000000000..1572245a517
--- /dev/null
+++ b/sql/updates/world/2015_12_01_00_world.sql
@@ -0,0 +1,12 @@
+--
+-- Hallowed wand spell script names
+DELETE FROM `spell_script_names` WHERE `ScriptName`= 'spell_hallow_end_wand';
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(24717, 'spell_hallow_end_wand'), -- Pirate Costume
+(24718, 'spell_hallow_end_wand'), -- Ninja Costume
+(24719, 'spell_hallow_end_wand'), -- Leper Gnome Costume
+(24720, 'spell_hallow_end_wand'), -- Random Costume
+(24724, 'spell_hallow_end_wand'), -- Skeleton Costume
+(24733, 'spell_hallow_end_wand'), -- Bat Costume
+(24737, 'spell_hallow_end_wand'), -- Ghost Costume
+(24741, 'spell_hallow_end_wand'); -- Wisp Costume
diff --git a/sql/updates/world/2015_12_04_00_world.sql b/sql/updates/world/2015_12_04_00_world.sql
new file mode 100644
index 00000000000..ee721273bef
--- /dev/null
+++ b/sql/updates/world/2015_12_04_00_world.sql
@@ -0,0 +1,34 @@
+--
+DELETE FROM `gameobject` WHERE `id`=185295;
+DELETE FROM `creature_text` WHERE `entry` IN (21514, 10204);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `TextRange`, `comment`, `BroadcastTextId`) VALUES
+(10204, 0, 0, "Misha lets OUT a loud roar AS she rakes her claws AGAINST the gronn's altar.", 16, 0, 100, 0, 0, 0, 0, "Misha", 20261),
+(21514, 0, 0, "Who dares defile the altar of Gorgrom the Dragon-Eater?", 14, 0, 100, 0, 0, 0, 0, "Gorgrom the Dragon-Eater", 20262),
+(21514, 1, 0, "I will crush it and flay it and eat its meat and crack its bones one by one when I am done.", 14, 0, 100, 0, 0, 0, 0, "Gorgrom the Dragon-Eater", 20264);
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (21514, 10204);
+DELETE FROM `smart_scripts` WHERE source_type = 0 AND entryorguid IN (21514, 10204);
+DELETE FROM `smart_scripts` WHERE source_type = 9 AND entryorguid IN (2151400, 1020400);
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(21514, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 80, 2151400, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgrom the Dragon-Eater - On Just summoned - Action list'),
+(2151400, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgrom the Dragon-Eater - Action list - Set unit flag'),
+(2151400, 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, 'Gorgrom the Dragon-Eater - Action list - Say text'),
+(2151400, 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, 'Gorgrom the Dragon-Eater - Action list - Say text'),
+(2151400, 9, 3, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 3608.135986, 7183.374023, 139.581833, 2.321033, 'Gorgrom the Dragon-Eater - Action list - Move to pos'),
+(2151400, 9, 4, 0, 0, 0, 100, 0, 2500, 2500, 0, 0, 11, 35470, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgrom the Dragon-Eater - Action list - Cast explosion'),
+(2151400, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 50, 185295, 60, 0, 0, 0, 0, 8, 0, 0, 0, 3608.135986, 7183.374023, 139.581833, 2.321033, 'Gorgrom the Dragon-Eater - Action list - Summon Gorgrom corpse spell focus object'),
+(2151400, 9, 6, 0, 0, 0, 100, 0, 400, 400, 0, 0, 11, 58951, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgrom the Dragon-Eater - Action list - cast Permanent Feign Death'),
+(2151400, 9, 7, 0, 0, 0, 100, 0, 40000, 40000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgrom the Dragon-Eater - Action list - Despawn'),
+(10204, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 80, 1020400, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Misha - On Just summoned - Action list'),
+(1020400, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Misha - Action list - Set unit flag'),
+(1020400, 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, 'Misha - Action list - Say text'),
+(1020400, 9, 2, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 3612.911865, 7193.020508, 139.651291, 5.472856, 'Misha - Action list - Move to pos'),
+(1020400, 9, 3, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 3612.911865, 7193.020508, 139.651291, 5.472856, 'Misha - Action list - Set Orientation'),
+(1020400, 9, 4, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Misha - Action list - Despawn');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry` IN (39264, 39220);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(17, 0, 39264, 0, 0, 29, 1, 21514, 30, 0, 1, 0, 0, '', "Sablemane's Trap Require Gorgrom the Dragon-Eater not around"),
+(17, 0, 39220, 0, 0, 29, 1, 21514, 30, 0, 1, 0, 0, '', "Sablemane's Trap Require Gorgrom the Dragon-Eater not around"),
+(17, 0, 39264, 0, 0, 28, 0, 10802, 0, 0, 1, 0, 0, '', "Sablemane's Trap RequireGorgrom the Dragon-Eater not Completed"),
+(17, 0, 39220, 0, 0, 28, 0, 10723, 0, 0, 1, 0, 0, '', "Sablemane's Trap RequireGorgrom the Dragon-Eater not Completed");
diff --git a/sql/updates/world/2015_12_05_00_world.sql b/sql/updates/world/2015_12_05_00_world.sql
new file mode 100644
index 00000000000..c2c90164a4f
--- /dev/null
+++ b/sql/updates/world/2015_12_05_00_world.sql
@@ -0,0 +1,8 @@
+--
+SET @TATJANA := 27627;
+DELETE FROM `smart_scripts` WHERE `entryorguid`IN (27627) 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
+(@TATJANA,0,0,1,8,0,100,0,49134,0,0,0,11,49135,2,0,0,0,0,1,0,0,0,0,0,0,0,'Tatjana - On spellhit Tranquilizer Dart - Spellcast Tatjana Ping'),
+(@TATJANA,0,1,2,61,0,100,0,0,0,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tatjana - On spellhit Tranquilizer Dart - Set faction'),
+(@TATJANA,0,2,0,61,0,100,0,0,0,0,0,20,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tatjana - On Spellhit \'Tranquilizer Dart\' - Stop Attack'),
+(@TATJANA,0,3,0,0,0,100,0,2000,6000,9000,12000,11,32009,0,0,0,0,0,2,0,0,0,0,0,0,0,'Tatjana - On update IC - Spellcast Cutdown');
diff --git a/sql/updates/world/2015_12_06_00_world.sql b/sql/updates/world/2015_12_06_00_world.sql
new file mode 100644
index 00000000000..b60d4d3e88c
--- /dev/null
+++ b/sql/updates/world/2015_12_06_00_world.sql
@@ -0,0 +1,35 @@
+--
+UPDATE `creature_template` SET `AIName`='SmartAI', `ScriptName`='' WHERE `entry`=11956;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=11956 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
+(11956, 0, 0, 0, 62, 0, 100, 0, 3884, 0, 0, 0, 15, 5930, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Great Bear Spirit - On Gossip Select - Quest explored'),
+(11956, 0, 1, 0, 62, 0, 100, 0, 3884, 1, 0, 0, 15, 5929, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Great Bear Spirit - On Gossip Select - Quest explored');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=3884;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,3884,0,0,9,5930,0,0,0,0,'','Show the gossip option if the quest 5930 is taken'),
+(15,3884,1,0,9,5929,0,0,0,0,'','Show the gossip option if the quest 5929 is taken');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=3882;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`Comment`) VALUES
+(14,3882,4719,0,9,5929,0,0,0,"Only show text_id 4719 if the quest 5929 is taken"),
+(14,3882,4719,1,9,5930,0,0,0,"Only show text_id 4719 if the quest 5930 is taken");
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=3882;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,3882,0,0,9,5930,0,0,0,0,'','Show the gossip option if the quest 5930 is taken'),
+(15,3882,0,1,9,5929,0,0,0,0,'','Show the gossip option if the quest 5929 is taken');
+
+DELETE FROM `gossip_menu` WHERE `entry`=3882 AND `text_id`=4719;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (3882, 4719);
+
+DELETE FROM `gossip_menu` WHERE `entry`=3882 AND `text_id`=4719;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (3882, 4719);
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (3881, 3882, 3883, 3884);
+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
+(3882,0,0,'What do you represent, spirit?',7439,1,1,3881,0,0,0,'',0),
+(3881,0,0,'I seek to understand the importance of strength of the body.',7442,1,1,3883,0,0,0,'',0),
+(3883,0,0,'I seek to understand the importance of strength of the heart.',7444,1,1,3884,0,0,0,'',0),
+(3884,0,0,'I have heard your words, Great Bear Spirit, and I understand. I now seek your blessings to fully learn the way of the Claw.',7446,1,1,3885,0,0,0,'',0),
+(3884,1,0,'I have heard your words, Great Bear Spirit, and I understand. I now seek your blessings to fully learn the way of the Claw.',7446,1,1,3885,0,0,0,'',0);
diff --git a/sql/updates/world/2015_12_08_00_world_335.sql b/sql/updates/world/2015_12_08_00_world_335.sql
new file mode 100644
index 00000000000..e742130b1a4
--- /dev/null
+++ b/sql/updates/world/2015_12_08_00_world_335.sql
@@ -0,0 +1,15 @@
+--
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (2562) AND `id`=1;
+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
+(2562,1,0,"Gubber, I don't know how to fish.",5529,1,1,0,0,0,0,'',0);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=2562;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,2562,1,0,9,1141,0,0,0,0,'','Show the gossip option if the quest 1141 is taken'),
+(15,2562,1,0,25,7620,0,0,1,0,'','Show the gossip option if Fishing is not learned');
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=10216;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=10216 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
+(10216, 0, 0, 1, 62, 0, 100, 0, 2562, 1, 0, 0, 85, 7733, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Gubber Blump- On Gossip Select - Cast Fishing'),
+(10216, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Gubber Blump- On Gossip Select - Close gossip');
diff --git a/sql/updates/world/2015_12_08_01_world.sql b/sql/updates/world/2015_12_08_01_world.sql
new file mode 100644
index 00000000000..9e24acd91db
--- /dev/null
+++ b/sql/updates/world/2015_12_08_01_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `smart_scripts` SET `event_param2`=7 WHERE `entryorguid` IN (34146, 34150, 34151) AND `source_type`=0 AND `id`=0;
diff --git a/sql/updates/world/2015_12_08_02_world.sql b/sql/updates/world/2015_12_08_02_world.sql
new file mode 100644
index 00000000000..375d0941adb
--- /dev/null
+++ b/sql/updates/world/2015_12_08_02_world.sql
@@ -0,0 +1,6 @@
+-- maexxna cleanup
+DELETE FROM `creature_text` WHERE `entry`=15952;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
+(15952,0,0,"Spiderlings appear on the web!",41,100,32305,3,"Maexxna EMOTE_SPIDERS"),
+(15952,1,0,"%s spins her web into a cocoon!",41,100,32303,3,"Maexxna EMOTE_WEB_WRAP"),
+(15952,2,0,"%s sprays strands of web everywhere!",41,100,32304,3,"Maexxna EMOTE_WEB_SPRAY");
diff --git a/sql/updates/world/2015_12_09_00_world.sql b/sql/updates/world/2015_12_09_00_world.sql
new file mode 100644
index 00000000000..6ac4da31404
--- /dev/null
+++ b/sql/updates/world/2015_12_09_00_world.sql
@@ -0,0 +1,3 @@
+--
+UPDATE `smart_scripts` SET `event_param1`=15, `comment`="Short John Mithril - On Waypoint 15 Reached - Say Line 1" WHERE `entryorguid`=14508 AND `source_Type`=0 AND `id` IN (2);
+UPDATE `smart_scripts` SET `event_param1`=15, `comment`="Short John Mithril - On Waypoint 15 Reached - Cast 'Summon Pirate Booty (DND)'" WHERE `entryorguid`=14508 AND `source_Type`=0 AND `id` IN (3);
diff --git a/sql/updates/world/2015_12_09_01_world.sql b/sql/updates/world/2015_12_09_01_world.sql
new file mode 100644
index 00000000000..d27bc7ff49a
--- /dev/null
+++ b/sql/updates/world/2015_12_09_01_world.sql
@@ -0,0 +1,13 @@
+--
+SET @ENTRY := 27131;
+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,10000,15000,10000,15000,5,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grizzly Bear - Out of Combat - Play Emote 7");
+
+SET @ENTRY := 2713100;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9;
+
+DELETE FROM `vehicle_template_accessory` WHERE `entry`=27131;
+INSERT INTO `vehicle_template_accessory` (`entry`,`accessory_entry`,`seat_id`,`minion`,`description`) VALUES
+(27131,27438,0,1, 'Grizzly Bear - Rainbow Trout');
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index 2339399e022..7f20fe36ab6 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -83,6 +83,8 @@ add_library(common STATIC
${common_STAT_PCH_SRC}
)
+add_dependencies(common revision_data.h)
+
# Generate precompiled header
if (USE_COREPCH)
add_cxx_pch(common ${common_STAT_PCH_HDR} ${common_STAT_PCH_SRC})
diff --git a/src/common/Collision/Management/MMapManager.cpp b/src/common/Collision/Management/MMapManager.cpp
index a5685c65d9c..00985e4fa1d 100644
--- a/src/common/Collision/Management/MMapManager.cpp
+++ b/src/common/Collision/Management/MMapManager.cpp
@@ -230,7 +230,7 @@ namespace MMAP
// if the grid is later reloaded, dtNavMesh::addTile will return error but no extra memory is used
// we cannot recover from this error - assert out
TC_LOG_ERROR("maps", "MMAP:unloadMap: Could not unload %03u%02i%02i.mmtile from navmesh", mapId, x, y);
- ASSERT(false);
+ ABORT();
}
else
{
diff --git a/src/common/Collision/Management/VMapManager2.cpp b/src/common/Collision/Management/VMapManager2.cpp
index 9594951196f..a63eac1b935 100644
--- a/src/common/Collision/Management/VMapManager2.cpp
+++ b/src/common/Collision/Management/VMapManager2.cpp
@@ -326,4 +326,9 @@ namespace VMAP
return StaticMapTree::CanLoadMap(std::string(basePath), mapId, x, y);
}
+ void VMapManager2::getInstanceMapTree(InstanceTreeMap &instanceMapTree)
+ {
+ instanceMapTree = iInstanceMapTrees;
+ }
+
} // namespace VMAP
diff --git a/src/common/Collision/Management/VMapManager2.h b/src/common/Collision/Management/VMapManager2.h
index a5891e9642b..c2e1aee1ff7 100644
--- a/src/common/Collision/Management/VMapManager2.h
+++ b/src/common/Collision/Management/VMapManager2.h
@@ -128,7 +128,7 @@ namespace VMAP
return getMapFileName(mapId);
}
virtual bool existsMap(const char* basePath, unsigned int mapId, int x, int y) override;
- public:
+
void getInstanceMapTree(InstanceTreeMap &instanceMapTree);
typedef uint32(*GetLiquidFlagsFn)(uint32 liquidType);
diff --git a/src/common/Collision/Maps/MapTree.cpp b/src/common/Collision/Maps/MapTree.cpp
index b493ec18f5f..e374da4f1b9 100644
--- a/src/common/Collision/Maps/MapTree.cpp
+++ b/src/common/Collision/Maps/MapTree.cpp
@@ -474,4 +474,10 @@ namespace VMAP
}
iLoadedTiles.erase(tile);
}
+
+ void StaticMapTree::getModelInstances(ModelInstance* &models, uint32 &count)
+ {
+ models = iTreeValues;
+ count = iNTreeValues;
+ }
}
diff --git a/src/common/Collision/Models/ModelInstance.h b/src/common/Collision/Models/ModelInstance.h
index dfdb001db0a..f8bbfa4fa73 100644
--- a/src/common/Collision/Models/ModelInstance.h
+++ b/src/common/Collision/Models/ModelInstance.h
@@ -70,12 +70,11 @@ namespace VMAP
void intersectPoint(const G3D::Vector3& p, AreaInfo &info) const;
bool GetLocationInfo(const G3D::Vector3& p, LocationInfo &info) const;
bool GetLiquidLevel(const G3D::Vector3& p, LocationInfo &info, float &liqHeight) const;
+ WorldModel* getWorldModel() { return iModel; }
protected:
G3D::Matrix3 iInvRot;
float iInvScale;
WorldModel* iModel;
- public:
- WorldModel* getWorldModel();
};
} // namespace VMAP
diff --git a/src/common/Collision/Models/WorldModel.cpp b/src/common/Collision/Models/WorldModel.cpp
index 86ab9366c71..7f4d76b244a 100644
--- a/src/common/Collision/Models/WorldModel.cpp
+++ b/src/common/Collision/Models/WorldModel.cpp
@@ -249,6 +249,13 @@ namespace VMAP
return result;
}
+ void WmoLiquid::getPosInfo(uint32 &tilesX, uint32 &tilesY, G3D::Vector3 &corner) const
+ {
+ tilesX = iTilesX;
+ tilesY = iTilesY;
+ corner = iCorner;
+ }
+
// ===================== GroupModel ==================================
GroupModel::GroupModel(const GroupModel &other):
@@ -409,6 +416,13 @@ namespace VMAP
return 0;
}
+ void GroupModel::getMeshData(std::vector<G3D::Vector3>& outVertices, std::vector<MeshTriangle>& outTriangles, WmoLiquid*& liquid)
+ {
+ outVertices = vertices;
+ outTriangles = triangles;
+ liquid = iLiquid;
+ }
+
// ===================== WorldModel ==================================
void WorldModel::setGroupModels(std::vector<GroupModel> &models)
@@ -582,4 +596,9 @@ namespace VMAP
fclose(rf);
return result;
}
+
+ void WorldModel::getGroupModels(std::vector<GroupModel>& outGroupModels)
+ {
+ outGroupModels = groupModels;
+ }
}
diff --git a/src/common/Collision/Models/WorldModel.h b/src/common/Collision/Models/WorldModel.h
index 6a901a59fdf..afa9d15b264 100644
--- a/src/common/Collision/Models/WorldModel.h
+++ b/src/common/Collision/Models/WorldModel.h
@@ -58,6 +58,7 @@ namespace VMAP
uint32 GetFileSize();
bool writeToFile(FILE* wf);
static bool readFromFile(FILE* rf, WmoLiquid* &liquid);
+ void getPosInfo(uint32 &tilesX, uint32 &tilesY, G3D::Vector3 &corner) const;
private:
WmoLiquid() : iTilesX(0), iTilesY(0), iCorner(), iType(0), iHeight(NULL), iFlags(NULL) { }
uint32 iTilesX; //!< number of tiles in x direction, each
@@ -66,8 +67,6 @@ namespace VMAP
uint32 iType; //!< liquid type
float *iHeight; //!< (tilesX + 1)*(tilesY + 1) height values
uint8 *iFlags; //!< info if liquid tile is used
- public:
- void getPosInfo(uint32 &tilesX, uint32 &tilesY, G3D::Vector3 &corner) const;
};
/*! holding additional info for WMO group files */
@@ -92,6 +91,7 @@ namespace VMAP
const G3D::AABox& GetBound() const { return iBound; }
uint32 GetMogpFlags() const { return iMogpFlags; }
uint32 GetWmoID() const { return iGroupWMOID; }
+ void getMeshData(std::vector<G3D::Vector3>& outVertices, std::vector<MeshTriangle>& outTriangles, WmoLiquid*& liquid);
protected:
G3D::AABox iBound;
uint32 iMogpFlags;// 0x8 outdor; 0x2000 indoor
@@ -100,9 +100,8 @@ namespace VMAP
std::vector<MeshTriangle> triangles;
BIH meshTree;
WmoLiquid* iLiquid;
- public:
- void getMeshData(std::vector<G3D::Vector3> &vertices, std::vector<MeshTriangle> &triangles, WmoLiquid* &liquid);
};
+
/*! Holds a model (converted M2 or WMO) in its original coordinate space */
class WorldModel
{
@@ -117,12 +116,11 @@ namespace VMAP
bool GetLocationInfo(const G3D::Vector3 &p, const G3D::Vector3 &down, float &dist, LocationInfo &info) const;
bool writeFile(const std::string &filename);
bool readFile(const std::string &filename);
+ void getGroupModels(std::vector<GroupModel>& outGroupModels);
protected:
uint32 RootWMOID;
std::vector<GroupModel> groupModels;
BIH groupTree;
- public:
- void getGroupModels(std::vector<GroupModel> &groupModels);
};
} // namespace VMAP
diff --git a/src/common/Common.h b/src/common/Common.h
index 09d64acc795..7a1ea247a94 100644
--- a/src/common/Common.h
+++ b/src/common/Common.h
@@ -21,7 +21,6 @@
#include "Define.h"
-#include <unordered_map>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -32,13 +31,19 @@
#include <assert.h>
#include <set>
+#include <unordered_set>
#include <list>
#include <string>
#include <map>
+#include <unordered_map>
#include <queue>
#include <sstream>
#include <algorithm>
#include <memory>
+#include <vector>
+#include <array>
+
+#include <boost/functional/hash.hpp>
#include "Debugging/Errors.h"
@@ -115,10 +120,11 @@ enum LocaleConstant
LOCALE_zhTW = 5,
LOCALE_esES = 6,
LOCALE_esMX = 7,
- LOCALE_ruRU = 8
+ LOCALE_ruRU = 8,
+
+ TOTAL_LOCALES
};
-const uint8 TOTAL_LOCALES = 9;
#define DEFAULT_LOCALE LOCALE_enUS
#define MAX_LOCALES 8
@@ -155,4 +161,19 @@ namespace Trinity
}
}
+//! Hash implementation for std::pair to allow using pairs in unordered_set or as key for unordered_map
+//! Individual types used in pair must be hashable by boost::hash
+namespace std
+{
+ template<class K, class V>
+ struct hash<std::pair<K, V>>
+ {
+ public:
+ size_t operator()(std::pair<K, V> const& key) const
+ {
+ return boost::hash_value(key);
+ }
+ };
+}
+
#endif
diff --git a/src/common/Debugging/Errors.cpp b/src/common/Debugging/Errors.cpp
index cebd9d4cf2f..4c7e91a8219 100644
--- a/src/common/Debugging/Errors.cpp
+++ b/src/common/Debugging/Errors.cpp
@@ -23,6 +23,17 @@
#include <thread>
#include <cstdarg>
+/**
+ @file Errors.cpp
+
+ @brief This file contains definitions of functions used for reporting critical application errors
+
+ It is very important that (std::)abort is NEVER called in place of *((volatile int*)NULL) = 0;
+ Calling abort() on Windows does not invoke unhandled exception filters - a mechanism used by WheatyExceptionReport
+ to log crashes. exit(1) calls here are for static analysis tools to indicate that calling functions defined in this file
+ terminates the application.
+ */
+
namespace Trinity {
void Assert(char const* file, int line, char const* function, char const* message)
@@ -48,10 +59,15 @@ void Assert(char const* file, int line, char const* function, char const* messag
exit(1);
}
-void Fatal(char const* file, int line, char const* function, char const* message)
+void Fatal(char const* file, int line, char const* function, char const* message, ...)
{
- fprintf(stderr, "\n%s:%i in %s FATAL ERROR:\n %s\n",
- file, line, function, message);
+ va_list args;
+ va_start(args, message);
+
+ fprintf(stderr, "\n%s:%i in %s FATAL ERROR:\n ", file, line, function);
+ vfprintf(stderr, message, args);
+ fprintf(stderr, "\n");
+ fflush(stderr);
std::this_thread::sleep_for(std::chrono::seconds(10));
*((volatile int*)NULL) = 0;
@@ -72,4 +88,12 @@ void Warning(char const* file, int line, char const* function, char const* messa
file, line, function, message);
}
+void Abort(char const* file, int line, char const* function)
+{
+ fprintf(stderr, "\n%s:%i in %s ABORTED\n",
+ file, line, function);
+ *((volatile int*)NULL) = 0;
+ exit(1);
+}
+
} // namespace Trinity
diff --git a/src/common/Debugging/Errors.h b/src/common/Debugging/Errors.h
index 4d4624b63dd..9e526933acc 100644
--- a/src/common/Debugging/Errors.h
+++ b/src/common/Debugging/Errors.h
@@ -26,10 +26,12 @@ namespace Trinity
DECLSPEC_NORETURN void Assert(char const* file, int line, char const* function, char const* message) ATTR_NORETURN;
DECLSPEC_NORETURN void Assert(char const* file, int line, char const* function, char const* message, char const* format, ...) ATTR_NORETURN ATTR_PRINTF(5, 6);
- DECLSPEC_NORETURN void Fatal(char const* file, int line, char const* function, char const* message) ATTR_NORETURN;
+ DECLSPEC_NORETURN void Fatal(char const* file, int line, char const* function, char const* message, ...) ATTR_NORETURN ATTR_PRINTF(4, 5);
DECLSPEC_NORETURN void Error(char const* file, int line, char const* function, char const* message) ATTR_NORETURN;
+ DECLSPEC_NORETURN void Abort(char const* file, int line, char const* function) ATTR_NORETURN;
+
void Warning(char const* file, int line, char const* function, char const* message);
} // namespace Trinity
@@ -43,11 +45,13 @@ namespace Trinity
#endif
#define WPAssert(cond, ...) ASSERT_BEGIN do { if (!(cond)) Trinity::Assert(__FILE__, __LINE__, __FUNCTION__, #cond, ##__VA_ARGS__); } while(0) ASSERT_END
-#define WPFatal(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Fatal(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END
+#define WPFatal(cond, ...) ASSERT_BEGIN do { if (!(cond)) Trinity::Fatal(__FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__); } while(0) ASSERT_END
#define WPError(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Error(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END
#define WPWarning(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Warning(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END
+#define WPAbort() ASSERT_BEGIN do { Trinity::Abort(__FILE__, __LINE__, __FUNCTION__); } while(0) ASSERT_END
#define ASSERT WPAssert
+#define ABORT WPAbort
template <typename T> inline T* ASSERT_NOTNULL(T* pointer)
{
diff --git a/src/common/Debugging/WheatyExceptionReport.cpp b/src/common/Debugging/WheatyExceptionReport.cpp
index 7cf109b4070..5b9a1b1bd6c 100644
--- a/src/common/Debugging/WheatyExceptionReport.cpp
+++ b/src/common/Debugging/WheatyExceptionReport.cpp
@@ -63,6 +63,8 @@ std::stack<SymbolDetail> WheatyExceptionReport::symbolDetails;
bool WheatyExceptionReport::stackOverflowException;
bool WheatyExceptionReport::alreadyCrashed;
std::mutex WheatyExceptionReport::alreadyCrashedLock;
+WheatyExceptionReport::pRtlGetVersion WheatyExceptionReport::RtlGetVersion;
+
// Declare global instance of class
WheatyExceptionReport g_WheatyExceptionReport;
@@ -76,6 +78,7 @@ WheatyExceptionReport::WheatyExceptionReport() // Constructor
m_hProcess = GetCurrentProcess();
stackOverflowException = false;
alreadyCrashed = false;
+ RtlGetVersion = (pRtlGetVersion)GetProcAddress(GetModuleHandle(_T("ntdll.dll")), "RtlGetVersion");
if (!IsDebuggerPresent())
{
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
@@ -207,21 +210,36 @@ BOOL WheatyExceptionReport::_GetProcessorName(TCHAR* sProcessorName, DWORD maxco
return TRUE;
}
+template<size_t size>
+void ToTchar(wchar_t const* src, TCHAR (&dst)[size], std::true_type)
+{
+ wcstombs_s(nullptr, dst, src, size);
+}
+
+template<size_t size>
+void ToTchar(wchar_t const* src, TCHAR (&dst)[size], std::false_type)
+{
+ wcscpy_s(dst, src);
+}
+
BOOL WheatyExceptionReport::_GetWindowsVersion(TCHAR* szVersion, DWORD cntMax)
{
// Try calling GetVersionEx using the OSVERSIONINFOEX structure.
// If that fails, try using the OSVERSIONINFO structure.
- OSVERSIONINFOEX osvi = { 0 };
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
- BOOL bOsVersionInfoEx;
- bOsVersionInfoEx = ::GetVersionEx((LPOSVERSIONINFO)(&osvi));
- if (!bOsVersionInfoEx)
+ RTL_OSVERSIONINFOEXW osvi = { 0 };
+ osvi.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW);
+ NTSTATUS bVersionEx = RtlGetVersion((PRTL_OSVERSIONINFOW)&osvi);
+ if (bVersionEx < 0)
{
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
- if (!::GetVersionEx((OSVERSIONINFO*)&osvi))
+ osvi.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOW);
+ if (!RtlGetVersion((PRTL_OSVERSIONINFOW)&osvi))
return FALSE;
}
*szVersion = _T('\0');
+
+ TCHAR szCSDVersion[256];
+ ToTchar(osvi.szCSDVersion, szCSDVersion, std::is_same<TCHAR, char>::type());
+
TCHAR wszTmp[128];
switch (osvi.dwPlatformId)
{
@@ -237,17 +255,28 @@ BOOL WheatyExceptionReport::_GetWindowsVersion(TCHAR* szVersion, DWORD cntMax)
#endif // WINVER < 0x0500
// Test for the specific product family.
- if (osvi.dwMajorVersion == 6)
+ if (osvi.dwMajorVersion == 10)
+ {
+ if (productType == VER_NT_WORKSTATION)
+ _tcsncat(szVersion, _T("Windows 10 "), cntMax);
+ else
+ _tcsncat(szVersion, _T("Windows Server 2016 "), cntMax);
+ }
+ else if (osvi.dwMajorVersion == 6)
{
if (productType == VER_NT_WORKSTATION)
{
- if (osvi.dwMinorVersion == 2)
+ if (osvi.dwMinorVersion == 3)
+ _tcsncat(szVersion, _T("Windows 8.1 "), cntMax);
+ else if (osvi.dwMinorVersion == 2)
_tcsncat(szVersion, _T("Windows 8 "), cntMax);
else if (osvi.dwMinorVersion == 1)
_tcsncat(szVersion, _T("Windows 7 "), cntMax);
else
_tcsncat(szVersion, _T("Windows Vista "), cntMax);
}
+ else if (osvi.dwMinorVersion == 3)
+ _tcsncat(szVersion, _T("Windows Server 2012 R2 "), cntMax);
else if (osvi.dwMinorVersion == 2)
_tcsncat(szVersion, _T("Windows Server 2012 "), cntMax);
else if (osvi.dwMinorVersion == 1)
@@ -265,7 +294,7 @@ BOOL WheatyExceptionReport::_GetWindowsVersion(TCHAR* szVersion, DWORD cntMax)
_tcsncat(szVersion, _T("Microsoft Windows NT "), cntMax);
// Test for specific product on Windows NT 4.0 SP6 and later.
- if (bOsVersionInfoEx)
+ if (bVersionEx >= 0)
{
// Test for the workstation type.
if (productType == VER_NT_WORKSTATION)
@@ -282,7 +311,18 @@ BOOL WheatyExceptionReport::_GetWindowsVersion(TCHAR* szVersion, DWORD cntMax)
// Test for the server type.
else if (productType == VER_NT_SERVER)
{
- if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2)
+ if (osvi.dwMajorVersion == 6 || osvi.dwMajorVersion == 10)
+ {
+ if (suiteMask & VER_SUITE_SMALLBUSINESS_RESTRICTED)
+ _tcsncat(szVersion, _T("Essentials "), cntMax);
+ else if (suiteMask & VER_SUITE_DATACENTER)
+ _tcsncat(szVersion, _T("Datacenter "), cntMax);
+ else if (suiteMask & VER_SUITE_ENTERPRISE)
+ _tcsncat(szVersion, _T("Enterprise "), cntMax);
+ else
+ _tcsncat(szVersion, _T("Standard "), cntMax);
+ }
+ else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2)
{
if (suiteMask & VER_SUITE_DATACENTER)
_tcsncat(szVersion, _T("Datacenter Edition "), cntMax);
@@ -313,7 +353,7 @@ BOOL WheatyExceptionReport::_GetWindowsVersion(TCHAR* szVersion, DWORD cntMax)
}
// Display service pack (if any) and build number.
- if (osvi.dwMajorVersion == 4 && _tcsicmp(osvi.szCSDVersion, _T("Service Pack 6")) == 0)
+ if (osvi.dwMajorVersion == 4 && _tcsicmp(szCSDVersion, _T("Service Pack 6")) == 0)
{
HKEY hKey;
LONG lRet;
@@ -329,26 +369,26 @@ BOOL WheatyExceptionReport::_GetWindowsVersion(TCHAR* szVersion, DWORD cntMax)
else // Windows NT 4.0 prior to SP6a
{
_stprintf(wszTmp, _T("%s (Version %d.%d, Build %d)"),
- osvi.szCSDVersion, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber & 0xFFFF);
+ szCSDVersion, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber & 0xFFFF);
_tcsncat(szVersion, wszTmp, cntMax);
}
::RegCloseKey(hKey);
}
else // Windows NT 3.51 and earlier or Windows 2000 and later
{
- if (!_tcslen(osvi.szCSDVersion))
+ if (!_tcslen(szCSDVersion))
_stprintf(wszTmp, _T("(Version %d.%d, Build %d)"),
osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber & 0xFFFF);
else
_stprintf(wszTmp, _T("%s (Version %d.%d, Build %d)"),
- osvi.szCSDVersion, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber & 0xFFFF);
+ szCSDVersion, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber & 0xFFFF);
_tcsncat(szVersion, wszTmp, cntMax);
}
break;
}
default:
_stprintf(wszTmp, _T("%s (Version %d.%d, Build %d)"),
- osvi.szCSDVersion, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber & 0xFFFF);
+ szCSDVersion, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber & 0xFFFF);
_tcsncat(szVersion, wszTmp, cntMax);
break;
}
diff --git a/src/common/Debugging/WheatyExceptionReport.h b/src/common/Debugging/WheatyExceptionReport.h
index 8c2479d5232..eb62d8bceef 100644
--- a/src/common/Debugging/WheatyExceptionReport.h
+++ b/src/common/Debugging/WheatyExceptionReport.h
@@ -3,6 +3,8 @@
#if PLATFORM == PLATFORM_WINDOWS && !defined(__MINGW32__)
+#include <winnt.h>
+#include <winternl.h>
#include <dbghelp.h>
#include <set>
#include <stdlib.h>
@@ -197,6 +199,8 @@ class WheatyExceptionReport
static bool stackOverflowException;
static bool alreadyCrashed;
static std::mutex alreadyCrashedLock;
+ typedef NTSTATUS(NTAPI* pRtlGetVersion)(PRTL_OSVERSIONINFOW lpVersionInformation);
+ static pRtlGetVersion RtlGetVersion;
static char* PushSymbolDetail(char* pszCurrBuffer);
static char* PopSymbolDetail(char* pszCurrBuffer);
diff --git a/src/common/Define.h b/src/common/Define.h
index 97e07cef8b3..7332bdc4cff 100644
--- a/src/common/Define.h
+++ b/src/common/Define.h
@@ -33,6 +33,8 @@
# endif
# if defined(HELGRIND)
# include <valgrind/helgrind.h>
+# undef _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE
+# undef _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER
# define _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) ANNOTATE_HAPPENS_BEFORE(A)
# define _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) ANNOTATE_HAPPENS_AFTER(A)
# endif
diff --git a/src/common/Utilities/Util.cpp b/src/common/Utilities/Util.cpp
index 33c273fb05f..9f61dd12e4c 100644
--- a/src/common/Utilities/Util.cpp
+++ b/src/common/Utilities/Util.cpp
@@ -58,6 +58,13 @@ uint32 urand(uint32 min, uint32 max)
return GetRng()->URandom(min, max);
}
+uint32 urandms(uint32 min, uint32 max)
+{
+ ASSERT(max >= min);
+ ASSERT(INT_MAX/IN_MILLISECONDS >= max);
+ return GetRng()->URandom(min * IN_MILLISECONDS, max * IN_MILLISECONDS);
+}
+
float frand(float min, float max)
{
ASSERT(max >= min);
diff --git a/src/common/Utilities/Util.h b/src/common/Utilities/Util.h
index 3da1c800410..b748e83408b 100644
--- a/src/common/Utilities/Util.h
+++ b/src/common/Utilities/Util.h
@@ -82,6 +82,9 @@ int32 irand(int32 min, int32 max);
/* Return a random number in the range min..max (inclusive). */
uint32 urand(uint32 min, uint32 max);
+/* Return a random millisecond value between min and max seconds. Functionally equivalent to urand(min*IN_MILLISECONDS, max*IN_MILLISECONDS). */
+uint32 urandms(uint32 min, uint32 max);
+
/* Return a random number in the range 0 .. UINT32_MAX. */
uint32 rand32();
@@ -537,7 +540,7 @@ bool CompareValues(ComparisionType type, T val1, T val2)
return val1 <= val2;
default:
// incorrect parameter
- ASSERT(false);
+ ABORT();
return false;
}
}
diff --git a/src/server/authserver/Realms/RealmList.cpp b/src/server/authserver/Realms/RealmList.cpp
index 59cb2392063..f5461d5f42e 100644
--- a/src/server/authserver/Realms/RealmList.cpp
+++ b/src/server/authserver/Realms/RealmList.cpp
@@ -145,7 +145,7 @@ void RealmList::UpdateRealms(bool init)
catch (std::exception& ex)
{
TC_LOG_ERROR("server.authserver", "Realmlist::UpdateRealms has thrown an exception: %s", ex.what());
- ASSERT(false);
+ ABORT();
}
}
while (result->NextRow());
diff --git a/src/server/authserver/authserver.conf.dist b/src/server/authserver/authserver.conf.dist
index ba9cb5b23b4..1b10fa4e31d 100644
--- a/src/server/authserver/authserver.conf.dist
+++ b/src/server/authserver/authserver.conf.dist
@@ -155,6 +155,7 @@ LoginDatabase.WorkerThreads = 1
# 1 - (Enabled)
Wrong.Password.Login.Logging = 0
+
#
###################################################################################################
@@ -182,7 +183,7 @@ Updates.EnableDatabases = 0
Updates.SourcePath = ""
#
-# Updates.SourcePath
+# Updates.MySqlCLIPath
# 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"
diff --git a/src/server/database/CMakeLists.txt b/src/server/database/CMakeLists.txt
index 2375f18d7b5..19fa0ee0acf 100644
--- a/src/server/database/CMakeLists.txt
+++ b/src/server/database/CMakeLists.txt
@@ -8,7 +8,9 @@
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-find_package(MySQL REQUIRED)
+if (NOT MYSQL_FOUND)
+ message(SEND_ERROR "MySQL wasn't found on your system but it's required to build the servers!")
+endif()
if( USE_COREPCH )
include_directories(${CMAKE_CURRENT_BINARY_DIR})
diff --git a/src/server/database/Database/DatabaseLoader.cpp b/src/server/database/Database/DatabaseLoader.cpp
index a3e2083fff4..39719e4c6a1 100644
--- a/src/server/database/Database/DatabaseLoader.cpp
+++ b/src/server/database/Database/DatabaseLoader.cpp
@@ -37,14 +37,14 @@ DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool<T>& pool, std::st
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());
+ TC_LOG_ERROR(_logger, "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. "
+ TC_LOG_ERROR(_logger, "%s database: invalid number of worker threads specified. "
"Please pick a value between 1 and 32.", name.c_str());
return false;
}
@@ -66,7 +66,7 @@ DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool<T>& pool, std::st
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());
+ "for specific errors. Read wiki at http://www.trinitycore.info/display/tc/TrinityCore+Home", name.c_str());
return false;
}
@@ -85,7 +85,7 @@ DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool<T>& pool, std::st
{
if (!DBUpdater<T>::Populate(pool))
{
- TC_LOG_ERROR(_logger.c_str(), "Could not populate the %s database, see log for details.", name.c_str());
+ TC_LOG_ERROR(_logger, "Could not populate the %s database, see log for details.", name.c_str());
return false;
}
return true;
@@ -95,7 +95,7 @@ DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool<T>& pool, std::st
{
if (!DBUpdater<T>::Update(pool))
{
- TC_LOG_ERROR(_logger.c_str(), "Could not update the %s database, see log for details.", name.c_str());
+ TC_LOG_ERROR(_logger, "Could not update the %s database, see log for details.", name.c_str());
return false;
}
return true;
@@ -106,7 +106,7 @@ DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool<T>& pool, std::st
{
if (!pool.PrepareStatements())
{
- TC_LOG_ERROR(_logger.c_str(), "Could not prepare statements of the %s database, see log for details.", name.c_str());
+ TC_LOG_ERROR(_logger, "Could not prepare statements of the %s database, see log for details.", name.c_str());
return false;
}
return true;
diff --git a/src/server/database/Database/DatabaseWorkerPool.h b/src/server/database/Database/DatabaseWorkerPool.h
index f5002c6943b..c7b5d8c8fea 100644
--- a/src/server/database/Database/DatabaseWorkerPool.h
+++ b/src/server/database/Database/DatabaseWorkerPool.h
@@ -67,6 +67,8 @@ class DatabaseWorkerPool
WPFatal(mysql_thread_safe(), "Used MySQL library isn't thread-safe.");
WPFatal(mysql_get_client_version() >= MIN_MYSQL_CLIENT_VERSION, "TrinityCore does not support MySQL versions below 5.1");
+ WPFatal(mysql_get_client_version() == MYSQL_VERSION_ID, "Used MySQL library version (%s) does not match the version used to compile TrinityCore (%s).",
+ mysql_get_client_info(), MYSQL_SERVER_VERSION);
}
~DatabaseWorkerPool()
@@ -428,10 +430,12 @@ class DatabaseWorkerPool
Other
*/
+ typedef typename T::Statements PreparedStatementIndex;
+
//! Automanaged (internally) pointer to a prepared statement object for usage in upper level code.
//! Pointer is deleted in this->DirectExecute(PreparedStatement*), this->Query(PreparedStatement*) or PreparedStatementTask::~PreparedStatementTask.
//! This object is not tied to the prepared statement on the MySQL context yet until execution.
- PreparedStatement* GetPreparedStatement(uint32 index)
+ PreparedStatement* GetPreparedStatement(PreparedStatementIndex index)
{
return new PreparedStatement(index);
}
@@ -482,7 +486,7 @@ class DatabaseWorkerPool
else if (type == IDX_SYNCH)
t = new T(*_connectionInfo);
else
- ASSERT(false);
+ ABORT();
_connections[type][i] = t;
++_connectionCount[type];
diff --git a/src/server/database/Database/Field.cpp b/src/server/database/Database/Field.cpp
index 89195b699b7..f7794bd8975 100644
--- a/src/server/database/Database/Field.cpp
+++ b/src/server/database/Database/Field.cpp
@@ -30,18 +30,11 @@ Field::~Field()
CleanUp();
}
-void Field::SetByteValue(const void* newValue, const size_t newSize, enum_field_types newType, uint32 length)
+void Field::SetByteValue(void* newValue, enum_field_types newType, uint32 length)
{
- if (data.value)
- CleanUp();
-
// This value stores raw bytes that have to be explicitly cast later
- if (newValue)
- {
- data.value = new char[newSize];
- memcpy(data.value, newValue, newSize);
- data.length = length;
- }
+ data.value = newValue;
+ data.length = length;
data.type = newType;
data.raw = true;
}
diff --git a/src/server/database/Database/Field.h b/src/server/database/Database/Field.h
index 1bbd264482f..72364f2c034 100644
--- a/src/server/database/Database/Field.h
+++ b/src/server/database/Database/Field.h
@@ -23,12 +23,44 @@
#include <mysql.h>
+/**
+ @class Field
+
+ @brief Class used to access individual fields of database query result
+
+ Guideline on field type matching:
+
+ | MySQL type | method to use |
+ |------------------------|----------------------------------------|
+ | TINYINT | GetBool, GetInt8, GetUInt8 |
+ | SMALLINT | GetInt16, GetUInt16 |
+ | MEDIUMINT, INT | GetInt32, GetUInt32 |
+ | BIGINT | GetInt64, GetUInt64 |
+ | FLOAT | GetFloat |
+ | DOUBLE, DECIMAL | GetDouble |
+ | CHAR, VARCHAR, | GetCString, GetString |
+ | TINYTEXT, MEDIUMTEXT, | GetCString, GetString |
+ | TEXT, LONGTEXT | GetCString, GetString |
+ | TINYBLOB, MEDIUMBLOB, | GetBinary, GetString |
+ | BLOB, LONGBLOB | GetBinary, GetString |
+ | BINARY, VARBINARY | GetBinary |
+
+ Return types of aggregate functions:
+
+ | Function | Type |
+ |----------|-------------------|
+ | MIN, MAX | Same as the field |
+ | SUM, AVG | DECIMAL |
+ | COUNT | BIGINT |
+*/
class Field
{
friend class ResultSet;
friend class PreparedResultSet;
public:
+ Field();
+ ~Field();
bool GetBool() const // Wrapper, actually gets integer
{
@@ -43,7 +75,8 @@ class Field
#ifdef TRINITY_DEBUG
if (!IsType(MYSQL_TYPE_TINY))
{
- TC_LOG_WARN("sql.sql", "Warning: GetUInt8() on non-tinyint field. Using type: %s.", FieldTypeToString(data.type));
+ TC_LOG_WARN("sql.sql", "Warning: GetUInt8() on non-tinyint field %s.%s (%s.%s) at index %u. Using type: %s.",
+ meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type);
return 0;
}
#endif
@@ -61,7 +94,8 @@ class Field
#ifdef TRINITY_DEBUG
if (!IsType(MYSQL_TYPE_TINY))
{
- TC_LOG_WARN("sql.sql", "Warning: GetInt8() on non-tinyint field. Using type: %s.", FieldTypeToString(data.type));
+ TC_LOG_WARN("sql.sql", "Warning: GetInt8() on non-tinyint field %s.%s (%s.%s) at index %u. Using type: %s.",
+ meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type);
return 0;
}
#endif
@@ -79,7 +113,8 @@ class Field
#ifdef TRINITY_DEBUG
if (!IsType(MYSQL_TYPE_SHORT) && !IsType(MYSQL_TYPE_YEAR))
{
- TC_LOG_WARN("sql.sql", "Warning: GetUInt16() on non-smallint field. Using type: %s.", FieldTypeToString(data.type));
+ TC_LOG_WARN("sql.sql", "Warning: GetUInt16() on non-smallint field %s.%s (%s.%s) at index %u. Using type: %s.",
+ meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type);
return 0;
}
#endif
@@ -97,7 +132,8 @@ class Field
#ifdef TRINITY_DEBUG
if (!IsType(MYSQL_TYPE_SHORT) && !IsType(MYSQL_TYPE_YEAR))
{
- TC_LOG_WARN("sql.sql", "Warning: GetInt16() on non-smallint field. Using type: %s.", FieldTypeToString(data.type));
+ TC_LOG_WARN("sql.sql", "Warning: GetInt16() on non-smallint field %s.%s (%s.%s) at index %u. Using type: %s.",
+ meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type);
return 0;
}
#endif
@@ -115,7 +151,8 @@ class Field
#ifdef TRINITY_DEBUG
if (!IsType(MYSQL_TYPE_INT24) && !IsType(MYSQL_TYPE_LONG))
{
- TC_LOG_WARN("sql.sql", "Warning: GetUInt32() on non-(medium)int field. Using type: %s.", FieldTypeToString(data.type));
+ TC_LOG_WARN("sql.sql", "Warning: GetUInt32() on non-(medium)int field %s.%s (%s.%s) at index %u. Using type: %s.",
+ meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type);
return 0;
}
#endif
@@ -133,7 +170,8 @@ class Field
#ifdef TRINITY_DEBUG
if (!IsType(MYSQL_TYPE_INT24) && !IsType(MYSQL_TYPE_LONG))
{
- TC_LOG_WARN("sql.sql", "Warning: GetInt32() on non-(medium)int field. Using type: %s.", FieldTypeToString(data.type));
+ TC_LOG_WARN("sql.sql", "Warning: GetInt32() on non-(medium)int field %s.%s (%s.%s) at index %u. Using type: %s.",
+ meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type);
return 0;
}
#endif
@@ -151,7 +189,8 @@ class Field
#ifdef TRINITY_DEBUG
if (!IsType(MYSQL_TYPE_LONGLONG) && !IsType(MYSQL_TYPE_BIT))
{
- TC_LOG_WARN("sql.sql", "Warning: GetUInt64() on non-bigint field. Using type: %s.", FieldTypeToString(data.type));
+ TC_LOG_WARN("sql.sql", "Warning: GetUInt64() on non-bigint field %s.%s (%s.%s) at index %u. Using type: %s.",
+ meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type);
return 0;
}
#endif
@@ -169,7 +208,8 @@ class Field
#ifdef TRINITY_DEBUG
if (!IsType(MYSQL_TYPE_LONGLONG) && !IsType(MYSQL_TYPE_BIT))
{
- TC_LOG_WARN("sql.sql", "Warning: GetInt64() on non-bigint field. Using type: %s.", FieldTypeToString(data.type));
+ TC_LOG_WARN("sql.sql", "Warning: GetInt64() on non-bigint field %s.%s (%s.%s) at index %u. Using type: %s.",
+ meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type);
return 0;
}
#endif
@@ -187,7 +227,8 @@ class Field
#ifdef TRINITY_DEBUG
if (!IsType(MYSQL_TYPE_FLOAT))
{
- TC_LOG_WARN("sql.sql", "Warning: GetFloat() on non-float field. Using type: %s.", FieldTypeToString(data.type));
+ TC_LOG_WARN("sql.sql", "Warning: GetFloat() on non-float field %s.%s (%s.%s) at index %u. Using type: %s.",
+ meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type);
return 0.0f;
}
#endif
@@ -203,14 +244,15 @@ class Field
return 0.0f;
#ifdef TRINITY_DEBUG
- if (!IsType(MYSQL_TYPE_DOUBLE))
+ if (!IsType(MYSQL_TYPE_DOUBLE) && !IsType(MYSQL_TYPE_NEWDECIMAL))
{
- TC_LOG_WARN("sql.sql", "Warning: GetDouble() on non-double field. Using type: %s.", FieldTypeToString(data.type));
+ TC_LOG_WARN("sql.sql", "Warning: GetDouble() on non-double/non-decimal field %s.%s (%s.%s) at index %u. Using type: %s.",
+ meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type);
return 0.0f;
}
#endif
- if (data.raw)
+ if (data.raw && !IsType(MYSQL_TYPE_NEWDECIMAL))
return *reinterpret_cast<double*>(data.value);
return static_cast<double>(atof((char*)data.value));
}
@@ -223,7 +265,8 @@ class Field
#ifdef TRINITY_DEBUG
if (IsNumeric())
{
- TC_LOG_WARN("sql.sql", "Error: GetCString() on numeric field. Using type: %s.", FieldTypeToString(data.type));
+ TC_LOG_WARN("sql.sql", "Error: GetCString() on numeric field %s.%s (%s.%s) at index %u. Using type: %s.",
+ meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type);
return NULL;
}
#endif
@@ -236,14 +279,11 @@ class Field
if (!data.value)
return "";
- if (data.raw)
- {
- char const* string = GetCString();
- if (!string)
- string = "";
- return std::string(string, data.length);
- }
- return std::string((char*)data.value);
+ char const* string = GetCString();
+ if (!string)
+ return "";
+
+ return std::string(string, data.length);
}
bool IsNull() const
@@ -251,10 +291,17 @@ class Field
return data.value == NULL;
}
- protected:
- Field();
- ~Field();
+ struct Metadata
+ {
+ char const* TableName;
+ char const* TableAlias;
+ char const* Name;
+ char const* Alias;
+ char const* Type;
+ uint32 Index;
+ };
+ protected:
#pragma pack(push, 1)
struct
{
@@ -265,12 +312,14 @@ class Field
} data;
#pragma pack(pop)
- void SetByteValue(void const* newValue, size_t const newSize, enum_field_types newType, uint32 length);
+ void SetByteValue(void* newValue, enum_field_types newType, uint32 length);
void SetStructuredValue(char* newValue, enum_field_types newType);
void CleanUp()
{
- delete[] ((char*)data.value);
+ // Field does not own the data if fetched with prepared statement
+ if (!data.raw)
+ delete[] ((char*)data.value);
data.value = NULL;
}
@@ -375,6 +424,19 @@ class Field
default: return "-Unknown-";
}
}
+
+ void SetMetadata(MYSQL_FIELD* field, uint32 fieldIndex)
+ {
+ meta.TableName = field->org_table;
+ meta.TableAlias = field->table;
+ meta.Name = field->org_name;
+ meta.Alias = field->name;
+ meta.Type = FieldTypeToString(field->type);
+ meta.Index = fieldIndex;
+ }
+
+ Metadata meta;
+
#endif
};
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp
index 1efdb16804f..45bfee5d596 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp
@@ -105,7 +105,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_SEL_MAIL_COUNT, "SELECT COUNT(*) FROM mail WHERE receiver = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_CHARACTER_SOCIALLIST, "SELECT friend, flags, note FROM character_social JOIN characters ON characters.guid = character_social.friend WHERE character_social.guid = ? AND deleteinfos_name IS NULL LIMIT 255", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER_HOMEBIND, "SELECT mapId, zoneId, posX, posY, posZ FROM character_homebind WHERE guid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_SEL_CHARACTER_SPELLCOOLDOWNS, "SELECT spell, item, time FROM character_spell_cooldown WHERE guid = ? AND time > UNIX_TIMESTAMP()", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_SEL_CHARACTER_SPELLCOOLDOWNS, "SELECT spell, item, time, categoryId, categoryEnd FROM character_spell_cooldown WHERE guid = ? AND time > UNIX_TIMESTAMP()", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER_DECLINEDNAMES, "SELECT genitive, dative, accusative, instrumental, prepositional FROM character_declinedname WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_GUILD_MEMBER, "SELECT guildid, rank FROM guild_member WHERE guid = ?", CONNECTION_BOTH);
PrepareStatement(CHAR_SEL_GUILD_MEMBER_EXTENDED, "SELECT g.guildid, g.name, gr.rname, gr.rid, gm.pnote, gm.offnote "
@@ -127,8 +127,8 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_SEL_CHARACTER_ACTIONS_SPEC, "SELECT button, action, type FROM character_action WHERE guid = ? AND spec = ? ORDER BY button", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_MAILITEMS, "SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, item_guid, itemEntry, owner_guid FROM mail_items mi JOIN item_instance ii ON mi.item_guid = ii.guid WHERE mail_id = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_AUCTION_ITEMS, "SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, itemguid, itemEntry FROM auctionhouse ah JOIN item_instance ii ON ah.itemguid = ii.guid", CONNECTION_SYNCH);
- PrepareStatement(CHAR_SEL_AUCTIONS, "SELECT id, auctioneerguid, itemguid, itemEntry, count, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit FROM auctionhouse ah INNER JOIN item_instance ii ON ii.guid = ah.itemguid", CONNECTION_SYNCH);
- PrepareStatement(CHAR_INS_AUCTION, "INSERT INTO auctionhouse (id, auctioneerguid, itemguid, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_SEL_AUCTIONS, "SELECT id, houseid, itemguid, itemEntry, count, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit FROM auctionhouse ah INNER JOIN item_instance ii ON ii.guid = ah.itemguid", CONNECTION_SYNCH);
+ PrepareStatement(CHAR_INS_AUCTION, "INSERT INTO auctionhouse (id, houseid, itemguid, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_AUCTION, "DELETE FROM auctionhouse WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_AUCTION_BID, "UPDATE auctionhouse SET buyguid = ?, lastbid = ? WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_MAIL, "INSERT INTO mail(id, messageType, stationery, mailTemplateId, sender, receiver, subject, body, has_items, expire_time, deliver_time, money, cod, checked) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
@@ -157,7 +157,6 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_DEL_GIFT, "DELETE FROM character_gifts WHERE item_guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER_GIFT_BY_ITEM, "SELECT entry, flags FROM character_gifts WHERE item_guid = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_ACCOUNT_BY_NAME, "SELECT account FROM characters WHERE name = ?", CONNECTION_SYNCH);
- PrepareStatement(CHAR_SEL_ACCOUNT_BY_GUID, "SELECT account FROM characters WHERE guid = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_CHARACTER_DATA_BY_GUID, "SELECT account, name, level FROM characters WHERE guid = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_DEL_ACCOUNT_INSTANCE_LOCK_TIMES, "DELETE FROM account_instance_times WHERE accountId = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_ACCOUNT_INSTANCE_LOCK_TIMES, "INSERT INTO account_instance_times (accountId, instanceId, releaseTime) VALUES (?, ?, ?)", CONNECTION_ASYNC);
@@ -251,7 +250,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
// Account data
- PrepareStatement(CHAR_SEL_ACCOUNT_DATA, "SELECT type, time, data FROM account_data WHERE accountId = ?", CONNECTION_SYNCH);
+ PrepareStatement(CHAR_SEL_ACCOUNT_DATA, "SELECT type, time, data FROM account_data WHERE accountId = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_REP_ACCOUNT_DATA, "REPLACE INTO account_data (accountId, type, time, data) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_ACCOUNT_DATA, "DELETE FROM account_data WHERE accountId = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_PLAYER_ACCOUNT_DATA, "SELECT type, time, data FROM character_account_data WHERE guid = ?", CONNECTION_ASYNC);
@@ -259,7 +258,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_DEL_PLAYER_ACCOUNT_DATA, "DELETE FROM character_account_data WHERE guid = ?", CONNECTION_ASYNC);
// Tutorials
- PrepareStatement(CHAR_SEL_TUTORIALS, "SELECT tut0, tut1, tut2, tut3, tut4, tut5, tut6, tut7 FROM account_tutorial WHERE accountId = ?", CONNECTION_SYNCH);
+ PrepareStatement(CHAR_SEL_TUTORIALS, "SELECT tut0, tut1, tut2, tut3, tut4, tut5, tut6, tut7 FROM account_tutorial WHERE accountId = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_HAS_TUTORIALS, "SELECT 1 FROM account_tutorial WHERE accountId = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_INS_TUTORIALS, "INSERT INTO account_tutorial(tut0, tut1, tut2, tut3, tut4, tut5, tut6, tut7, accountId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_TUTORIALS, "UPDATE account_tutorial SET tut0 = ?, tut1 = ?, tut2 = ?, tut3 = ?, tut4 = ?, tut5 = ?, tut6 = ?, tut7 = ? WHERE accountId = ?", CONNECTION_ASYNC);
@@ -316,11 +315,11 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_DEL_PLAYER_HOMEBIND, "DELETE FROM character_homebind WHERE guid = ?", CONNECTION_ASYNC);
// Corpse
- PrepareStatement(CHAR_SEL_CORPSES, "SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, corpseGuid, guid FROM corpse WHERE corpseType <> 0", CONNECTION_SYNCH);
- PrepareStatement(CHAR_INS_CORPSE, "INSERT INTO corpse (corpseGuid, guid, posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
- PrepareStatement(CHAR_DEL_CORPSE, "DELETE FROM corpse WHERE corpseGuid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_DEL_PLAYER_CORPSES, "DELETE FROM corpse WHERE guid = ? AND corpseType <> 0", CONNECTION_ASYNC);
- PrepareStatement(CHAR_DEL_OLD_CORPSES, "DELETE FROM corpse WHERE corpseType = 0 OR time < (UNIX_TIMESTAMP(NOW()) - ?)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_SEL_CORPSES, "SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, guid FROM corpse WHERE mapId = ? AND instanceId = ?", CONNECTION_SYNCH);
+ PrepareStatement(CHAR_INS_CORPSE, "INSERT INTO corpse (guid, posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_DEL_CORPSE, "DELETE FROM corpse WHERE guid = ?", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_DEL_CORPSES_FROM_MAP, "DELETE FROM corpse WHERE mapId = ? AND instanceId = ?", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_SEL_CORPSE_LOCATION, "SELECT mapId, posX, posY, posZ, orientation FROM corpse WHERE guid = ?", CONNECTION_ASYNC);
// Creature respawn
PrepareStatement(CHAR_SEL_CREATURE_RESPAWNS, "SELECT guid, respawnTime FROM creature_respawn WHERE mapId = ? AND instanceId = ?", CONNECTION_SYNCH);
@@ -336,10 +335,11 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_DEL_GO_RESPAWN_BY_INSTANCE, "DELETE FROM gameobject_respawn WHERE mapId = ? AND instanceId = ?", CONNECTION_ASYNC);
// GM Tickets
- PrepareStatement(CHAR_SEL_GM_TICKETS, "SELECT id, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp FROM gm_ticket", CONNECTION_SYNCH);
- PrepareStatement(CHAR_REP_GM_TICKET, "REPLACE INTO gm_ticket (id, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_SEL_GM_TICKETS, "SELECT id, type, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp FROM gm_ticket", CONNECTION_SYNCH);
+ PrepareStatement(CHAR_REP_GM_TICKET, "REPLACE INTO gm_ticket (id, type, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp, resolvedBy) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_GM_TICKET, "DELETE FROM gm_ticket WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_PLAYER_GM_TICKETS, "DELETE FROM gm_ticket WHERE playerGuid = ?", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_UPD_PLAYER_GM_TICKETS_ON_CHAR_DELETION, "UPDATE gm_ticket SET type = 2 WHERE playerGuid = ?", CONNECTION_ASYNC);
// GM Survey/subsurvey/lag report
PrepareStatement(CHAR_INS_GM_SURVEY, "INSERT INTO gm_survey (guid, surveyId, mainSurvey, comment, createTime) VALUES (?, ?, ?, ?, UNIX_TIMESTAMP(NOW()))", CONNECTION_ASYNC);
@@ -498,7 +498,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_UPD_CHAR_TITLES_FACTION_CHANGE, "UPDATE characters SET knownTitles = ? WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_RES_CHAR_TITLES_FACTION_CHANGE, "UPDATE characters SET chosenTitle = 0 WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_CHAR_SPELL_COOLDOWNS, "DELETE FROM character_spell_cooldown WHERE guid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_INS_CHAR_SPELL_COOLDOWN, "INSERT INTO character_spell_cooldown (guid, spell, item, time) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_INS_CHAR_SPELL_COOLDOWN, "INSERT INTO character_spell_cooldown (guid, spell, item, time, categoryId, categoryEnd) VALUES (?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_CHARACTER, "DELETE FROM characters WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_CHAR_ACTION, "DELETE FROM character_action WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_CHAR_AURA, "DELETE FROM character_aura WHERE guid = ?", CONNECTION_ASYNC);
@@ -578,12 +578,12 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_INS_CHAR_PET_DECLINEDNAME, "INSERT INTO character_pet_declinedname (id, owner, genitive, dative, accusative, instrumental, prepositional) VALUES (?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_PET_AURA, "SELECT casterGuid, spell, effectMask, recalculateMask, stackCount, amount0, amount1, amount2, base_amount0, base_amount1, base_amount2, maxDuration, remainTime, remainCharges FROM pet_aura WHERE guid = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_PET_SPELL, "SELECT spell, active FROM pet_spell WHERE guid = ?", CONNECTION_SYNCH);
- PrepareStatement(CHAR_SEL_PET_SPELL_COOLDOWN, "SELECT spell, time FROM pet_spell_cooldown WHERE guid = ? AND time > UNIX_TIMESTAMP()", CONNECTION_SYNCH);
+ PrepareStatement(CHAR_SEL_PET_SPELL_COOLDOWN, "SELECT spell, time, categoryId, categoryEnd FROM pet_spell_cooldown WHERE guid = ? AND time > UNIX_TIMESTAMP()", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_PET_DECLINED_NAME, "SELECT genitive, dative, accusative, instrumental, prepositional FROM character_pet_declinedname WHERE owner = ? AND id = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_DEL_PET_AURAS, "DELETE FROM pet_aura WHERE guid = ?", CONNECTION_BOTH);
PrepareStatement(CHAR_DEL_PET_SPELLS, "DELETE FROM pet_spell WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_PET_SPELL_COOLDOWNS, "DELETE FROM pet_spell_cooldown WHERE guid = ?", CONNECTION_BOTH);
- PrepareStatement(CHAR_INS_PET_SPELL_COOLDOWN, "INSERT INTO pet_spell_cooldown (guid, spell, time) VALUES (?, ?, ?)", CONNECTION_BOTH);
+ PrepareStatement(CHAR_INS_PET_SPELL_COOLDOWN, "INSERT INTO pet_spell_cooldown (guid, spell, time, categoryId, categoryEnd) VALUES (?, ?, ?, ?, ?)", CONNECTION_BOTH);
PrepareStatement(CHAR_DEL_PET_SPELL_BY_SPELL, "DELETE FROM pet_spell WHERE guid = ? and spell = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_PET_SPELL, "INSERT INTO pet_spell (guid, spell, active) VALUES (?, ?, ?)", CONNECTION_BOTH);
PrepareStatement(CHAR_INS_PET_AURA, "INSERT INTO pet_aura (guid, casterGuid, spell, effectMask, recalculateMask, stackCount, amount0, amount1, amount2, "
@@ -603,7 +603,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
// PvPstats
PrepareStatement(CHAR_SEL_PVPSTATS_MAXID, "SELECT MAX(id) FROM pvpstats_battlegrounds", CONNECTION_SYNCH);
PrepareStatement(CHAR_INS_PVPSTATS_BATTLEGROUND, "INSERT INTO pvpstats_battlegrounds (id, winner_faction, bracket_id, type, date) VALUES (?, ?, ?, ?, NOW())", CONNECTION_ASYNC);
- PrepareStatement(CHAR_INS_PVPSTATS_PLAYER, "INSERT INTO pvpstats_players (battleground_id, character_guid, score_killing_blows, score_deaths, score_honorable_kills, score_bonus_honor, score_damage_done, score_healing_done, attr_1, attr_2, attr_3, attr_4, attr_5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_INS_PVPSTATS_PLAYER, "INSERT INTO pvpstats_players (battleground_id, character_guid, winner, score_killing_blows, score_deaths, score_honorable_kills, score_bonus_honor, score_damage_done, score_healing_done, attr_1, attr_2, attr_3, attr_4, attr_5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_PVPSTATS_FACTIONS_OVERALL, "SELECT winner_faction, COUNT(*) AS count FROM pvpstats_battlegrounds WHERE DATEDIFF(NOW(), date) < 7 GROUP BY winner_faction ORDER BY winner_faction ASC", CONNECTION_SYNCH);
// QuestTracker
@@ -611,4 +611,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_UPD_QUEST_TRACK_GM_COMPLETE, "UPDATE quest_tracker SET completed_by_gm = 1 WHERE id = ? AND character_guid = ? ORDER BY quest_accept_time DESC LIMIT 1", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_QUEST_TRACK_COMPLETE_TIME, "UPDATE quest_tracker SET quest_complete_time = NOW() WHERE id = ? AND character_guid = ? ORDER BY quest_accept_time DESC LIMIT 1", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_QUEST_TRACK_ABANDON_TIME, "UPDATE quest_tracker SET quest_abandon_time = NOW() WHERE id = ? AND character_guid = ? ORDER BY quest_accept_time DESC LIMIT 1", CONNECTION_ASYNC);
+
+ // DeserterTracker
+ PrepareStatement(CHAR_INS_DESERTER_TRACK, "INSERT INTO battleground_deserters (guid, type, datetime) VALUES (?, ?, NOW())", CONNECTION_ASYNC);
}
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h
index f88a912e022..7a463c73df2 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.h
+++ b/src/server/database/Database/Implementation/CharacterDatabase.h
@@ -21,19 +21,6 @@
#include "DatabaseWorkerPool.h"
#include "MySQLConnection.h"
-class CharacterDatabaseConnection : public MySQLConnection
-{
- public:
- //- Constructors for sync and async connections
- CharacterDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) { }
- CharacterDatabaseConnection(ProducerConsumerQueue<SQLOperation*>* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { }
-
- //- Loads database type specific prepared statements
- void DoPrepareStatements() override;
-};
-
-typedef DatabaseWorkerPool<CharacterDatabaseConnection> CharacterDatabaseWorkerPool;
-
enum CharacterDatabaseStatements
{
/* Naming standard for defines:
@@ -156,7 +143,6 @@ enum CharacterDatabaseStatements
CHAR_DEL_GIFT,
CHAR_SEL_CHARACTER_GIFT_BY_ITEM,
CHAR_SEL_ACCOUNT_BY_NAME,
- CHAR_SEL_ACCOUNT_BY_GUID,
CHAR_DEL_ACCOUNT_INSTANCE_LOCK_TIMES,
CHAR_INS_ACCOUNT_INSTANCE_LOCK_TIMES,
CHAR_SEL_CHARACTER_NAME_CLASS,
@@ -281,8 +267,8 @@ enum CharacterDatabaseStatements
CHAR_SEL_CORPSES,
CHAR_INS_CORPSE,
CHAR_DEL_CORPSE,
- CHAR_DEL_PLAYER_CORPSES,
- CHAR_DEL_OLD_CORPSES,
+ CHAR_DEL_CORPSES_FROM_MAP,
+ CHAR_SEL_CORPSE_LOCATION,
CHAR_SEL_CREATURE_RESPAWNS,
CHAR_REP_CREATURE_RESPAWN,
@@ -300,6 +286,7 @@ enum CharacterDatabaseStatements
CHAR_DEL_GM_TICKET,
CHAR_DEL_ALL_GM_TICKETS,
CHAR_DEL_PLAYER_GM_TICKETS,
+ CHAR_UPD_PLAYER_GM_TICKETS_ON_CHAR_DELETION,
CHAR_INS_GM_SURVEY,
CHAR_INS_GM_SUBSURVEY,
@@ -544,7 +531,24 @@ enum CharacterDatabaseStatements
CHAR_UPD_QUEST_TRACK_COMPLETE_TIME,
CHAR_UPD_QUEST_TRACK_ABANDON_TIME,
+ CHAR_INS_DESERTER_TRACK,
+
MAX_CHARACTERDATABASE_STATEMENTS
};
+class CharacterDatabaseConnection : public MySQLConnection
+{
+public:
+ typedef CharacterDatabaseStatements Statements;
+
+ //- Constructors for sync and async connections
+ CharacterDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) { }
+ CharacterDatabaseConnection(ProducerConsumerQueue<SQLOperation*>* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { }
+
+ //- Loads database type specific prepared statements
+ void DoPrepareStatements() override;
+};
+
+typedef DatabaseWorkerPool<CharacterDatabaseConnection> CharacterDatabaseWorkerPool;
+
#endif
diff --git a/src/server/database/Database/Implementation/LoginDatabase.cpp b/src/server/database/Database/Implementation/LoginDatabase.cpp
index 8f0b5067957..de003c2092b 100644
--- a/src/server/database/Database/Implementation/LoginDatabase.cpp
+++ b/src/server/database/Database/Implementation/LoginDatabase.cpp
@@ -25,6 +25,9 @@ void LoginDatabaseConnection::DoPrepareStatements()
PrepareStatement(LOGIN_SEL_REALMLIST, "SELECT id, name, address, localAddress, localSubnetMask, port, icon, flag, timezone, allowedSecurityLevel, population, gamebuild FROM realmlist WHERE flag <> 3 ORDER BY name", CONNECTION_SYNCH);
PrepareStatement(LOGIN_DEL_EXPIRED_IP_BANS, "DELETE FROM ip_banned WHERE unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_ASYNC);
PrepareStatement(LOGIN_UPD_EXPIRED_ACCOUNT_BANS, "UPDATE account_banned SET active = 0 WHERE active = 1 AND unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_SYNCH);
+ PrepareStatement(LOGIN_SEL_IP_INFO, "(SELECT unbandate > UNIX_TIMESTAMP() OR unbandate = bandate AS banned, NULL as country FROM ip_banned WHERE ip = ?) "
+ "UNION "
+ "(SELECT NULL AS banned, country FROM ip2nation WHERE INET_NTOA(ip) = ?)", CONNECTION_ASYNC);
PrepareStatement(LOGIN_SEL_IP_BANNED, "SELECT * FROM ip_banned WHERE ip = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_INS_IP_AUTO_BANNED, "INSERT INTO ip_banned (ip, bandate, unbandate, bannedby, banreason) VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity Auth', 'Failed login autoban')", CONNECTION_ASYNC);
PrepareStatement(LOGIN_SEL_IP_BANNED_ALL, "SELECT ip, bandate, unbandate, bannedby, banreason FROM ip_banned WHERE (bandate = unbandate OR unbandate > UNIX_TIMESTAMP()) ORDER BY unbandate", CONNECTION_SYNCH);
@@ -43,7 +46,9 @@ void LoginDatabaseConnection::DoPrepareStatements()
PrepareStatement(LOGIN_SEL_FAILEDLOGINS, "SELECT id, failed_logins FROM account WHERE username = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_ACCOUNT_ID_BY_NAME, "SELECT id FROM account WHERE username = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_ACCOUNT_LIST_BY_NAME, "SELECT id, username FROM account WHERE username = ?", CONNECTION_SYNCH);
- PrepareStatement(LOGIN_SEL_ACCOUNT_INFO_BY_NAME, "SELECT id, sessionkey, last_ip, locked, expansion, mutetime, locale, recruiter, os FROM account WHERE username = ?", CONNECTION_SYNCH);
+ PrepareStatement(LOGIN_SEL_ACCOUNT_INFO_BY_NAME, "SELECT a.id, a.sessionkey, a.last_ip, a.locked, a.lock_country, a.expansion, a.mutetime, a.locale, a.recruiter, a.os, aa.gmLevel, "
+ "ab.unbandate > UNIX_TIMESTAMP() OR ab.unbandate = ab.bandate, r.id FROM account a LEFT JOIN account_access aa ON a.id = aa.id AND aa.RealmID IN (-1, ?) "
+ "LEFT JOIN account_banned ab ON a.id = ab.id AND ab.active = 1 LEFT JOIN account r ON a.id = r.recruiter WHERE a.username = ? ORDER BY aa.RealmID DESC LIMIT 1", CONNECTION_ASYNC);
PrepareStatement(LOGIN_SEL_ACCOUNT_LIST_BY_EMAIL, "SELECT id, username FROM account WHERE email = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_NUM_CHARS_ON_REALM, "SELECT numchars FROM realmcharacters WHERE realmid = ? AND acctid= ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_ACCOUNT_BY_IP, "SELECT id, username FROM account WHERE last_ip = ?", CONNECTION_SYNCH);
@@ -88,8 +93,6 @@ void LoginDatabaseConnection::DoPrepareStatements()
PrepareStatement(LOGIN_SEL_ACCOUNT_INFO, "SELECT a.username, a.last_ip, aa.gmlevel, a.expansion FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE a.id = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_ACCOUNT_ACCESS_GMLEVEL_TEST, "SELECT 1 FROM account_access WHERE id = ? AND gmlevel > ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_ACCOUNT_ACCESS, "SELECT a.id, aa.gmlevel, aa.RealmID FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE a.username = ?", CONNECTION_SYNCH);
- PrepareStatement(LOGIN_SEL_ACCOUNT_RECRUITER, "SELECT 1 FROM account WHERE recruiter = ?", CONNECTION_SYNCH);
- PrepareStatement(LOGIN_SEL_BANS, "SELECT 1 FROM account_banned WHERE id = ? AND active = 1 UNION SELECT 1 FROM ip_banned WHERE ip = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_ACCOUNT_WHOIS, "SELECT username, email, last_ip FROM account WHERE id = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_LAST_ATTEMPT_IP, "SELECT last_attempt_ip FROM account WHERE id = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_LAST_IP, "SELECT last_ip FROM account WHERE id = ?", CONNECTION_SYNCH);
@@ -108,7 +111,7 @@ void LoginDatabaseConnection::DoPrepareStatements()
PrepareStatement(LOGIN_INS_FALP_IP_LOGGING, "INSERT INTO logs_ip_actions (account_id,character_guid,type,ip,systemnote,unixtime,time) VALUES ((SELECT id FROM account WHERE username = ?), 0, 1, ?, ?, unix_timestamp(NOW()), NOW())", CONNECTION_ASYNC);
PrepareStatement(LOGIN_SEL_ACCOUNT_ACCESS_BY_ID, "SELECT gmlevel, RealmID FROM account_access WHERE id = ? and (RealmID = ? OR RealmID = -1) ORDER BY gmlevel desc", CONNECTION_SYNCH);
- PrepareStatement(LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS, "SELECT permissionId, granted FROM rbac_account_permissions WHERE accountId = ? AND (realmId = ? OR realmId = -1) ORDER BY permissionId, realmId", CONNECTION_SYNCH);
+ PrepareStatement(LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS, "SELECT permissionId, granted FROM rbac_account_permissions WHERE accountId = ? AND (realmId = ? OR realmId = -1) ORDER BY permissionId, realmId", CONNECTION_BOTH);
PrepareStatement(LOGIN_INS_RBAC_ACCOUNT_PERMISSION, "INSERT INTO rbac_account_permissions (accountId, permissionId, granted, realmId) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE granted = VALUES(granted)", CONNECTION_ASYNC);
PrepareStatement(LOGIN_DEL_RBAC_ACCOUNT_PERMISSION, "DELETE FROM rbac_account_permissions WHERE accountId = ? AND permissionId = ? AND (realmId = ? OR realmId = -1)", CONNECTION_ASYNC);
PrepareStatement(LOGIN_INS_ACCOUNT_MUTE, "INSERT INTO account_muted VALUES (?, UNIX_TIMESTAMP(), ?, ?, ?)", CONNECTION_ASYNC);
diff --git a/src/server/database/Database/Implementation/LoginDatabase.h b/src/server/database/Database/Implementation/LoginDatabase.h
index 7f6cffa520f..3b30105e670 100644
--- a/src/server/database/Database/Implementation/LoginDatabase.h
+++ b/src/server/database/Database/Implementation/LoginDatabase.h
@@ -21,19 +21,6 @@
#include "DatabaseWorkerPool.h"
#include "MySQLConnection.h"
-class LoginDatabaseConnection : public MySQLConnection
-{
- public:
- //- Constructors for sync and async connections
- LoginDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) { }
- LoginDatabaseConnection(ProducerConsumerQueue<SQLOperation*>* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { }
-
- //- Loads database type specific prepared statements
- void DoPrepareStatements() override;
-};
-
-typedef DatabaseWorkerPool<LoginDatabaseConnection> LoginDatabaseWorkerPool;
-
enum LoginDatabaseStatements
{
/* Naming standard for defines:
@@ -45,6 +32,7 @@ enum LoginDatabaseStatements
LOGIN_SEL_REALMLIST,
LOGIN_DEL_EXPIRED_IP_BANS,
LOGIN_UPD_EXPIRED_ACCOUNT_BANS,
+ LOGIN_SEL_IP_INFO,
LOGIN_SEL_IP_BANNED,
LOGIN_INS_IP_AUTO_BANNED,
LOGIN_SEL_ACCOUNT_BANNED,
@@ -108,8 +96,6 @@ enum LoginDatabaseStatements
LOGIN_SEL_ACCOUNT_INFO,
LOGIN_SEL_ACCOUNT_ACCESS_GMLEVEL_TEST,
LOGIN_SEL_ACCOUNT_ACCESS,
- LOGIN_SEL_ACCOUNT_RECRUITER,
- LOGIN_SEL_BANS,
LOGIN_SEL_ACCOUNT_WHOIS,
LOGIN_SEL_REALMLIST_SECURITY_LEVEL,
LOGIN_DEL_ACCOUNT,
@@ -133,4 +119,19 @@ enum LoginDatabaseStatements
MAX_LOGINDATABASE_STATEMENTS
};
+class LoginDatabaseConnection : public MySQLConnection
+{
+public:
+ typedef LoginDatabaseStatements Statements;
+
+ //- Constructors for sync and async connections
+ LoginDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) { }
+ LoginDatabaseConnection(ProducerConsumerQueue<SQLOperation*>* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { }
+
+ //- Loads database type specific prepared statements
+ void DoPrepareStatements() override;
+};
+
+typedef DatabaseWorkerPool<LoginDatabaseConnection> LoginDatabaseWorkerPool;
+
#endif
diff --git a/src/server/database/Database/Implementation/WorldDatabase.h b/src/server/database/Database/Implementation/WorldDatabase.h
index 36fd6fbb186..c5475835fbd 100644
--- a/src/server/database/Database/Implementation/WorldDatabase.h
+++ b/src/server/database/Database/Implementation/WorldDatabase.h
@@ -21,19 +21,6 @@
#include "DatabaseWorkerPool.h"
#include "MySQLConnection.h"
-class WorldDatabaseConnection : public MySQLConnection
-{
- public:
- //- Constructors for sync and async connections
- WorldDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) { }
- WorldDatabaseConnection(ProducerConsumerQueue<SQLOperation*>* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { }
-
- //- Loads database type specific prepared statements
- void DoPrepareStatements() override;
-};
-
-typedef DatabaseWorkerPool<WorldDatabaseConnection> WorldDatabaseWorkerPool;
-
enum WorldDatabaseStatements
{
/* Naming standard for defines:
@@ -116,4 +103,19 @@ enum WorldDatabaseStatements
MAX_WORLDDATABASE_STATEMENTS
};
+class WorldDatabaseConnection : public MySQLConnection
+{
+public:
+ typedef WorldDatabaseStatements Statements;
+
+ //- Constructors for sync and async connections
+ WorldDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) { }
+ WorldDatabaseConnection(ProducerConsumerQueue<SQLOperation*>* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { }
+
+ //- Loads database type specific prepared statements
+ void DoPrepareStatements() override;
+};
+
+typedef DatabaseWorkerPool<WorldDatabaseConnection> WorldDatabaseWorkerPool;
+
#endif
diff --git a/src/server/database/Database/QueryResult.cpp b/src/server/database/Database/QueryResult.cpp
index 02352f221a0..983ffee24c4 100644
--- a/src/server/database/Database/QueryResult.cpp
+++ b/src/server/database/Database/QueryResult.cpp
@@ -26,7 +26,10 @@ _result(result),
_fields(fields)
{
_currentRow = new Field[_fieldCount];
- ASSERT(_currentRow);
+#ifdef TRINITY_DEBUG
+ for (uint32 i = 0; i < _fieldCount; i++)
+ _currentRow[i].SetMetadata(&_fields[i], i);
+#endif
}
PreparedResultSet::PreparedResultSet(MYSQL_STMT* stmt, MYSQL_RES *result, uint64 rowCount, uint32 fieldCount) :
@@ -35,11 +38,11 @@ m_rowPosition(0),
m_fieldCount(fieldCount),
m_rBind(NULL),
m_stmt(stmt),
-m_res(result),
+m_metadataResult(result),
m_isNull(NULL),
m_length(NULL)
{
- if (!m_res)
+ if (!m_metadataResult)
return;
if (m_stmt->bind_result_done)
@@ -66,50 +69,52 @@ m_length(NULL)
return;
}
+ m_rowCount = mysql_stmt_num_rows(m_stmt);
+
//- This is where we prepare the buffer based on metadata
- uint32 i = 0;
- MYSQL_FIELD* field = mysql_fetch_field(m_res);
- while (field)
+ MYSQL_FIELD* field = mysql_fetch_fields(m_metadataResult);
+ std::size_t rowSize = 0;
+ for (uint32 i = 0; i < m_fieldCount; ++i)
{
- size_t size = Field::SizeForType(field);
+ size_t size = Field::SizeForType(&field[i]);
+ rowSize += size;
- m_rBind[i].buffer_type = field->type;
- m_rBind[i].buffer = malloc(size);
- memset(m_rBind[i].buffer, 0, size);
+ m_rBind[i].buffer_type = field[i].type;
m_rBind[i].buffer_length = size;
m_rBind[i].length = &m_length[i];
m_rBind[i].is_null = &m_isNull[i];
m_rBind[i].error = NULL;
- m_rBind[i].is_unsigned = field->flags & UNSIGNED_FLAG;
+ m_rBind[i].is_unsigned = field[i].flags & UNSIGNED_FLAG;
+ }
- ++i;
- field = mysql_fetch_field(m_res);
+ char* dataBuffer = new char[rowSize * m_rowCount];
+ for (uint32 i = 0, offset = 0; i < m_fieldCount; ++i)
+ {
+ m_rBind[i].buffer = dataBuffer + offset;
+ offset += m_rBind[i].buffer_length;
}
//- This is where we bind the bind the buffer to the statement
if (mysql_stmt_bind_result(m_stmt, m_rBind))
{
TC_LOG_WARN("sql.sql", "%s:mysql_stmt_bind_result, cannot bind result from MySQL server. Error: %s", __FUNCTION__, mysql_stmt_error(m_stmt));
- delete[] m_rBind;
+ mysql_stmt_free_result(m_stmt);
+ CleanUp();
delete[] m_isNull;
delete[] m_length;
return;
}
- m_rowCount = mysql_stmt_num_rows(m_stmt);
-
- m_rows.resize(uint32(m_rowCount));
+ m_rows.resize(uint32(m_rowCount) * m_fieldCount);
while (_NextRow())
{
- m_rows[uint32(m_rowPosition)] = new Field[m_fieldCount];
- for (uint64 fIndex = 0; fIndex < m_fieldCount; ++fIndex)
+ for (uint32 fIndex = 0; fIndex < m_fieldCount; ++fIndex)
{
+ unsigned long buffer_length = m_rBind[fIndex].buffer_length;
+ unsigned long fetched_length = *m_rBind[fIndex].length;
if (!*m_rBind[fIndex].is_null)
- m_rows[uint32(m_rowPosition)][fIndex].SetByteValue(m_rBind[fIndex].buffer,
- m_rBind[fIndex].buffer_length,
- m_rBind[fIndex].buffer_type,
- *m_rBind[fIndex].length);
- else
+ {
+ void* buffer = m_stmt->bind[fIndex].buffer;
switch (m_rBind[fIndex].buffer_type)
{
case MYSQL_TYPE_TINY_BLOB:
@@ -118,24 +123,44 @@ m_length(NULL)
case MYSQL_TYPE_BLOB:
case MYSQL_TYPE_STRING:
case MYSQL_TYPE_VAR_STRING:
- m_rows[uint32(m_rowPosition)][fIndex].SetByteValue("",
- m_rBind[fIndex].buffer_length,
- m_rBind[fIndex].buffer_type,
- *m_rBind[fIndex].length);
- break;
+ // warning - the string will not be null-terminated if there is no space for it in the buffer
+ // when mysql_stmt_fetch returned MYSQL_DATA_TRUNCATED
+ // we cannot blindly null-terminate the data either as it may be retrieved as binary blob and not specifically a string
+ // in this case using Field::GetCString will result in garbage
+ // TODO: remove Field::GetCString and use boost::string_ref (currently proposed for TS as string_view, maybe in C++17)
+ if (fetched_length < buffer_length)
+ *((char*)buffer + fetched_length) = '\0';
+ break;
default:
- m_rows[uint32(m_rowPosition)][fIndex].SetByteValue(nullptr,
- m_rBind[fIndex].buffer_length,
- m_rBind[fIndex].buffer_type,
- *m_rBind[fIndex].length);
+ break;
}
+
+ m_rows[uint32(m_rowPosition) * m_fieldCount + fIndex].SetByteValue(
+ buffer,
+ m_rBind[fIndex].buffer_type,
+ fetched_length);
+
+ // move buffer pointer to next part
+ m_stmt->bind[fIndex].buffer = (char*)buffer + rowSize;
+ }
+ else
+ {
+ m_rows[uint32(m_rowPosition) * m_fieldCount + fIndex].SetByteValue(
+ nullptr,
+ m_rBind[fIndex].buffer_type,
+ *m_rBind[fIndex].length);
+ }
+
+#ifdef TRINITY_DEBUG
+ m_rows[uint32(m_rowPosition) * m_fieldCount + fIndex].SetMetadata(&field[fIndex], fIndex);
+#endif
}
m_rowPosition++;
}
m_rowPosition = 0;
/// All data is buffered, let go of mysql c api structures
- CleanUp();
+ mysql_stmt_free_result(m_stmt);
}
ResultSet::~ResultSet()
@@ -145,8 +170,7 @@ ResultSet::~ResultSet()
PreparedResultSet::~PreparedResultSet()
{
- for (uint32 i = 0; i < uint32(m_rowCount); ++i)
- delete[] m_rows[i];
+ CleanUp();
}
bool ResultSet::NextRow()
@@ -207,18 +231,13 @@ void ResultSet::CleanUp()
void PreparedResultSet::CleanUp()
{
- /// More of the in our code allocated sources are deallocated by the poorly documented mysql c api
- if (m_res)
- mysql_free_result(m_res);
+ if (m_metadataResult)
+ mysql_free_result(m_metadataResult);
- FreeBindBuffer();
- mysql_stmt_free_result(m_stmt);
-
- delete[] m_rBind;
-}
-
-void PreparedResultSet::FreeBindBuffer()
-{
- for (uint32 i = 0; i < m_fieldCount; ++i)
- free (m_rBind[i].buffer);
+ if (m_rBind)
+ {
+ delete[](char*)m_rBind->buffer;
+ delete[] m_rBind;
+ m_rBind = nullptr;
+ }
}
diff --git a/src/server/database/Database/QueryResult.h b/src/server/database/Database/QueryResult.h
index a61fb6331c1..0447ecaae5a 100644
--- a/src/server/database/Database/QueryResult.h
+++ b/src/server/database/Database/QueryResult.h
@@ -73,18 +73,18 @@ class PreparedResultSet
Field* Fetch() const
{
ASSERT(m_rowPosition < m_rowCount);
- return m_rows[uint32(m_rowPosition)];
+ return const_cast<Field*>(&m_rows[uint32(m_rowPosition) * m_fieldCount]);
}
- const Field & operator [] (uint32 index) const
+ Field const& operator[](uint32 index) const
{
ASSERT(m_rowPosition < m_rowCount);
ASSERT(index < m_fieldCount);
- return m_rows[uint32(m_rowPosition)][index];
+ return m_rows[uint32(m_rowPosition) * m_fieldCount + index];
}
protected:
- std::vector<Field*> m_rows;
+ std::vector<Field> m_rows;
uint64 m_rowCount;
uint64 m_rowPosition;
uint32 m_fieldCount;
@@ -92,12 +92,11 @@ class PreparedResultSet
private:
MYSQL_BIND* m_rBind;
MYSQL_STMT* m_stmt;
- MYSQL_RES* m_res;
+ MYSQL_RES* m_metadataResult; ///< Field metadata, returned by mysql_stmt_result_metadata
my_bool* m_isNull;
unsigned long* m_length;
- void FreeBindBuffer();
void CleanUp();
bool _NextRow();
diff --git a/src/server/database/Updater/DBUpdater.cpp b/src/server/database/Updater/DBUpdater.cpp
index ebdd6604fef..d90d71c5594 100644
--- a/src/server/database/Updater/DBUpdater.cpp
+++ b/src/server/database/Updater/DBUpdater.cpp
@@ -26,6 +26,8 @@
#include <iostream>
#include <unordered_map>
#include <boost/process.hpp>
+#include <boost/iostreams/stream.hpp>
+#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/system/system_error.hpp>
@@ -33,24 +35,64 @@ using namespace boost::process;
using namespace boost::process::initializers;
using namespace boost::iostreams;
-template<class T>
-std::string DBUpdater<T>::GetSourceDirectory()
+std::string DBUpdaterUtil::GetMySqlCli()
{
- std::string const entry = sConfigMgr->GetStringDefault("Updates.SourcePath", "");
- if (!entry.empty())
- return entry;
+ if (!corrected_path().empty())
+ return corrected_path();
else
- return GitRevision::GetSourceDirectory();
+ {
+ std::string const entry = sConfigMgr->GetStringDefault("Updates.MySqlCLIPath", "");
+ if (!entry.empty())
+ return entry;
+ else
+ return GitRevision::GetMySQLExecutable();
+ }
+}
+
+bool DBUpdaterUtil::CheckExecutable()
+{
+ boost::filesystem::path exe(GetMySqlCli());
+ if (!exists(exe))
+ {
+ exe.clear();
+
+ try
+ {
+ exe = search_path("mysql");
+ }
+ catch (std::runtime_error&)
+ {
+ }
+
+ if (!exe.empty() && exists(exe))
+ {
+ // Correct the path to the cli
+ corrected_path() = absolute(exe).generic_string();
+ return true;
+ }
+
+ TC_LOG_FATAL("sql.updates", "Didn't find executeable mysql binary at \'%s\' or in path, correct the path in the *.conf (\"Updates.MySqlCLIPath\").",
+ absolute(exe).generic_string().c_str());
+
+ return false;
+ }
+ return true;
+}
+
+std::string& DBUpdaterUtil::corrected_path()
+{
+ static std::string path;
+ return path;
}
template<class T>
-std::string DBUpdater<T>::GetMySqlCli()
+std::string DBUpdater<T>::GetSourceDirectory()
{
- std::string const entry = sConfigMgr->GetStringDefault("Updates.MySqlCLIPath", "");
+ std::string const entry = sConfigMgr->GetStringDefault("Updates.SourcePath", "");
if (!entry.empty())
return entry;
else
- return GitRevision::GetMySQLExecutable();
+ return GitRevision::GetSourceDirectory();
}
// Auth Database
@@ -145,36 +187,6 @@ BaseLocation DBUpdater<T>::GetBaseLocationType()
}
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]: ",
@@ -222,7 +234,7 @@ bool DBUpdater<T>::Create(DatabaseWorkerPool<T>& pool)
template<class T>
bool DBUpdater<T>::Update(DatabaseWorkerPool<T>& pool)
{
- if (!DBUpdater<T>::CheckExecutable())
+ if (!DBUpdaterUtil::CheckExecutable())
return false;
TC_LOG_INFO("sql.updates", "Updating %s database...", DBUpdater<T>::GetTableName().c_str());
@@ -273,7 +285,7 @@ bool DBUpdater<T>::Populate(DatabaseWorkerPool<T>& pool)
return true;
}
- if (!DBUpdater<T>::CheckExecutable())
+ if (!DBUpdaterUtil::CheckExecutable())
return false;
TC_LOG_INFO("sql.updates", "Database %s is empty, auto populating it...", DBUpdater<T>::GetTableName().c_str());
@@ -346,7 +358,10 @@ void DBUpdater<T>::ApplyFile(DatabaseWorkerPool<T>& pool, std::string const& hos
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);
+ args.reserve(8);
+
+ // args[0] represents the program name
+ args.push_back("mysql");
// CLI Client connection info
args.push_back("-h" + host);
@@ -391,9 +406,29 @@ void DBUpdater<T>::ApplyFile(DatabaseWorkerPool<T>& pool, std::string const& hos
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());
+ boost::process::pipe outPipe = create_pipe();
+ boost::process::pipe errPipe = create_pipe();
+
+ child c = execute(run_exe(
+ boost::filesystem::absolute(DBUpdaterUtil::GetMySqlCli()).generic_string()),
+ set_args(args), bind_stdin(source), throw_on_error(),
+ bind_stdout(file_descriptor_sink(outPipe.sink, close_handle)),
+ bind_stderr(file_descriptor_sink(errPipe.sink, close_handle)));
+
+ file_descriptor_source mysqlOutfd(outPipe.source, close_handle);
+ file_descriptor_source mysqlErrfd(errPipe.source, close_handle);
+
+ stream<file_descriptor_source> mysqlOutStream(mysqlOutfd);
+ stream<file_descriptor_source> mysqlErrStream(mysqlErrfd);
+
+ std::stringstream out;
+ std::stringstream err;
+
+ copy(mysqlOutStream, out);
+ copy(mysqlErrStream, err);
+
+ TC_LOG_INFO("sql.updates", "%s", out.str().c_str());
+ TC_LOG_ERROR("sql.updates", "%s", err.str().c_str());
ret = wait_for_exit(c);
}
diff --git a/src/server/database/Updater/DBUpdater.h b/src/server/database/Updater/DBUpdater.h
index a2b12bed235..c8aa5d69fbc 100644
--- a/src/server/database/Updater/DBUpdater.h
+++ b/src/server/database/Updater/DBUpdater.h
@@ -54,6 +54,17 @@ struct UpdateResult
size_t archived;
};
+class DBUpdaterUtil
+{
+public:
+ static std::string GetMySqlCli();
+
+ static bool CheckExecutable();
+
+private:
+ static std::string& corrected_path();
+};
+
template <class T>
class DBUpdater
{
@@ -79,9 +90,6 @@ public:
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);
diff --git a/src/server/game/AI/CoreAI/CombatAI.cpp b/src/server/game/AI/CoreAI/CombatAI.cpp
index 7efed2976c4..9d76ee5573d 100644
--- a/src/server/game/AI/CoreAI/CombatAI.cpp
+++ b/src/server/game/AI/CoreAI/CombatAI.cpp
@@ -259,7 +259,7 @@ void TurretAI::UpdateAI(uint32 /*diff*/)
// VehicleAI
//////////////
-VehicleAI::VehicleAI(Creature* creature) : CreatureAI(creature), m_ConditionsTimer(VEHICLE_CONDITION_CHECK_TIME)
+VehicleAI::VehicleAI(Creature* creature) : CreatureAI(creature), m_HasConditions(false), m_ConditionsTimer(VEHICLE_CONDITION_CHECK_TIME)
{
LoadConditions();
m_DoDismiss = false;
@@ -285,7 +285,7 @@ void VehicleAI::UpdateAI(uint32 diff)
void VehicleAI::OnCharmed(bool apply)
{
- if (!me->GetVehicleKit()->IsVehicleInUse() && !apply && !conditions.empty()) // was used and has conditions
+ if (!me->GetVehicleKit()->IsVehicleInUse() && !apply && m_HasConditions) // was used and has conditions
{
m_DoDismiss = true; // needs reset
}
@@ -297,16 +297,14 @@ void VehicleAI::OnCharmed(bool apply)
void VehicleAI::LoadConditions()
{
- conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE, me->GetEntry());
- if (!conditions.empty())
- TC_LOG_DEBUG("condition", "VehicleAI::LoadConditions: loaded %u conditions", uint32(conditions.size()));
+ m_HasConditions = sConditionMgr->HasConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE, me->GetEntry());
}
void VehicleAI::CheckConditions(uint32 diff)
{
if (m_ConditionsTimer < diff)
{
- if (!conditions.empty())
+ if (m_HasConditions)
{
if (Vehicle* vehicleKit = me->GetVehicleKit())
for (SeatMap::iterator itr = vehicleKit->Seats.begin(); itr != vehicleKit->Seats.end(); ++itr)
@@ -314,7 +312,7 @@ void VehicleAI::CheckConditions(uint32 diff)
{
if (Player* player = passenger->ToPlayer())
{
- if (!sConditionMgr->IsObjectMeetToConditions(player, me, conditions))
+ if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE, me->GetEntry(), player, me))
{
player->ExitVehicle();
return; // check other pessanger in next tick
diff --git a/src/server/game/AI/CoreAI/CombatAI.h b/src/server/game/AI/CoreAI/CombatAI.h
index 97308f22e5d..26b5db3e7c8 100644
--- a/src/server/game/AI/CoreAI/CombatAI.h
+++ b/src/server/game/AI/CoreAI/CombatAI.h
@@ -112,7 +112,7 @@ struct VehicleAI : public CreatureAI
private:
void LoadConditions();
void CheckConditions(uint32 diff);
- ConditionList conditions;
+ bool m_HasConditions;
uint32 m_ConditionsTimer;
bool m_DoDismiss;
uint32 m_DismissTimer;
diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp
index 2522c97de25..c870f786af3 100644
--- a/src/server/game/AI/CoreAI/PetAI.cpp
+++ b/src/server/game/AI/CoreAI/PetAI.cpp
@@ -55,7 +55,7 @@ void PetAI::_stopAttack()
{
if (!me->IsAlive())
{
- TC_LOG_DEBUG("misc", "Creature stoped attacking cuz his dead [guid=%u]", me->GetGUIDLow());
+ TC_LOG_DEBUG("misc", "Creature stoped attacking cuz his dead [guid=%u]", me->GetGUID().GetCounter());
me->GetMotionMaster()->Clear();
me->GetMotionMaster()->MoveIdle();
me->CombatStop();
@@ -97,7 +97,7 @@ void PetAI::UpdateAI(uint32 diff)
if (_needToStop())
{
- TC_LOG_DEBUG("misc", "Pet AI stopped attacking [guid=%u]", me->GetGUIDLow());
+ TC_LOG_DEBUG("misc", "Pet AI stopped attacking [guid=%u]", me->GetGUID().GetCounter());
_stopAttack();
return;
}
@@ -439,7 +439,7 @@ void PetAI::HandleReturnMovement()
ClearCharmInfoFlags();
me->GetCharmInfo()->SetIsReturning(true);
me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MovePoint(me->GetGUIDLow(), x, y, z);
+ me->GetMotionMaster()->MovePoint(me->GetGUID().GetCounter(), x, y, z);
}
}
else // COMMAND_FOLLOW
@@ -492,7 +492,7 @@ void PetAI::MovementInform(uint32 moveType, uint32 data)
{
// Pet is returning to where stay was clicked. data should be
// pet's GUIDLow since we set that as the waypoint ID
- if (data == me->GetGUIDLow() && me->GetCharmInfo()->IsReturning())
+ if (data == me->GetGUID().GetCounter() && me->GetCharmInfo()->IsReturning())
{
ClearCharmInfoFlags();
me->GetCharmInfo()->SetIsAtStay(true);
@@ -505,7 +505,7 @@ void PetAI::MovementInform(uint32 moveType, uint32 data)
{
// If data is owner's GUIDLow then we've reached follow point,
// otherwise we're probably chasing a creature
- if (me->GetCharmerOrOwner() && me->GetCharmInfo() && data == me->GetCharmerOrOwner()->GetGUIDLow() && me->GetCharmInfo()->IsReturning())
+ if (me->GetCharmerOrOwner() && me->GetCharmInfo() && data == me->GetCharmerOrOwner()->GetGUID().GetCounter() && me->GetCharmInfo()->IsReturning())
{
ClearCharmInfoFlags();
me->GetCharmInfo()->SetIsFollowing(true);
diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp
index 5aa6ea8ea7a..f0d9d34db69 100644
--- a/src/server/game/AI/CoreAI/UnitAI.cpp
+++ b/src/server/game/AI/CoreAI/UnitAI.cpp
@@ -29,7 +29,15 @@
void UnitAI::AttackStart(Unit* victim)
{
if (victim && me->Attack(victim, true))
+ {
+ // Clear distracted state on attacking
+ if (me->HasUnitState(UNIT_STATE_DISTRACTED))
+ {
+ me->ClearUnitState(UNIT_STATE_DISTRACTED);
+ me->GetMotionMaster()->Clear();
+ }
me->GetMotionMaster()->MoveChase(victim);
+ }
}
void UnitAI::AttackStartCaster(Unit* victim, float dist)
diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h
index 1939c96dac9..c93ed0db008 100644
--- a/src/server/game/AI/CoreAI/UnitAI.h
+++ b/src/server/game/AI/CoreAI/UnitAI.h
@@ -255,8 +255,8 @@ class UnitAI
static void FillAISpellInfo();
virtual void sGossipHello(Player* /*player*/) { }
- virtual void sGossipSelect(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/) { }
- virtual void sGossipSelectCode(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/, char const* /*code*/) { }
+ virtual void sGossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) { }
+ virtual void sGossipSelectCode(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/, char const* /*code*/) { }
virtual void sQuestAccept(Player* /*player*/, Quest const* /*quest*/) { }
virtual void sQuestSelect(Player* /*player*/, Quest const* /*quest*/) { }
virtual void sQuestReward(Player* /*player*/, Quest const* /*quest*/, uint32 /*opt*/) { }
diff --git a/src/server/game/AI/CreatureAIFactory.h b/src/server/game/AI/CreatureAIFactory.h
index 4473d3e9cd5..4e11630259b 100644
--- a/src/server/game/AI/CreatureAIFactory.h
+++ b/src/server/game/AI/CreatureAIFactory.h
@@ -50,6 +50,8 @@ CreatureAIFactory<REAL_AI>::Create(void* data) const
typedef FactoryHolder<CreatureAI> CreatureAICreator;
typedef FactoryHolder<CreatureAI>::FactoryHolderRegistry CreatureAIRegistry;
+#define sCreatureAIRegistry CreatureAIRegistry::instance()
+
//GO
struct SelectableGameObjectAI : public FactoryHolder<GameObjectAI>, public Permissible<GameObject>
{
@@ -76,4 +78,7 @@ GameObjectAIFactory<REAL_GO_AI>::Create(void* data) const
typedef FactoryHolder<GameObjectAI> GameObjectAICreator;
typedef FactoryHolder<GameObjectAI>::FactoryHolderRegistry GameObjectAIRegistry;
+
+#define sGameObjectAIRegistry GameObjectAIRegistry::instance()
+
#endif
diff --git a/src/server/game/AI/CreatureAIImpl.h b/src/server/game/AI/CreatureAIImpl.h
index a2c5c5db057..529f7420021 100644
--- a/src/server/game/AI/CreatureAIImpl.h
+++ b/src/server/game/AI/CreatureAIImpl.h
@@ -23,292 +23,14 @@
#include "CreatureAI.h"
#include "SpellMgr.h"
-template<class T>
-inline
-const T& RAND(const T& v1, const T& v2)
-{
- return (urand(0, 1)) ? v1 : v2;
-}
-
-template<class T>
-inline
-const T& RAND(const T& v1, const T& v2, const T& v3)
-{
- switch (urand(0, 2))
- {
- default:
- case 0: return v1;
- case 1: return v2;
- case 2: return v3;
- }
-}
-
-template<class T>
-inline
-const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4)
-{
- switch (urand(0, 3))
- {
- default:
- case 0: return v1;
- case 1: return v2;
- case 2: return v3;
- case 3: return v4;
- }
-}
-
-template<class T>
-inline
-const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5)
-{
- switch (urand(0, 4))
- {
- default:
- case 0: return v1;
- case 1: return v2;
- case 2: return v3;
- case 3: return v4;
- case 4: return v5;
- }
-}
-
-template<class T>
-inline
-const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6)
-{
- switch (urand(0, 5))
- {
- default:
- case 0: return v1;
- case 1: return v2;
- case 2: return v3;
- case 3: return v4;
- case 4: return v5;
- case 5: return v6;
- }
-}
-
-template<class T>
-inline
-const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7)
-{
- switch (urand(0, 6))
- {
- default:
- case 0: return v1;
- case 1: return v2;
- case 2: return v3;
- case 3: return v4;
- case 4: return v5;
- case 5: return v6;
- case 6: return v7;
- }
-}
-
-template<class T>
-inline
-const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8)
-{
- switch (urand(0, 7))
- {
- default:
- case 0: return v1;
- case 1: return v2;
- case 2: return v3;
- case 3: return v4;
- case 4: return v5;
- case 5: return v6;
- case 6: return v7;
- case 7: return v8;
- }
-}
-
-template<class T>
-inline
-const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
- const T& v9)
-{
- switch (urand(0, 8))
- {
- default:
- case 0: return v1;
- case 1: return v2;
- case 2: return v3;
- case 3: return v4;
- case 4: return v5;
- case 5: return v6;
- case 6: return v7;
- case 7: return v8;
- case 8: return v9;
- }
-}
-
-template<class T>
-inline
-const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
- const T& v9, const T& v10)
-{
- switch (urand(0, 9))
- {
- default:
- case 0: return v1;
- case 1: return v2;
- case 2: return v3;
- case 3: return v4;
- case 4: return v5;
- case 5: return v6;
- case 6: return v7;
- case 7: return v8;
- case 8: return v9;
- case 9: return v10;
- }
-}
-
-template<class T>
-inline
-const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
- const T& v9, const T& v10, const T& v11)
-{
- switch (urand(0, 10))
- {
- default:
- case 0: return v1;
- case 1: return v2;
- case 2: return v3;
- case 3: return v4;
- case 4: return v5;
- case 5: return v6;
- case 6: return v7;
- case 7: return v8;
- case 8: return v9;
- case 9: return v10;
- case 10: return v11;
- }
-}
-
-template<class T>
-inline
-const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
- const T& v9, const T& v10, const T& v11, const T& v12)
-{
- switch (urand(0, 11))
- {
- default:
- case 0: return v1;
- case 1: return v2;
- case 2: return v3;
- case 3: return v4;
- case 4: return v5;
- case 5: return v6;
- case 6: return v7;
- case 7: return v8;
- case 8: return v9;
- case 9: return v10;
- case 10: return v11;
- case 11: return v12;
- }
-}
-
-template<class T>
-inline
-const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
- const T& v9, const T& v10, const T& v11, const T& v12, const T& v13)
-{
- switch (urand(0, 12))
- {
- default:
- case 0: return v1;
- case 1: return v2;
- case 2: return v3;
- case 3: return v4;
- case 4: return v5;
- case 5: return v6;
- case 6: return v7;
- case 7: return v8;
- case 8: return v9;
- case 9: return v10;
- case 10: return v11;
- case 11: return v12;
- case 12: return v13;
- }
-}
-
-template<class T>
-inline
-const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
- const T& v9, const T& v10, const T& v11, const T& v12, const T& v13, const T& v14)
-{
- switch (urand(0, 13))
- {
- default:
- case 0: return v1;
- case 1: return v2;
- case 2: return v3;
- case 3: return v4;
- case 4: return v5;
- case 5: return v6;
- case 6: return v7;
- case 7: return v8;
- case 8: return v9;
- case 9: return v10;
- case 10: return v11;
- case 11: return v12;
- case 12: return v13;
- case 13: return v14;
- }
-}
-
-template<class T>
-inline
-const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
- const T& v9, const T& v10, const T& v11, const T& v12, const T& v13, const T& v14, const T& v15)
-{
- switch (urand(0, 14))
- {
- default:
- case 0: return v1;
- case 1: return v2;
- case 2: return v3;
- case 3: return v4;
- case 4: return v5;
- case 5: return v6;
- case 6: return v7;
- case 7: return v8;
- case 8: return v9;
- case 9: return v10;
- case 10: return v11;
- case 11: return v12;
- case 12: return v13;
- case 13: return v14;
- case 14: return v15;
- }
-}
+#include <functional>
+#include <type_traits>
-template<class T>
-inline
-const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8,
- const T& v9, const T& v10, const T& v11, const T& v12, const T& v13, const T& v14, const T& v15, const T& v16)
+template<typename First, typename Second, typename... Rest>
+static inline First const& RAND(First const& first, Second const& second, Rest const&... rest)
{
- switch (urand(0, 15))
- {
- default:
- case 0: return v1;
- case 1: return v2;
- case 2: return v3;
- case 3: return v4;
- case 4: return v5;
- case 5: return v6;
- case 6: return v7;
- case 7: return v8;
- case 8: return v9;
- case 9: return v10;
- case 10: return v11;
- case 11: return v12;
- case 12: return v13;
- case 13: return v14;
- case 14: return v15;
- case 15: return v16;
- }
+ std::reference_wrapper<typename std::add_const<First>::type> const pack[] = { first, second, rest... };
+ return pack[urand(0, sizeof...(rest) + 1)].get();
}
enum AITarget
diff --git a/src/server/game/AI/CreatureAISelector.cpp b/src/server/game/AI/CreatureAISelector.cpp
index 07bd49bdcc6..4cab7d5c099 100644
--- a/src/server/game/AI/CreatureAISelector.cpp
+++ b/src/server/game/AI/CreatureAISelector.cpp
@@ -30,10 +30,9 @@ namespace FactorySelector
CreatureAI* selectAI(Creature* creature)
{
const CreatureAICreator* ai_factory = NULL;
- CreatureAIRegistry& ai_registry(*CreatureAIRegistry::instance());
if (creature->IsPet())
- ai_factory = ai_registry.GetRegistryItem("PetAI");
+ ai_factory = sCreatureAIRegistry->GetRegistryItem("PetAI");
//scriptname in db
if (!ai_factory)
@@ -43,32 +42,32 @@ namespace FactorySelector
// AIname in db
std::string ainame=creature->GetAIName();
if (!ai_factory && !ainame.empty())
- ai_factory = ai_registry.GetRegistryItem(ainame);
+ ai_factory = sCreatureAIRegistry->GetRegistryItem(ainame);
// select by NPC flags
if (!ai_factory)
{
if (creature->IsVehicle())
- ai_factory = ai_registry.GetRegistryItem("VehicleAI");
+ ai_factory = sCreatureAIRegistry->GetRegistryItem("VehicleAI");
else if (creature->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN) && ((Guardian*)creature)->GetOwner()->GetTypeId() == TYPEID_PLAYER)
- ai_factory = ai_registry.GetRegistryItem("PetAI");
+ ai_factory = sCreatureAIRegistry->GetRegistryItem("PetAI");
else if (creature->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK))
- ai_factory = ai_registry.GetRegistryItem("NullCreatureAI");
+ ai_factory = sCreatureAIRegistry->GetRegistryItem("NullCreatureAI");
else if (creature->IsGuard())
- ai_factory = ai_registry.GetRegistryItem("GuardAI");
+ ai_factory = sCreatureAIRegistry->GetRegistryItem("GuardAI");
else if (creature->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN))
- ai_factory = ai_registry.GetRegistryItem("PetAI");
+ ai_factory = sCreatureAIRegistry->GetRegistryItem("PetAI");
else if (creature->IsTotem())
- ai_factory = ai_registry.GetRegistryItem("TotemAI");
+ ai_factory = sCreatureAIRegistry->GetRegistryItem("TotemAI");
else if (creature->IsTrigger())
{
if (creature->m_spells[0])
- ai_factory = ai_registry.GetRegistryItem("TriggerAI");
+ ai_factory = sCreatureAIRegistry->GetRegistryItem("TriggerAI");
else
- ai_factory = ai_registry.GetRegistryItem("NullCreatureAI");
+ ai_factory = sCreatureAIRegistry->GetRegistryItem("NullCreatureAI");
}
else if (creature->IsCritter() && !creature->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
- ai_factory = ai_registry.GetRegistryItem("CritterAI");
+ ai_factory = sCreatureAIRegistry->GetRegistryItem("CritterAI");
}
// select by permit check
@@ -76,7 +75,7 @@ namespace FactorySelector
{
int best_val = -1;
typedef CreatureAIRegistry::RegistryMapType RMT;
- RMT const& l = ai_registry.GetRegisteredItems();
+ RMT const& l = sCreatureAIRegistry->GetRegisteredItems();
for (RMT::const_iterator iter = l.begin(); iter != l.end(); ++iter)
{
const CreatureAICreator* factory = iter->second;
@@ -94,7 +93,7 @@ namespace FactorySelector
// select NullCreatureAI if not another cases
ainame = (ai_factory == NULL) ? "NullCreatureAI" : ai_factory->key();
- TC_LOG_DEBUG("scripts", "Creature %s (Entry: %u GUID: %u DB GUID: %u) is using AI type: %s.", creature->GetName().c_str(), creature->GetEntry(), creature->GetGUIDLow(), creature->GetDBTableGUIDLow(), ainame.c_str());
+ TC_LOG_DEBUG("scripts", "Creature %s (Entry: %u GUID: %u DB GUID: %u) is using AI type: %s.", creature->GetName().c_str(), creature->GetEntry(), creature->GetGUID().GetCounter(), creature->GetSpawnId(), ainame.c_str());
return (ai_factory == NULL ? new NullCreatureAI(creature) : ai_factory->Create(creature));
}
@@ -128,20 +127,19 @@ namespace FactorySelector
GameObjectAI* SelectGameObjectAI(GameObject* go)
{
- const GameObjectAICreator* ai_factory = NULL;
- GameObjectAIRegistry& ai_registry(*GameObjectAIRegistry::instance());
+ GameObjectAICreator const* ai_factory = NULL;
// scriptname in db
if (GameObjectAI* scriptedAI = sScriptMgr->GetGameObjectAI(go))
return scriptedAI;
- ai_factory = ai_registry.GetRegistryItem(go->GetAIName());
+ ai_factory = sGameObjectAIRegistry->GetRegistryItem(go->GetAIName());
//future goAI types go here
std::string ainame = (ai_factory == NULL || go->GetScriptId()) ? "NullGameObjectAI" : ai_factory->key();
- TC_LOG_DEBUG("scripts", "GameObject %u used AI is %s.", go->GetGUIDLow(), ainame.c_str());
+ TC_LOG_DEBUG("scripts", "GameObject %u used AI is %s.", go->GetGUID().GetCounter(), ainame.c_str());
return (ai_factory == NULL ? new NullGameObjectAI(go) : ai_factory->Create(go));
}
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
index f1ba985458e..9a6742b5ebc 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -97,7 +97,6 @@ bool SummonList::HasEntry(uint32 entry) const
}
ScriptedAI::ScriptedAI(Creature* creature) : CreatureAI(creature),
- me(creature),
IsFleeing(false),
_evadeCheckCooldown(2500),
_isCombatMovementAllowed(true)
@@ -168,7 +167,7 @@ void ScriptedAI::DoPlaySoundToSet(WorldObject* source, uint32 soundId)
if (!sSoundEntriesStore.LookupEntry(soundId))
{
- TC_LOG_ERROR("scripts", "Invalid soundId %u used in DoPlaySoundToSet (Source: TypeId %u, GUID %u)", soundId, source->GetTypeId(), source->GetGUIDLow());
+ TC_LOG_ERROR("scripts", "Invalid soundId %u used in DoPlaySoundToSet (Source: TypeId %u, GUID %u)", soundId, source->GetTypeId(), source->GetGUID().GetCounter());
return;
}
@@ -470,6 +469,7 @@ void BossAI::_Reset()
if (!me->IsAlive())
return;
+ me->SetCombatPulseDelay(0);
me->ResetLootMode();
events.Reset();
summons.DespawnAll();
@@ -500,6 +500,7 @@ void BossAI::_EnterCombat()
instance->SetBossState(_bossId, IN_PROGRESS);
}
+ me->SetCombatPulseDelay(5);
me->setActive(true);
DoZoneInCombat();
ScheduleTasks();
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
index 7d7811d9e75..242acbcd44d 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
@@ -184,9 +184,6 @@ struct ScriptedAI : public CreatureAI
// Variables
// *************
- //Pointer to creature we are manipulating
- Creature* me;
-
//For fleeing
bool IsFleeing;
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index 1a51bb2d897..46cf934356d 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -208,7 +208,7 @@ void SmartAI::EndPath(bool fail)
if (targets->size() == 1 && GetScript()->IsPlayer((*targets->begin())))
{
Player* player = (*targets->begin())->ToPlayer();
- if (!fail && player->IsAtGroupRewardDistance(me) && !player->GetCorpse())
+ if (!fail && player->IsAtGroupRewardDistance(me) && !player->HasCorpse())
player->GroupEventHappens(mEscortQuestID, me);
if (fail && player->GetQuestStatus(mEscortQuestID) == QUEST_STATUS_INCOMPLETE)
@@ -220,7 +220,7 @@ void SmartAI::EndPath(bool fail)
{
Player* groupGuy = groupRef->GetSource();
- if (!fail && groupGuy->IsAtGroupRewardDistance(me) && !groupGuy->GetCorpse())
+ if (!fail && groupGuy->IsAtGroupRewardDistance(me) && !groupGuy->HasCorpse())
groupGuy->AreaExploredOrEventHappens(mEscortQuestID);
if (fail && groupGuy->GetQuestStatus(mEscortQuestID) == QUEST_STATUS_INCOMPLETE)
groupGuy->FailQuest(mEscortQuestID);
@@ -233,7 +233,7 @@ void SmartAI::EndPath(bool fail)
if (GetScript()->IsPlayer((*iter)))
{
Player* player = (*iter)->ToPlayer();
- if (!fail && player->IsAtGroupRewardDistance(me) && !player->GetCorpse())
+ if (!fail && player->IsAtGroupRewardDistance(me) && !player->HasCorpse())
player->AreaExploredOrEventHappens(mEscortQuestID);
if (fail && player->GetQuestStatus(mEscortQuestID) == QUEST_STATUS_INCOMPLETE)
player->FailQuest(mEscortQuestID);
@@ -453,45 +453,15 @@ void SmartAI::MoveInLineOfSight(Unit* who)
GetScript()->OnMoveInLineOfSight(who);
- if (me->HasReactState(REACT_PASSIVE) || AssistPlayerInCombat(who))
+ if (AssistPlayerInCombat(who))
return;
- if (!CanAIAttack(who))
- return;
-
- if (!me->CanStartAttack(who, false))
- return;
-
- if (me->IsHostileTo(who))
- {
- float fAttackRadius = me->GetAttackDistance(who);
- if (me->IsWithinDistInMap(who, fAttackRadius) && me->IsWithinLOSInMap(who))
- {
- if (!me->GetVictim())
- {
- // Clear distracted state on combat
- if (me->HasUnitState(UNIT_STATE_DISTRACTED))
- {
- me->ClearUnitState(UNIT_STATE_DISTRACTED);
- me->GetMotionMaster()->Clear();
- }
-
- AttackStart(who);
- }
- else/* if (me->GetMap()->IsDungeon())*/
- {
- who->SetInCombatWith(me);
- me->AddThreat(who, 0.0f);
- }
- }
- }
+ CreatureAI::MoveInLineOfSight(who);
}
bool SmartAI::CanAIAttack(const Unit* /*who*/) const
{
- if (me->GetReactState() == REACT_PASSIVE)
- return false;
- return true;
+ return !(me->HasReactState(REACT_PASSIVE));
}
bool SmartAI::AssistPlayerInCombat(Unit* who)
@@ -728,12 +698,12 @@ void SmartAI::sGossipHello(Player* player)
GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_HELLO, player);
}
-void SmartAI::sGossipSelect(Player* player, uint32 sender, uint32 action)
+void SmartAI::sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId)
{
- GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_SELECT, player, sender, action);
+ GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_SELECT, player, menuId, gossipListId);
}
-void SmartAI::sGossipSelectCode(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/, const char* /*code*/) { }
+void SmartAI::sGossipSelectCode(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/, const char* /*code*/) { }
void SmartAI::sQuestAccept(Player* player, Quest const* quest)
{
diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h
index 1e287cd5b9e..ea03a821846 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.h
+++ b/src/server/game/AI/SmartScripts/SmartAI.h
@@ -175,8 +175,8 @@ class SmartAI : public CreatureAI
void SetInvincibilityHpLevel(uint32 level) { mInvincibilityHpLevel = level; }
void sGossipHello(Player* player) override;
- void sGossipSelect(Player* player, uint32 sender, uint32 action) override;
- void sGossipSelectCode(Player* player, uint32 sender, uint32 action, const char* code) override;
+ void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override;
+ void sGossipSelectCode(Player* player, uint32 menuId, uint32 gossipListId, const char* code) override;
void sQuestAccept(Player* player, Quest const* quest) override;
//void sQuestSelect(Player* player, Quest const* quest) override;
void sQuestReward(Player* player, Quest const* quest, uint32 opt) override;
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 9fa2269fd8b..7ca4274bc40 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -89,13 +89,8 @@ void SmartScript::ProcessEventsFor(SMART_EVENT e, Unit* unit, uint32 var0, uint3
continue;
if (eventType == e /*&& (!i->event.event_phase_mask || IsInPhase(i->event.event_phase_mask)) && !(i->event.event_flags & SMART_EVENT_FLAG_NOT_REPEATABLE && i->runOnce)*/)
- {
- ConditionList conds = sConditionMgr->GetConditionsForSmartEvent(i->entryOrGuid, i->event_id, i->source_type);
- ConditionSourceInfo info = ConditionSourceInfo(unit, GetBaseObject());
-
- if (sConditionMgr->IsObjectMeetToConditions(info, conds))
+ if (sConditionMgr->IsObjectMeetingSmartEventConditions(i->entryOrGuid, i->event_id, i->source_type, unit, GetBaseObject()))
ProcessEvent(*i, unit, var0, var1, bvar, spell, gob);
- }
}
}
@@ -114,7 +109,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
mLastInvoker = unit->GetGUID();
if (Unit* tempInvoker = GetLastInvoker())
- TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: Invoker: %s (guidlow: %u)", tempInvoker->GetName().c_str(), tempInvoker->GetGUIDLow());
+ TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: Invoker: %s (guidlow: %u)", tempInvoker->GetName().c_str(), tempInvoker->GetGUID().GetCounter());
switch (e.GetActionType())
{
@@ -123,13 +118,18 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
ObjectList* targets = GetTargets(e, unit);
Creature* talker = me;
Player* targetPlayer = NULL;
+ Unit* talkTarget = NULL;
+
if (targets)
{
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
{
if (IsCreature(*itr) && !(*itr)->ToCreature()->IsPet()) // Prevented sending text to pets.
{
- talker = (*itr)->ToCreature();
+ if (e.action.talk.useTalkTarget)
+ talkTarget = (*itr)->ToCreature();
+ else
+ talker = (*itr)->ToCreature();
break;
}
else if (IsPlayer(*itr))
@@ -148,7 +148,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
mTalkerEntry = talker->GetEntry();
mLastTextID = e.action.talk.textGroupID;
mTextTimer = e.action.talk.duration;
- Unit* talkTarget = NULL;
+
if (IsPlayer(GetLastInvoker())) // used for $vars in texts and whisper target
talkTarget = GetLastInvoker();
else if (targetPlayer)
@@ -157,7 +157,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
mUseTextTimer = true;
sCreatureTextMgr->SendChat(talker, uint8(e.action.talk.textGroupID), talkTarget);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_TALK: talker: %s (GuidLow: %u), textGuid: %u",
- talker->GetName().c_str(), talker->GetGUIDLow(), talkTarget ? talkTarget->GetGUIDLow() : 0);
+ talker->GetName().c_str(), talker->GetGUID().GetCounter(), talkTarget ? talkTarget->GetGUID().GetCounter() : 0);
break;
}
case SMART_ACTION_SIMPLE_TALK:
@@ -175,7 +175,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
sCreatureTextMgr->SendChat(me, uint8(e.action.talk.textGroupID), IsPlayer(templastInvoker) ? templastInvoker : 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, (*itr)->ToPlayer());
}
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SIMPLE_TALK: talker: %s (GuidLow: %u), textGroupId: %u",
- (*itr)->GetName().c_str(), (*itr)->GetGUIDLow(), uint8(e.action.talk.textGroupID));
+ (*itr)->GetName().c_str(), (*itr)->GetGUID().GetCounter(), uint8(e.action.talk.textGroupID));
}
delete targets;
@@ -193,7 +193,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
(*itr)->ToUnit()->HandleEmoteCommand(e.action.emote.emote);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_PLAY_EMOTE: target: %s (GuidLow: %u), emote: %u",
- (*itr)->GetName().c_str(), (*itr)->GetGUIDLow(), e.action.emote.emote);
+ (*itr)->GetName().c_str(), (*itr)->GetGUID().GetCounter(), e.action.emote.emote);
}
}
@@ -212,7 +212,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
(*itr)->PlayDirectSound(e.action.sound.sound, e.action.sound.onlySelf ? (*itr)->ToPlayer() : nullptr);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SOUND: target: %s (GuidLow: %u), sound: %u, onlyself: %u",
- (*itr)->GetName().c_str(), (*itr)->GetGUIDLow(), e.action.sound.sound, e.action.sound.onlySelf);
+ (*itr)->GetName().c_str(), (*itr)->GetGUID().GetCounter(), e.action.sound.sound, e.action.sound.onlySelf);
}
}
@@ -233,7 +233,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
(*itr)->ToCreature()->setFaction(e.action.faction.factionID);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_FACTION: Creature entry %u, GuidLow %u set faction to %u",
- (*itr)->GetEntry(), (*itr)->GetGUIDLow(), e.action.faction.factionID);
+ (*itr)->GetEntry(), (*itr)->GetGUID().GetCounter(), e.action.faction.factionID);
}
else
{
@@ -243,7 +243,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
(*itr)->ToCreature()->setFaction(ci->faction);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_FACTION: Creature entry %u, GuidLow %u set faction to %u",
- (*itr)->GetEntry(), (*itr)->GetGUIDLow(), ci->faction);
+ (*itr)->GetEntry(), (*itr)->GetGUID().GetCounter(), ci->faction);
}
}
}
@@ -275,7 +275,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
uint32 displayId = ObjectMgr::ChooseDisplayId(ci);
(*itr)->ToCreature()->SetDisplayId(displayId);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_MORPH_TO_ENTRY_OR_MODEL: Creature entry %u, GuidLow %u set displayid to %u",
- (*itr)->GetEntry(), (*itr)->GetGUIDLow(), displayId);
+ (*itr)->GetEntry(), (*itr)->GetGUID().GetCounter(), displayId);
}
}
//if no param1, then use value from param2 (modelId)
@@ -283,14 +283,14 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
(*itr)->ToCreature()->SetDisplayId(e.action.morphOrMount.model);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_MORPH_TO_ENTRY_OR_MODEL: Creature entry %u, GuidLow %u set displayid to %u",
- (*itr)->GetEntry(), (*itr)->GetGUIDLow(), e.action.morphOrMount.model);
+ (*itr)->GetEntry(), (*itr)->GetGUID().GetCounter(), e.action.morphOrMount.model);
}
}
else
{
(*itr)->ToCreature()->DeMorph();
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_MORPH_TO_ENTRY_OR_MODEL: Creature entry %u, GuidLow %u demorphs.",
- (*itr)->GetEntry(), (*itr)->GetGUIDLow());
+ (*itr)->GetEntry(), (*itr)->GetGUID().GetCounter());
}
}
@@ -309,7 +309,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
(*itr)->ToPlayer()->FailQuest(e.action.quest.quest);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_FAIL_QUEST: Player guidLow %u fails quest %u",
- (*itr)->GetGUIDLow(), e.action.quest.quest);
+ (*itr)->GetGUID().GetCounter(), e.action.quest.quest);
}
}
@@ -330,7 +330,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
(*itr)->ToPlayer()->AddQuestAndCheckCompletion(q, NULL);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_ADD_QUEST: Player guidLow %u add quest %u",
- (*itr)->GetGUIDLow(), e.action.quest.quest);
+ (*itr)->GetGUID().GetCounter(), e.action.quest.quest);
}
}
}
@@ -392,7 +392,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
uint32 emote = temp[urand(0, count - 1)];
(*itr)->ToUnit()->HandleEmoteCommand(emote);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_RANDOM_EMOTE: Creature guidLow %u handle random emote %u",
- (*itr)->GetGUIDLow(), emote);
+ (*itr)->GetGUID().GetCounter(), emote);
}
}
@@ -411,7 +411,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
me->getThreatManager().modifyThreatPercent(target, e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_THREAT_ALL_PCT: Creature guidLow %u modify threat for unit %u, value %i",
- me->GetGUIDLow(), target->GetGUIDLow(), e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC);
+ me->GetGUID().GetCounter(), target->GetGUID().GetCounter(), e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC);
}
}
break;
@@ -431,7 +431,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
me->getThreatManager().modifyThreatPercent((*itr)->ToUnit(), e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_THREAT_SINGLE_PCT: Creature guidLow %u modify threat for unit %u, value %i",
- me->GetGUIDLow(), (*itr)->GetGUIDLow(), e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC);
+ me->GetGUID().GetCounter(), (*itr)->GetGUID().GetCounter(), e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC);
}
}
@@ -458,7 +458,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
(*itr)->ToPlayer()->GroupEventHappens(e.action.quest.quest, me);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_CALL_AREAEXPLOREDOREVENTHAPPENS: Player guidLow %u credited quest %u",
- (*itr)->GetGUIDLow(), e.action.quest.quest);
+ (*itr)->GetGUID().GetCounter(), e.action.quest.quest);
}
}
@@ -507,7 +507,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
go->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED) != 0);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_CAST:: %s: %u casts spell %u on target %u with castflags %u",
- (me ? me->GetGUID() : go->GetGUID()).GetTypeName(), me ? me->GetGUIDLow() : go->GetGUIDLow(), e.action.cast.spell, (*itr)->GetGUIDLow(), e.action.cast.flags);
+ (me ? me->GetGUID() : go->GetGUID()).GetTypeName(), me ? me->GetGUID().GetCounter() : go->GetGUID().GetCounter(), e.action.cast.spell, (*itr)->GetGUID().GetCounter(), e.action.cast.flags);
}
else
TC_LOG_DEBUG("scripts.ai", "Spell %u not cast because it has flag SMARTCAST_AURA_NOT_PRESENT and the target (%s) already has the aura", e.action.cast.spell, (*itr)->GetGUID().ToString().c_str());
@@ -538,7 +538,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
tempLastInvoker->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED) != 0);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_INVOKER_CAST: Invoker %u casts spell %u on target %u with castflags %u",
- tempLastInvoker->GetGUIDLow(), e.action.cast.spell, (*itr)->GetGUIDLow(), e.action.cast.flags);
+ tempLastInvoker->GetGUID().GetCounter(), e.action.cast.spell, (*itr)->GetGUID().GetCounter(), e.action.cast.flags);
}
else
TC_LOG_DEBUG("scripts.ai", "Spell %u not cast because it has flag SMARTCAST_AURA_NOT_PRESENT and the target (%s) already has the aura", e.action.cast.spell, (*itr)->GetGUID().ToString().c_str());
@@ -559,7 +559,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
(*itr)->ToUnit()->AddAura(e.action.cast.spell, (*itr)->ToUnit());
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_ADD_AURA: Adding aura %u to unit %u",
- e.action.cast.spell, (*itr)->GetGUIDLow());
+ e.action.cast.spell, (*itr)->GetGUID().GetCounter());
}
}
@@ -580,7 +580,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
(*itr)->ToGameObject()->SetLootState(GO_READY);
(*itr)->ToGameObject()->UseDoorOrButton(0, false, unit);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_ACTIVATE_GOBJECT. Gameobject %u (entry: %u) activated",
- (*itr)->GetGUIDLow(), (*itr)->GetEntry());
+ (*itr)->GetGUID().GetCounter(), (*itr)->GetEntry());
}
}
@@ -599,7 +599,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
(*itr)->ToGameObject()->ResetDoorOrButton();
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_RESET_GOBJECT. Gameobject %u (entry: %u) reset",
- (*itr)->GetGUIDLow(), (*itr)->GetEntry());
+ (*itr)->GetGUID().GetCounter(), (*itr)->GetEntry());
}
}
@@ -618,7 +618,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
(*itr)->ToUnit()->SetUInt32Value(UNIT_NPC_EMOTESTATE, e.action.emote.emote);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_EMOTE_STATE. Unit %u set emotestate to %u",
- (*itr)->GetGUIDLow(), e.action.emote.emote);
+ (*itr)->GetGUID().GetCounter(), e.action.emote.emote);
}
}
@@ -639,13 +639,13 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
(*itr)->ToUnit()->SetFlag(UNIT_FIELD_FLAGS, e.action.unitFlag.flag);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_UNIT_FLAG. Unit %u added flag %u to UNIT_FIELD_FLAGS",
- (*itr)->GetGUIDLow(), e.action.unitFlag.flag);
+ (*itr)->GetGUID().GetCounter(), e.action.unitFlag.flag);
}
else
{
(*itr)->ToUnit()->SetFlag(UNIT_FIELD_FLAGS_2, e.action.unitFlag.flag);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_UNIT_FLAG. Unit %u added flag %u to UNIT_FIELD_FLAGS_2",
- (*itr)->GetGUIDLow(), e.action.unitFlag.flag);
+ (*itr)->GetGUID().GetCounter(), e.action.unitFlag.flag);
}
}
}
@@ -667,13 +667,13 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
(*itr)->ToUnit()->RemoveFlag(UNIT_FIELD_FLAGS, e.action.unitFlag.flag);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_REMOVE_UNIT_FLAG. Unit %u removed flag %u to UNIT_FIELD_FLAGS",
- (*itr)->GetGUIDLow(), e.action.unitFlag.flag);
+ (*itr)->GetGUID().GetCounter(), e.action.unitFlag.flag);
}
else
{
(*itr)->ToUnit()->RemoveFlag(UNIT_FIELD_FLAGS_2, e.action.unitFlag.flag);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_REMOVE_UNIT_FLAG. Unit %u removed flag %u to UNIT_FIELD_FLAGS_2",
- (*itr)->GetGUIDLow(), e.action.unitFlag.flag);
+ (*itr)->GetGUID().GetCounter(), e.action.unitFlag.flag);
}
}
}
@@ -688,7 +688,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
ENSURE_AI(SmartAI, me->AI())->SetAutoAttack(e.action.autoAttack.attack != 0);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_AUTO_ATTACK: Creature: %u bool on = %u",
- me->GetGUIDLow(), e.action.autoAttack.attack);
+ me->GetGUID().GetCounter(), e.action.autoAttack.attack);
break;
}
case SMART_ACTION_ALLOW_COMBAT_MOVEMENT:
@@ -699,7 +699,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
bool move = e.action.combatMove.move != 0;
ENSURE_AI(SmartAI, me->AI())->SetCombatMove(move);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_ALLOW_COMBAT_MOVEMENT: Creature %u bool on = %u",
- me->GetGUIDLow(), e.action.combatMove.move);
+ me->GetGUID().GetCounter(), e.action.combatMove.move);
break;
}
case SMART_ACTION_SET_EVENT_PHASE:
@@ -709,7 +709,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
SetPhase(e.action.setEventPhase.phase);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_EVENT_PHASE: Creature %u set event phase %u",
- GetBaseObject()->GetGUIDLow(), e.action.setEventPhase.phase);
+ GetBaseObject()->GetGUID().GetCounter(), e.action.setEventPhase.phase);
break;
}
case SMART_ACTION_INC_EVENT_PHASE:
@@ -720,7 +720,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
IncPhase(e.action.incEventPhase.inc);
DecPhase(e.action.incEventPhase.dec);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_INC_EVENT_PHASE: Creature %u inc event phase by %u, "
- "decrease by %u", GetBaseObject()->GetGUIDLow(), e.action.incEventPhase.inc, e.action.incEventPhase.dec);
+ "decrease by %u", GetBaseObject()->GetGUID().GetCounter(), e.action.incEventPhase.inc, e.action.incEventPhase.dec);
break;
}
case SMART_ACTION_EVADE:
@@ -729,7 +729,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
break;
me->AI()->EnterEvadeMode();
- TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_EVADE: Creature %u EnterEvadeMode", me->GetGUIDLow());
+ TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_EVADE: Creature %u EnterEvadeMode", me->GetGUID().GetCounter());
break;
}
case SMART_ACTION_FLEE_FOR_ASSIST:
@@ -743,7 +743,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
Trinity::BroadcastTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, BROADCAST_TEXT_FLEE_FOR_ASSIST);
sCreatureTextMgr->SendChatPacket(me, builder, CHAT_MSG_MONSTER_EMOTE);
}
- TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_FLEE_FOR_ASSIST: Creature %u DoFleeToGetAssistance", me->GetGUIDLow());
+ TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_FLEE_FOR_ASSIST: Creature %u DoFleeToGetAssistance", me->GetGUID().GetCounter());
break;
}
case SMART_ACTION_CALL_GROUPEVENTHAPPENS:
@@ -755,7 +755,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
unit->ToPlayer()->GroupEventHappens(e.action.quest.quest, GetBaseObject());
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_GROUPEVENTHAPPENS: Player %u, group credit for quest %u",
- unit->GetGUIDLow(), e.action.quest.quest);
+ unit->GetGUID().GetCounter(), e.action.quest.quest);
}
// Special handling for vehicles
@@ -799,7 +799,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
(*itr)->ToUnit()->RemoveAllAuras();
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_REMOVEAURASFROMSPELL: Unit %u, spell %u",
- (*itr)->GetGUIDLow(), e.action.removeAura.spell);
+ (*itr)->GetGUID().GetCounter(), e.action.removeAura.spell);
}
delete targets;
@@ -823,7 +823,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
ENSURE_AI(SmartAI, me->AI())->SetFollow((*itr)->ToUnit(), (float)e.action.follow.dist, (float)e.action.follow.angle, e.action.follow.credit, e.action.follow.entry, e.action.follow.creditType);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_FOLLOW: Creature %u following target %u",
- me->GetGUIDLow(), (*itr)->GetGUIDLow());
+ me->GetGUID().GetCounter(), (*itr)->GetGUID().GetCounter());
break;
}
}
@@ -860,7 +860,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
uint32 phase = temp[urand(0, count - 1)];
SetPhase(phase);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_RANDOM_PHASE: Creature %u sets event phase to %u",
- GetBaseObject()->GetGUIDLow(), phase);
+ GetBaseObject()->GetGUID().GetCounter(), phase);
break;
}
case SMART_ACTION_RANDOM_PHASE_RANGE:
@@ -871,7 +871,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
uint32 phase = urand(e.action.randomPhaseRange.phaseMin, e.action.randomPhaseRange.phaseMax);
SetPhase(phase);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_RANDOM_PHASE_RANGE: Creature %u sets event phase to %u",
- GetBaseObject()->GetGUIDLow(), phase);
+ GetBaseObject()->GetGUID().GetCounter(), phase);
break;
}
case SMART_ACTION_CALL_KILLEDMONSTER:
@@ -885,7 +885,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
player->RewardPlayerAndGroupAtEvent(e.action.killedMonster.creature, player);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_KILLEDMONSTER: Player %u, Killcredit: %u",
- player->GetGUIDLow(), e.action.killedMonster.creature);
+ player->GetGUID().GetCounter(), e.action.killedMonster.creature);
}
}
else // Specific target type
@@ -900,7 +900,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
(*itr)->ToPlayer()->KilledMonsterCredit(e.action.killedMonster.creature);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_KILLEDMONSTER: Player %u, Killcredit: %u",
- (*itr)->GetGUIDLow(), e.action.killedMonster.creature);
+ (*itr)->GetGUID().GetCounter(), e.action.killedMonster.creature);
}
else if (IsUnit(*itr)) // Special handling for vehicles
if (Vehicle* vehicle = (*itr)->ToUnit()->GetVehicleKit())
@@ -979,8 +979,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
if (me && !me->isDead())
{
- me->Kill(me);
- TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_DIE: Creature %u", me->GetGUIDLow());
+ me->KillSelf();
+ TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_DIE: Creature %u", me->GetGUID().GetCounter());
}
break;
}
@@ -989,7 +989,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (me)
{
me->SetInCombatWithZone();
- TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_SET_IN_COMBAT_WITH_ZONE: Creature %u", me->GetGUIDLow());
+ TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_SET_IN_COMBAT_WITH_ZONE: Creature %u", me->GetGUID().GetCounter());
}
break;
}
@@ -1003,7 +1003,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
Trinity::BroadcastTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, BROADCAST_TEXT_CALL_FOR_HELP);
sCreatureTextMgr->SendChatPacket(me, builder, CHAT_MSG_MONSTER_EMOTE);
}
- TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_FOR_HELP: Creature %u", me->GetGUIDLow());
+ TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_FOR_HELP: Creature %u", me->GetGUID().GetCounter());
}
break;
}
@@ -1013,7 +1013,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
me->SetSheath(SheathState(e.action.setSheath.sheath));
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_SET_SHEATH: Creature %u, State: %u",
- me->GetGUIDLow(), e.action.setSheath.sheath);
+ me->GetGUID().GetCounter(), e.action.setSheath.sheath);
}
break;
}
@@ -1026,16 +1026,21 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
{
- if (!IsCreature(*itr))
- continue;
-
- if ((*itr)->ToUnit()->IsAlive() && IsSmart((*itr)->ToCreature()))
+ if (Creature* target = (*itr)->ToCreature())
+ {
+ if (target->IsAlive() && IsSmart(target))
+ {
+ ENSURE_AI(SmartAI, target->AI())->SetDespawnTime(e.action.forceDespawn.delay + 1); // Next tick
+ ENSURE_AI(SmartAI, target->AI())->StartDespawn();
+ }
+ else
+ target->DespawnOrUnsummon(e.action.forceDespawn.delay);
+ }
+ else if (GameObject* goTarget = (*itr)->ToGameObject())
{
- ENSURE_AI(SmartAI, (*itr)->ToCreature()->AI())->SetDespawnTime(e.action.forceDespawn.delay + 1); // Next tick
- ENSURE_AI(SmartAI, (*itr)->ToCreature()->AI())->StartDespawn();
+ if (IsSmartGO(goTarget))
+ goTarget->SetRespawnTime(e.action.forceDespawn.delay + 1);
}
- else
- (*itr)->ToCreature()->DespawnOrUnsummon(e.action.forceDespawn.delay);
}
delete targets;
@@ -1131,6 +1136,14 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
me->GetMotionMaster()->MovePoint(SMART_RANDOM_POINT, x, y, z);
break;
}
+ case SMART_ACTION_RISE_UP:
+ {
+ if (!me)
+ break;
+
+ me->GetMotionMaster()->MovePoint(SMART_RANDOM_POINT, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + (float)e.action.moveRandom.distance);
+ break;
+ }
case SMART_ACTION_SET_VISIBILITY:
{
if (me)
@@ -1236,7 +1249,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (!IsUnit(*itr))
continue;
- (*itr)->ToUnit()->Kill((*itr)->ToUnit());
+ (*itr)->ToUnit()->KillSelf();
}
delete targets;
@@ -2309,10 +2322,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
void SmartScript::ProcessTimedAction(SmartScriptHolder& e, uint32 const& min, uint32 const& max, Unit* unit, uint32 var0, uint32 var1, bool bvar, const SpellInfo* spell, GameObject* gob)
{
- ConditionList const conds = sConditionMgr->GetConditionsForSmartEvent(e.entryOrGuid, e.event_id, e.source_type);
- ConditionSourceInfo info = ConditionSourceInfo(unit, GetBaseObject());
-
- if (sConditionMgr->IsObjectMeetToConditions(info, conds))
+ if (sConditionMgr->IsObjectMeetingSmartEventConditions(e.entryOrGuid, e.event_id, e.source_type, unit, GetBaseObject()))
ProcessAction(e, unit, var0, var1, bvar, spell, gob);
RecalcTimer(e, min, max);
@@ -3466,14 +3476,14 @@ void SmartScript::GetScript()
SmartAIEventList e;
if (me)
{
- e = sSmartScriptMgr->GetScript(-((int32)me->GetDBTableGUIDLow()), mScriptType);
+ e = sSmartScriptMgr->GetScript(-((int32)me->GetSpawnId()), mScriptType);
if (e.empty())
e = sSmartScriptMgr->GetScript((int32)me->GetEntry(), mScriptType);
FillScript(e, me, NULL);
}
else if (go)
{
- e = sSmartScriptMgr->GetScript(-((int32)go->GetDBTableGUIDLow()), mScriptType);
+ e = sSmartScriptMgr->GetScript(-((int32)go->GetSpawnId()), mScriptType);
if (e.empty())
e = sSmartScriptMgr->GetScript((int32)go->GetEntry(), mScriptType);
FillScript(e, go, NULL);
@@ -3663,5 +3673,12 @@ void SmartScript::SetScript9(SmartScriptHolder& e, uint32 entry)
Unit* SmartScript::GetLastInvoker()
{
- return ObjectAccessor::FindUnit(mLastInvoker);
+ WorldObject* lookupRoot = me;
+ if (!lookupRoot)
+ lookupRoot = go;
+
+ if (lookupRoot)
+ return ObjectAccessor::GetUnit(*lookupRoot, mLastInvoker);
+
+ return ObjectAccessor::FindPlayer(mLastInvoker);
}
diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h
index 51628eded54..1c4b9a51ece 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.h
+++ b/src/server/game/AI/SmartScripts/SmartScript.h
@@ -118,7 +118,7 @@ class SmartScript
smart = false;
if (!smart)
- TC_LOG_ERROR("sql.sql", "SmartScript: Action target Creature (GUID: %u Entry: %u) is not using SmartAI, action called by Creature (GUID: %u Entry: %u) skipped to prevent crash.", c ? c->GetDBTableGUIDLow() : 0, c ? c->GetEntry() : 0, me ? me->GetDBTableGUIDLow() : 0, me ? me->GetEntry() : 0);
+ TC_LOG_ERROR("sql.sql", "SmartScript: Action target Creature (GUID: %u Entry: %u) is not using SmartAI, action called by Creature (GUID: %u Entry: %u) skipped to prevent crash.", c ? c->GetSpawnId() : 0, c ? c->GetEntry() : 0, me ? me->GetSpawnId() : 0, me ? me->GetEntry() : 0);
return smart;
}
@@ -132,7 +132,7 @@ class SmartScript
if (!go || go->GetAIName() != "SmartGameObjectAI")
smart = false;
if (!smart)
- TC_LOG_ERROR("sql.sql", "SmartScript: Action target GameObject (GUID: %u Entry: %u) is not using SmartGameObjectAI, action called by GameObject (GUID: %u Entry: %u) skipped to prevent crash.", g ? g->GetDBTableGUIDLow() : 0, g ? g->GetEntry() : 0, go ? go->GetDBTableGUIDLow() : 0, go ? go->GetEntry() : 0);
+ TC_LOG_ERROR("sql.sql", "SmartScript: Action target GameObject (GUID: %u Entry: %u) is not using SmartGameObjectAI, action called by GameObject (GUID: %u Entry: %u) skipped to prevent crash.", g ? g->GetSpawnId() : 0, g ? g->GetEntry() : 0, go ? go->GetSpawnId() : 0, go ? go->GetEntry() : 0);
return smart;
}
@@ -175,35 +175,27 @@ class SmartScript
return 0;
}
- GameObject* FindGameObjectNear(WorldObject* searchObject, uint32 guid) const
+ GameObject* FindGameObjectNear(WorldObject* searchObject, ObjectGuid::LowType guid) const
{
- GameObject* gameObject = NULL;
+ auto bounds = searchObject->GetMap()->GetGameObjectBySpawnIdStore().equal_range(guid);
+ if (bounds.first == bounds.second)
+ return nullptr;
- CellCoord p(Trinity::ComputeCellCoord(searchObject->GetPositionX(), searchObject->GetPositionY()));
- Cell cell(p);
-
- Trinity::GameObjectWithDbGUIDCheck goCheck(*searchObject, guid);
- Trinity::GameObjectSearcher<Trinity::GameObjectWithDbGUIDCheck> checker(searchObject, gameObject, goCheck);
-
- TypeContainerVisitor<Trinity::GameObjectSearcher<Trinity::GameObjectWithDbGUIDCheck>, GridTypeMapContainer > objectChecker(checker);
- cell.Visit(p, objectChecker, *searchObject->GetMap(), *searchObject, searchObject->GetGridActivationRange());
-
- return gameObject;
+ return bounds.first->second;
}
- Creature* FindCreatureNear(WorldObject* searchObject, uint32 guid) const
+ Creature* FindCreatureNear(WorldObject* searchObject, ObjectGuid::LowType guid) const
{
- Creature* creature = NULL;
- CellCoord p(Trinity::ComputeCellCoord(searchObject->GetPositionX(), searchObject->GetPositionY()));
- Cell cell(p);
-
- Trinity::CreatureWithDbGUIDCheck target_check(searchObject, guid);
- Trinity::CreatureSearcher<Trinity::CreatureWithDbGUIDCheck> checker(searchObject, creature, target_check);
+ auto bounds = searchObject->GetMap()->GetCreatureBySpawnIdStore().equal_range(guid);
+ if (bounds.first == bounds.second)
+ return nullptr;
- TypeContainerVisitor<Trinity::CreatureSearcher <Trinity::CreatureWithDbGUIDCheck>, GridTypeMapContainer > unit_checker(checker);
- cell.Visit(p, unit_checker, *searchObject->GetMap(), *searchObject, searchObject->GetGridActivationRange());
+ auto creatureItr = std::find_if(bounds.first, bounds.second, [](Map::CreatureBySpawnIdContainer::value_type const& pair)
+ {
+ return pair.second->IsAlive();
+ });
- return creature;
+ return creatureItr != bounds.second ? creatureItr->second : bounds.first->second;
}
ObjectListMap* mTargetStorage;
@@ -211,20 +203,27 @@ class SmartScript
void OnReset();
void ResetBaseObject()
{
- if (meOrigGUID)
+ WorldObject* lookupRoot = me;
+ if (!lookupRoot)
+ lookupRoot = go;
+
+ if (lookupRoot)
{
- if (Creature* m = HashMapHolder<Creature>::Find(meOrigGUID))
+ if (!meOrigGUID)
{
- me = m;
- go = NULL;
+ if (Creature* m = ObjectAccessor::GetCreature(*lookupRoot, meOrigGUID))
+ {
+ me = m;
+ go = NULL;
+ }
}
- }
- if (goOrigGUID)
- {
- if (GameObject* o = HashMapHolder<GameObject>::Find(goOrigGUID))
+ if (!goOrigGUID)
{
- me = NULL;
- go = o;
+ if (GameObject* o = ObjectAccessor::GetGameObject(*lookupRoot, goOrigGUID))
+ {
+ me = NULL;
+ go = o;
+ }
}
}
goOrigGUID.Clear();
@@ -247,10 +246,10 @@ class SmartScript
DecPhase(abs(p));
}
- void DecPhase(int32 p = 1)
- {
- if(mEventPhase > (uint32)p)
- mEventPhase -= (uint32)p;
+ void DecPhase(int32 p = 1)
+ {
+ if (mEventPhase > (uint32)p)
+ mEventPhase -= (uint32)p;
else
mEventPhase = 0;
}
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index 6ccc581c54e..f0e3c3caff6 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -1198,6 +1198,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_ADD_GO_FLAG:
case SMART_ACTION_REMOVE_GO_FLAG:
case SMART_ACTION_SUMMON_CREATURE_GROUP:
+ case SMART_ACTION_RISE_UP:
break;
default:
TC_LOG_ERROR("sql.sql", "SmartAIMgr: Not handled action_type(%u), event_type(%u), Entry %d SourceType %u Event %u, skipped.", e.GetActionType(), e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id);
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index 8565c5d3497..2f9b032c14c 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -426,7 +426,7 @@ enum SMART_SCRIPT_RESPAWN_CONDITION
enum SMART_ACTION
{
SMART_ACTION_NONE = 0, // No action
- SMART_ACTION_TALK = 1, // groupID from creature_text, duration to wait before TEXT_OVER event is triggered
+ SMART_ACTION_TALK = 1, // groupID from creature_text, duration to wait before TEXT_OVER event is triggered, useTalkTarget (0/1) - use target as talk target
SMART_ACTION_SET_FACTION = 2, // FactionId (or 0 for default)
SMART_ACTION_MORPH_TO_ENTRY_OR_MODEL = 3, // Creature_template entry(param1) OR ModelId (param2) (or 0 for both to demorph)
SMART_ACTION_SOUND = 4, // SoundId, onlySelf
@@ -539,8 +539,9 @@ enum SMART_ACTION
SMART_ACTION_GAME_EVENT_STOP = 111, // GameEventId
SMART_ACTION_GAME_EVENT_START = 112, // GameEventId
SMART_ACTION_START_CLOSEST_WAYPOINT = 113, // wp1, wp2, wp3, wp4, wp5, wp6, wp7
+ SMART_ACTION_RISE_UP = 114, // distance
- SMART_ACTION_END = 114
+ SMART_ACTION_END = 115
};
struct SmartAction
@@ -553,6 +554,7 @@ struct SmartAction
{
uint32 textGroupID;
uint32 duration;
+ uint32 useTalkTarget;
} talk;
struct
diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp
index 0b85addfbf8..7ec1665bffc 100644
--- a/src/server/game/Accounts/AccountMgr.cpp
+++ b/src/server/game/Accounts/AccountMgr.cpp
@@ -81,7 +81,7 @@ AccountOpResult AccountMgr::DeleteAccount(uint32 accountId)
{
do
{
- ObjectGuid guid(HIGHGUID_PLAYER, (*result)[0].GetUInt32());
+ ObjectGuid guid(HighGuid::Player, (*result)[0].GetUInt32());
// Kick if player is online
if (Player* p = ObjectAccessor::FindConnectedPlayer(guid))
diff --git a/src/server/game/Accounts/RBAC.cpp b/src/server/game/Accounts/RBAC.cpp
index 74ff060636e..c520564f0fa 100644
--- a/src/server/game/Accounts/RBAC.cpp
+++ b/src/server/game/Accounts/RBAC.cpp
@@ -17,7 +17,6 @@
#include "RBAC.h"
#include "AccountMgr.h"
-#include "DatabaseEnv.h"
#include "Log.h"
namespace rbac
@@ -180,7 +179,24 @@ void RBACData::LoadFromDB()
stmt->setUInt32(0, GetId());
stmt->setInt32(1, GetRealmId());
- PreparedQueryResult result = LoginDatabase.Query(stmt);
+ LoadFromDBCallback(LoginDatabase.Query(stmt));
+}
+
+PreparedQueryResultFuture RBACData::LoadFromDBAsync()
+{
+ ClearData();
+
+ TC_LOG_DEBUG("rbac", "RBACData::LoadFromDB [Id: %u Name: %s]: Loading permissions", GetId(), GetName().c_str());
+ // Load account permissions (granted and denied) that affect current realm
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS);
+ stmt->setUInt32(0, GetId());
+ stmt->setInt32(1, GetRealmId());
+
+ return LoginDatabase.AsyncQuery(stmt);
+}
+
+void RBACData::LoadFromDBCallback(PreparedQueryResult result)
+{
if (result)
{
do
@@ -190,8 +206,7 @@ void RBACData::LoadFromDB()
GrantPermission(fields[0].GetUInt32());
else
DenyPermission(fields[0].GetUInt32());
- }
- while (result->NextRow());
+ } while (result->NextRow());
}
// Add default permissions
diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h
index 805f613155d..4acadd7f2b4 100644
--- a/src/server/game/Accounts/RBAC.h
+++ b/src/server/game/Accounts/RBAC.h
@@ -40,7 +40,7 @@
#ifndef _RBAC_H
#define _RBAC_H
-#include "Define.h"
+#include "DatabaseEnv.h"
#include <string>
#include <set>
#include <map>
@@ -864,6 +864,8 @@ class RBACData
/// Loads all permissions assigned to current account
void LoadFromDB();
+ PreparedQueryResultFuture LoadFromDBAsync();
+ void LoadFromDBCallback(PreparedQueryResult result);
/// Sets security level
void SetSecurityLevel(uint8 id)
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index 51106d7cfe1..a6359a353eb 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -522,11 +522,11 @@ void AchievementMgr::SaveToDB(SQLTransaction& trans)
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_ACHIEVEMENT_BY_ACHIEVEMENT);
stmt->setUInt16(0, iter->first);
- stmt->setUInt32(1, GetPlayer()->GetGUIDLow());
+ stmt->setUInt32(1, GetPlayer()->GetGUID().GetCounter());
trans->Append(stmt);
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_ACHIEVEMENT);
- stmt->setUInt32(0, GetPlayer()->GetGUIDLow());
+ stmt->setUInt32(0, GetPlayer()->GetGUID().GetCounter());
stmt->setUInt16(1, iter->first);
stmt->setUInt32(2, uint32(iter->second.date));
trans->Append(stmt);
@@ -543,14 +543,14 @@ void AchievementMgr::SaveToDB(SQLTransaction& trans)
continue;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_ACHIEVEMENT_PROGRESS_BY_CRITERIA);
- stmt->setUInt32(0, GetPlayer()->GetGUIDLow());
+ stmt->setUInt32(0, GetPlayer()->GetGUID().GetCounter());
stmt->setUInt16(1, iter->first);
trans->Append(stmt);
if (iter->second.counter)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_ACHIEVEMENT_PROGRESS);
- stmt->setUInt32(0, GetPlayer()->GetGUIDLow());
+ stmt->setUInt32(0, GetPlayer()->GetGUID().GetCounter());
stmt->setUInt16(1, iter->first);
stmt->setUInt32(2, iter->second.counter);
stmt->setUInt32(3, uint32(iter->second.date));
@@ -1356,7 +1356,7 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry,
if (entry->timeLimit && timedIter == m_timedAchievements.end())
return;
- TC_LOG_DEBUG("achievement", "AchievementMgr::SetCriteriaProgress(%u, %u) for (GUID:%u)", entry->ID, changeValue, m_player->GetGUIDLow());
+ TC_LOG_DEBUG("achievement", "AchievementMgr::SetCriteriaProgress(%u, %u) for (GUID:%u)", entry->ID, changeValue, m_player->GetGUID().GetCounter());
CriteriaProgress* progress = GetCriteriaProgress(entry);
if (!progress)
@@ -1509,7 +1509,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
return;
TC_LOG_DEBUG("achievement", "AchievementMgr::CompletedAchievement(%u). Player: %s (%u)",
- achievement->ID, m_player->GetName().c_str(), m_player->GetGUIDLow());
+ achievement->ID, m_player->GetName().c_str(), m_player->GetGUID().GetCounter());
SendAchievementEarned(achievement);
CompletedAchievementData& ca = m_completedAchievements[achievement->ID];
@@ -1533,7 +1533,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
//! Since no common attributes were found, (not even in titleRewardFlags field)
//! we explicitly check by ID. Maybe in the future we could move the achievement_reward
//! condition fields to the condition system.
- if (uint32 titleId = reward->titleId[achievement->ID == 1793 ? GetPlayer()->getGender() : (GetPlayer()->GetTeam() == ALLIANCE ? 0 : 1)])
+ if (uint32 titleId = reward->titleId[achievement->ID == 1793 ? GetPlayer()->GetByteValue(PLAYER_BYTES_3, 0) : (GetPlayer()->GetTeam() == ALLIANCE ? 0 : 1)])
if (CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(titleId))
GetPlayer()->SetTitle(titleEntry);
@@ -2344,7 +2344,7 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData()
if (dataType != ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT)
TC_LOG_ERROR("sql.sql", "Table `achievement_criteria_data` has ScriptName set for non-scripted data type (Entry: %u, type %u), useless data.", criteria_id, dataType);
else
- scriptId = sObjectMgr->GetScriptId(scriptName.c_str());
+ scriptId = sObjectMgr->GetScriptId(scriptName);
}
AchievementCriteriaData data(dataType, fields[2].GetUInt32(), fields[3].GetUInt32(), scriptId);
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
index 4b48f1f341b..768def2ff4d 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
@@ -61,12 +61,25 @@ AuctionHouseObject* AuctionHouseMgr::GetAuctionsMap(uint32 factionTemplateId)
return &mNeutralAuctions;
}
+AuctionHouseObject* AuctionHouseMgr::GetAuctionsMapByHouseId(uint8 auctionHouseId)
+{
+ if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION))
+ return &mNeutralAuctions;
+
+ switch(auctionHouseId)
+ {
+ case AUCTIONHOUSE_ALLIANCE : return &mAllianceAuctions;
+ case AUCTIONHOUSE_HORDE : return &mHordeAuctions;
+ default : return &mNeutralAuctions;
+ }
+}
+
uint32 AuctionHouseMgr::GetAuctionDeposit(AuctionHouseEntry const* entry, uint32 time, Item* pItem, uint32 count)
{
uint32 MSV = pItem->GetTemplate()->SellPrice;
if (MSV <= 0)
- return AH_MINIMUM_DEPOSIT;
+ return AH_MINIMUM_DEPOSIT * sWorld->getRate(RATE_AUCTION_DEPOSIT);
float multiplier = CalculatePct(float(entry->depositPercent), 3);
uint32 timeHr = (((time / 60) / 60) / 12);
@@ -77,8 +90,8 @@ uint32 AuctionHouseMgr::GetAuctionDeposit(AuctionHouseEntry const* entry, uint32
TC_LOG_DEBUG("auctionHouse", "Multiplier: %f", multiplier);
TC_LOG_DEBUG("auctionHouse", "Deposit: %u", deposit);
- if (deposit < AH_MINIMUM_DEPOSIT)
- return AH_MINIMUM_DEPOSIT;
+ if (deposit < AH_MINIMUM_DEPOSIT * sWorld->getRate(RATE_AUCTION_DEPOSIT))
+ return AH_MINIMUM_DEPOSIT * sWorld->getRate(RATE_AUCTION_DEPOSIT);
else
return deposit;
}
@@ -91,7 +104,7 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, SQLTransaction&
return;
uint32 bidderAccId = 0;
- ObjectGuid bidderGuid(HIGHGUID_PLAYER, auction->bidder);
+ ObjectGuid bidderGuid(HighGuid::Player, auction->bidder);
Player* bidder = ObjectAccessor::FindConnectedPlayer(bidderGuid);
// data for gm.log
std::string bidderName;
@@ -114,7 +127,7 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, SQLTransaction&
if (logGmTrade)
{
- ObjectGuid ownerGuid = ObjectGuid(HIGHGUID_PLAYER, auction->owner);
+ ObjectGuid ownerGuid = ObjectGuid(HighGuid::Player, auction->owner);
std::string ownerName;
if (!sObjectMgr->GetPlayerNameByGUID(ownerGuid, ownerName))
ownerName = sObjectMgr->GetTrinityStringForDBCLocale(LANG_UNKNOWN);
@@ -132,7 +145,7 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, SQLTransaction&
// owner in `data` will set at mail receive and item extracting
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_OWNER);
stmt->setUInt32(0, auction->bidder);
- stmt->setUInt32(1, pItem->GetGUIDLow());
+ stmt->setUInt32(1, pItem->GetGUID().GetCounter());
trans->Append(stmt);
if (bidder)
@@ -155,7 +168,7 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, SQLTransaction&
void AuctionHouseMgr::SendAuctionSalePendingMail(AuctionEntry* auction, SQLTransaction& trans)
{
- ObjectGuid owner_guid(HIGHGUID_PLAYER, auction->owner);
+ ObjectGuid owner_guid(HighGuid::Player, auction->owner);
Player* owner = ObjectAccessor::FindConnectedPlayer(owner_guid);
uint32 owner_accId = sObjectMgr->GetPlayerAccountIdByGUID(owner_guid);
// owner exist (online or offline)
@@ -167,7 +180,7 @@ void AuctionHouseMgr::SendAuctionSalePendingMail(AuctionEntry* auction, SQLTrans
//call this method to send mail to auction owner, when auction is successful, it does not clear ram
void AuctionHouseMgr::SendAuctionSuccessfulMail(AuctionEntry* auction, SQLTransaction& trans)
{
- ObjectGuid owner_guid(HIGHGUID_PLAYER, auction->owner);
+ ObjectGuid owner_guid(HighGuid::Player, auction->owner);
Player* owner = ObjectAccessor::FindConnectedPlayer(owner_guid);
uint32 owner_accId = sObjectMgr->GetPlayerAccountIdByGUID(owner_guid);
// owner exist
@@ -198,7 +211,7 @@ void AuctionHouseMgr::SendAuctionExpiredMail(AuctionEntry* auction, SQLTransacti
if (!pItem)
return;
- ObjectGuid owner_guid(HIGHGUID_PLAYER, auction->owner);
+ ObjectGuid owner_guid(HighGuid::Player, auction->owner);
Player* owner = ObjectAccessor::FindConnectedPlayer(owner_guid);
uint32 owner_accId = sObjectMgr->GetPlayerAccountIdByGUID(owner_guid);
// owner exist
@@ -221,7 +234,7 @@ void AuctionHouseMgr::SendAuctionExpiredMail(AuctionEntry* auction, SQLTransacti
//this function sends mail to old bidder
void AuctionHouseMgr::SendAuctionOutbiddedMail(AuctionEntry* auction, uint32 newPrice, Player* newBidder, SQLTransaction& trans)
{
- ObjectGuid oldBidder_guid(HIGHGUID_PLAYER, auction->bidder);
+ ObjectGuid oldBidder_guid(HighGuid::Player, auction->bidder);
Player* oldBidder = ObjectAccessor::FindConnectedPlayer(oldBidder_guid);
uint32 oldBidder_accId = 0;
@@ -243,7 +256,7 @@ void AuctionHouseMgr::SendAuctionOutbiddedMail(AuctionEntry* auction, uint32 new
//this function sends mail, when auction is cancelled to old bidder
void AuctionHouseMgr::SendAuctionCancelledToBidderMail(AuctionEntry* auction, SQLTransaction& trans)
{
- ObjectGuid bidder_guid = ObjectGuid(HIGHGUID_PLAYER, auction->bidder);
+ ObjectGuid bidder_guid = ObjectGuid(HighGuid::Player, auction->bidder);
Player* bidder = ObjectAccessor::FindConnectedPlayer(bidder_guid);
uint32 bidder_accId = 0;
@@ -287,7 +300,7 @@ void AuctionHouseMgr::LoadAuctionItems()
{
Field* fields = result->Fetch();
- uint32 item_guid = fields[11].GetUInt32();
+ ObjectGuid::LowType item_guid = fields[11].GetUInt32();
uint32 itemEntry = fields[12].GetUInt32();
ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemEntry);
@@ -342,7 +355,7 @@ void AuctionHouseMgr::LoadAuctions()
continue;
}
- GetAuctionsMap(aItem->factionTemplateId)->AddAuction(aItem);
+ GetAuctionsMapByHouseId(aItem->houseId)->AddAuction(aItem);
++count;
} while (result->NextRow());
@@ -355,11 +368,11 @@ void AuctionHouseMgr::LoadAuctions()
void AuctionHouseMgr::AddAItem(Item* it)
{
ASSERT(it);
- ASSERT(mAitems.find(it->GetGUIDLow()) == mAitems.end());
- mAitems[it->GetGUIDLow()] = it;
+ ASSERT(mAitems.find(it->GetGUID().GetCounter()) == mAitems.end());
+ mAitems[it->GetGUID().GetCounter()] = it;
}
-bool AuctionHouseMgr::RemoveAItem(uint32 id, bool deleteItem)
+bool AuctionHouseMgr::RemoveAItem(ObjectGuid::LowType id, bool deleteItem)
{
ItemMap::iterator i = mAitems.find(id);
if (i == mAitems.end())
@@ -385,44 +398,32 @@ void AuctionHouseMgr::Update()
AuctionHouseEntry const* AuctionHouseMgr::GetAuctionHouseEntry(uint32 factionTemplateId)
{
- uint32 houseid = 7; // goblin auction house
+ uint32 houseid = AUCTIONHOUSE_NEUTRAL; // goblin auction house
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION))
{
// FIXME: found way for proper auctionhouse selection by another way
// AuctionHouse.dbc have faction field with _player_ factions associated with auction house races.
// but no easy way convert creature faction to player race faction for specific city
- switch (factionTemplateId)
- {
- case 12: houseid = 1; break; // human
- case 29: houseid = 6; break; // orc, and generic for horde
- case 55: houseid = 2; break; // dwarf, and generic for alliance
- case 68: houseid = 4; break; // undead
- case 80: houseid = 3; break; // n-elf
- case 104: houseid = 5; break; // trolls
- case 120: houseid = 7; break; // booty bay, neutral
- case 474: houseid = 7; break; // gadgetzan, neutral
- case 855: houseid = 7; break; // everlook, neutral
- case 1604: houseid = 6; break; // b-elfs,
- default: // for unknown case
- {
- FactionTemplateEntry const* u_entry = sFactionTemplateStore.LookupEntry(factionTemplateId);
- if (!u_entry)
- houseid = 7; // goblin auction house
- else if (u_entry->ourMask & FACTION_MASK_ALLIANCE)
- houseid = 1; // human auction house
- else if (u_entry->ourMask & FACTION_MASK_HORDE)
- houseid = 6; // orc auction house
- else
- houseid = 7; // goblin auction house
- break;
- }
- }
+ FactionTemplateEntry const* u_entry = sFactionTemplateStore.LookupEntry(factionTemplateId);
+ if (!u_entry)
+ houseid = AUCTIONHOUSE_NEUTRAL; // goblin auction house
+ else if (u_entry->ourMask & FACTION_MASK_ALLIANCE)
+ houseid = AUCTIONHOUSE_ALLIANCE; // human auction house
+ else if (u_entry->ourMask & FACTION_MASK_HORDE)
+ houseid = AUCTIONHOUSE_HORDE; // orc auction house
+ else
+ houseid = AUCTIONHOUSE_NEUTRAL; // goblin auction house
}
return sAuctionHouseStore.LookupEntry(houseid);
}
+AuctionHouseEntry const* AuctionHouseMgr::GetAuctionHouseEntryFromHouse(uint8 houseId)
+{
+ return (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION)) ? sAuctionHouseStore.LookupEntry(AUCTIONHOUSE_NEUTRAL) : sAuctionHouseStore.LookupEntry(houseId);
+}
+
void AuctionHouseObject::AddAuction(AuctionEntry* auction)
{
ASSERT(auction);
@@ -498,7 +499,7 @@ void AuctionHouseObject::BuildListBidderItems(WorldPacket& data, Player* player,
for (AuctionEntryMap::const_iterator itr = AuctionsMap.begin(); itr != AuctionsMap.end(); ++itr)
{
AuctionEntry* Aentry = itr->second;
- if (Aentry && Aentry->bidder == player->GetGUIDLow())
+ if (Aentry && Aentry->bidder == player->GetGUID().GetCounter())
{
if (itr->second->BuildAuctionInfo(data))
++count;
@@ -513,7 +514,7 @@ void AuctionHouseObject::BuildListOwnerItems(WorldPacket& data, Player* player,
for (AuctionEntryMap::const_iterator itr = AuctionsMap.begin(); itr != AuctionsMap.end(); ++itr)
{
AuctionEntry* Aentry = itr->second;
- if (Aentry && Aentry->owner == player->GetGUIDLow())
+ if (Aentry && Aentry->owner == player->GetGUID().GetCounter())
{
if (Aentry->BuildAuctionInfo(data))
++count;
@@ -687,7 +688,7 @@ void AuctionEntry::SaveToDB(SQLTransaction& trans) const
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_AUCTION);
stmt->setUInt32(0, Id);
- stmt->setUInt32(1, auctioneer);
+ stmt->setUInt8(1, houseId);
stmt->setUInt32(2, itemGUIDLow);
stmt->setUInt32(3, owner);
stmt->setUInt32(4, buyout);
@@ -702,7 +703,7 @@ void AuctionEntry::SaveToDB(SQLTransaction& trans) const
bool AuctionEntry::LoadFromDB(Field* fields)
{
Id = fields[0].GetUInt32();
- auctioneer = fields[1].GetUInt32();
+ houseId = fields[1].GetUInt8();
itemGUIDLow = fields[2].GetUInt32();
itemEntry = fields[3].GetUInt32();
itemCount = fields[4].GetUInt32();
@@ -714,25 +715,10 @@ bool AuctionEntry::LoadFromDB(Field* fields)
startbid = fields[10].GetUInt32();
deposit = fields[11].GetUInt32();
- CreatureData const* auctioneerData = sObjectMgr->GetCreatureData(auctioneer);
- if (!auctioneerData)
- {
- TC_LOG_ERROR("misc", "Auction %u has not a existing auctioneer (GUID : %u)", Id, auctioneer);
- return false;
- }
-
- CreatureTemplate const* auctioneerInfo = sObjectMgr->GetCreatureTemplate(auctioneerData->id);
- if (!auctioneerInfo)
- {
- TC_LOG_ERROR("misc", "Auction %u has not a existing auctioneer (GUID : %u Entry: %u)", Id, auctioneer, auctioneerData->id);
- return false;
- }
-
- factionTemplateId = auctioneerInfo->faction;
- auctionHouseEntry = AuctionHouseMgr::GetAuctionHouseEntry(factionTemplateId);
+ auctionHouseEntry = AuctionHouseMgr::GetAuctionHouseEntryFromHouse(houseId);
if (!auctionHouseEntry)
{
- TC_LOG_ERROR("misc", "Auction %u has auctioneer (GUID : %u Entry: %u) with wrong faction %u", Id, auctioneer, auctioneerData->id, factionTemplateId);
+ TC_LOG_ERROR("misc", "Auction %u has invalid house id %u", Id, houseId);
return false;
}
@@ -752,11 +738,11 @@ std::string AuctionEntry::BuildAuctionMailSubject(MailAuctionAnswers response) c
return strm.str();
}
-std::string AuctionEntry::BuildAuctionMailBody(uint32 lowGuid, uint32 bid, uint32 buyout, uint32 deposit, uint32 cut)
+std::string AuctionEntry::BuildAuctionMailBody(ObjectGuid::LowType lowGuid, uint32 bid, uint32 buyout, uint32 deposit, uint32 cut)
{
std::ostringstream strm;
strm.width(16);
- strm << std::right << std::hex << ObjectGuid(HIGHGUID_PLAYER, lowGuid).GetRawValue(); // HIGHGUID_PLAYER always present, even for empty guids
+ strm << std::right << std::hex << ObjectGuid(HighGuid::Player, lowGuid).GetRawValue(); // HighGuid::Player always present, even for empty guids
strm << std::dec << ':' << bid << ':' << buyout;
strm << ':' << deposit << ':' << cut;
return strm.str();
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h
index d67c8143996..45cdba361f3 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.h
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h
@@ -61,26 +61,31 @@ enum MailAuctionAnswers
AUCTION_SALE_PENDING = 6
};
+enum AuctionHouses
+{
+ AUCTIONHOUSE_ALLIANCE = 2,
+ AUCTIONHOUSE_HORDE = 6,
+ AUCTIONHOUSE_NEUTRAL = 7
+};
+
struct AuctionEntry
{
uint32 Id;
- uint32 auctioneer; // creature low guid
- uint32 itemGUIDLow;
+ uint8 houseId;
+ ObjectGuid::LowType itemGUIDLow;
uint32 itemEntry;
uint32 itemCount;
- uint32 owner;
+ ObjectGuid::LowType owner;
uint32 startbid; //maybe useless
uint32 bid;
uint32 buyout;
time_t expire_time;
- uint32 bidder;
+ ObjectGuid::LowType bidder;
uint32 deposit; //deposit can be calculated only when creating auction
AuctionHouseEntry const* auctionHouseEntry; // in AuctionHouse.dbc
- uint32 factionTemplateId;
// helpers
- uint32 GetHouseId() const { return auctionHouseEntry->houseId; }
- uint32 GetHouseFaction() const { return auctionHouseEntry->faction; }
+ uint8 GetHouseId() const { return houseId; }
uint32 GetAuctionCut() const;
uint32 GetAuctionOutBid() const;
bool BuildAuctionInfo(WorldPacket & data) const;
@@ -88,7 +93,7 @@ struct AuctionEntry
void SaveToDB(SQLTransaction& trans) const;
bool LoadFromDB(Field* fields);
std::string BuildAuctionMailSubject(MailAuctionAnswers response) const;
- static std::string BuildAuctionMailBody(uint32 lowGuid, uint32 bid, uint32 buyout, uint32 deposit, uint32 cut);
+ static std::string BuildAuctionMailBody(ObjectGuid::LowType lowGuid, uint32 bid, uint32 buyout, uint32 deposit, uint32 cut);
};
@@ -145,12 +150,13 @@ class AuctionHouseMgr
return &instance;
}
- typedef std::unordered_map<uint32, Item*> ItemMap;
+ typedef std::unordered_map<ObjectGuid::LowType, Item*> ItemMap;
AuctionHouseObject* GetAuctionsMap(uint32 factionTemplateId);
+ AuctionHouseObject* GetAuctionsMapByHouseId(uint8 auctionHouseId);
AuctionHouseObject* GetBidsMap(uint32 factionTemplateId);
- Item* GetAItem(uint32 id)
+ Item* GetAItem(ObjectGuid::LowType id)
{
ItemMap::const_iterator itr = mAitems.find(id);
if (itr != mAitems.end())
@@ -169,7 +175,7 @@ class AuctionHouseMgr
static uint32 GetAuctionDeposit(AuctionHouseEntry const* entry, uint32 time, Item* pItem, uint32 count);
static AuctionHouseEntry const* GetAuctionHouseEntry(uint32 factionTemplateId);
-
+ static AuctionHouseEntry const* GetAuctionHouseEntryFromHouse(uint8 houseId);
public:
//load first auction items, because of check if item exists, when loading
@@ -177,7 +183,7 @@ class AuctionHouseMgr
void LoadAuctions();
void AddAItem(Item* it);
- bool RemoveAItem(uint32 id, bool deleteItem = false);
+ bool RemoveAItem(ObjectGuid::LowType id, bool deleteItem = false);
void Update();
diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp
index 4bf6aa950c6..80c32cf66e7 100644
--- a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp
+++ b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp
@@ -102,6 +102,10 @@ uint32 AuctionBotBuyer::GetItemInformation(BuyerConfiguration& config)
for (AuctionHouseObject::AuctionEntryMap::const_iterator itr = house->GetAuctionsBegin(); itr != house->GetAuctionsEnd(); ++itr)
{
AuctionEntry* entry = itr->second;
+
+ if (!entry->owner)
+ continue; // Skip auctions owned by AHBot
+
Item* item = sAuctionMgr->GetAItem(entry->itemGUIDLow);
if (!item)
continue;
@@ -135,10 +139,10 @@ uint32 AuctionBotBuyer::GetItemInformation(BuyerConfiguration& config)
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))
+ // Add/update EligibleItems if:
+ // * no bid
+ // * bid from player
+ if (!entry->bid || entry->bidder)
{
config.EligibleItems[entry->Id].LastExist = now;
config.EligibleItems[entry->Id].AuctionId = entry->Id;
diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp
index 733bd5e9ec8..22dc5bb0bd0 100644
--- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp
+++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp
@@ -906,15 +906,17 @@ void AuctionBotSeller::AddNewAuctions(SellerConfiguration& config)
items = sAuctionBotConfig->GetItemPerCycleNormal();
uint32 houseid = 0;
- uint32 auctioneer = 0;
switch (config.GetHouseType())
{
case AUCTION_HOUSE_ALLIANCE:
- houseid = 1; auctioneer = 79707; break;
+ houseid = AUCTIONHOUSE_ALLIANCE;
+ break;
case AUCTION_HOUSE_HORDE:
- houseid = 6; auctioneer = 4656; break;
+ houseid = AUCTIONHOUSE_HORDE;
+ break;
default:
- houseid = 7; auctioneer = 23442; break;
+ houseid = AUCTIONHOUSE_NEUTRAL;
+ break;
}
AuctionHouseEntry const* ahEntry = sAuctionHouseStore.LookupEntry(houseid);
@@ -991,11 +993,11 @@ void AuctionBotSeller::AddNewAuctions(SellerConfiguration& config)
AuctionEntry* auctionEntry = new AuctionEntry();
auctionEntry->Id = sObjectMgr->GenerateAuctionID();
auctionEntry->owner = 0;
- auctionEntry->itemGUIDLow = item->GetGUIDLow();
+ auctionEntry->itemGUIDLow = item->GetGUID().GetCounter();
auctionEntry->itemEntry = item->GetEntry();
auctionEntry->startbid = bidPrice;
auctionEntry->buyout = buyoutPrice;
- auctionEntry->auctioneer = auctioneer;
+ auctionEntry->houseId = houseid;
auctionEntry->bidder = 0;
auctionEntry->bid = 0;
auctionEntry->deposit = sAuctionMgr->GetAuctionDeposit(ahEntry, etime, item, stackCount);
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp
index a22db18fa7e..d22ac0ea5d5 100644
--- a/src/server/game/Battlefield/Battlefield.cpp
+++ b/src/server/game/Battlefield/Battlefield.cpp
@@ -695,7 +695,7 @@ void BfGraveyard::Resurrect()
player->CastSpell(player, 6962, true);
player->CastSpell(player, SPELL_SPIRIT_HEAL_MANA, true);
- sObjectAccessor->ConvertCorpseForPlayer(player->GetGUID());
+ player->SpawnCorpseBones(false);
}
m_ResurrectQueue.clear();
@@ -770,7 +770,7 @@ Creature* Battlefield::SpawnCreature(uint32 entry, float x, float y, float z, fl
}
Creature* creature = new Creature();
- if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, PHASEMASK_NORMAL, entry, x, y, z, o))
+ if (!creature->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, PHASEMASK_NORMAL, entry, x, y, z, o))
{
TC_LOG_ERROR("bg.battlefield", "Battlefield::SpawnCreature: Can't create creature entry: %u", entry);
delete creature;
@@ -803,7 +803,7 @@ GameObject* Battlefield::SpawnGameObject(uint32 entry, float x, float y, float z
// Create gameobject
GameObject* go = new GameObject;
- if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), entry, map, PHASEMASK_NORMAL, x, y, z, o, 0, 0, 0, 0, 100, GO_STATE_READY))
+ if (!go->Create(map->GenerateLowGuid<HighGuid::GameObject>(), entry, map, PHASEMASK_NORMAL, x, y, z, o, 0, 0, 0, 0, 100, GO_STATE_READY))
{
TC_LOG_ERROR("bg.battlefield", "Battlefield::SpawnGameObject: Gameobject template %u not found in database! Battlefield not created!", entry);
TC_LOG_ERROR("bg.battlefield", "Battlefield::SpawnGameObject: Cannot create gameobject template %u! Battlefield not created!", entry);
@@ -901,7 +901,7 @@ bool BfCapturePoint::SetCapturePointData(GameObject* capturePoint)
TC_LOG_DEBUG("bg.battlefield", "Creating capture point %u", capturePoint->GetEntry());
- m_capturePointGUID = ObjectGuid(HIGHGUID_GAMEOBJECT, capturePoint->GetEntry(), capturePoint->GetGUIDLow());
+ m_capturePointGUID = ObjectGuid(HighGuid::GameObject, capturePoint->GetEntry(), capturePoint->GetGUID().GetCounter());
// check info existence
GameObjectTemplate const* goinfo = capturePoint->GetGOInfo();
diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h
index c860d36e712..bb3ecb60838 100644
--- a/src/server/game/Battlefield/Battlefield.h
+++ b/src/server/game/Battlefield/Battlefield.h
@@ -193,7 +193,7 @@ class Battlefield : public ZoneScript
virtual ~Battlefield();
/// typedef of map witch store capturepoint and the associate gameobject entry
- typedef std::map<uint32 /*lowguid */, BfCapturePoint*> BfCapturePointMap;
+ typedef std::map<ObjectGuid::LowType /*lowguid */, BfCapturePoint*> BfCapturePointMap;
/// Call this to init the Battlefield
virtual bool SetupBattlefield() { return true; }
@@ -400,7 +400,7 @@ class Battlefield : public ZoneScript
// CapturePoint system
void AddCapturePoint(BfCapturePoint* cp) { m_capturePoints[cp->GetCapturePointEntry()] = cp; }
- BfCapturePoint* GetCapturePoint(uint32 lowguid) const
+ BfCapturePoint* GetCapturePoint(ObjectGuid::LowType lowguid) const
{
Battlefield::BfCapturePointMap::const_iterator itr = m_capturePoints.find(lowguid);
if (itr != m_capturePoints.end())
diff --git a/src/server/game/Battlefield/BattlefieldMgr.cpp b/src/server/game/Battlefield/BattlefieldMgr.cpp
index 0060cf4f304..00da81fb992 100644
--- a/src/server/game/Battlefield/BattlefieldMgr.cpp
+++ b/src/server/game/Battlefield/BattlefieldMgr.cpp
@@ -80,7 +80,7 @@ void BattlefieldMgr::HandlePlayerEnterZone(Player* player, uint32 zoneId)
return;
bf->HandlePlayerEnterZone(player, zoneId);
- TC_LOG_DEBUG("bg.battlefield", "Player %u entered battlefield id %u", player->GetGUIDLow(), bf->GetTypeId());
+ TC_LOG_DEBUG("bg.battlefield", "Player %u entered battlefield id %u", player->GetGUID().GetCounter(), bf->GetTypeId());
}
void BattlefieldMgr::HandlePlayerLeaveZone(Player* player, uint32 zoneId)
@@ -94,7 +94,7 @@ void BattlefieldMgr::HandlePlayerLeaveZone(Player* player, uint32 zoneId)
return;
itr->second->HandlePlayerLeaveZone(player, zoneId);
- TC_LOG_DEBUG("bg.battlefield", "Player %u left battlefield id %u", player->GetGUIDLow(), itr->second->GetTypeId());
+ TC_LOG_DEBUG("bg.battlefield", "Player %u left battlefield id %u", player->GetGUID().GetCounter(), itr->second->GetTypeId());
}
Battlefield* BattlefieldMgr::GetBattlefieldToZoneId(uint32 zoneId)
diff --git a/src/server/game/Battlegrounds/Arena.cpp b/src/server/game/Battlegrounds/Arena.cpp
index dc0388348fc..60cc609a06a 100644
--- a/src/server/game/Battlegrounds/Arena.cpp
+++ b/src/server/game/Battlegrounds/Arena.cpp
@@ -40,7 +40,7 @@ Arena::Arena()
void Arena::AddPlayer(Player* player)
{
Battleground::AddPlayer(player);
- PlayerScores[player->GetGUIDLow()] = new ArenaScore(player->GetGUID(), player->GetBGTeam());
+ PlayerScores[player->GetGUID().GetCounter()] = new ArenaScore(player->GetGUID(), player->GetBGTeam());
if (player->GetBGTeam() == ALLIANCE) // gold
{
@@ -177,7 +177,7 @@ void Arena::EndBattleground(uint32 winner)
if (sWorld->getBoolConfig(CONFIG_ARENA_LOG_EXTENDED_INFO))
for (auto const& score : PlayerScores)
- if (Player* player = ObjectAccessor::FindConnectedPlayer(ObjectGuid(HIGHGUID_PLAYER, score.first)))
+ if (Player* player = ObjectAccessor::FindConnectedPlayer(ObjectGuid(HighGuid::Player, score.first)))
{
TC_LOG_DEBUG("bg.arena", "Statistics match Type: %u for %s (GUID: %u, Team: %d, IP: %s): %s",
GetArenaType(), player->GetName().c_str(), score.first, player->GetArenaTeamId(GetArenaType() == 5 ? 2 : GetArenaType() == 3),
diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp
index 3b7e9ac3f33..7806e0b343b 100644
--- a/src/server/game/Battlegrounds/ArenaTeam.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeam.cpp
@@ -63,7 +63,7 @@ bool ArenaTeam::Create(ObjectGuid captainGuid, uint8 type, std::string const& te
EmblemColor = emblemColor;
BorderStyle = borderStyle;
BorderColor = borderColor;
- uint32 captainLowGuid = captainGuid.GetCounter();
+ ObjectGuid::LowType captainLowGuid = captainGuid.GetCounter();
// Save arena team to db
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ARENA_TEAM);
@@ -193,7 +193,7 @@ bool ArenaTeam::LoadArenaTeamFromDB(QueryResult result)
TeamId = fields[0].GetUInt32();
TeamName = fields[1].GetString();
- CaptainGuid = ObjectGuid(HIGHGUID_PLAYER, fields[2].GetUInt32());
+ CaptainGuid = ObjectGuid(HighGuid::Player, fields[2].GetUInt32());
Type = fields[3].GetUInt8();
BackgroundColor = fields[4].GetUInt32();
EmblemStyle = fields[5].GetUInt8();
@@ -232,7 +232,7 @@ bool ArenaTeam::LoadMembersFromDB(QueryResult result)
break;
ArenaTeamMember newMember;
- newMember.Guid = ObjectGuid(HIGHGUID_PLAYER, fields[1].GetUInt32());
+ newMember.Guid = ObjectGuid(HighGuid::Player, fields[1].GetUInt32());
newMember.WeekGames = fields[2].GetUInt16();
newMember.WeekWins = fields[3].GetUInt16();
newMember.SeasonGames = fields[4].GetUInt16();
@@ -305,8 +305,8 @@ void ArenaTeam::SetCaptain(ObjectGuid guid)
if (oldCaptain)
{
TC_LOG_DEBUG("bg.arena", "Player: %s [GUID: %u] promoted player: %s [GUID: %u] to leader of arena team [Id: %u, Name: %s] [Type: %u].",
- oldCaptain->GetName().c_str(), oldCaptain->GetGUIDLow(), newCaptain->GetName().c_str(),
- newCaptain->GetGUIDLow(), GetId(), GetName().c_str(), GetType());
+ oldCaptain->GetName().c_str(), oldCaptain->GetGUID().GetCounter(), newCaptain->GetName().c_str(),
+ newCaptain->GetGUID().GetCounter(), GetId(), GetName().c_str(), GetType());
}
}
}
@@ -328,7 +328,7 @@ void ArenaTeam::DelMember(ObjectGuid guid, bool cleanDb)
// delete all info regarding this team
for (uint32 i = 0; i < ARENA_TEAM_END; ++i)
player->SetArenaTeamInfoField(GetSlot(), ArenaTeamInfoType(i), 0);
- TC_LOG_DEBUG("bg.arena", "Player: %s [GUID: %u] left arena team type: %u [Id: %u, Name: %s].", player->GetName().c_str(), player->GetGUIDLow(), GetType(), GetId(), GetName().c_str());
+ TC_LOG_DEBUG("bg.arena", "Player: %s [GUID: %u] left arena team type: %u [Id: %u, Name: %s].", player->GetName().c_str(), player->GetGUID().GetCounter(), GetType(), GetId(), GetName().c_str());
}
// Only used for single member deletion, for arena team disband we use a single query for more efficiency
@@ -353,7 +353,7 @@ void ArenaTeam::Disband(WorldSession* session)
BroadcastEvent(ERR_ARENA_TEAM_DISBANDED_S, ObjectGuid::Empty, 2, session->GetPlayerName(), GetName(), "");
if (Player* player = session->GetPlayer())
- TC_LOG_DEBUG("bg.arena", "Player: %s [GUID: %u] disbanded arena team type: %u [Id: %u, Name: %s].", player->GetName().c_str(), player->GetGUIDLow(), GetType(), GetId(), GetName().c_str());
+ TC_LOG_DEBUG("bg.arena", "Player: %s [GUID: %u] disbanded arena team type: %u [Id: %u, Name: %s].", player->GetName().c_str(), player->GetGUID().GetCounter(), GetType(), GetId(), GetName().c_str());
}
// Update database
diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp
index d54f7814137..4fdb34e8d2f 100644
--- a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp
@@ -158,7 +158,7 @@ void ArenaTeamMgr::DistributeArenaPoints()
for (std::map<uint32, uint32>::iterator playerItr = PlayerPoints.begin(); playerItr != PlayerPoints.end(); ++playerItr)
{
// Add points to player if online
- if (Player* player = ObjectAccessor::FindConnectedPlayer(ObjectGuid(HIGHGUID_PLAYER, playerItr->first)))
+ if (Player* player = ObjectAccessor::FindConnectedPlayer(ObjectGuid(HighGuid::Player, playerItr->first)))
player->ModifyArenaPoints(playerItr->second, trans);
else // Update database
{
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 3e9b68d4611..d368b347a0f 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -306,6 +306,15 @@ inline void Battleground::_ProcessOfflineQueue()
{
if (itr->second.OfflineRemoveTime <= sWorld->GetGameTime())
{
+ if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS) &&
+ (GetStatus() == STATUS_IN_PROGRESS || GetStatus() == STATUS_WAIT_JOIN))
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK);
+ stmt->setUInt32(0, itr->first.GetCounter());
+ stmt->setUInt8(1, BG_DESERTION_TYPE_OFFLINE);
+ CharacterDatabase.Execute(stmt);
+ }
+
RemovePlayerAtLeave(itr->first, true, true);// remove player from BG
m_OfflineQueue.pop_front(); // remove from offline queue
//do not use itr for anything, because it is erased in RemovePlayerAtLeave()
@@ -367,7 +376,7 @@ inline void Battleground::_ProcessResurrect(uint32 diff)
player->ResurrectPlayer(1.0f);
player->CastSpell(player, 6962, true);
player->CastSpell(player, SPELL_SPIRIT_HEAL_MANA, true);
- sObjectAccessor->ConvertCorpseForPlayer(*itr);
+ player->SpawnCorpseBones(false);
}
m_ResurrectQueue.clear();
}
@@ -782,21 +791,22 @@ void Battleground::EndBattleground(uint32 winner)
if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE))
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVPSTATS_PLAYER);
- BattlegroundScoreMap::const_iterator score = PlayerScores.find(player->GetGUIDLow());
-
- stmt->setUInt32(0, battlegroundId);
- stmt->setUInt32(1, player->GetGUIDLow());
- stmt->setUInt32(2, score->second->GetKillingBlows());
- stmt->setUInt32(3, score->second->GetDeaths());
- stmt->setUInt32(4, score->second->GetHonorableKills());
- stmt->setUInt32(5, score->second->GetBonusHonor());
- stmt->setUInt32(6, score->second->GetDamageDone());
- stmt->setUInt32(7, score->second->GetHealingDone());
- stmt->setUInt32(8, score->second->GetAttr1());
- stmt->setUInt32(9, score->second->GetAttr2());
- stmt->setUInt32(10, score->second->GetAttr3());
- stmt->setUInt32(11, score->second->GetAttr4());
- stmt->setUInt32(12, score->second->GetAttr5());
+ BattlegroundScoreMap::const_iterator score = PlayerScores.find(player->GetGUID().GetCounter());
+
+ stmt->setUInt32(0, battlegroundId);
+ stmt->setUInt32(1, player->GetGUID().GetCounter());
+ stmt->setBool (2, team == winner);
+ stmt->setUInt32(3, score->second->GetKillingBlows());
+ stmt->setUInt32(4, score->second->GetDeaths());
+ stmt->setUInt32(5, score->second->GetHonorableKills());
+ stmt->setUInt32(6, score->second->GetBonusHonor());
+ stmt->setUInt32(7, score->second->GetDamageDone());
+ stmt->setUInt32(8, score->second->GetHealingDone());
+ stmt->setUInt32(9, score->second->GetAttr1());
+ stmt->setUInt32(10, score->second->GetAttr2());
+ stmt->setUInt32(11, score->second->GetAttr3());
+ stmt->setUInt32(12, score->second->GetAttr4());
+ stmt->setUInt32(13, score->second->GetAttr5());
CharacterDatabase.Execute(stmt);
}
@@ -889,8 +899,11 @@ void Battleground::RemovePlayerAtLeave(ObjectGuid guid, bool Transport, bool Sen
player->SpawnCorpseBones();
}
}
- else // try to resurrect the offline player. If he is alive nothing will happen
- sObjectAccessor->ConvertCorpseForPlayer(guid);
+ else
+ {
+ SQLTransaction trans(nullptr);
+ Player::OfflineResurrect(guid, trans);
+ }
RemovePlayer(player, guid, team); // BG subclass specific code
@@ -1162,48 +1175,58 @@ void Battleground::RemoveFromBGFreeSlotQueue()
// returns the number how many players can join battleground to MaxPlayersPerTeam
uint32 Battleground::GetFreeSlotsForTeam(uint32 Team) const
{
- // if BG is starting ... invite anyone
- if (GetStatus() == STATUS_WAIT_JOIN)
+ // if BG is starting and CONFIG_BATTLEGROUND_INVITATION_TYPE == BG_QUEUE_INVITATION_TYPE_NO_BALANCE, invite anyone
+ if (GetStatus() == STATUS_WAIT_JOIN && sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) == BG_QUEUE_INVITATION_TYPE_NO_BALANCE)
return (GetInvitedCount(Team) < GetMaxPlayersPerTeam()) ? GetMaxPlayersPerTeam() - GetInvitedCount(Team) : 0;
- // if BG is already started .. do not allow to join too much players of one faction
- uint32 otherTeam;
- uint32 otherIn;
+
+ // if BG is already started or CONFIG_BATTLEGROUND_INVITATION_TYPE != BG_QUEUE_INVITATION_TYPE_NO_BALANCE, do not allow to join too much players of one faction
+ uint32 otherTeamInvitedCount;
+ uint32 thisTeamInvitedCount;
+ uint32 otherTeamPlayersCount;
+ uint32 thisTeamPlayersCount;
+
if (Team == ALLIANCE)
{
- otherTeam = GetInvitedCount(HORDE);
- otherIn = GetPlayersCountByTeam(HORDE);
+ thisTeamInvitedCount = GetInvitedCount(ALLIANCE);
+ otherTeamInvitedCount = GetInvitedCount(HORDE);
+ thisTeamPlayersCount = GetPlayersCountByTeam(ALLIANCE);
+ otherTeamPlayersCount = GetPlayersCountByTeam(HORDE);
}
else
{
- otherTeam = GetInvitedCount(ALLIANCE);
- otherIn = GetPlayersCountByTeam(ALLIANCE);
+ thisTeamInvitedCount = GetInvitedCount(HORDE);
+ otherTeamInvitedCount = GetInvitedCount(ALLIANCE);
+ thisTeamPlayersCount = GetPlayersCountByTeam(HORDE);
+ otherTeamPlayersCount = GetPlayersCountByTeam(ALLIANCE);
}
- if (GetStatus() == STATUS_IN_PROGRESS)
+ if (GetStatus() == STATUS_IN_PROGRESS || GetStatus() == STATUS_WAIT_JOIN)
{
// difference based on ppl invited (not necessarily entered battle)
// default: allow 0
uint32 diff = 0;
- // allow join one person if the sides are equal (to fill up bg to minplayersperteam)
- if (otherTeam == GetInvitedCount(Team))
+
+ // allow join one person if the sides are equal (to fill up bg to minPlayerPerTeam)
+ if (otherTeamInvitedCount == thisTeamInvitedCount)
diff = 1;
// allow join more ppl if the other side has more players
- else if (otherTeam > GetInvitedCount(Team))
- diff = otherTeam - GetInvitedCount(Team);
+ else if (otherTeamInvitedCount > thisTeamInvitedCount)
+ diff = otherTeamInvitedCount - thisTeamInvitedCount;
// difference based on max players per team (don't allow inviting more)
- uint32 diff2 = (GetInvitedCount(Team) < GetMaxPlayersPerTeam()) ? GetMaxPlayersPerTeam() - GetInvitedCount(Team) : 0;
+ uint32 diff2 = (thisTeamInvitedCount < GetMaxPlayersPerTeam()) ? GetMaxPlayersPerTeam() - thisTeamInvitedCount : 0;
+
// difference based on players who already entered
// default: allow 0
uint32 diff3 = 0;
- // allow join one person if the sides are equal (to fill up bg minplayersperteam)
- if (otherIn == GetPlayersCountByTeam(Team))
+ // allow join one person if the sides are equal (to fill up bg minPlayerPerTeam)
+ if (otherTeamPlayersCount == thisTeamPlayersCount)
diff3 = 1;
// allow join more ppl if the other side has more players
- else if (otherIn > GetPlayersCountByTeam(Team))
- diff3 = otherIn - GetPlayersCountByTeam(Team);
+ else if (otherTeamPlayersCount > thisTeamPlayersCount)
+ diff3 = otherTeamPlayersCount - thisTeamPlayersCount;
// or other side has less than minPlayersPerTeam
- else if (GetInvitedCount(Team) <= GetMinPlayersPerTeam())
- diff3 = GetMinPlayersPerTeam() - GetInvitedCount(Team) + 1;
+ else if (thisTeamInvitedCount <= GetMinPlayersPerTeam())
+ diff3 = GetMinPlayersPerTeam() - thisTeamInvitedCount + 1;
// return the minimum of the 3 differences
@@ -1251,7 +1274,7 @@ void Battleground::BuildPvPLogDataPacket(WorldPacket& data)
bool Battleground::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor)
{
- BattlegroundScoreMap::const_iterator itr = PlayerScores.find(player->GetGUIDLow());
+ BattlegroundScoreMap::const_iterator itr = PlayerScores.find(player->GetGUID().GetCounter());
if (itr == PlayerScores.end()) // player not found...
return false;
@@ -1326,7 +1349,7 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float
// and when loading it (in go::LoadFromDB()), a new guid would be assigned to the object, and a new object would be created
// So we must create it specific for this instance
GameObject* go = new GameObject;
- if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), entry, GetBgMap(),
+ if (!go->Create(GetBgMap()->GenerateLowGuid<HighGuid::GameObject>(), entry, GetBgMap(),
PHASEMASK_NORMAL, x, y, z, o, rotation0, rotation1, rotation2, rotation3, 100, goState))
{
TC_LOG_ERROR("bg.battleground", "Battleground::AddObject: cannot create gameobject (entry: %u) for BG (map: %u, instance id: %u)!",
@@ -1335,7 +1358,7 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float
return false;
}
/*
- uint32 guid = go->GetGUIDLow();
+ uint32 guid = go->GetGUID().GetCounter();
// without this, UseButtonOrDoor caused the crash, since it tried to get go info from godata
// iirc that was changed, so adding to go data map is no longer required if that was the only function using godata from GameObject without checking if it existed
@@ -1469,7 +1492,7 @@ Creature* Battleground::AddCreature(uint32 entry, uint32 type, float x, float y,
Creature* creature = new Creature();
- if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, PHASEMASK_NORMAL, entry, x, y, z, o))
+ if (!creature->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, PHASEMASK_NORMAL, entry, x, y, z, o))
{
TC_LOG_ERROR("bg.battleground", "Battleground::AddCreature: cannot create creature (entry: %u) for BG (map: %u, instance id: %u)!",
entry, m_MapId, m_InstanceID);
diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h
index 08134298569..471da9846b2 100644
--- a/src/server/game/Battlegrounds/Battleground.h
+++ b/src/server/game/Battlegrounds/Battleground.h
@@ -40,6 +40,15 @@ class BattlegroundMap;
struct PvPDifficultyEntry;
struct WorldSafeLocsEntry;
+enum BattlegroundDesertionType
+{
+ BG_DESERTION_TYPE_LEAVE_BG = 0, // player leaves the BG
+ BG_DESERTION_TYPE_OFFLINE = 1, // player is kicked from BG because offline
+ BG_DESERTION_TYPE_LEAVE_QUEUE = 2, // player is invited to join and refuses to do it
+ BG_DESERTION_TYPE_NO_ENTER_BUTTON = 3, // player is invited to join and do nothing (time expires)
+ BG_DESERTION_TYPE_INVITE_LOGOUT = 4, // player is invited to join and logs out
+};
+
enum BattlegroundCriteriaId
{
BG_CRITERIA_CHECK_RESILIENT_VICTORY,
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
index 5bdaf0e661d..3aac3f080f2 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
@@ -549,7 +549,7 @@ void BattlegroundMgr::LoadBattlegroundTemplates()
float dist = fields[9].GetFloat();
bgTemplate.MaxStartDistSq = dist * dist;
bgTemplate.Weight = fields[10].GetUInt8();
- bgTemplate.ScriptId = sObjectMgr->GetScriptId(fields[11].GetCString());
+ bgTemplate.ScriptId = sObjectMgr->GetScriptId(fields[11].GetString());
bgTemplate.BattlemasterEntry = bl;
if (bgTemplate.MaxPlayersPerTeam == 0 || bgTemplate.MinPlayersPerTeam > bgTemplate.MaxPlayersPerTeam)
diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
index d9950f4ccbc..223b71eb8c5 100644
--- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
@@ -476,7 +476,7 @@ bool BattlegroundQueue::InviteGroupToBG(GroupQueueInfo* ginfo, Battleground* bg,
uint32 queueSlot = player->GetBattlegroundQueueIndex(bgQueueTypeId);
TC_LOG_DEBUG("bg.battleground", "Battleground: invited player %s (%u) to BG instance %u queueindex %u bgtype %u",
- player->GetName().c_str(), player->GetGUIDLow(), bg->GetInstanceID(), queueSlot, bg->GetTypeID());
+ player->GetName().c_str(), player->GetGUID().GetCounter(), bg->GetInstanceID(), queueSlot, bg->GetTypeID());
// send status packet
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME, 0, ginfo->ArenaType, 0);
@@ -497,24 +497,51 @@ void BattlegroundQueue::FillPlayersToBG(Battleground* bg, BattlegroundBracketId
{
int32 hordeFree = bg->GetFreeSlotsForTeam(HORDE);
int32 aliFree = bg->GetFreeSlotsForTeam(ALLIANCE);
+ uint32 aliCount = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].size();
+ uint32 hordeCount = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].size();
+
+ // try to get even teams
+ if (sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) == BG_QUEUE_INVITATION_TYPE_EVEN)
+ {
+ // check if the teams are even
+ if (hordeFree == 1 && aliFree == 1)
+ {
+ // if we are here, the teams have the same amount of players
+ // then we have to allow to join the same amount of players
+ int32 hordeExtra = hordeCount - aliCount;
+ int32 aliExtra = aliCount - hordeCount;
+
+ hordeExtra = std::max(hordeExtra, 0);
+ aliExtra = std::max(aliExtra, 0);
+
+ if (aliCount != hordeCount)
+ {
+ aliFree -= aliExtra;
+ hordeFree -= hordeExtra;
+
+ aliFree = std::max(aliFree, 0);
+ hordeFree = std::max(hordeFree, 0);
+ }
+ }
+ }
//iterator for iterating through bg queue
GroupsQueueType::const_iterator Ali_itr = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].begin();
//count of groups in queue - used to stop cycles
- uint32 aliCount = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].size();
+
//index to queue which group is current
uint32 aliIndex = 0;
for (; aliIndex < aliCount && m_SelectionPools[TEAM_ALLIANCE].AddGroup((*Ali_itr), aliFree); aliIndex++)
++Ali_itr;
//the same thing for horde
GroupsQueueType::const_iterator Horde_itr = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].begin();
- uint32 hordeCount = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].size();
+
uint32 hordeIndex = 0;
for (; hordeIndex < hordeCount && m_SelectionPools[TEAM_HORDE].AddGroup((*Horde_itr), hordeFree); hordeIndex++)
++Horde_itr;
//if ofc like BG queue invitation is set in config, then we are happy
- if (sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) == 0)
+ if (sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) == BG_QUEUE_INVITATION_TYPE_NO_BALANCE)
return;
/*
@@ -649,7 +676,7 @@ bool BattlegroundQueue::CheckNormalMatch(Battleground* bg_template, Battleground
uint32 j = TEAM_ALLIANCE;
if (m_SelectionPools[TEAM_HORDE].GetPlayerCount() < m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount())
j = TEAM_HORDE;
- if (sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) != 0
+ if (sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) != BG_QUEUE_INVITATION_TYPE_NO_BALANCE
&& m_SelectionPools[TEAM_HORDE].GetPlayerCount() >= minPlayers && m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() >= minPlayers)
{
//we will try to invite more groups to team with less players indexed by j
@@ -1041,7 +1068,17 @@ bool BGQueueRemoveEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
BattlegroundQueue &bgQueue = sBattlegroundMgr->GetBattlegroundQueue(m_BgQueueTypeId);
if (bgQueue.IsPlayerInvited(m_PlayerGuid, m_BgInstanceGUID, m_RemoveTime))
{
- TC_LOG_DEBUG("bg.battleground", "Battleground: removing player %u from bg queue for instance %u because of not pressing enter battle in time.", player->GetGUIDLow(), m_BgInstanceGUID);
+ // track if player leaves the BG by not clicking enter button
+ if (bg && bg->isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS) &&
+ (bg->GetStatus() == STATUS_IN_PROGRESS || bg->GetStatus() == STATUS_WAIT_JOIN))
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK);
+ stmt->setUInt32(0, player->GetGUID().GetCounter());
+ stmt->setUInt8(1, BG_DESERTION_TYPE_NO_ENTER_BUTTON);
+ CharacterDatabase.Execute(stmt);
+ }
+
+ TC_LOG_DEBUG("bg.battleground", "Battleground: removing player %u from bg queue for instance %u because of not pressing enter battle in time.", player->GetGUID().GetCounter(), m_BgInstanceGUID);
player->RemoveBattlegroundQueueId(m_BgQueueTypeId);
bgQueue.RemovePlayer(m_PlayerGuid, true);
diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.h b/src/server/game/Battlegrounds/BattlegroundQueue.h
index 7e8debfd24d..1509a60e15d 100644
--- a/src/server/game/Battlegrounds/BattlegroundQueue.h
+++ b/src/server/game/Battlegrounds/BattlegroundQueue.h
@@ -64,6 +64,13 @@ enum BattlegroundQueueGroupTypes
};
#define BG_QUEUE_GROUP_TYPES_COUNT 4
+enum BattlegroundQueueInvitationType
+{
+ BG_QUEUE_INVITATION_TYPE_NO_BALANCE = 0, // no balance: N+M vs N players
+ BG_QUEUE_INVITATION_TYPE_BALANCED = 1, // teams balanced: N+1 vs N players
+ BG_QUEUE_INVITATION_TYPE_EVEN = 2 // teams even: N vs N players
+};
+
class Battleground;
class BattlegroundQueue
{
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
index 00b6862369d..f9d32e68e0e 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
@@ -222,7 +222,7 @@ void BattlegroundAB::StartingEventOpenDoors()
void BattlegroundAB::AddPlayer(Player* player)
{
Battleground::AddPlayer(player);
- PlayerScores[player->GetGUIDLow()] = new BattlegroundABScore(player->GetGUID());
+ PlayerScores[player->GetGUID().GetCounter()] = new BattlegroundABScore(player->GetGUID());
}
void BattlegroundAB::RemovePlayer(Player* /*player*/, ObjectGuid /*guid*/, uint32 /*team*/)
@@ -309,7 +309,7 @@ int32 BattlegroundAB::_GetNodeNameId(uint8 node)
case BG_AB_NODE_LUMBER_MILL:return LANG_BG_AB_NODE_LUMBER_MILL;
case BG_AB_NODE_GOLD_MINE: return LANG_BG_AB_NODE_GOLD_MINE;
default:
- ASSERT(false);
+ ABORT();
}
return 0;
}
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
index 9c654a1793c..4ac02bab9ec 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
@@ -302,7 +302,7 @@ Creature* BattlegroundAV::AddAVCreature(uint16 cinfoid, uint16 type)
if (!isStatic && ((cinfoid >= AV_NPC_A_GRAVEDEFENSE0 && cinfoid <= AV_NPC_A_GRAVEDEFENSE3)
|| (cinfoid >= AV_NPC_H_GRAVEDEFENSE0 && cinfoid <= AV_NPC_H_GRAVEDEFENSE3)))
{
- CreatureData &data = sObjectMgr->NewOrExistCreatureData(creature->GetDBTableGUIDLow());
+ CreatureData &data = sObjectMgr->NewOrExistCreatureData(creature->GetSpawnId());
data.spawndist = 5;
}
//else spawndist will be 15, so creatures move maximum=10
@@ -435,7 +435,7 @@ void BattlegroundAV::StartingEventOpenDoors()
void BattlegroundAV::AddPlayer(Player* player)
{
Battleground::AddPlayer(player);
- PlayerScores[player->GetGUIDLow()] = new BattlegroundAVScore(player->GetGUID());
+ PlayerScores[player->GetGUID().GetCounter()] = new BattlegroundAVScore(player->GetGUID());
}
void BattlegroundAV::EndBattleground(uint32 winner)
@@ -789,7 +789,7 @@ BG_AV_Nodes BattlegroundAV::GetNodeThroughObject(uint32 object)
if (object == BG_AV_OBJECT_FLAG_N_SNOWFALL_GRAVE)
return BG_AV_NODES_SNOWFALL_GRAVE;
TC_LOG_ERROR("bg.battleground", "BattlegroundAV: ERROR! GetPlace got a wrong object :(");
- ASSERT(false);
+ ABORT();
return BG_AV_Nodes(0);
}
@@ -827,7 +827,7 @@ uint32 BattlegroundAV::GetObjectThroughNode(BG_AV_Nodes node)
else if (m_Nodes[node].Owner == AV_NEUTRAL_TEAM)
return BG_AV_OBJECT_FLAG_N_SNOWFALL_GRAVE;
TC_LOG_ERROR("bg.battleground", "BattlegroundAV: Error! GetPlaceNode couldn't resolve node %i", node);
- ASSERT(false);
+ ABORT();
return 0;
}
@@ -1402,22 +1402,22 @@ void BattlegroundAV::AssaultNode(BG_AV_Nodes node, uint16 team)
if (m_Nodes[node].TotalOwner == team)
{
TC_LOG_FATAL("bg.battleground", "Assaulting team is TotalOwner of node");
- ASSERT(false);
+ ABORT();
}
if (m_Nodes[node].Owner == team)
{
TC_LOG_FATAL("bg.battleground", "Assaulting team is owner of node");
- ASSERT(false);
+ ABORT();
}
if (m_Nodes[node].State == POINT_DESTROYED)
{
TC_LOG_FATAL("bg.battleground", "Destroyed node is being assaulted");
- ASSERT(false);
+ ABORT();
}
if (m_Nodes[node].State == POINT_ASSAULTED && m_Nodes[node].TotalOwner) //only assault an assaulted node if no totalowner exists
{
TC_LOG_FATAL("bg.battleground", "Assault on an not assaulted node with total owner");
- ASSERT(false);
+ ABORT();
}
//the timer gets another time, if the previous owner was 0 == Neutral
m_Nodes[node].Timer = (m_Nodes[node].PrevOwner)? BG_AV_CAPTIME : BG_AV_SNOWFALL_FIRSTCAP;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
index fac6bbcfe99..7ab513c9201 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
@@ -161,7 +161,8 @@ void BattlegroundEY::CheckSomeoneJoinedPoint()
GameObject* obj = NULL;
for (uint8 i = 0; i < EY_POINTS_MAX; ++i)
{
- obj = HashMapHolder<GameObject>::Find(BgObjects[BG_EY_OBJECT_TOWER_CAP_FEL_REAVER + i]);
+ obj = GetBgMap()->GetGameObject(BgObjects[BG_EY_OBJECT_TOWER_CAP_FEL_REAVER + i]);
+
if (obj)
{
uint8 j = 0;
@@ -201,7 +202,8 @@ void BattlegroundEY::CheckSomeoneLeftPoint()
GameObject* obj = NULL;
for (uint8 i = 0; i < EY_POINTS_MAX; ++i)
{
- obj = HashMapHolder<GameObject>::Find(BgObjects[BG_EY_OBJECT_TOWER_CAP_FEL_REAVER + i]);
+ obj = GetBgMap()->GetGameObject(BgObjects[BG_EY_OBJECT_TOWER_CAP_FEL_REAVER + i]);
+
if (obj)
{
uint8 j = 0;
@@ -362,7 +364,7 @@ void BattlegroundEY::UpdatePointsIcons(uint32 Team, uint32 Point)
void BattlegroundEY::AddPlayer(Player* player)
{
Battleground::AddPlayer(player);
- PlayerScores[player->GetGUIDLow()] = new BattlegroundEYScore(player->GetGUID());
+ PlayerScores[player->GetGUID().GetCounter()] = new BattlegroundEYScore(player->GetGUID());
m_PlayersNearPoint[EY_POINTS_MAX].push_back(player->GetGUID());
}
@@ -588,7 +590,8 @@ void BattlegroundEY::RespawnFlagAfterDrop()
{
RespawnFlag(true);
- GameObject* obj = HashMapHolder<GameObject>::Find(GetDroppedFlagGUID());
+ GameObject* obj = GetBgMap()->GetGameObject(GetDroppedFlagGUID());
+
if (obj)
obj->Delete();
else
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
index 9f13d4ab659..bc2fc387e89 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
@@ -245,7 +245,7 @@ void BattlegroundIC::StartingEventOpenDoors()
void BattlegroundIC::AddPlayer(Player* player)
{
Battleground::AddPlayer(player);
- PlayerScores[player->GetGUIDLow()] = new BattlegroundICScore(player->GetGUID());
+ PlayerScores[player->GetGUID().GetCounter()] = new BattlegroundICScore(player->GetGUID());
if (nodePoint[NODE_TYPE_QUARRY].nodeState == (player->GetTeamId() == TEAM_ALLIANCE ? NODE_STATE_CONTROLLED_A : NODE_STATE_CONTROLLED_H))
player->CastSpell(player, SPELL_QUARRY, true);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
index f267bf7c6c6..bfae37c64e6 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
@@ -476,7 +476,7 @@ void BattlegroundSA::FillInitialWorldStates(WorldPacket& data)
void BattlegroundSA::AddPlayer(Player* player)
{
Battleground::AddPlayer(player);
- PlayerScores[player->GetGUIDLow()] = new BattlegroundSAScore(player->GetGUID());
+ PlayerScores[player->GetGUID().GetCounter()] = new BattlegroundSAScore(player->GetGUID());
SendTransportInit(player);
@@ -744,7 +744,7 @@ bool BattlegroundSA::CanInteractWithObject(uint32 objectId)
return false;
break;
default:
- ASSERT(false);
+ ABORT();
break;
}
@@ -877,7 +877,7 @@ void BattlegroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player* Source)
break;
default:
- ASSERT(false);
+ ABORT();
break;
};
}
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
index f94639efaf4..69f6b012c8b 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
@@ -227,7 +227,7 @@ void BattlegroundWS::StartingEventOpenDoors()
void BattlegroundWS::AddPlayer(Player* player)
{
Battleground::AddPlayer(player);
- PlayerScores[player->GetGUIDLow()] = new BattlegroundWGScore(player->GetGUID());
+ PlayerScores[player->GetGUID().GetCounter()] = new BattlegroundWGScore(player->GetGUID());
}
void BattlegroundWS::RespawnFlag(uint32 Team, bool captured)
diff --git a/src/server/game/Calendar/CalendarMgr.cpp b/src/server/game/Calendar/CalendarMgr.cpp
index bc1faa783fb..368ebecba84 100644
--- a/src/server/game/Calendar/CalendarMgr.cpp
+++ b/src/server/game/Calendar/CalendarMgr.cpp
@@ -58,7 +58,7 @@ void CalendarMgr::LoadFromDB()
Field* fields = result->Fetch();
uint64 eventId = fields[0].GetUInt64();
- ObjectGuid creatorGUID = ObjectGuid(HIGHGUID_PLAYER, fields[1].GetUInt32());
+ ObjectGuid creatorGUID = ObjectGuid(HighGuid::Player, fields[1].GetUInt32());
std::string title = fields[2].GetString();
std::string description = fields[3].GetString();
CalendarEventType type = CalendarEventType(fields[4].GetUInt8());
@@ -66,7 +66,7 @@ void CalendarMgr::LoadFromDB()
uint32 eventTime = fields[6].GetUInt32();
uint32 flags = fields[7].GetUInt32();
uint32 timezoneTime = fields[8].GetUInt32();
- uint32 guildId = 0;
+ ObjectGuid::LowType guildId = 0;
if (flags & CALENDAR_FLAG_GUILD_EVENT || flags & CALENDAR_FLAG_WITHOUT_INVITES)
guildId = Player::GetGuildIdFromDB(creatorGUID);
@@ -91,8 +91,8 @@ void CalendarMgr::LoadFromDB()
uint64 inviteId = fields[0].GetUInt64();
uint64 eventId = fields[1].GetUInt64();
- ObjectGuid invitee = ObjectGuid(HIGHGUID_PLAYER, fields[2].GetUInt32());
- ObjectGuid senderGUID = ObjectGuid(HIGHGUID_PLAYER, fields[3].GetUInt32());
+ ObjectGuid invitee = ObjectGuid(HighGuid::Player, fields[2].GetUInt32());
+ ObjectGuid senderGUID = ObjectGuid(HighGuid::Player, fields[3].GetUInt32());
CalendarInviteStatus status = CalendarInviteStatus(fields[4].GetUInt8());
uint32 statusTime = fields[5].GetUInt32();
CalendarModerationRank rank = CalendarModerationRank(fields[6].GetUInt8());
@@ -270,7 +270,7 @@ void CalendarMgr::RemoveAllPlayerEventsAndInvites(ObjectGuid guid)
RemoveInvite((*itr)->GetInviteId(), (*itr)->GetEventId(), guid);
}
-void CalendarMgr::RemovePlayerGuildEventsAndSignups(ObjectGuid guid, uint32 guildId)
+void CalendarMgr::RemovePlayerGuildEventsAndSignups(ObjectGuid guid, ObjectGuid::LowType guildId)
{
for (CalendarEventStore::const_iterator itr = _events.begin(); itr != _events.end(); ++itr)
if ((*itr)->GetCreatorGUID() == guid && ((*itr)->IsGuildEvent() || (*itr)->IsGuildAnnouncement()))
@@ -573,7 +573,7 @@ void CalendarMgr::SendCalendarEvent(ObjectGuid guid, CalendarEvent const& calend
Player* invitee = ObjectAccessor::FindPlayer(inviteeGuid);
uint8 inviteeLevel = invitee ? invitee->getLevel() : Player::GetLevelFromDB(inviteeGuid);
- uint32 inviteeGuildId = invitee ? invitee->GetGuildId() : Player::GetGuildIdFromDB(inviteeGuid);
+ ObjectGuid::LowType inviteeGuildId = invitee ? invitee->GetGuildId() : Player::GetGuildIdFromDB(inviteeGuid);
data << inviteeGuid.WriteAsPacked();
data << uint8(inviteeLevel);
diff --git a/src/server/game/Calendar/CalendarMgr.h b/src/server/game/Calendar/CalendarMgr.h
index 1027bd817f0..9969c00e3af 100644
--- a/src/server/game/Calendar/CalendarMgr.h
+++ b/src/server/game/Calendar/CalendarMgr.h
@@ -203,7 +203,7 @@ struct CalendarEvent
_description = calendarEvent.GetDescription();
}
- CalendarEvent(uint64 eventId, ObjectGuid creatorGUID, uint32 guildId, CalendarEventType type, int32 dungeonId,
+ CalendarEvent(uint64 eventId, ObjectGuid creatorGUID, ObjectGuid::LowType guildId, CalendarEventType type, int32 dungeonId,
time_t eventTime, uint32 flags, time_t timezoneTime, std::string title, std::string description) :
_eventId(eventId), _creatorGUID(creatorGUID), _guildId(guildId), _type(type), _dungeonId(dungeonId),
_eventTime(eventTime), _flags(flags), _timezoneTime(timezoneTime), _title(title),
@@ -220,8 +220,8 @@ struct CalendarEvent
void SetCreatorGUID(ObjectGuid guid) { _creatorGUID = guid; }
ObjectGuid GetCreatorGUID() const { return _creatorGUID; }
- void SetGuildId(uint32 guildId) { _guildId = guildId; }
- uint32 GetGuildId() const { return _guildId; }
+ void SetGuildId(ObjectGuid::LowType guildId) { _guildId = guildId; }
+ ObjectGuid::LowType GetGuildId() const { return _guildId; }
void SetTitle(const std::string& title) { _title = title; }
std::string GetTitle() const { return _title; }
@@ -253,7 +253,7 @@ struct CalendarEvent
private:
uint64 _eventId;
ObjectGuid _creatorGUID;
- uint32 _guildId;
+ ObjectGuid::LowType _guildId;
CalendarEventType _type;
int32 _dungeonId;
time_t _eventTime;
@@ -316,7 +316,7 @@ class CalendarMgr
void UpdateInvite(CalendarInvite* invite, SQLTransaction& trans);
void RemoveAllPlayerEventsAndInvites(ObjectGuid guid);
- void RemovePlayerGuildEventsAndSignups(ObjectGuid guid, uint32 guildId);
+ void RemovePlayerGuildEventsAndSignups(ObjectGuid guid, ObjectGuid::LowType guildId);
void SendCalendarEvent(ObjectGuid guid, CalendarEvent const& calendarEvent, CalendarSendEventType sendType);
void SendCalendarEventInvite(CalendarInvite const& invite);
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp
index 5a74ad05b66..c99fe62f11e 100644
--- a/src/server/game/Chat/Chat.cpp
+++ b/src/server/game/Chat/Chat.cpp
@@ -34,54 +34,16 @@
bool ChatHandler::load_command_table = true;
-// get number of commands in table
-static size_t getCommandTableSize(const ChatCommand* commands)
+std::vector<ChatCommand> const& ChatHandler::getCommandTable()
{
- if (!commands)
- return 0;
- size_t count = 0;
- while (commands[count].Name != NULL)
- count++;
- return count;
-}
-
-// append source command table to target, return number of appended commands
-static size_t appendCommandTable(ChatCommand* target, const ChatCommand* source)
-{
- const size_t count = getCommandTableSize(source);
- if (count)
- memcpy(target, source, count * sizeof(ChatCommand));
- return count;
-}
-
-ChatCommand* ChatHandler::getCommandTable()
-{
- // cache for commands, needed because some commands are loaded dynamically through ScriptMgr
- // cache is never freed and will show as a memory leak in diagnostic tools
- // can't use vector as vector storage is implementation-dependent, eg, there can be alignment gaps between elements
- static ChatCommand* commandTableCache = NULL;
+ static std::vector<ChatCommand> commandTableCache;
if (LoadCommandTable())
{
SetLoadCommandTable(false);
- {
- // count total number of top-level commands
- size_t total = 0;
- std::vector<ChatCommand*> const& dynamic = sScriptMgr->GetChatCommands();
- for (std::vector<ChatCommand*>::const_iterator it = dynamic.begin(); it != dynamic.end(); ++it)
- total += getCommandTableSize(*it);
- total += 1; // ending zero
-
- // cache top-level commands
- size_t added = 0;
- free(commandTableCache);
- commandTableCache = (ChatCommand*)malloc(sizeof(ChatCommand) * total);
- ASSERT(commandTableCache);
- memset(commandTableCache, 0, sizeof(ChatCommand) * total);
- for (std::vector<ChatCommand*>::const_iterator it = dynamic.begin(); it != dynamic.end(); ++it)
- added += appendCommandTable(commandTableCache + added, *it);
- }
+ std::vector<ChatCommand> cmds = sScriptMgr->GetChatCommands();
+ commandTableCache.swap(cmds);
PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_COMMANDS);
PreparedQueryResult result = WorldDatabase.Query(stmt);
@@ -186,13 +148,33 @@ bool ChatHandler::hasStringAbbr(const char* name, const char* part)
return true;
}
-void ChatHandler::SendSysMessage(const char *str)
+void ChatHandler::SendSysMessage(const char *str, bool escapeCharacters)
{
WorldPacket data;
// need copy to prevent corruption by strtok call in LineFromMessage original string
- char* buf = strdup(str);
- char* pos = buf;
+ char* buf;
+ char* pos;
+
+ if (escapeCharacters && strchr(str, '|'))
+ {
+ size_t startPos = 0;
+ std::ostringstream o;
+ while (const char* charPos = strchr(str + startPos, '|'))
+ {
+ o.write(str + startPos, charPos - str - startPos);
+ o << "||";
+ startPos = charPos - str + 1;
+ }
+ o.write(str + startPos, strlen(str) - startPos);
+ buf = strdup(o.str().c_str());
+ }
+ else
+ {
+ buf = strdup(str);
+ }
+
+ pos = buf;
while (char* line = LineFromMessage(pos))
{
@@ -244,7 +226,7 @@ void ChatHandler::SendSysMessage(uint32 entry)
SendSysMessage(GetTrinityString(entry));
}
-bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, std::string const& fullcmd)
+bool ChatHandler::ExecuteCommandInTable(std::vector<ChatCommand> const& table, const char* text, std::string const& fullcmd)
{
char const* oldtext = text;
std::string cmd = "";
@@ -257,7 +239,7 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, st
while (*text == ' ') ++text;
- for (uint32 i = 0; table[i].Name != NULL; ++i)
+ for (uint32 i = 0; i < table.size(); ++i)
{
if (!hasStringAbbr(table[i].Name, cmd.c_str()))
continue;
@@ -265,7 +247,7 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, st
bool match = false;
if (strlen(table[i].Name) > cmd.length())
{
- for (uint32 j = 0; table[j].Name != NULL; ++j)
+ for (uint32 j = 0; j < table.size(); ++j)
{
if (!hasStringAbbr(table[j].Name, cmd.c_str()))
continue;
@@ -281,7 +263,7 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, st
continue;
// select subcommand from child commands list
- if (table[i].ChildCommands != NULL)
+ if (!table[i].ChildCommands.empty())
{
if (!ExecuteCommandInTable(table[i].ChildCommands, text, fullcmd))
{
@@ -326,7 +308,7 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, st
fullcmd.c_str(), player->GetName().c_str(), player->GetGUID().ToString().c_str(),
m_session->GetAccountId(), player->GetPositionX(), player->GetPositionY(),
player->GetPositionZ(), player->GetMapId(),
- player->GetMap() ? player->GetMap()->GetMapName() : "Unknown",
+ player->FindMap() ? player->FindMap()->GetMapName() : "Unknown",
areaId, areaName.c_str(), zoneName.c_str(),
(player->GetSelectedUnit()) ? player->GetSelectedUnit()->GetName().c_str() : "",
guid.ToString().c_str());
@@ -347,7 +329,7 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, st
return false;
}
-bool ChatHandler::SetDataForCommandInTable(ChatCommand* table, char const* text, uint32 permission, std::string const& help, std::string const& fullcommand)
+bool ChatHandler::SetDataForCommandInTable(std::vector<ChatCommand>& table, char const* text, uint32 permission, std::string const& help, std::string const& fullcommand)
{
std::string cmd = "";
@@ -359,14 +341,14 @@ bool ChatHandler::SetDataForCommandInTable(ChatCommand* table, char const* text,
while (*text == ' ') ++text;
- for (uint32 i = 0; table[i].Name != NULL; i++)
+ for (uint32 i = 0; i < table.size(); i++)
{
// for data fill use full explicit command names
if (table[i].Name != cmd)
continue;
// select subcommand from child commands list (including "")
- if (table[i].ChildCommands != NULL)
+ if (!table[i].ChildCommands.empty())
{
if (SetDataForCommandInTable(table[i].ChildCommands, text, permission, help, fullcommand))
return true;
@@ -393,7 +375,7 @@ bool ChatHandler::SetDataForCommandInTable(ChatCommand* table, char const* text,
// in case "" command let process by caller
if (!cmd.empty())
{
- if (table == getCommandTable())
+ if (&table == &getCommandTable())
TC_LOG_ERROR("sql.sql", "Table `command` have not existed command '%s', skip.", cmd.c_str());
else
TC_LOG_ERROR("sql.sql", "Table `command` have not existed subcommand '%s' in command '%s', skip.", cmd.c_str(), fullcommand.c_str());
@@ -499,10 +481,10 @@ Valid examples:
return LinkExtractor(message).IsValidMessage();
}
-bool ChatHandler::ShowHelpForSubCommands(ChatCommand* table, char const* cmd, char const* subcmd)
+bool ChatHandler::ShowHelpForSubCommands(std::vector<ChatCommand> const& table, char const* cmd, char const* subcmd)
{
std::string list;
- for (uint32 i = 0; table[i].Name != NULL; ++i)
+ for (uint32 i = 0; i < table.size(); ++i)
{
// must be available (ignore handler existence for show command with possible available subcommands)
if (!isAvailable(table[i]))
@@ -519,14 +501,14 @@ bool ChatHandler::ShowHelpForSubCommands(ChatCommand* table, char const* cmd, ch
list += table[i].Name;
- if (table[i].ChildCommands)
+ if (!table[i].ChildCommands.empty())
list += " ...";
}
if (list.empty())
return false;
- if (table == getCommandTable())
+ if (&table == &getCommandTable())
{
SendSysMessage(LANG_AVIABLE_CMD);
PSendSysMessage("%s", list.c_str());
@@ -537,11 +519,11 @@ bool ChatHandler::ShowHelpForSubCommands(ChatCommand* table, char const* cmd, ch
return true;
}
-bool ChatHandler::ShowHelpForCommand(ChatCommand* table, const char* cmd)
+bool ChatHandler::ShowHelpForCommand(std::vector<ChatCommand> const& table, const char* cmd)
{
if (*cmd)
{
- for (uint32 i = 0; table[i].Name != NULL; ++i)
+ for (uint32 i = 0; i < table.size(); ++i)
{
// must be available (ignore handler existence for show command with possible available subcommands)
if (!isAvailable(table[i]))
@@ -553,7 +535,7 @@ bool ChatHandler::ShowHelpForCommand(ChatCommand* table, const char* cmd)
// have subcommand
char const* subcmd = (*cmd) ? strtok(NULL, " ") : "";
- if (table[i].ChildCommands && subcmd && *subcmd)
+ if (!table[i].ChildCommands.empty() && subcmd && *subcmd)
{
if (ShowHelpForCommand(table[i].ChildCommands, subcmd))
return true;
@@ -562,7 +544,7 @@ bool ChatHandler::ShowHelpForCommand(ChatCommand* table, const char* cmd)
if (!table[i].Help.empty())
SendSysMessage(table[i].Help.c_str());
- if (table[i].ChildCommands)
+ if (!table[i].ChildCommands.empty())
if (ShowHelpForSubCommands(table[i].ChildCommands, table[i].Name, subcmd ? subcmd : ""))
return true;
@@ -571,7 +553,7 @@ bool ChatHandler::ShowHelpForCommand(ChatCommand* table, const char* cmd)
}
else
{
- for (uint32 i = 0; table[i].Name != NULL; ++i)
+ for (uint32 i = 0; i < table.size(); ++i)
{
// must be available (ignore handler existence for show command with possible available subcommands)
if (!isAvailable(table[i]))
@@ -583,7 +565,7 @@ bool ChatHandler::ShowHelpForCommand(ChatCommand* table, const char* cmd)
if (!table[i].Help.empty())
SendSysMessage(table[i].Help.c_str());
- if (table[i].ChildCommands)
+ if (!table[i].ChildCommands.empty())
if (ShowHelpForSubCommands(table[i].ChildCommands, "", ""))
return true;
@@ -890,26 +872,22 @@ GameObject* ChatHandler::GetNearbyGameObject()
return obj;
}
-GameObject* ChatHandler::GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid, uint32 entry)
+GameObject* ChatHandler::GetObjectGlobalyWithGuidOrNearWithDbGuid(ObjectGuid::LowType lowguid, uint32 entry)
{
if (!m_session)
return NULL;
Player* pl = m_session->GetPlayer();
- GameObject* obj = pl->GetMap()->GetGameObject(ObjectGuid(HIGHGUID_GAMEOBJECT, entry, lowguid));
+ GameObject* obj = pl->GetMap()->GetGameObject(ObjectGuid(HighGuid::GameObject, entry, lowguid));
if (!obj && sObjectMgr->GetGOData(lowguid)) // guid is DB guid of object
{
- // search near player then
- CellCoord p(Trinity::ComputeCellCoord(pl->GetPositionX(), pl->GetPositionY()));
- Cell cell(p);
-
- Trinity::GameObjectWithDbGUIDCheck go_check(*pl, lowguid);
- Trinity::GameObjectSearcher<Trinity::GameObjectWithDbGUIDCheck> checker(pl, obj, go_check);
+ auto bounds = pl->GetMap()->GetGameObjectBySpawnIdStore().equal_range(lowguid);
+ if (bounds.first == bounds.second)
+ return nullptr;
- TypeContainerVisitor<Trinity::GameObjectSearcher<Trinity::GameObjectWithDbGUIDCheck>, GridTypeMapContainer > object_checker(checker);
- cell.Visit(p, object_checker, *pl->GetMap(), *pl, pl->GetGridActivationRange());
+ return bounds.first->second;
}
return obj;
@@ -1044,19 +1022,19 @@ ObjectGuid ChatHandler::extractGuidFromLink(char* text)
}
case SPELL_LINK_CREATURE:
{
- uint32 lowguid = atoul(idS);
+ ObjectGuid::LowType lowguid = atoul(idS);
if (CreatureData const* data = sObjectMgr->GetCreatureData(lowguid))
- return ObjectGuid(HIGHGUID_UNIT, data->id, lowguid);
+ return ObjectGuid(HighGuid::Unit, data->id, lowguid);
else
return ObjectGuid::Empty;
}
case SPELL_LINK_GAMEOBJECT:
{
- uint32 lowguid = atoul(idS);
+ ObjectGuid::LowType lowguid = atoul(idS);
if (GameObjectData const* data = sObjectMgr->GetGOData(lowguid))
- return ObjectGuid(HIGHGUID_GAMEOBJECT, data->id, lowguid);
+ return ObjectGuid(HighGuid::GameObject, data->id, lowguid);
else
return ObjectGuid::Empty;
}
@@ -1153,7 +1131,7 @@ void ChatHandler::extractOptFirstArg(char* args, char** arg1, char** arg2)
char* ChatHandler::extractQuotedArg(char* args)
{
- if (!*args)
+ if (!args || !*args)
return NULL;
if (*args == '"')
@@ -1223,7 +1201,7 @@ bool CliHandler::isAvailable(ChatCommand const& cmd) const
return cmd.AllowConsole;
}
-void CliHandler::SendSysMessage(const char *str)
+void CliHandler::SendSysMessage(const char *str, bool /*escapeCharacters*/)
{
m_print(m_callbackArg, str);
m_print(m_callbackArg, "\r\n");
diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h
index 1b095534ad0..2420331e363 100644
--- a/src/server/game/Chat/Chat.h
+++ b/src/server/game/Chat/Chat.h
@@ -38,13 +38,18 @@ struct GameTele;
class ChatCommand
{
+ typedef bool(*pHandler)(ChatHandler*, char const*);
+
public:
- const char * Name;
- uint32 Permission; // function pointer required correct align (use uint32)
- bool AllowConsole;
- bool (*Handler)(ChatHandler*, const char* args);
- std::string Help;
- ChatCommand* ChildCommands;
+ ChatCommand(char const* name, uint32 permission, bool allowConsole, pHandler handler, std::string help, std::vector<ChatCommand> childCommands = std::vector<ChatCommand>())
+ : Name(ASSERT_NOTNULL(name)), Permission(permission), AllowConsole(allowConsole), Handler(handler), Help(std::move(help)), ChildCommands(std::move(childCommands)) { }
+
+ char const* Name;
+ uint32 Permission; // function pointer required correct align (use uint32)
+ bool AllowConsole;
+ pHandler Handler;
+ std::string Help;
+ std::vector<ChatCommand> ChildCommands;
};
class ChatHandler
@@ -66,7 +71,7 @@ class ChatHandler
// function with different implementation for chat/console
virtual char const* GetTrinityString(uint32 entry) const;
- virtual void SendSysMessage(char const* str);
+ virtual void SendSysMessage(char const* str, bool escapeCharacters = false);
void SendSysMessage(uint32 entry);
@@ -90,7 +95,7 @@ class ChatHandler
bool ParseCommands(const char* text);
- static ChatCommand* getCommandTable();
+ static std::vector<ChatCommand> const& getCommandTable();
bool isValidChatMessage(const char* msg);
void SendGlobalSysMessage(const char *str);
@@ -135,18 +140,18 @@ class ChatHandler
std::string GetNameLink(Player* chr) const;
GameObject* GetNearbyGameObject();
- GameObject* GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid, uint32 entry);
+ GameObject* GetObjectGlobalyWithGuidOrNearWithDbGuid(ObjectGuid::LowType lowguid, uint32 entry);
bool HasSentErrorMessage() const { return sentErrorMessage; }
void SetSentErrorMessage(bool val){ sentErrorMessage = val; }
static bool LoadCommandTable() { return load_command_table; }
static void SetLoadCommandTable(bool val) { load_command_table = val; }
- bool ShowHelpForCommand(ChatCommand* table, const char* cmd);
+ bool ShowHelpForCommand(std::vector<ChatCommand> const& table, const char* cmd);
protected:
explicit ChatHandler() : m_session(NULL), sentErrorMessage(false) { } // for CLI subclass
- static bool SetDataForCommandInTable(ChatCommand* table, const char* text, uint32 permission, std::string const& help, std::string const& fullcommand);
- bool ExecuteCommandInTable(ChatCommand* table, const char* text, std::string const& fullcmd);
- bool ShowHelpForSubCommands(ChatCommand* table, char const* cmd, char const* subcmd);
+ static bool SetDataForCommandInTable(std::vector<ChatCommand>& table, const char* text, uint32 permission, std::string const& help, std::string const& fullcommand);
+ bool ExecuteCommandInTable(std::vector<ChatCommand> const& table, const char* text, std::string const& fullcmd);
+ bool ShowHelpForSubCommands(std::vector<ChatCommand> const& table, char const* cmd, char const* subcmd);
private:
WorldSession* m_session; // != NULL for chat command call and NULL for CLI command
@@ -166,7 +171,7 @@ class CliHandler : public ChatHandler
char const* GetTrinityString(uint32 entry) const override;
bool isAvailable(ChatCommand const& cmd) const override;
bool HasPermission(uint32 /*permission*/) const override { return true; }
- void SendSysMessage(const char *str) override;
+ void SendSysMessage(const char *str, bool escapeCharacters) override;
std::string GetNameLink() const override;
bool needReportToTarget(Player* chr) const override;
LocaleConstant GetSessionDbcLocale() const override;
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index 9106bfdd394..bae400adcc2 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -28,7 +28,7 @@
#include "SpellAuras.h"
#include "SpellMgr.h"
-char const* ConditionMgr::StaticSourceTypeData[CONDITION_SOURCE_TYPE_MAX] =
+char const* const ConditionMgr::StaticSourceTypeData[CONDITION_SOURCE_TYPE_MAX] =
{
"None",
"Creature Loot",
@@ -89,7 +89,7 @@ ConditionMgr::ConditionTypeInfo const ConditionMgr::StaticConditionTypeData[COND
{ "PhaseMask", true, false, false },
{ "Level", true, true, false },
{ "Quest Completed", true, false, false },
- { "Near Creature", true, true, false },
+ { "Near Creature", true, true, true },
{ "Near GameObject", true, true, false },
{ "Object Entry or Guid", true, true, true },
{ "Object TypeMask", true, false, false },
@@ -105,7 +105,7 @@ ConditionMgr::ConditionTypeInfo const ConditionMgr::StaticConditionTypeData[COND
// Checks if object meets the condition
// Can have CONDITION_SOURCE_TYPE_NONE && !mReferenceId if called from a special event (ie: eventAI)
-bool Condition::Meets(ConditionSourceInfo& sourceInfo)
+bool Condition::Meets(ConditionSourceInfo& sourceInfo) const
{
ASSERT(ConditionTarget < MAX_CONDITION_TARGETS);
WorldObject* object = sourceInfo.mConditionTargets[ConditionTarget];
@@ -231,7 +231,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
case CONDITION_INSTANCE_INFO:
{
Map* map = object->GetMap();
- if (map && map->IsDungeon())
+ if (map->IsDungeon())
{
if (InstanceScript const* instance = ((InstanceMap*)map)->GetInstanceScript())
{
@@ -280,7 +280,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
}
case CONDITION_NEAR_CREATURE:
{
- condMeets = GetClosestCreatureWithEntry(object, ConditionValue1, (float)ConditionValue2) ? true : false;
+ condMeets = GetClosestCreatureWithEntry(object, ConditionValue1, (float)ConditionValue2, bool(!ConditionValue3)) ? true : false;
break;
}
case CONDITION_NEAR_GAMEOBJECT:
@@ -299,10 +299,10 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
switch (object->GetTypeId())
{
case TYPEID_UNIT:
- condMeets &= object->ToCreature()->GetDBTableGUIDLow() == ConditionValue3;
+ condMeets &= object->ToCreature()->GetSpawnId() == ConditionValue3;
break;
case TYPEID_GAMEOBJECT:
- condMeets &= object->ToGameObject()->GetDBTableGUIDLow() == ConditionValue3;
+ condMeets &= object->ToGameObject()->GetSpawnId() == ConditionValue3;
break;
default:
break;
@@ -324,7 +324,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
Unit* unit = object->ToUnit();
if (toUnit && unit)
{
- switch (ConditionValue2)
+ switch (static_cast<RelationType>(ConditionValue2))
{
case RELATION_SELF:
condMeets = unit == toUnit;
@@ -344,6 +344,8 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
case RELATION_CREATED_BY:
condMeets = unit->GetCreatorGUID() == toUnit->GetGUID();
break;
+ default:
+ break;
}
}
}
@@ -445,7 +447,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
return condMeets && script;
}
-uint32 Condition::GetSearcherTypeMaskForCondition()
+uint32 Condition::GetSearcherTypeMaskForCondition() const
{
// build mask of types for which condition can return true
// this is used for speeding up gridsearches
@@ -607,7 +609,7 @@ uint32 Condition::GetSearcherTypeMaskForCondition()
return mask;
}
-uint32 Condition::GetMaxAvailableConditionTargets()
+uint32 Condition::GetMaxAvailableConditionTargets() const
{
// returns number of targets which are available for given source type
switch (SourceType)
@@ -663,114 +665,105 @@ ConditionMgr::~ConditionMgr()
Clean();
}
-ConditionList ConditionMgr::GetConditionReferences(uint32 refId)
-{
- ConditionList conditions;
- ConditionReferenceContainer::const_iterator ref = ConditionReferenceStore.find(refId);
- if (ref != ConditionReferenceStore.end())
- conditions = (*ref).second;
- return conditions;
-}
-
-uint32 ConditionMgr::GetSearcherTypeMaskForConditionList(ConditionList const& conditions)
+uint32 ConditionMgr::GetSearcherTypeMaskForConditionList(ConditionContainer const& conditions) const
{
if (conditions.empty())
return GRID_MAP_TYPE_MASK_ALL;
// groupId, typeMask
- std::map<uint32, uint32> ElseGroupStore;
- for (ConditionList::const_iterator i = conditions.begin(); i != conditions.end(); ++i)
+ std::map<uint32, uint32> elseGroupSearcherTypeMasks;
+ for (ConditionContainer::const_iterator i = conditions.begin(); i != conditions.end(); ++i)
{
// no point of having not loaded conditions in list
ASSERT((*i)->isLoaded() && "ConditionMgr::GetSearcherTypeMaskForConditionList - not yet loaded condition found in list");
- std::map<uint32, uint32>::const_iterator itr = ElseGroupStore.find((*i)->ElseGroup);
+ std::map<uint32, uint32>::const_iterator itr = elseGroupSearcherTypeMasks.find((*i)->ElseGroup);
// group not filled yet, fill with widest mask possible
- if (itr == ElseGroupStore.end())
- ElseGroupStore[(*i)->ElseGroup] = GRID_MAP_TYPE_MASK_ALL;
+ if (itr == elseGroupSearcherTypeMasks.end())
+ elseGroupSearcherTypeMasks[(*i)->ElseGroup] = GRID_MAP_TYPE_MASK_ALL;
// no point of checking anymore, empty mask
- else if (!(*itr).second)
+ else if (!itr->second)
continue;
if ((*i)->ReferenceId) // handle reference
{
ConditionReferenceContainer::const_iterator ref = ConditionReferenceStore.find((*i)->ReferenceId);
ASSERT(ref != ConditionReferenceStore.end() && "ConditionMgr::GetSearcherTypeMaskForConditionList - incorrect reference");
- ElseGroupStore[(*i)->ElseGroup] &= GetSearcherTypeMaskForConditionList((*ref).second);
+ elseGroupSearcherTypeMasks[(*i)->ElseGroup] &= GetSearcherTypeMaskForConditionList((*ref).second);
}
else // handle normal condition
{
// object will match conditions in one ElseGroupStore only when it matches all of them
// so, let's find a smallest possible mask which satisfies all conditions
- ElseGroupStore[(*i)->ElseGroup] &= (*i)->GetSearcherTypeMaskForCondition();
+ elseGroupSearcherTypeMasks[(*i)->ElseGroup] &= (*i)->GetSearcherTypeMaskForCondition();
}
}
// object will match condition when one of the checks in ElseGroupStore is matching
// so, let's include all possible masks
uint32 mask = 0;
- for (std::map<uint32, uint32>::const_iterator i = ElseGroupStore.begin(); i != ElseGroupStore.end(); ++i)
+ for (std::map<uint32, uint32>::const_iterator i = elseGroupSearcherTypeMasks.begin(); i != elseGroupSearcherTypeMasks.end(); ++i)
mask |= i->second;
return mask;
}
-bool ConditionMgr::IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionList const& conditions)
+bool ConditionMgr::IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions) const
{
// groupId, groupCheckPassed
- std::map<uint32, bool> ElseGroupStore;
- for (ConditionList::const_iterator i = conditions.begin(); i != conditions.end(); ++i)
+ std::map<uint32, bool> elseGroupStore;
+ for (Condition const* condition : conditions)
{
- TC_LOG_DEBUG("condition", "ConditionMgr::IsPlayerMeetToConditionList %s val1: %u", (*i)->ToString().c_str(), (*i)->ConditionValue1);
- if ((*i)->isLoaded())
+ TC_LOG_DEBUG("condition", "ConditionMgr::IsPlayerMeetToConditionList %s val1: %u", condition->ToString().c_str(), condition->ConditionValue1);
+ if (condition->isLoaded())
{
//! Find ElseGroup in ElseGroupStore
- std::map<uint32, bool>::const_iterator itr = ElseGroupStore.find((*i)->ElseGroup);
+ std::map<uint32, bool>::const_iterator itr = elseGroupStore.find(condition->ElseGroup);
//! If not found, add an entry in the store and set to true (placeholder)
- if (itr == ElseGroupStore.end())
- ElseGroupStore[(*i)->ElseGroup] = true;
+ if (itr == elseGroupStore.end())
+ elseGroupStore[condition->ElseGroup] = true;
else if (!(*itr).second)
continue;
- if ((*i)->ReferenceId)//handle reference
+ if (condition->ReferenceId)//handle reference
{
- ConditionReferenceContainer::const_iterator ref = ConditionReferenceStore.find((*i)->ReferenceId);
+ ConditionReferenceContainer::const_iterator ref = ConditionReferenceStore.find(condition->ReferenceId);
if (ref != ConditionReferenceStore.end())
{
- if (!IsObjectMeetToConditionList(sourceInfo, (*ref).second))
- ElseGroupStore[(*i)->ElseGroup] = false;
+ if (!IsObjectMeetToConditionList(sourceInfo, ref->second))
+ elseGroupStore[condition->ElseGroup] = false;
}
else
{
TC_LOG_DEBUG("condition", "ConditionMgr::IsPlayerMeetToConditionList %s Reference template -%u not found",
- (*i)->ToString().c_str(), (*i)->ReferenceId); // checked at loading, should never happen
+ condition->ToString().c_str(), condition->ReferenceId); // checked at loading, should never happen
}
}
else //handle normal condition
{
- if (!(*i)->Meets(sourceInfo))
- ElseGroupStore[(*i)->ElseGroup] = false;
+ if (!condition->Meets(sourceInfo))
+ elseGroupStore[condition->ElseGroup] = false;
}
}
}
- for (std::map<uint32, bool>::const_iterator i = ElseGroupStore.begin(); i != ElseGroupStore.end(); ++i)
+ for (std::map<uint32, bool>::const_iterator i = elseGroupStore.begin(); i != elseGroupStore.end(); ++i)
if (i->second)
return true;
return false;
}
-bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object, ConditionList const& conditions)
+bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object, ConditionContainer const& conditions) const
{
ConditionSourceInfo srcInfo = ConditionSourceInfo(object);
return IsObjectMeetToConditions(srcInfo, conditions);
}
-bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionList const& conditions)
+bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionContainer const& conditions) const
{
ConditionSourceInfo srcInfo = ConditionSourceInfo(object1, object2);
return IsObjectMeetToConditions(srcInfo, conditions);
}
-bool ConditionMgr::IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionList const& conditions)
+bool ConditionMgr::IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions) const
{
if (conditions.empty())
return true;
@@ -807,87 +800,113 @@ bool ConditionMgr::CanHaveSourceIdSet(ConditionSourceType sourceType)
return (sourceType == CONDITION_SOURCE_TYPE_SMART_EVENT);
}
-ConditionList ConditionMgr::GetConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry)
+bool ConditionMgr::IsObjectMeetingNotGroupedConditions(ConditionSourceType sourceType, uint32 entry, ConditionSourceInfo& sourceInfo) const
{
- ConditionList spellCond;
if (sourceType > CONDITION_SOURCE_TYPE_NONE && sourceType < CONDITION_SOURCE_TYPE_MAX)
{
- ConditionContainer::const_iterator itr = ConditionStore.find(sourceType);
- if (itr != ConditionStore.end())
+ ConditionsByEntryMap::const_iterator i = ConditionStore[sourceType].find(entry);
+ if (i != ConditionStore[sourceType].end())
{
- ConditionTypeContainer::const_iterator i = (*itr).second.find(entry);
- if (i != (*itr).second.end())
- {
- spellCond = (*i).second;
- TC_LOG_DEBUG("condition", "GetConditionsForNotGroupedEntry: found conditions for type %u and entry %u", uint32(sourceType), entry);
- }
+ TC_LOG_DEBUG("condition", "GetConditionsForNotGroupedEntry: found conditions for type %u and entry %u", uint32(sourceType), entry);
+ return IsObjectMeetToConditions(sourceInfo, i->second);
}
}
- return spellCond;
+
+ return true;
}
-ConditionList ConditionMgr::GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId)
+bool ConditionMgr::IsObjectMeetingNotGroupedConditions(ConditionSourceType sourceType, uint32 entry, WorldObject* target0, WorldObject* target1 /*= nullptr*/, WorldObject* target2 /*= nullptr*/) const
{
- ConditionList cond;
- CreatureSpellConditionContainer::const_iterator itr = SpellClickEventConditionStore.find(creatureId);
+ ConditionSourceInfo conditionSource(target0, target1, target2);
+ return IsObjectMeetingNotGroupedConditions(sourceType, entry, conditionSource);
+}
+
+bool ConditionMgr::HasConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry) const
+{
+ if (sourceType > CONDITION_SOURCE_TYPE_NONE && sourceType < CONDITION_SOURCE_TYPE_MAX)
+ if (ConditionStore[sourceType].find(entry) != ConditionStore[sourceType].end())
+ return true;
+
+ return false;
+}
+
+bool ConditionMgr::IsObjectMeetingSpellClickConditions(uint32 creatureId, uint32 spellId, WorldObject* clicker, WorldObject* target) const
+{
+ ConditionEntriesByCreatureIdMap::const_iterator itr = SpellClickEventConditionStore.find(creatureId);
if (itr != SpellClickEventConditionStore.end())
{
- ConditionTypeContainer::const_iterator i = (*itr).second.find(spellId);
- if (i != (*itr).second.end())
+ ConditionsByEntryMap::const_iterator i = itr->second.find(spellId);
+ if (i != itr->second.end())
+ {
+ TC_LOG_DEBUG("condition", "GetConditionsForSpellClickEvent: found conditions for SpellClickEvent entry %u spell %u", creatureId, spellId);
+ ConditionSourceInfo sourceInfo(clicker, target);
+ return IsObjectMeetToConditions(sourceInfo, i->second);
+ }
+ }
+ return true;
+}
+
+ConditionContainer const* ConditionMgr::GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId) const
+{
+ ConditionEntriesByCreatureIdMap::const_iterator itr = SpellClickEventConditionStore.find(creatureId);
+ if (itr != SpellClickEventConditionStore.end())
+ {
+ ConditionsByEntryMap::const_iterator i = itr->second.find(spellId);
+ if (i != itr->second.end())
{
- cond = (*i).second;
TC_LOG_DEBUG("condition", "GetConditionsForSpellClickEvent: found conditions for SpellClickEvent entry %u spell %u", creatureId, spellId);
+ return &i->second;
}
}
- return cond;
+ return nullptr;
}
-ConditionList ConditionMgr::GetConditionsForVehicleSpell(uint32 creatureId, uint32 spellId)
+bool ConditionMgr::IsObjectMeetingVehicleSpellConditions(uint32 creatureId, uint32 spellId, Player* player, Unit* vehicle) const
{
- ConditionList cond;
- CreatureSpellConditionContainer::const_iterator itr = VehicleSpellConditionStore.find(creatureId);
+ ConditionEntriesByCreatureIdMap::const_iterator itr = VehicleSpellConditionStore.find(creatureId);
if (itr != VehicleSpellConditionStore.end())
{
- ConditionTypeContainer::const_iterator i = (*itr).second.find(spellId);
- if (i != (*itr).second.end())
+ ConditionsByEntryMap::const_iterator i = itr->second.find(spellId);
+ if (i != itr->second.end())
{
- cond = (*i).second;
TC_LOG_DEBUG("condition", "GetConditionsForVehicleSpell: found conditions for Vehicle entry %u spell %u", creatureId, spellId);
+ ConditionSourceInfo sourceInfo(player, vehicle);
+ return IsObjectMeetToConditions(sourceInfo, i->second);
}
}
- return cond;
+ return true;
}
-ConditionList ConditionMgr::GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType)
+bool ConditionMgr::IsObjectMeetingSmartEventConditions(int32 entryOrGuid, uint32 eventId, uint32 sourceType, Unit* unit, WorldObject* baseObject) const
{
- ConditionList cond;
SmartEventConditionContainer::const_iterator itr = SmartEventConditionStore.find(std::make_pair(entryOrGuid, sourceType));
if (itr != SmartEventConditionStore.end())
{
- ConditionTypeContainer::const_iterator i = (*itr).second.find(eventId + 1);
- if (i != (*itr).second.end())
+ ConditionsByEntryMap::const_iterator i = itr->second.find(eventId + 1);
+ if (i != itr->second.end())
{
- cond = (*i).second;
TC_LOG_DEBUG("condition", "GetConditionsForSmartEvent: found conditions for Smart Event entry or guid %d eventId %u", entryOrGuid, eventId);
+ ConditionSourceInfo sourceInfo(unit, baseObject);
+ return IsObjectMeetToConditions(sourceInfo, i->second);
}
}
- return cond;
+ return true;
}
-ConditionList ConditionMgr::GetConditionsForNpcVendorEvent(uint32 creatureId, uint32 itemId)
+bool ConditionMgr::IsObjectMeetingVendorItemConditions(uint32 creatureId, uint32 itemId, Player* player, Creature* vendor) const
{
- ConditionList cond;
- NpcVendorConditionContainer::const_iterator itr = NpcVendorConditionContainerStore.find(creatureId);
+ ConditionEntriesByCreatureIdMap::const_iterator itr = NpcVendorConditionContainerStore.find(creatureId);
if (itr != NpcVendorConditionContainerStore.end())
{
- ConditionTypeContainer::const_iterator i = (*itr).second.find(itemId);
+ ConditionsByEntryMap::const_iterator i = (*itr).second.find(itemId);
if (i != (*itr).second.end())
{
- cond = (*i).second;
TC_LOG_DEBUG("condition", "GetConditionsForNpcVendorEvent: found conditions for creature entry %u item %u", creatureId, itemId);
+ ConditionSourceInfo sourceInfo(player, vendor);
+ return IsObjectMeetToConditions(sourceInfo, i->second);
}
}
- return cond;
+ return true;
}
void ConditionMgr::LoadConditions(bool isReload)
@@ -950,7 +969,7 @@ void ConditionMgr::LoadConditions(bool isReload)
cond->NegativeCondition = fields[10].GetBool();
cond->ErrorType = fields[11].GetUInt32();
cond->ErrorTextId = fields[12].GetUInt32();
- cond->ScriptId = sObjectMgr->GetScriptId(fields[13].GetCString());
+ cond->ScriptId = sObjectMgr->GetScriptId(fields[13].GetString());
if (iConditionTypeOrReference >= 0)
cond->ConditionType = ConditionTypes(iConditionTypeOrReference);
@@ -995,14 +1014,8 @@ void ConditionMgr::LoadConditions(bool isReload)
if (iSourceTypeOrReferenceId < 0)//it is a reference template
{
- uint32 uRefId = abs(iSourceTypeOrReferenceId);
- if (ConditionReferenceStore.find(uRefId) == ConditionReferenceStore.end())//make sure we have a list for our conditions, based on reference id
- {
- ConditionList mCondList;
- ConditionReferenceStore[uRefId] = mCondList;
- }
- ConditionReferenceStore[uRefId].push_back(cond);//add to reference storage
- count++;
+ ConditionReferenceStore[std::abs(iSourceTypeOrReferenceId)].push_back(cond);//add to reference storage
+ ++count;
continue;
}//end of reference templates
@@ -1138,20 +1151,6 @@ void ConditionMgr::LoadConditions(bool isReload)
}
//handle not grouped conditions
- //make sure we have a storage list for our SourceType
- if (ConditionStore.find(cond->SourceType) == ConditionStore.end())
- {
- ConditionTypeContainer mTypeMap;
- ConditionStore[cond->SourceType] = mTypeMap;//add new empty list for SourceType
- }
-
- //make sure we have a condition list for our SourceType's entry
- if (ConditionStore[cond->SourceType].find(cond->SourceEntry) == ConditionStore[cond->SourceType].end())
- {
- ConditionList mCondList;
- ConditionStore[cond->SourceType][cond->SourceEntry] = mCondList;
- }
-
//add new Condition to storage based on Type/Entry
ConditionStore[cond->SourceType][cond->SourceEntry].push_back(cond);
++count;
@@ -1161,7 +1160,7 @@ void ConditionMgr::LoadConditions(bool isReload)
TC_LOG_INFO("server.loading", ">> Loaded %u conditions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
}
-bool ConditionMgr::addToLootTemplate(Condition* cond, LootTemplate* loot)
+bool ConditionMgr::addToLootTemplate(Condition* cond, LootTemplate* loot) const
{
if (!loot)
{
@@ -1176,7 +1175,7 @@ bool ConditionMgr::addToLootTemplate(Condition* cond, LootTemplate* loot)
return false;
}
-bool ConditionMgr::addToGossipMenus(Condition* cond)
+bool ConditionMgr::addToGossipMenus(Condition* cond) const
{
GossipMenusMapBoundsNonConst pMenuBounds = sObjectMgr->GetGossipMenusMapBoundsNonConst(cond->SourceGroup);
@@ -1196,7 +1195,7 @@ bool ConditionMgr::addToGossipMenus(Condition* cond)
return false;
}
-bool ConditionMgr::addToGossipMenuItems(Condition* cond)
+bool ConditionMgr::addToGossipMenuItems(Condition* cond) const
{
GossipMenuItemsMapBoundsNonConst pMenuItemBounds = sObjectMgr->GetGossipMenuItemsMapBoundsNonConst(cond->SourceGroup);
if (pMenuItemBounds.first != pMenuItemBounds.second)
@@ -1215,7 +1214,7 @@ bool ConditionMgr::addToGossipMenuItems(Condition* cond)
return false;
}
-bool ConditionMgr::addToSpellImplicitTargetConditions(Condition* cond)
+bool ConditionMgr::addToSpellImplicitTargetConditions(Condition* cond) const
{
uint32 conditionEffMask = cond->SourceGroup;
SpellInfo* spellInfo = const_cast<SpellInfo*>(sSpellMgr->EnsureSpellInfo(cond->SourceEntry));
@@ -1236,9 +1235,9 @@ bool ConditionMgr::addToSpellImplicitTargetConditions(Condition* cond)
continue;
// build new shared mask with found effect
- uint32 sharedMask = (1 << i);
- ConditionList* cmp = spellInfo->Effects[i].ImplicitTargetConditions;
- for (uint8 effIndex = i+1; effIndex < MAX_SPELL_EFFECTS; ++effIndex)
+ uint32 sharedMask = 1 << i;
+ ConditionContainer* cmp = spellInfo->Effects[i].ImplicitTargetConditions;
+ for (uint8 effIndex = i + 1; effIndex < MAX_SPELL_EFFECTS; ++effIndex)
{
if (spellInfo->Effects[effIndex].ImplicitTargetConditions == cmp)
sharedMask |= 1 << effIndex;
@@ -1260,7 +1259,7 @@ bool ConditionMgr::addToSpellImplicitTargetConditions(Condition* cond)
return false;
// get shared data
- ConditionList* sharedList = spellInfo->Effects[firstEffIndex].ImplicitTargetConditions;
+ ConditionContainer* sharedList = spellInfo->Effects[firstEffIndex].ImplicitTargetConditions;
// there's already data entry for that sharedMask
if (sharedList)
@@ -1277,7 +1276,7 @@ bool ConditionMgr::addToSpellImplicitTargetConditions(Condition* cond)
else
{
// add new list, create new shared mask
- sharedList = new ConditionList();
+ sharedList = new ConditionContainer();
bool assigned = false;
for (uint8 i = firstEffIndex; i < MAX_SPELL_EFFECTS; ++i)
{
@@ -1298,7 +1297,7 @@ bool ConditionMgr::addToSpellImplicitTargetConditions(Condition* cond)
return true;
}
-bool ConditionMgr::isSourceTypeValid(Condition* cond)
+bool ConditionMgr::isSourceTypeValid(Condition* cond) const
{
if (cond->SourceType == CONDITION_SOURCE_TYPE_NONE || cond->SourceType >= CONDITION_SOURCE_TYPE_MAX)
{
@@ -1650,7 +1649,7 @@ bool ConditionMgr::isSourceTypeValid(Condition* cond)
return true;
}
-bool ConditionMgr::isConditionTypeValid(Condition* cond)
+bool ConditionMgr::isConditionTypeValid(Condition* cond) const
{
if (cond->ConditionType == CONDITION_NONE || cond->ConditionType >= CONDITION_MAX)
{
@@ -2113,81 +2112,50 @@ void ConditionMgr::LogUselessConditionValue(Condition* cond, uint8 index, uint32
void ConditionMgr::Clean()
{
for (ConditionReferenceContainer::iterator itr = ConditionReferenceStore.begin(); itr != ConditionReferenceStore.end(); ++itr)
- {
- for (ConditionList::const_iterator it = itr->second.begin(); it != itr->second.end(); ++it)
+ for (ConditionContainer::const_iterator it = itr->second.begin(); it != itr->second.end(); ++it)
delete *it;
- itr->second.clear();
- }
ConditionReferenceStore.clear();
- for (ConditionContainer::iterator itr = ConditionStore.begin(); itr != ConditionStore.end(); ++itr)
+ for (uint32 i = 0; i < CONDITION_SOURCE_TYPE_MAX; ++i)
{
- for (ConditionTypeContainer::iterator it = itr->second.begin(); it != itr->second.end(); ++it)
- {
- for (ConditionList::const_iterator i = it->second.begin(); i != it->second.end(); ++i)
- delete *i;
- it->second.clear();
- }
- itr->second.clear();
- }
+ for (ConditionsByEntryMap::iterator it = ConditionStore[i].begin(); it != ConditionStore[i].end(); ++it)
+ for (ConditionContainer::const_iterator itr = it->second.begin(); itr != it->second.end(); ++itr)
+ delete *itr;
- ConditionStore.clear();
+ ConditionStore[i].clear();
+ }
- for (CreatureSpellConditionContainer::iterator itr = VehicleSpellConditionStore.begin(); itr != VehicleSpellConditionStore.end(); ++itr)
- {
- for (ConditionTypeContainer::iterator it = itr->second.begin(); it != itr->second.end(); ++it)
- {
- for (ConditionList::const_iterator i = it->second.begin(); i != it->second.end(); ++i)
+ for (ConditionEntriesByCreatureIdMap::iterator itr = VehicleSpellConditionStore.begin(); itr != VehicleSpellConditionStore.end(); ++itr)
+ for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it)
+ for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i)
delete *i;
- it->second.clear();
- }
- itr->second.clear();
- }
VehicleSpellConditionStore.clear();
for (SmartEventConditionContainer::iterator itr = SmartEventConditionStore.begin(); itr != SmartEventConditionStore.end(); ++itr)
- {
- for (ConditionTypeContainer::iterator it = itr->second.begin(); it != itr->second.end(); ++it)
- {
- for (ConditionList::const_iterator i = it->second.begin(); i != it->second.end(); ++i)
+ for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it)
+ for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i)
delete *i;
- it->second.clear();
- }
- itr->second.clear();
- }
SmartEventConditionStore.clear();
- for (CreatureSpellConditionContainer::iterator itr = SpellClickEventConditionStore.begin(); itr != SpellClickEventConditionStore.end(); ++itr)
- {
- for (ConditionTypeContainer::iterator it = itr->second.begin(); it != itr->second.end(); ++it)
- {
- for (ConditionList::const_iterator i = it->second.begin(); i != it->second.end(); ++i)
+ for (ConditionEntriesByCreatureIdMap::iterator itr = SpellClickEventConditionStore.begin(); itr != SpellClickEventConditionStore.end(); ++itr)
+ for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it)
+ for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i)
delete *i;
- it->second.clear();
- }
- itr->second.clear();
- }
SpellClickEventConditionStore.clear();
- for (NpcVendorConditionContainer::iterator itr = NpcVendorConditionContainerStore.begin(); itr != NpcVendorConditionContainerStore.end(); ++itr)
- {
- for (ConditionTypeContainer::iterator it = itr->second.begin(); it != itr->second.end(); ++it)
- {
- for (ConditionList::const_iterator i = it->second.begin(); i != it->second.end(); ++i)
+ for (ConditionEntriesByCreatureIdMap::iterator itr = NpcVendorConditionContainerStore.begin(); itr != NpcVendorConditionContainerStore.end(); ++itr)
+ for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it)
+ for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i)
delete *i;
- it->second.clear();
- }
- itr->second.clear();
- }
NpcVendorConditionContainerStore.clear();
// this is a BIG hack, feel free to fix it if you can figure out the ConditionMgr ;)
- for (std::list<Condition*>::const_iterator itr = AllocatedMemoryStore.begin(); itr != AllocatedMemoryStore.end(); ++itr)
+ for (std::vector<Condition*>::const_iterator itr = AllocatedMemoryStore.begin(); itr != AllocatedMemoryStore.end(); ++itr)
delete *itr;
AllocatedMemoryStore.clear();
diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h
index 27983782bdc..43454aba049 100644
--- a/src/server/game/Conditions/ConditionMgr.h
+++ b/src/server/game/Conditions/ConditionMgr.h
@@ -19,12 +19,9 @@
#ifndef TRINITY_CONDITIONMGR_H
#define TRINITY_CONDITIONMGR_H
-#include "Define.h"
-#include "Errors.h"
-#include <list>
-#include <map>
-#include <string>
+#include "Common.h"
+class Creature;
class Player;
class Unit;
class WorldObject;
@@ -62,7 +59,7 @@ enum ConditionTypes
CONDITION_PHASEMASK = 26, // phasemask 0 0 true if object is in phasemask
CONDITION_LEVEL = 27, // level ComparisonType 0 true if unit's level is equal to param1 (param2 can modify the statement)
CONDITION_QUEST_COMPLETE = 28, // quest_id 0 0 true if player has quest_id with all objectives complete, but not yet rewarded
- CONDITION_NEAR_CREATURE = 29, // creature entry distance 0 true if there is a creature of entry in range
+ CONDITION_NEAR_CREATURE = 29, // creature entry distance dead (0/1) true if there is a creature of entry in range
CONDITION_NEAR_GAMEOBJECT = 30, // gameobject entry distance 0 true if there is a gameobject of entry in range
CONDITION_OBJECT_ENTRY_GUID = 31, // TypeID entry guid true if object is type TypeID and the entry is 0 or matches entry of the object or matches guid of the object
CONDITION_TYPE_MASK = 32, // TypeMask 0 0 true if object is type object's TypeMask matches provided TypeMask
@@ -162,13 +159,13 @@ enum MaxConditionTargets
struct ConditionSourceInfo
{
WorldObject* mConditionTargets[MAX_CONDITION_TARGETS]; // an array of targets available for conditions
- Condition* mLastFailedCondition;
- ConditionSourceInfo(WorldObject* target0, WorldObject* target1 = NULL, WorldObject* target2 = NULL)
+ Condition const* mLastFailedCondition;
+ ConditionSourceInfo(WorldObject* target0, WorldObject* target1 = nullptr, WorldObject* target2 = nullptr)
{
mConditionTargets[0] = target0;
mConditionTargets[1] = target1;
mConditionTargets[2] = target2;
- mLastFailedCondition = NULL;
+ mLastFailedCondition = nullptr;
}
};
@@ -209,22 +206,20 @@ struct Condition
NegativeCondition = false;
}
- bool Meets(ConditionSourceInfo& sourceInfo);
- uint32 GetSearcherTypeMaskForCondition();
+ bool Meets(ConditionSourceInfo& sourceInfo) const;
+ uint32 GetSearcherTypeMaskForCondition() const;
bool isLoaded() const { return ConditionType > CONDITION_NONE || ReferenceId; }
- uint32 GetMaxAvailableConditionTargets();
+ uint32 GetMaxAvailableConditionTargets() const;
std::string ToString(bool ext = false) const; /// For logging purpose
};
-typedef std::list<Condition*> ConditionList;
-typedef std::map<uint32, ConditionList> ConditionTypeContainer;
-typedef std::map<ConditionSourceType, ConditionTypeContainer> ConditionContainer;
-typedef std::map<uint32, ConditionTypeContainer> CreatureSpellConditionContainer;
-typedef std::map<uint32, ConditionTypeContainer> NpcVendorConditionContainer;
-typedef std::map<std::pair<int32, uint32 /*SAI source_type*/>, ConditionTypeContainer> SmartEventConditionContainer;
-
-typedef std::map<uint32, ConditionList> ConditionReferenceContainer;//only used for references
+typedef std::vector<Condition*> ConditionContainer;
+typedef std::unordered_map<uint32 /*SourceEntry*/, ConditionContainer> ConditionsByEntryMap;
+typedef std::array<ConditionsByEntryMap, CONDITION_SOURCE_TYPE_MAX> ConditionEntriesByTypeArray;
+typedef std::unordered_map<uint32, ConditionsByEntryMap> ConditionEntriesByCreatureIdMap;
+typedef std::unordered_map<std::pair<int32, uint32 /*SAI source_type*/>, ConditionsByEntryMap> SmartEventConditionContainer;
+typedef std::unordered_map<uint32, ConditionContainer> ConditionReferenceContainer;//only used for references
class ConditionMgr
{
@@ -240,20 +235,22 @@ class ConditionMgr
}
void LoadConditions(bool isReload = false);
- bool isConditionTypeValid(Condition* cond);
- ConditionList GetConditionReferences(uint32 refId);
+ bool isConditionTypeValid(Condition* cond) const;
- uint32 GetSearcherTypeMaskForConditionList(ConditionList const& conditions);
- bool IsObjectMeetToConditions(WorldObject* object, ConditionList const& conditions);
- bool IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionList const& conditions);
- bool IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionList const& conditions);
+ uint32 GetSearcherTypeMaskForConditionList(ConditionContainer const& conditions) const;
+ bool IsObjectMeetToConditions(WorldObject* object, ConditionContainer const& conditions) const;
+ bool IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionContainer const& conditions) const;
+ bool IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions) const;
static bool CanHaveSourceGroupSet(ConditionSourceType sourceType);
static bool CanHaveSourceIdSet(ConditionSourceType sourceType);
- ConditionList GetConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry);
- ConditionList GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId);
- ConditionList GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType);
- ConditionList GetConditionsForVehicleSpell(uint32 creatureId, uint32 spellId);
- ConditionList GetConditionsForNpcVendorEvent(uint32 creatureId, uint32 itemId);
+ bool IsObjectMeetingNotGroupedConditions(ConditionSourceType sourceType, uint32 entry, ConditionSourceInfo& sourceInfo) const;
+ bool IsObjectMeetingNotGroupedConditions(ConditionSourceType sourceType, uint32 entry, WorldObject* target0, WorldObject* target1 = nullptr, WorldObject* target2 = nullptr) const;
+ bool HasConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry) const;
+ bool IsObjectMeetingSpellClickConditions(uint32 creatureId, uint32 spellId, WorldObject* clicker, WorldObject* target) const;
+ ConditionContainer const* GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId) const;
+ bool IsObjectMeetingVehicleSpellConditions(uint32 creatureId, uint32 spellId, Player* player, Unit* vehicle) const;
+ bool IsObjectMeetingSmartEventConditions(int32 entryOrGuid, uint32 eventId, uint32 sourceType, Unit* unit, WorldObject* baseObject) const;
+ bool IsObjectMeetingVendorItemConditions(uint32 creatureId, uint32 itemId, Player* player, Creature* vendor) const;
struct ConditionTypeInfo
{
@@ -262,28 +259,28 @@ class ConditionMgr
bool HasConditionValue2;
bool HasConditionValue3;
};
- static char const* StaticSourceTypeData[CONDITION_SOURCE_TYPE_MAX];
+ static char const* const StaticSourceTypeData[CONDITION_SOURCE_TYPE_MAX];
static ConditionTypeInfo const StaticConditionTypeData[CONDITION_MAX];
private:
- bool isSourceTypeValid(Condition* cond);
- bool addToLootTemplate(Condition* cond, LootTemplate* loot);
- bool addToGossipMenus(Condition* cond);
- bool addToGossipMenuItems(Condition* cond);
- bool addToSpellImplicitTargetConditions(Condition* cond);
- bool IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionList const& conditions);
+ bool isSourceTypeValid(Condition* cond) const;
+ bool addToLootTemplate(Condition* cond, LootTemplate* loot) const;
+ bool addToGossipMenus(Condition* cond) const;
+ bool addToGossipMenuItems(Condition* cond) const;
+ bool addToSpellImplicitTargetConditions(Condition* cond) const;
+ bool IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions) const;
static void LogUselessConditionValue(Condition* cond, uint8 index, uint32 value);
void Clean(); // free up resources
- std::list<Condition*> AllocatedMemoryStore; // some garbage collection :)
-
- ConditionContainer ConditionStore;
- ConditionReferenceContainer ConditionReferenceStore;
- CreatureSpellConditionContainer VehicleSpellConditionStore;
- CreatureSpellConditionContainer SpellClickEventConditionStore;
- NpcVendorConditionContainer NpcVendorConditionContainerStore;
- SmartEventConditionContainer SmartEventConditionStore;
+ std::vector<Condition*> AllocatedMemoryStore; // some garbage collection :)
+
+ ConditionEntriesByTypeArray ConditionStore;
+ ConditionReferenceContainer ConditionReferenceStore;
+ ConditionEntriesByCreatureIdMap VehicleSpellConditionStore;
+ ConditionEntriesByCreatureIdMap SpellClickEventConditionStore;
+ ConditionEntriesByCreatureIdMap NpcVendorConditionContainerStore;
+ SmartEventConditionContainer SmartEventConditionStore;
};
#define sConditionMgr ConditionMgr::instance()
diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp
index d9061dfb106..806d9d46763 100644
--- a/src/server/game/DataStores/DBCStores.cpp
+++ b/src/server/game/DataStores/DBCStores.cpp
@@ -25,6 +25,7 @@
#include "Timer.h"
#include "ObjectDefines.h"
+#include <boost/regex.hpp>
#include <map>
typedef std::map<uint16, uint32> AreaFlagByAreaID;
@@ -140,6 +141,12 @@ MapDifficultyMap sMapDifficultyMap;
DBCStorage <MovieEntry> sMovieStore(MovieEntryfmt);
+DBCStorage<NamesProfanityEntry> sNamesProfanityStore(NamesProfanityEntryfmt);
+DBCStorage<NamesReservedEntry> sNamesReservedStore(NamesReservedEntryfmt);
+typedef std::array<std::vector<boost::regex>, TOTAL_LOCALES> NameValidationRegexContainer;
+NameValidationRegexContainer NamesProfaneValidators;
+NameValidationRegexContainer NamesReservedValidators;
+
DBCStorage <OverrideSpellDataEntry> sOverrideSpellDataStore(OverrideSpellDatafmt);
DBCStorage <PowerDisplayEntry> sPowerDisplayStore(PowerDisplayfmt);
@@ -163,7 +170,6 @@ DBCStorage <SoundEntriesEntry> sSoundEntriesStore(SoundEntriesfmt);
DBCStorage <SpellItemEnchantmentEntry> sSpellItemEnchantmentStore(SpellItemEnchantmentfmt);
DBCStorage <SpellItemEnchantmentConditionEntry> sSpellItemEnchantmentConditionStore(SpellItemEnchantmentConditionfmt);
DBCStorage <SpellEntry> sSpellStore(SpellEntryfmt);
-SpellCategoryStore sSpellsByCategoryStore;
PetFamilySpellsStore sPetFamilySpellsStore;
DBCStorage <SpellCastTimesEntry> sSpellCastTimesStore(SpellCastTimefmt);
@@ -402,6 +408,37 @@ void LoadDBCStores(const std::string& dataPath)
LoadDBC(availableDbcLocales, bad_dbc_files, sMovieStore, dbcPath, "Movie.dbc");
+ LoadDBC(availableDbcLocales, bad_dbc_files, sNamesProfanityStore, dbcPath, "NamesProfanity.dbc");
+ LoadDBC(availableDbcLocales, bad_dbc_files, sNamesReservedStore, dbcPath, "NamesReserved.dbc");
+ for (uint32 i = 0; i < sNamesProfanityStore.GetNumRows(); ++i)
+ {
+ NamesProfanityEntry const* namesProfanity = sNamesProfanityStore.LookupEntry(i);
+ if (!namesProfanity)
+ continue;
+
+ ASSERT(namesProfanity->Language < TOTAL_LOCALES || namesProfanity->Language == -1);
+ if (namesProfanity->Language != -1)
+ NamesProfaneValidators[namesProfanity->Language].emplace_back(namesProfanity->Name, boost::regex::perl | boost::regex::icase | boost::regex::optimize);
+ else
+ for (uint32 i = 0; i < TOTAL_LOCALES; ++i)
+ NamesProfaneValidators[i].emplace_back(namesProfanity->Name, boost::regex::perl | boost::regex::icase | boost::regex::optimize);
+ }
+
+ for (uint32 i = 0; i < sNamesReservedStore.GetNumRows(); ++i)
+ {
+ NamesReservedEntry const* namesReserved = sNamesReservedStore.LookupEntry(i);
+ if (!namesReserved)
+ continue;
+
+ ASSERT(namesReserved->Language < TOTAL_LOCALES || namesReserved->Language == -1);
+ if (namesReserved->Language != -1)
+ NamesReservedValidators[namesReserved->Language].emplace_back(namesReserved->Name, boost::regex::perl | boost::regex::icase | boost::regex::optimize);
+ else
+ for (uint32 i = 0; i < TOTAL_LOCALES; ++i)
+ NamesReservedValidators[i].emplace_back(namesReserved->Name, boost::regex::perl | boost::regex::icase | boost::regex::optimize);
+ }
+
+
LoadDBC(availableDbcLocales, bad_dbc_files, sOverrideSpellDataStore, dbcPath, "OverrideSpellData.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sPowerDisplayStore, dbcPath, "PowerDisplay.dbc");
@@ -430,12 +467,6 @@ void LoadDBCStores(const std::string& dataPath)
LoadDBC(availableDbcLocales, bad_dbc_files, sSkillTiersStore, dbcPath, "SkillTiers.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sSoundEntriesStore, dbcPath, "SoundEntries.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sSpellStore, dbcPath, "Spell.dbc", &CustomSpellEntryfmt, &CustomSpellEntryIndex);
- for (uint32 i = 1; i < sSpellStore.GetNumRows(); ++i)
- {
- SpellEntry const* spell = sSpellStore.LookupEntry(i);
- if (spell && spell->Category)
- sSpellsByCategoryStore[spell->Category].insert(i);
- }
for (uint32 j = 0; j < sSkillLineAbilityStore.GetNumRows(); ++j)
{
@@ -570,7 +601,7 @@ void LoadDBCStores(const std::string& dataPath)
// fill data
for (uint32 i = 1; i < sTaxiPathNodeStore.GetNumRows(); ++i)
if (TaxiPathNodeEntry const* entry = sTaxiPathNodeStore.LookupEntry(i))
- sTaxiPathNodesByPath[entry->PathID].set(entry->NodeIndex, entry);
+ sTaxiPathNodesByPath[entry->PathID][entry->NodeIndex] = entry;
// Initialize global taxinodes mask
// include existed nodes that have at least single not spell base (scripted) path
@@ -1012,3 +1043,20 @@ SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, u
return NULL;
}
+
+ResponseCodes ValidateName(std::string const& name, LocaleConstant locale)
+{
+ if (locale >= TOTAL_LOCALES)
+ return RESPONSE_FAILURE;
+
+ for (boost::regex const& regex : NamesProfaneValidators[locale])
+ if (boost::regex_search(name, regex))
+ return CHAR_NAME_PROFANE;
+
+ // regexes at TOTAL_LOCALES are loaded from NamesReserved which is not locale specific
+ for (boost::regex const& regex : NamesReservedValidators[locale])
+ if (boost::regex_search(name, regex))
+ return CHAR_NAME_RESERVED;
+
+ return CHAR_NAME_SUCCESS;
+}
diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h
index d955e9581ab..2def7901244 100644
--- a/src/server/game/DataStores/DBCStores.h
+++ b/src/server/game/DataStores/DBCStores.h
@@ -22,6 +22,7 @@
#include "Common.h"
#include "DBCStore.h"
#include "DBCStructure.h"
+#include "SharedDefines.h"
#include <list>
@@ -79,6 +80,8 @@ typedef std::unordered_multimap<uint32, SkillRaceClassInfoEntry const*> SkillRac
typedef std::pair<SkillRaceClassInfoMap::iterator, SkillRaceClassInfoMap::iterator> SkillRaceClassInfoBounds;
SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_);
+ResponseCodes ValidateName(std::string const& name, LocaleConstant locale);
+
extern DBCStorage <AchievementEntry> sAchievementStore;
extern DBCStorage <AchievementCriteriaEntry> sAchievementCriteriaStore;
extern DBCStorage <AreaTableEntry> sAreaStore;// recommend access using functions
@@ -165,7 +168,6 @@ extern DBCStorage <SpellDurationEntry> sSpellDurationStore;
extern DBCStorage <SpellFocusObjectEntry> sSpellFocusObjectStore;
extern DBCStorage <SpellItemEnchantmentEntry> sSpellItemEnchantmentStore;
extern DBCStorage <SpellItemEnchantmentConditionEntry> sSpellItemEnchantmentConditionStore;
-extern SpellCategoryStore sSpellsByCategoryStore;
extern PetFamilySpellsStore sPetFamilySpellsStore;
extern DBCStorage <SpellRadiusEntry> sSpellRadiusStore;
extern DBCStorage <SpellRangeEntry> sSpellRangeStore;
diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h
index c680494cd72..dc4ad55d9c2 100644
--- a/src/server/game/DataStores/DBCStructure.h
+++ b/src/server/game/DataStores/DBCStructure.h
@@ -21,14 +21,8 @@
#include "Common.h"
#include "DBCEnums.h"
-#include "Define.h"
-#include "Path.h"
#include "Util.h"
-#include <map>
-#include <set>
-#include <vector>
-
// Structures using to access raw DBC data and required packing to portability
#pragma pack(push, 1)
@@ -1410,6 +1404,20 @@ struct MovieEntry
//uint32 unk2; // 2 always 100
};
+struct NamesProfanityEntry
+{
+ //uint32 ID; // 0
+ char const* Name; // 1
+ int32 Language; // 2
+};
+
+struct NamesReservedEntry
+{
+ //uint32 ID; // 0
+ char const* Name; // 1
+ int32 Language; // 2
+};
+
#define MAX_OVERRIDE_SPELL 10
struct OverrideSpellDataEntry
@@ -1643,10 +1651,8 @@ struct SpellEntry
uint32 AttributesEx5; // 9 m_attributesExE
uint32 AttributesEx6; // 10 m_attributesExF
uint32 AttributesEx7; // 11 m_attributesExG
- uint32 Stances; // 12 m_shapeshiftMask
- // uint32 unk_320_2; // 13 3.2.0
- uint32 StancesNot; // 14 m_shapeshiftExclude
- // uint32 unk_320_3; // 15 3.2.0
+ uint32 Stances[2]; // 12 m_shapeshiftMask
+ uint32 StancesNot[2]; // 14 m_shapeshiftExclude
uint32 Targets; // 16 m_targets
uint32 TargetCreatureType; // 17 m_targetCreatureType
uint32 RequiresSpellFocus; // 18 m_requiresSpellFocus
@@ -1742,8 +1748,6 @@ struct SpellEntry
//uint32 SpellDifficultyId; // 233 3.3.0
};
-typedef std::set<uint32> SpellCategorySet;
-typedef std::map<uint32, SpellCategorySet > SpellCategoryStore;
typedef std::set<uint32> PetFamilySpellsSet;
typedef std::map<uint32, PetFamilySpellsSet > PetFamilySpellsStore;
@@ -2211,15 +2215,7 @@ struct TaxiPathBySourceAndDestination
typedef std::map<uint32, TaxiPathBySourceAndDestination> TaxiPathSetForSource;
typedef std::map<uint32, TaxiPathSetForSource> TaxiPathSetBySource;
-struct TaxiPathNodePtr
-{
- TaxiPathNodePtr() : i_ptr(NULL) { }
- TaxiPathNodePtr(TaxiPathNodeEntry const* ptr) : i_ptr(ptr) { }
- TaxiPathNodeEntry const* i_ptr;
- operator TaxiPathNodeEntry const& () const { return *i_ptr; }
-};
-
-typedef Path<TaxiPathNodePtr, TaxiPathNodeEntry const> TaxiPathNodeList;
+typedef std::vector<TaxiPathNodeEntry const*> TaxiPathNodeList;
typedef std::vector<TaxiPathNodeList> TaxiPathNodesByPath;
#define TaxiMaskSize 14
diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h
index 5c24e6f938a..c75c0fff625 100644
--- a/src/server/game/DataStores/DBCfmt.h
+++ b/src/server/game/DataStores/DBCfmt.h
@@ -88,6 +88,8 @@ char const MailTemplateEntryfmt[] = "nxxxxxxxxxxxxxxxxxssssssssssssssssx";
char const MapEntryfmt[] = "nxiixssssssssssssssssxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixiffxiii";
char const MapDifficultyEntryfmt[] = "diisxxxxxxxxxxxxxxxxiix";
char const MovieEntryfmt[] = "nxx";
+char const NamesProfanityEntryfmt[] = "dsi";
+char const NamesReservedEntryfmt[] = "dsi";
char const OverrideSpellDatafmt[] = "niiiiiiiiiix";
char const QuestFactionRewardfmt[] = "niiiiiiiiii";
char const QuestSortEntryfmt[] = "nxxxxxxxxxxxxxxxxx";
@@ -108,7 +110,7 @@ char const SpellDifficultyfmt[] = "niiii";
const std::string CustomSpellDifficultyfmt = "ppppp";
const std::string CustomSpellDifficultyIndex = "id";
char const SpellDurationfmt[] = "niii";
-char const SpellEntryfmt[] = "niiiiiiiiiiiixixiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifxiiiiiiiiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiifffiiiiiiiiiiiiixssssssssssssssssxssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiiiiiiiiiiixfffxxxiiiiixxfffxx";
+char const SpellEntryfmt[] = "niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifxiiiiiiiiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiifffiiiiiiiiiiiiixssssssssssssssssxssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiiiiiiiiiiixfffxxxiiiiixxfffxx";
const std::string CustomSpellEntryfmt = "papppppppppppapapaaaaaaaaaaapaaapapppppppaaaaapaapaaaaaaaaaaaaaaaaaappppppppppppppppppppppppppppppppppppaaappppppppppppaaapppppppppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaappppppppapppaaaaappaaaaaaa";
const std::string CustomSpellEntryIndex = "Id";
char const SpellFocusObjectfmt[] = "nxxxxxxxxxxxxxxxxx";
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 59eedaaffed..250f6e07718 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -58,7 +58,7 @@ void LFGMgr::_LoadFromDB(Field* fields, ObjectGuid guid)
if (!guid.IsGroup())
return;
- SetLeader(guid, ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32()));
+ SetLeader(guid, ObjectGuid(HighGuid::Player, fields[0].GetUInt32()));
uint32 dungeon = fields[17].GetUInt32();
uint8 state = fields[18].GetUInt8();
@@ -585,7 +585,7 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, const
@param[in] guid Player or group guid
*/
-void LFGMgr::LeaveLfg(ObjectGuid guid)
+void LFGMgr::LeaveLfg(ObjectGuid guid, bool disconnected)
{
ObjectGuid gguid = guid.IsGroup() ? guid : GetGroup(guid);
@@ -646,7 +646,7 @@ void LFGMgr::LeaveLfg(ObjectGuid guid)
break;
case LFG_STATE_DUNGEON:
case LFG_STATE_FINISHED_DUNGEON:
- if (guid != gguid) // Player
+ if (guid != gguid && !disconnected) // Player
SetState(guid, LFG_STATE_NONE);
break;
}
diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h
index fda9a8b7ce9..90fbc36a114 100644
--- a/src/server/game/DungeonFinding/LFGMgr.h
+++ b/src/server/game/DungeonFinding/LFGMgr.h
@@ -399,7 +399,7 @@ class LFGMgr
/// Join Lfg with selected roles, dungeons and comment
void JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, std::string const& comment);
/// Leaves lfg
- void LeaveLfg(ObjectGuid guid);
+ void LeaveLfg(ObjectGuid guid, bool disconnected = false);
// LfgQueue
/// Get last lfg state (NONE, DUNGEON or FINISHED_DUNGEON)
diff --git a/src/server/game/DungeonFinding/LFGQueue.cpp b/src/server/game/DungeonFinding/LFGQueue.cpp
index d2140a96a46..86b010a9ace 100644
--- a/src/server/game/DungeonFinding/LFGQueue.cpp
+++ b/src/server/game/DungeonFinding/LFGQueue.cpp
@@ -72,7 +72,7 @@ char const* GetCompatibleString(LfgCompatibility compatibles)
case LFG_INCOMPATIBLES_NO_ROLES:
return "Incompatible roles";
case LFG_INCOMPATIBLES_TOO_MUCH_PLAYERS:
- return "Too much players";
+ return "Too many players";
case LFG_INCOMPATIBLES_WRONG_GROUP_SIZE:
return "Wrong group size";
default:
@@ -80,7 +80,7 @@ char const* GetCompatibleString(LfgCompatibility compatibles)
}
}
-std::string LFGQueue::GetDetailedMatchRoles(GuidList const& check)
+std::string LFGQueue::GetDetailedMatchRoles(GuidList const& check) const
{
if (check.empty())
return "";
@@ -92,31 +92,25 @@ std::string LFGQueue::GetDetailedMatchRoles(GuidList const& check)
GuidSet::const_iterator it = guids.begin();
o << it->GetRawValue();
- LfgQueueDataContainer::iterator itQueue = QueueDataStore.find(*it);
- if (itQueue == QueueDataStore.end())
- {
- TC_LOG_ERROR("lfg.queue.data.details", "Queue data not found for [%s]", it->ToString().c_str());
- o << ' ' << GetRolesString(PLAYER_ROLE_NONE);
- }
- else
+ LfgQueueDataContainer::const_iterator itQueue = QueueDataStore.find(*it);
+ if (itQueue != QueueDataStore.end())
{
// skip leader flag, log only dps/tank/healer
- o << ' ' << GetRolesString(itQueue->second.roles[*it] & uint8(~PLAYER_ROLE_LEADER));
+ auto role = itQueue->second.roles.find(*it);
+ if (role != itQueue->second.roles.end())
+ o << ' ' << GetRolesString(itQueue->second.roles.at(*it) & uint8(~PLAYER_ROLE_LEADER));
}
for (++it; it != guids.end(); ++it)
{
o << '|' << it->GetRawValue();
itQueue = QueueDataStore.find(*it);
- if (itQueue == QueueDataStore.end())
- {
- TC_LOG_ERROR("lfg.queue.data.details", "Queue data not found for [%s]", it->ToString().c_str());
- o << ' ' << GetRolesString(PLAYER_ROLE_NONE);
- }
- else
+ if (itQueue != QueueDataStore.end())
{
// skip leader flag, log only dps/tank/healer
- o << ' ' << GetRolesString(itQueue->second.roles[*it] & uint8(~PLAYER_ROLE_LEADER));
+ auto role = itQueue->second.roles.find(*it);
+ if (role != itQueue->second.roles.end())
+ o << ' ' << GetRolesString(itQueue->second.roles.at(*it) & uint8(~PLAYER_ROLE_LEADER));
}
}
@@ -438,7 +432,7 @@ LfgCompatibility LFGQueue::CheckCompatibility(GuidList check)
if (numPlayers > MAXGROUPSIZE)
{
- TC_LOG_DEBUG("lfg.queue.match.compatibility.check", "Guids: (%s) Too much players (%u)", GetDetailedMatchRoles(check).c_str(), numPlayers);
+ TC_LOG_DEBUG("lfg.queue.match.compatibility.check", "Guids: (%s) Too many players (%u)", GetDetailedMatchRoles(check).c_str(), numPlayers);
SetCompatibles(strGuids, LFG_INCOMPATIBLES_TOO_MUCH_PLAYERS);
return LFG_INCOMPATIBLES_TOO_MUCH_PLAYERS;
}
@@ -666,7 +660,23 @@ std::string LFGQueue::DumpCompatibleInfo(bool full /* = false */) const
o << "Compatible Map size: " << CompatibleMapStore.size() << "\n";
if (full)
for (LfgCompatibleContainer::const_iterator itr = CompatibleMapStore.begin(); itr != CompatibleMapStore.end(); ++itr)
- o << "(" << itr->first << "): " << GetCompatibleString(itr->second.compatibility) << "\n";
+ {
+ o << "(" << itr->first << "): " << GetCompatibleString(itr->second.compatibility);
+ if (!itr->second.roles.empty())
+ {
+ o << " (";
+ bool first = true;
+ for (const auto& role : itr->second.roles)
+ {
+ if (!first)
+ o << "|";
+ o << role.first.GetRawValue() << " " << GetRolesString(role.second & uint8(~PLAYER_ROLE_LEADER));
+ first = false;
+ }
+ o << ")";
+ }
+ o << "\n";
+ }
return o.str();
}
diff --git a/src/server/game/DungeonFinding/LFGQueue.h b/src/server/game/DungeonFinding/LFGQueue.h
index 77683614d49..f72e9b4fd6d 100644
--- a/src/server/game/DungeonFinding/LFGQueue.h
+++ b/src/server/game/DungeonFinding/LFGQueue.h
@@ -88,7 +88,7 @@ class LFGQueue
public:
// Add/Remove from queue
- std::string GetDetailedMatchRoles(GuidList const& check);
+ std::string GetDetailedMatchRoles(GuidList const& check) const;
void AddToQueue(ObjectGuid guid);
void RemoveFromQueue(ObjectGuid guid);
void AddQueueData(ObjectGuid guid, time_t joinTime, LfgDungeonSet const& dungeons, LfgRolesMap const& rolesMap);
diff --git a/src/server/game/DungeonFinding/LFGScripts.cpp b/src/server/game/DungeonFinding/LFGScripts.cpp
index 852eb7d8c5f..2f0734ff4d0 100644
--- a/src/server/game/DungeonFinding/LFGScripts.cpp
+++ b/src/server/game/DungeonFinding/LFGScripts.cpp
@@ -44,6 +44,8 @@ void LFGPlayerScript::OnLogout(Player* player)
player->GetSession()->SendLfgLfrList(false);
sLFGMgr->LeaveLfg(player->GetGUID());
}
+ else if (player->GetSession()->PlayerDisconnected())
+ sLFGMgr->LeaveLfg(player->GetGUID(), true);
}
void LFGPlayerScript::OnLogin(Player* player, bool /*loginFirst*/)
@@ -87,7 +89,7 @@ void LFGPlayerScript::OnMapChanged(Player* player)
player->RemoveAurasDueToSpell(LFG_SPELL_LUCK_OF_THE_DRAW);
player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, 0.0f);
TC_LOG_ERROR("lfg", "LFGPlayerScript::OnMapChanged, Player %s (%u) is in LFG dungeon map but does not have a valid group! "
- "Teleporting to homebind.", player->GetName().c_str(), player->GetGUIDLow());
+ "Teleporting to homebind.", player->GetName().c_str(), player->GetGUID().GetCounter());
return;
}
diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp
index 192a897238a..ce4e94b8ea6 100644
--- a/src/server/game/Entities/Corpse/Corpse.cpp
+++ b/src/server/game/Entities/Corpse/Corpse.cpp
@@ -22,6 +22,7 @@
#include "UpdateMask.h"
#include "ObjectAccessor.h"
#include "DatabaseEnv.h"
+#include "World.h"
Corpse::Corpse(CorpseType type) : WorldObject(type != CORPSE_BONES), m_type(type)
{
@@ -44,7 +45,7 @@ void Corpse::AddToWorld()
{
///- Register the corpse for guid lookup
if (!IsInWorld())
- sObjectAccessor->AddObject(this);
+ GetMap()->GetObjectsStore().Insert<Corpse>(GetGUID(), this);
Object::AddToWorld();
}
@@ -53,19 +54,18 @@ void Corpse::RemoveFromWorld()
{
///- Remove the corpse from the accessor
if (IsInWorld())
- sObjectAccessor->RemoveObject(this);
+ GetMap()->GetObjectsStore().Remove<Corpse>(GetGUID());
- Object::RemoveFromWorld();
+ WorldObject::RemoveFromWorld();
}
-bool Corpse::Create(uint32 guidlow, Map* map)
+bool Corpse::Create(ObjectGuid::LowType guidlow)
{
- SetMap(map);
- Object::_Create(guidlow, 0, HIGHGUID_CORPSE);
+ Object::_Create(guidlow, 0, HighGuid::Corpse);
return true;
}
-bool Corpse::Create(uint32 guidlow, Player* owner)
+bool Corpse::Create(ObjectGuid::LowType guidlow, Player* owner)
{
ASSERT(owner);
@@ -78,16 +78,12 @@ bool Corpse::Create(uint32 guidlow, Player* owner)
return false;
}
- //we need to assign owner's map for corpse
- //in other way we will get a crash in Corpse::SaveToDB()
- SetMap(owner->GetMap());
+ WorldObject::_Create(guidlow, HighGuid::Corpse, owner->GetPhaseMask());
- WorldObject::_Create(guidlow, HIGHGUID_CORPSE, owner->GetPhaseMask());
-
- SetObjectScale(1);
+ SetObjectScale(1.0f);
SetGuidValue(CORPSE_FIELD_OWNER, owner->GetGUID());
- _gridCoord = Trinity::ComputeGridCoord(GetPositionX(), GetPositionY());
+ _cellCoord = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY());
return true;
}
@@ -100,7 +96,6 @@ void Corpse::SaveToDB()
uint16 index = 0;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CORPSE);
- stmt->setUInt32(index++, GetGUIDLow()); // corpseGuid
stmt->setUInt32(index++, GetOwnerGUID().GetCounter()); // guid
stmt->setFloat (index++, GetPositionX()); // posX
stmt->setFloat (index++, GetPositionY()); // posY
@@ -123,51 +118,32 @@ void Corpse::SaveToDB()
CharacterDatabase.CommitTransaction(trans);
}
-void Corpse::DeleteBonesFromWorld()
+void Corpse::DeleteFromDB(SQLTransaction& trans)
{
- ASSERT(GetType() == CORPSE_BONES);
- Corpse* corpse = ObjectAccessor::GetCorpse(*this, GetGUID());
-
- if (!corpse)
- {
- TC_LOG_ERROR("entities.player", "Bones %u not found in world.", GetGUIDLow());
- return;
- }
-
- AddObjectToRemoveList();
+ DeleteFromDB(GetOwnerGUID(), trans);
}
-void Corpse::DeleteFromDB(SQLTransaction& trans)
+void Corpse::DeleteFromDB(ObjectGuid const& ownerGuid, SQLTransaction& trans)
{
- PreparedStatement* stmt = NULL;
- if (GetType() == CORPSE_BONES)
- {
- // Only specific bones
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CORPSE);
- stmt->setUInt32(0, GetGUIDLow());
- }
- else
- {
- // all corpses (not bones)
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_CORPSES);
- stmt->setUInt32(0, GetOwnerGUID().GetCounter());
- }
- trans->Append(stmt);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CORPSE);
+ stmt->setUInt32(0, ownerGuid.GetCounter());
+ CharacterDatabase.ExecuteOrAppend(trans, stmt);
}
-bool Corpse::LoadCorpseFromDB(uint32 guid, Field* fields)
+bool Corpse::LoadCorpseFromDB(ObjectGuid::LowType guid, Field* fields)
{
- // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
- // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, corpseGuid, guid FROM corpse WHERE corpseType <> 0
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, guid FROM corpse WHERE mapId = ? AND instanceId = ?
- uint32 ownerGuid = fields[17].GetUInt32();
+
+ ObjectGuid::LowType ownerGuid = fields[16].GetUInt32();
float posX = fields[0].GetFloat();
float posY = fields[1].GetFloat();
float posZ = fields[2].GetFloat();
float o = fields[3].GetFloat();
uint32 mapId = fields[4].GetUInt16();
- Object::_Create(guid, 0, HIGHGUID_CORPSE);
+ Object::_Create(guid, 0, HighGuid::Corpse);
SetObjectScale(1.0f);
SetUInt32Value(CORPSE_FIELD_DISPLAY_ID, fields[5].GetUInt32());
@@ -177,7 +153,7 @@ bool Corpse::LoadCorpseFromDB(uint32 guid, Field* fields)
SetUInt32Value(CORPSE_FIELD_GUILD, fields[9].GetUInt32());
SetUInt32Value(CORPSE_FIELD_FLAGS, fields[10].GetUInt8());
SetUInt32Value(CORPSE_FIELD_DYNAMIC_FLAGS, fields[11].GetUInt8());
- SetGuidValue(CORPSE_FIELD_OWNER, ObjectGuid(HIGHGUID_PLAYER, ownerGuid));
+ SetGuidValue(CORPSE_FIELD_OWNER, ObjectGuid(HighGuid::Player, ownerGuid));
m_time = time_t(fields[12].GetUInt32());
@@ -197,12 +173,16 @@ bool Corpse::LoadCorpseFromDB(uint32 guid, Field* fields)
return false;
}
- _gridCoord = Trinity::ComputeGridCoord(GetPositionX(), GetPositionY());
+ _cellCoord = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY());
return true;
}
bool Corpse::IsExpired(time_t t) const
{
+ // Deleted character
+ if (!sWorld->GetCharacterInfo(GetOwnerGUID()))
+ return true;
+
if (m_type == CORPSE_BONES)
return m_time < t - 60 * MINUTE;
else
diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h
index c3a693d30d3..7f2608e4bf3 100644
--- a/src/server/game/Entities/Corpse/Corpse.h
+++ b/src/server/game/Entities/Corpse/Corpse.h
@@ -55,14 +55,14 @@ class Corpse : public WorldObject, public GridObject<Corpse>
void AddToWorld() override;
void RemoveFromWorld() override;
- bool Create(uint32 guidlow, Map* map);
- bool Create(uint32 guidlow, Player* owner);
+ bool Create(ObjectGuid::LowType guidlow);
+ bool Create(ObjectGuid::LowType guidlow, Player* owner);
void SaveToDB();
- bool LoadCorpseFromDB(uint32 guid, Field* fields);
+ bool LoadCorpseFromDB(ObjectGuid::LowType guid, Field* fields);
- void DeleteBonesFromWorld();
void DeleteFromDB(SQLTransaction& trans);
+ static void DeleteFromDB(ObjectGuid const& ownerGuid, SQLTransaction& trans);
ObjectGuid GetOwnerGUID() const { return GetGuidValue(CORPSE_FIELD_OWNER); }
@@ -70,8 +70,8 @@ class Corpse : public WorldObject, public GridObject<Corpse>
void ResetGhostTime() { m_time = time(NULL); }
CorpseType GetType() const { return m_type; }
- GridCoord const& GetGridCoord() const { return _gridCoord; }
- void SetGridCoord(GridCoord const& gridCoord) { _gridCoord = gridCoord; }
+ CellCoord const& GetCellCoord() const { return _cellCoord; }
+ void SetCellCoord(CellCoord const& cellCoord) { _cellCoord = cellCoord; }
Loot loot; // remove insignia ONLY at BG
Player* lootRecipient;
@@ -82,6 +82,6 @@ class Corpse : public WorldObject, public GridObject<Corpse>
private:
CorpseType m_type;
time_t m_time;
- GridCoord _gridCoord; // gride for corpse position for fast search
+ CellCoord _cellCoord;
};
#endif
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 84a12fd6409..ea10ce7988b 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -138,8 +138,8 @@ bool ForcedDespawnDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
Creature::Creature(bool isWorldObject): Unit(isWorldObject), MapObject(),
m_groupLootTimer(0), lootingGroupLowGUID(0), m_PlayerDamageReq(0),
m_lootRecipient(), m_lootRecipientGroup(0), _skinner(), _pickpocketLootRestore(0), m_corpseRemoveTime(0), m_respawnTime(0),
-m_respawnDelay(300), m_corpseDelay(60), m_respawnradius(0.0f), m_reactState(REACT_AGGRESSIVE),
-m_defaultMovementType(IDLE_MOTION_TYPE), m_DBTableGuid(0), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false),
+m_respawnDelay(300), m_corpseDelay(60), m_respawnradius(0.0f), m_combatPulseTime(0), m_combatPulseDelay(0), m_reactState(REACT_AGGRESSIVE),
+m_defaultMovementType(IDLE_MOTION_TYPE), m_spawnId(0), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false),
m_AlreadySearchedAssistance(false), m_regenHealth(true), m_AI_locked(false), m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL),
m_originalEntry(0), m_homePosition(), m_transportHomePosition(), m_creatureInfo(NULL), m_creatureData(NULL), m_waypointID(0), m_path_id(0), m_formation(NULL)
{
@@ -176,7 +176,13 @@ void Creature::AddToWorld()
{
if (GetZoneScript())
GetZoneScript()->OnCreatureCreate(this);
- sObjectAccessor->AddObject(this);
+
+ GetMap()->GetObjectsStore().Insert<Creature>(GetGUID(), this);
+ if (m_spawnId)
+ GetMap()->GetCreatureBySpawnIdStore().insert(std::make_pair(m_spawnId, this));
+
+ TC_LOG_DEBUG("entities.unit", "Adding creature %u with entry %u and DBGUID %u to world in map %u", GetGUID().GetCounter(), GetEntry(), m_spawnId, GetMap()->GetId());
+
Unit::AddToWorld();
SearchFormation();
AIM_Initialize();
@@ -191,10 +197,17 @@ void Creature::RemoveFromWorld()
{
if (GetZoneScript())
GetZoneScript()->OnCreatureRemove(this);
+
if (m_formation)
sFormationMgr->RemoveCreatureFromGroup(m_formation, this);
+
Unit::RemoveFromWorld();
- sObjectAccessor->RemoveObject(this);
+
+ if (m_spawnId)
+ Trinity::Containers::MultimapErasePair(GetMap()->GetCreatureBySpawnIdStore(), m_spawnId, this);
+
+ TC_LOG_DEBUG("entities.unit", "Removing creature %u with entry %u and DBGUID %u to world in map %u", GetGUID().GetCounter(), GetEntry(), m_spawnId, GetMap()->GetId());
+ GetMap()->GetObjectsStore().Remove<Creature>(GetGUID());
}
}
@@ -213,7 +226,7 @@ void Creature::SearchFormation()
if (IsSummon())
return;
- uint32 lowguid = GetDBTableGUIDLow();
+ ObjectGuid::LowType lowguid = GetSpawnId();
if (!lowguid)
return;
@@ -428,6 +441,7 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/)
}
UpdateMovementFlags();
+ LoadCreaturesAddon();
return true;
}
@@ -447,11 +461,11 @@ void Creature::Update(uint32 diff)
{
case JUST_RESPAWNED:
// Must not be called, see Creature::setDeathState JUST_RESPAWNED -> ALIVE promoting.
- TC_LOG_ERROR("entities.unit", "Creature (GUID: %u Entry: %u) in wrong state: JUST_RESPAWNED (4)", GetGUIDLow(), GetEntry());
+ TC_LOG_ERROR("entities.unit", "Creature (GUID: %u Entry: %u) in wrong state: JUST_RESPAWNED (4)", GetGUID().GetCounter(), GetEntry());
break;
case JUST_DIED:
// Must not be called, see Creature::setDeathState JUST_DIED -> CORPSE promoting.
- TC_LOG_ERROR("entities.unit", "Creature (GUID: %u Entry: %u) in wrong state: JUST_DEAD (1)", GetGUIDLow(), GetEntry());
+ TC_LOG_ERROR("entities.unit", "Creature (GUID: %u Entry: %u) in wrong state: JUST_DEAD (1)", GetGUID().GetCounter(), GetEntry());
break;
case DEAD:
{
@@ -462,7 +476,7 @@ void Creature::Update(uint32 diff)
if (!allowed) // Will be rechecked on next Update call
break;
- ObjectGuid dbtableHighGuid(HIGHGUID_UNIT, GetEntry(), m_DBTableGuid);
+ ObjectGuid dbtableHighGuid(HighGuid::Unit, GetEntry(), m_spawnId);
time_t linkedRespawntime = GetMap()->GetLinkedRespawnTime(dbtableHighGuid);
if (!linkedRespawntime) // Can respawn
Respawn();
@@ -526,10 +540,44 @@ void Creature::Update(uint32 diff)
LastCharmerGUID.Clear();
}
+ // if periodic combat pulse is enabled and we are both in combat and in a dungeon, do this now
+ if (m_combatPulseDelay > 0 && IsInCombat() && GetMap()->IsDungeon())
+ {
+ if (diff > m_combatPulseTime)
+ m_combatPulseTime = 0;
+ else
+ m_combatPulseTime -= diff;
+
+ if (m_combatPulseTime == 0)
+ {
+ Map::PlayerList const &players = GetMap()->GetPlayers();
+ if (!players.isEmpty())
+ for (Map::PlayerList::const_iterator it = players.begin(); it != players.end(); ++it)
+ {
+ if (Player* player = it->GetSource())
+ {
+ if (player->IsGameMaster())
+ continue;
+
+ if (player->IsAlive() && this->IsHostileTo(player))
+ {
+ if (CanHaveThreatList())
+ AddThreat(player, 0.0f);
+ this->SetInCombatWith(player);
+ player->SetInCombatWith(this);
+ }
+ }
+ }
+
+ m_combatPulseTime = m_combatPulseDelay * IN_MILLISECONDS;
+ }
+ }
+
if (!IsInEvadeMode() && IsAIEnabled)
{
// do not allow the AI to be changed during update
m_AI_locked = true;
+
i_AI->UpdateAI(diff);
m_AI_locked = false;
}
@@ -728,7 +776,7 @@ void Creature::Motion_Initialize()
GetMotionMaster()->Initialize();
}
-bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 entry, float x, float y, float z, float ang, CreatureData const* data /*= nullptr*/, uint32 vehId /*= 0*/)
+bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, uint32 entry, float x, float y, float z, float ang, CreatureData const* data /*= nullptr*/, uint32 vehId /*= 0*/)
{
ASSERT(map);
SetMap(map);
@@ -773,8 +821,6 @@ bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 entry,
break;
}
- LoadCreaturesAddon();
-
//! Need to be called after LoadCreaturesAddon - MOVEMENTFLAG_HOVER is set there
if (HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
{
@@ -918,7 +964,7 @@ void Creature::SaveToDB()
{
// this should only be used when the creature has already been loaded
// preferably after adding to map, because mapid may not be valid otherwise
- CreatureData const* data = sObjectMgr->GetCreatureData(m_DBTableGuid);
+ CreatureData const* data = sObjectMgr->GetCreatureData(m_spawnId);
if (!data)
{
TC_LOG_ERROR("entities.unit", "Creature::SaveToDB failed, cannot get creature data!");
@@ -932,9 +978,10 @@ void Creature::SaveToDB()
void Creature::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask)
{
// update in loaded data
- if (!m_DBTableGuid)
- m_DBTableGuid = GetGUIDLow();
- CreatureData& data = sObjectMgr->NewOrExistCreatureData(m_DBTableGuid);
+ if (!m_spawnId)
+ m_spawnId = sObjectMgr->GenerateCreatureSpawnId();
+
+ CreatureData& data = sObjectMgr->NewOrExistCreatureData(m_spawnId);
uint32 displayId = GetNativeDisplayId();
uint32 npcflag = GetUInt32Value(UNIT_NPC_FLAGS);
@@ -998,13 +1045,14 @@ void Creature::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask)
SQLTransaction trans = WorldDatabase.BeginTransaction();
PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE);
- stmt->setUInt32(0, m_DBTableGuid);
+ stmt->setUInt32(0, m_spawnId);
+
trans->Append(stmt);
uint8 index = 0;
stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_CREATURE);
- stmt->setUInt32(index++, m_DBTableGuid);
+ stmt->setUInt32(index++, m_spawnId);
stmt->setUInt32(index++, GetEntry());
stmt->setUInt16(index++, uint16(mapid));
stmt->setUInt8(index++, spawnMask);
@@ -1149,7 +1197,7 @@ float Creature::GetSpellDamageMod(int32 Rank) const
}
}
-bool Creature::CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const* data /*= nullptr*/, uint32 vehId /*= 0*/)
+bool Creature::CreateFromProto(ObjectGuid::LowType guidlow, uint32 entry, CreatureData const* data /*= nullptr*/, uint32 vehId /*= 0*/)
{
SetZoneScript();
if (GetZoneScript() && data)
@@ -1168,7 +1216,7 @@ bool Creature::CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const*
SetOriginalEntry(entry);
- Object::_Create(guidlow, entry, (vehId || cinfo->VehicleId) ? HIGHGUID_VEHICLE : HIGHGUID_UNIT);
+ Object::_Create(guidlow, entry, (vehId || cinfo->VehicleId) ? HighGuid::Vehicle : HighGuid::Unit);
if (!UpdateEntry(entry, data))
return false;
@@ -1190,26 +1238,18 @@ bool Creature::CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const*
return true;
}
-bool Creature::LoadCreatureFromDB(uint32 guid, Map* map, bool addToMap)
+bool Creature::LoadCreatureFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap)
{
- CreatureData const* data = sObjectMgr->GetCreatureData(guid);
+ CreatureData const* data = sObjectMgr->GetCreatureData(spawnId);
if (!data)
{
- TC_LOG_ERROR("sql.sql", "Creature (GUID: %u) not found in table `creature`, can't load. ", guid);
+ TC_LOG_ERROR("sql.sql", "Creature (GUID: %u) not found in table `creature`, can't load. ", spawnId);
return false;
}
- m_DBTableGuid = guid;
- if (map->GetInstanceId() == 0)
- {
- if (map->GetCreature(ObjectGuid(HIGHGUID_UNIT, data->id, guid)))
- return false;
- }
- else
- guid = sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT);
-
- if (!Create(guid, map, data->phaseMask, data->id, data->posX, data->posY, data->posZ, data->orientation, data))
+ m_spawnId = spawnId;
+ if (!Create(map->GenerateLowGuid<HighGuid::Unit>(), map, data->phaseMask, data->id, data->posX, data->posY, data->posZ, data->orientation, data))
return false;
//We should set first home position, because then AI calls home movement
@@ -1220,7 +1260,7 @@ bool Creature::LoadCreatureFromDB(uint32 guid, Map* map, bool addToMap)
m_respawnDelay = data->spawntimesecs;
m_deathState = ALIVE;
- m_respawnTime = GetMap()->GetCreatureRespawnTime(m_DBTableGuid);
+ m_respawnTime = GetMap()->GetCreatureRespawnTime(m_spawnId);
if (m_respawnTime) // respawn on Update
{
m_deathState = DEAD;
@@ -1315,31 +1355,31 @@ bool Creature::hasInvolvedQuest(uint32 quest_id) const
void Creature::DeleteFromDB()
{
- if (!m_DBTableGuid)
+ if (!m_spawnId)
{
- TC_LOG_ERROR("entities.unit", "Trying to delete not saved creature! LowGUID: %u, Entry: %u", GetGUIDLow(), GetEntry());
+ TC_LOG_ERROR("entities.unit", "Trying to delete not saved creature! LowGUID: %u, Entry: %u", GetGUID().GetCounter(), GetEntry());
return;
}
- GetMap()->RemoveCreatureRespawnTime(m_DBTableGuid);
- sObjectMgr->DeleteCreatureData(m_DBTableGuid);
+ GetMap()->RemoveCreatureRespawnTime(m_spawnId);
+ sObjectMgr->DeleteCreatureData(m_spawnId);
SQLTransaction trans = WorldDatabase.BeginTransaction();
PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE);
- stmt->setUInt32(0, m_DBTableGuid);
+ stmt->setUInt32(0, m_spawnId);
trans->Append(stmt);
stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE_ADDON);
- stmt->setUInt32(0, m_DBTableGuid);
+ stmt->setUInt32(0, m_spawnId);
trans->Append(stmt);
stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAME_EVENT_CREATURE);
- stmt->setUInt32(0, m_DBTableGuid);
+ stmt->setUInt32(0, m_spawnId);
trans->Append(stmt);
stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAME_EVENT_MODEL_EQUIP);
- stmt->setUInt32(0, m_DBTableGuid);
+ stmt->setUInt32(0, m_spawnId);
trans->Append(stmt);
WorldDatabase.CommitTransaction(trans);
@@ -1370,11 +1410,11 @@ bool Creature::CanStartAttack(Unit const* who, bool force) const
return false;
// This set of checks is should be done only for creatures
- if ((HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC) && who->GetTypeId() != TYPEID_PLAYER) // flag is valid only for non player characters
+ if ((HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC) && who->GetTypeId() != TYPEID_PLAYER) // flag is valid only for non player characters
|| (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) && who->GetTypeId() == TYPEID_PLAYER) // immune to PC and target is a player, return false
|| (who->GetOwner() && who->GetOwner()->GetTypeId() == TYPEID_PLAYER && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))) // player pets are immune to pc as well
return false;
-
+
// Do not attack non-combat pets
if (who->GetTypeId() == TYPEID_UNIT && who->GetCreatureType() == CREATURE_TYPE_NON_COMBAT_PET)
return false;
@@ -1516,7 +1556,7 @@ void Creature::setDeathState(DeathState s)
if (GetCreatureData() && GetPhaseMask() != GetCreatureData()->phaseMask)
SetPhaseMask(GetCreatureData()->phaseMask, false);
Unit::setDeathState(ALIVE);
- LoadCreaturesAddon(true);
+ LoadCreaturesAddon();
}
}
@@ -1536,8 +1576,8 @@ void Creature::Respawn(bool force)
if (getDeathState() == DEAD)
{
- if (m_DBTableGuid)
- GetMap()->RemoveCreatureRespawnTime(m_DBTableGuid);
+ if (m_spawnId)
+ GetMap()->RemoveCreatureRespawnTime(m_spawnId);
TC_LOG_DEBUG("entities.unit", "Respawning creature %s (%s)",
GetName().c_str(), GetGUID().ToString().c_str());
@@ -1570,9 +1610,9 @@ void Creature::Respawn(bool force)
TriggerJustRespawned = true;//delay event to next tick so all creatures are created on the map before processing
}
- uint32 poolid = GetDBTableGUIDLow() ? sPoolMgr->IsPartOfAPool<Creature>(GetDBTableGUIDLow()) : 0;
+ uint32 poolid = GetSpawnId() ? sPoolMgr->IsPartOfAPool<Creature>(GetSpawnId()) : 0;
if (poolid)
- sPoolMgr->UpdatePool<Creature>(poolid, GetDBTableGUIDLow());
+ sPoolMgr->UpdatePool<Creature>(poolid, GetSpawnId());
//Re-initialize reactstate that could be altered by movementgenerators
InitializeReactState();
@@ -1793,7 +1833,7 @@ Unit* Creature::SelectNearestTargetInAttackDistance(float dist) const
if (dist > MAX_VISIBILITY_DISTANCE)
{
- TC_LOG_ERROR("entities.unit", "Creature (GUID: %u Entry: %u) SelectNearestTargetInAttackDistance called with dist > MAX_VISIBILITY_DISTANCE. Distance set to ATTACK_DISTANCE.", GetGUIDLow(), GetEntry());
+ TC_LOG_ERROR("entities.unit", "Creature (GUID: %u Entry: %u) SelectNearestTargetInAttackDistance called with dist > MAX_VISIBILITY_DISTANCE. Distance set to ATTACK_DISTANCE.", GetGUID().GetCounter(), GetEntry());
dist = ATTACK_DISTANCE;
}
@@ -1976,10 +2016,10 @@ bool Creature::_IsTargetAcceptable(const Unit* target) const
void Creature::SaveRespawnTime()
{
- if (IsSummon() || !m_DBTableGuid || (m_creatureData && !m_creatureData->dbData))
+ if (IsSummon() || !m_spawnId || (m_creatureData && !m_creatureData->dbData))
return;
- GetMap()->SaveCreatureRespawnTime(m_DBTableGuid, m_respawnTime);
+ GetMap()->SaveCreatureRespawnTime(m_spawnId, m_respawnTime);
}
// this should not be called by petAI or
@@ -2011,9 +2051,9 @@ bool Creature::CanCreatureAttack(Unit const* victim, bool /*force*/) const
CreatureAddon const* Creature::GetCreatureAddon() const
{
- if (m_DBTableGuid)
+ if (m_spawnId)
{
- if (CreatureAddon const* addon = sObjectMgr->GetCreatureAddon(m_DBTableGuid))
+ if (CreatureAddon const* addon = sObjectMgr->GetCreatureAddon(m_spawnId))
return addon;
}
@@ -2022,7 +2062,7 @@ CreatureAddon const* Creature::GetCreatureAddon() const
}
//creature_addon table
-bool Creature::LoadCreaturesAddon(bool reload)
+bool Creature::LoadCreaturesAddon()
{
CreatureAddon const* cainfo = GetCreatureAddon();
if (!cainfo)
@@ -2082,21 +2122,16 @@ bool Creature::LoadCreaturesAddon(bool reload)
SpellInfo const* AdditionalSpellInfo = sSpellMgr->GetSpellInfo(*itr);
if (!AdditionalSpellInfo)
{
- TC_LOG_ERROR("sql.sql", "Creature (GUID: %u Entry: %u) has wrong spell %u defined in `auras` field.", GetGUIDLow(), GetEntry(), *itr);
+ TC_LOG_ERROR("sql.sql", "Creature (GUID: %u Entry: %u) has wrong spell %u defined in `auras` field.", GetGUID().GetCounter(), GetEntry(), *itr);
continue;
}
// skip already applied aura
if (HasAura(*itr))
- {
- if (!reload)
- TC_LOG_ERROR("sql.sql", "Creature (GUID: %u Entry: %u) has duplicate aura (spell %u) in `auras` field.", GetDBTableGUIDLow(), GetEntry(), *itr);
-
continue;
- }
AddAura(*itr, this);
- TC_LOG_DEBUG("entities.unit", "Spell: %u added to creature (GUID: %u Entry: %u)", *itr, GetGUIDLow(), GetEntry());
+ TC_LOG_DEBUG("entities.unit", "Spell: %u added to creature (GUID: %u Entry: %u)", *itr, GetGUID().GetCounter(), GetEntry());
}
}
@@ -2176,9 +2211,9 @@ time_t Creature::GetRespawnTimeEx() const
void Creature::GetRespawnPosition(float &x, float &y, float &z, float* ori, float* dist) const
{
- if (m_DBTableGuid)
+ if (m_spawnId)
{
- if (CreatureData const* data = sObjectMgr->GetCreatureData(GetDBTableGUIDLow()))
+ if (CreatureData const* data = sObjectMgr->GetCreatureData(GetSpawnId()))
{
x = data->posX;
y = data->posY;
@@ -2646,7 +2681,7 @@ void Creature::SetTextRepeatId(uint8 textGroup, uint8 id)
if (std::find(repeats.begin(), repeats.end(), id) == repeats.end())
repeats.push_back(id);
else
- TC_LOG_ERROR("sql.sql", "CreatureTextMgr: TextGroup %u for Creature(%s) GuidLow %u Entry %u, id %u already added", uint32(textGroup), GetName().c_str(), GetGUIDLow(), GetEntry(), uint32(id));
+ TC_LOG_ERROR("sql.sql", "CreatureTextMgr: TextGroup %u for Creature(%s) GuidLow %u Entry %u, id %u already added", uint32(textGroup), GetName().c_str(), GetGUID().GetCounter(), GetEntry(), uint32(id));
}
CreatureTextRepeatIds Creature::GetTextRepeatGroup(uint8 textGroup)
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index 4c1b39211cb..9a41c8570ed 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -83,7 +83,7 @@ struct CreatureTemplate
uint32 Modelid3;
uint32 Modelid4;
std::string Name;
- std::string SubName;
+ std::string Title;
std::string IconName;
uint32 GossipMenuId;
uint8 minlevel;
@@ -218,7 +218,7 @@ typedef std::unordered_map<uint16, CreatureBaseStats> CreatureBaseStatsContainer
struct CreatureLocale
{
StringVector Name;
- StringVector SubName;
+ StringVector Title;
};
struct GossipMenuItemsLocale
@@ -317,7 +317,8 @@ struct CreatureAddon
std::vector<uint32> auras;
};
-typedef std::unordered_map<uint32, CreatureAddon> CreatureAddonContainer;
+typedef std::unordered_map<ObjectGuid::LowType, CreatureAddon> CreatureAddonContainer;
+typedef std::unordered_map<uint32, CreatureAddon> CreatureAddonTemplateContainer;
// Vendors
struct VendorItem
@@ -430,12 +431,12 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
void DisappearAndDie();
- bool Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 entry, float x, float y, float z, float ang, CreatureData const* data = nullptr, uint32 vehId = 0);
- bool LoadCreaturesAddon(bool reload = false);
+ bool Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, uint32 entry, float x, float y, float z, float ang, CreatureData const* data = nullptr, uint32 vehId = 0);
+ bool LoadCreaturesAddon();
void SelectLevel();
void LoadEquipment(int8 id = 1, bool force = false);
- uint32 GetDBTableGUIDLow() const { return m_DBTableGuid; }
+ ObjectGuid::LowType GetSpawnId() const { return m_spawnId; }
void Update(uint32 time) override; // overwrited Unit::Update
void GetRespawnPosition(float &x, float &y, float &z, float* ori = nullptr, float* dist =nullptr) const;
@@ -529,8 +530,8 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
void setDeathState(DeathState s) override; // override virtual Unit::setDeathState
- bool LoadFromDB(uint32 guid, Map* map) { return LoadCreatureFromDB(guid, map, false); }
- bool LoadCreatureFromDB(uint32 guid, Map* map, bool addToMap = true);
+ bool LoadFromDB(ObjectGuid::LowType spawnId, Map* map) { return LoadCreatureFromDB(spawnId, map, false); }
+ bool LoadCreatureFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap = true);
void SaveToDB();
// overriden in Pet
virtual void SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask);
@@ -601,8 +602,16 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
float GetRespawnRadius() const { return m_respawnradius; }
void SetRespawnRadius(float dist) { m_respawnradius = dist; }
+ uint32 GetCombatPulseDelay() const { return m_combatPulseDelay; }
+ void SetCombatPulseDelay(uint32 delay) // (secs) interval at which the creature pulses the entire zone into combat (only works in dungeons)
+ {
+ m_combatPulseDelay = delay;
+ if (m_combatPulseTime == 0 || m_combatPulseTime > delay)
+ m_combatPulseTime = delay;
+ }
+
uint32 m_groupLootTimer; // (msecs)timer used for group loot
- uint32 lootingGroupLowGUID; // used to find group which is looting corpse
+ ObjectGuid::LowType lootingGroupLowGUID; // used to find group which is looting corpse
void SendZoneUnderAttackMessage(Player* attacker);
@@ -667,7 +676,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
void ClearTextRepeatGroup(uint8 textGroup);
protected:
- bool CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const* data = nullptr, uint32 vehId = 0);
+ bool CreateFromProto(ObjectGuid::LowType guidlow, uint32 entry, CreatureData const* data = nullptr, uint32 vehId = 0);
bool InitEntry(uint32 entry, CreatureData const* data = nullptr);
// vendor items
@@ -686,13 +695,15 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
uint32 m_respawnDelay; // (secs) delay between corpse disappearance and respawning
uint32 m_corpseDelay; // (secs) delay between death and corpse disappearance
float m_respawnradius;
+ uint32 m_combatPulseTime; // (msecs) remaining time for next zone-in-combat pulse
+ uint32 m_combatPulseDelay; // (secs) how often the creature puts the entire zone in combat (only works in dungeons)
ReactStates m_reactState; // for AI, not charmInfo
void RegenerateMana();
void RegenerateHealth();
void Regenerate(Powers power);
MovementGeneratorType m_defaultMovementType;
- uint32 m_DBTableGuid; ///< For new or temporary creatures is 0 for saved it is lowguid
+ ObjectGuid::LowType m_spawnId; ///< For new or temporary creatures is 0 for saved it is lowguid
uint8 m_equipmentId;
int8 m_originalEquipmentId; // can be -1
diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp
index 2ccf4471788..e8ce0acdc86 100644
--- a/src/server/game/Entities/Creature/CreatureGroups.cpp
+++ b/src/server/game/Entities/Creature/CreatureGroups.cpp
@@ -30,33 +30,33 @@ FormationMgr::~FormationMgr()
delete itr->second;
}
-void FormationMgr::AddCreatureToGroup(uint32 groupId, Creature* member)
+void FormationMgr::AddCreatureToGroup(uint32 leaderGuid, Creature* creature)
{
- Map* map = member->FindMap();
+ Map* map = creature->FindMap();
if (!map)
return;
- CreatureGroupHolderType::iterator itr = map->CreatureGroupHolder.find(groupId);
+ CreatureGroupHolderType::iterator itr = map->CreatureGroupHolder.find(leaderGuid);
//Add member to an existing group
if (itr != map->CreatureGroupHolder.end())
{
- TC_LOG_DEBUG("entities.unit", "Group found: %u, inserting creature GUID: %u, Group InstanceID %u", groupId, member->GetGUIDLow(), member->GetInstanceId());
- itr->second->AddMember(member);
+ TC_LOG_DEBUG("entities.unit", "Group found: %u, inserting creature GUID: %u, Group InstanceID %u", leaderGuid, creature->GetGUID().GetCounter(), creature->GetInstanceId());
+ itr->second->AddMember(creature);
}
//Create new group
else
{
- TC_LOG_DEBUG("entities.unit", "Group not found: %u. Creating new group.", groupId);
- CreatureGroup* group = new CreatureGroup(groupId);
- map->CreatureGroupHolder[groupId] = group;
- group->AddMember(member);
+ TC_LOG_DEBUG("entities.unit", "Group not found: %u. Creating new group.", leaderGuid);
+ CreatureGroup* group = new CreatureGroup(leaderGuid);
+ map->CreatureGroupHolder[leaderGuid] = group;
+ group->AddMember(creature);
}
}
void FormationMgr::RemoveCreatureFromGroup(CreatureGroup* group, Creature* member)
{
- TC_LOG_DEBUG("entities.unit", "Deleting member pointer to GUID: %u from group %u", group->GetId(), member->GetDBTableGUIDLow());
+ TC_LOG_DEBUG("entities.unit", "Deleting member pointer to GUID: %u from group %u", group->GetId(), member->GetSpawnId());
group->RemoveMember(member);
if (group->isEmpty())
@@ -142,16 +142,16 @@ void FormationMgr::LoadCreatureFormations()
void CreatureGroup::AddMember(Creature* member)
{
- TC_LOG_DEBUG("entities.unit", "CreatureGroup::AddMember: Adding unit GUID: %u.", member->GetGUIDLow());
+ TC_LOG_DEBUG("entities.unit", "CreatureGroup::AddMember: Adding unit GUID: %u.", member->GetGUID().GetCounter());
//Check if it is a leader
- if (member->GetDBTableGUIDLow() == m_groupID)
+ if (member->GetSpawnId() == m_groupID)
{
- TC_LOG_DEBUG("entities.unit", "Unit GUID: %u is formation leader. Adding group.", member->GetGUIDLow());
+ TC_LOG_DEBUG("entities.unit", "Unit GUID: %u is formation leader. Adding group.", member->GetGUID().GetCounter());
m_leader = member;
}
- m_members[member] = sFormationMgr->CreatureGroupMap.find(member->GetDBTableGUIDLow())->second;
+ m_members[member] = sFormationMgr->CreatureGroupMap.find(member->GetSpawnId())->second;
member->SetFormation(this);
}
@@ -166,7 +166,7 @@ void CreatureGroup::RemoveMember(Creature* member)
void CreatureGroup::MemberAttackStart(Creature* member, Unit* target)
{
- uint8 groupAI = sFormationMgr->CreatureGroupMap[member->GetDBTableGUIDLow()]->groupAI;
+ uint8 groupAI = sFormationMgr->CreatureGroupMap[member->GetSpawnId()]->groupAI;
if (!groupAI)
return;
@@ -205,7 +205,7 @@ void CreatureGroup::FormationReset(bool dismiss)
itr->first->GetMotionMaster()->Initialize();
else
itr->first->GetMotionMaster()->MoveIdle();
- TC_LOG_DEBUG("entities.unit", "Set %s movement for member GUID: %u", dismiss ? "default" : "idle", itr->first->GetGUIDLow());
+ TC_LOG_DEBUG("entities.unit", "Set %s movement for member GUID: %u", dismiss ? "default" : "idle", itr->first->GetGUID().GetCounter());
}
}
m_Formed = !dismiss;
@@ -227,12 +227,8 @@ void CreatureGroup::LeaderMoveTo(float x, float y, float z)
continue;
if (itr->second->point_1)
- {
- if (m_leader->GetCurrentWaypointID() == itr->second->point_1)
- itr->second->follow_angle = (2 * float(M_PI)) - itr->second->follow_angle;
- if (m_leader->GetCurrentWaypointID() == itr->second->point_2)
- itr->second->follow_angle = (2 * float(M_PI)) + itr->second->follow_angle;
- }
+ if (m_leader->GetCurrentWaypointID() == itr->second->point_1 - 1 || m_leader->GetCurrentWaypointID() == itr->second->point_2 - 1)
+ itr->second->follow_angle = float(M_PI) * 2 - itr->second->follow_angle;
float angle = itr->second->follow_angle;
float dist = itr->second->follow_dist;
@@ -244,7 +240,8 @@ void CreatureGroup::LeaderMoveTo(float x, float y, float z)
Trinity::NormalizeMapCoord(dx);
Trinity::NormalizeMapCoord(dy);
- member->UpdateGroundPositionZ(dx, dy, dz);
+ if (!member->IsFlying())
+ member->UpdateGroundPositionZ(dx, dy, dz);
if (member->IsWithinDist(m_leader, dist + MAX_DESYNC))
member->SetUnitMovementFlags(m_leader->GetUnitMovementFlags());
diff --git a/src/server/game/Entities/Creature/CreatureGroups.h b/src/server/game/Entities/Creature/CreatureGroups.h
index e4b2f63c1a3..3de1370379b 100644
--- a/src/server/game/Entities/Creature/CreatureGroups.h
+++ b/src/server/game/Entities/Creature/CreatureGroups.h
@@ -32,8 +32,8 @@ struct FormationInfo
float follow_dist;
float follow_angle;
uint8 groupAI;
- uint16 point_1;
- uint16 point_2;
+ uint32 point_1;
+ uint32 point_2;
};
typedef std::unordered_map<uint32/*memberDBGUID*/, FormationInfo*> CreatureGroupInfoType;
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index 63be8d06739..db67f1f74f1 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -381,10 +381,10 @@ void PlayerMenu::SendQuestGiverStatus(uint8 questStatus, ObjectGuid npcGUID) con
void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGUID, bool activateAccept) const
{
- std::string questTitle = quest->GetTitle();
- std::string questDetails = quest->GetDetails();
- std::string questObjectives = quest->GetObjectives();
- std::string questEndText = quest->GetEndText();
+ std::string questTitle = quest->GetTitle();
+ std::string questDetails = quest->GetDetails();
+ std::string questObjectives = quest->GetObjectives();
+ std::string questAreaDescription = quest->GetAreaDescription();
int32 locale = _session->GetSessionDbLocaleIndex();
if (locale >= 0)
@@ -394,7 +394,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU
ObjectMgr::GetLocaleString(localeData->Title, locale, questTitle);
ObjectMgr::GetLocaleString(localeData->Details, locale, questDetails);
ObjectMgr::GetLocaleString(localeData->Objectives, locale, questObjectives);
- ObjectMgr::GetLocaleString(localeData->EndText, locale, questEndText);
+ ObjectMgr::GetLocaleString(localeData->AreaDescription, locale, questAreaDescription);
}
}
@@ -489,11 +489,11 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU
void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
{
- std::string questTitle = quest->GetTitle();
- std::string questDetails = quest->GetDetails();
- std::string questObjectives = quest->GetObjectives();
- std::string questEndText = quest->GetEndText();
- std::string questCompletedText = quest->GetCompletedText();
+ std::string questTitle = quest->GetTitle();
+ std::string questDetails = quest->GetDetails();
+ std::string questObjectives = quest->GetObjectives();
+ std::string questAreaDescription = quest->GetAreaDescription();
+ std::string questCompletedText = quest->GetCompletedText();
std::string questObjectiveText[QUEST_OBJECTIVES_COUNT];
for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
@@ -507,7 +507,7 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
ObjectMgr::GetLocaleString(localeData->Title, locale, questTitle);
ObjectMgr::GetLocaleString(localeData->Details, locale, questDetails);
ObjectMgr::GetLocaleString(localeData->Objectives, locale, questObjectives);
- ObjectMgr::GetLocaleString(localeData->EndText, locale, questEndText);
+ ObjectMgr::GetLocaleString(localeData->AreaDescription, locale, questAreaDescription);
ObjectMgr::GetLocaleString(localeData->CompletedText, locale, questCompletedText);
for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
@@ -585,9 +585,9 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // unk (0)
data << int32(quest->RewardFactionValueIdOverride[i]);
- data << uint32(quest->GetPointMapId());
- data << float(quest->GetPointX());
- data << float(quest->GetPointY());
+ data << uint32(quest->GetPOIContinent());
+ data << float(quest->GetPOIx());
+ data << float(quest->GetPOIy());
data << uint32(quest->GetPointOpt());
if (sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS))
@@ -596,7 +596,7 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
data << questTitle;
data << questObjectives;
data << questDetails;
- data << questEndText;
+ data << questAreaDescription;
data << questCompletedText; // display in quest objectives window once all objectives are completed
for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
@@ -607,7 +607,7 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
data << uint32(quest->RequiredNpcOrGo[i]);
data << uint32(quest->RequiredNpcOrGoCount[i]);
- data << uint32(quest->RequiredSourceItemId[i]);
+ data << uint32(quest->ItemDrop[i]);
data << uint32(0); // req source count?
}
diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp
index 2a3e91b7574..46422444bbb 100644
--- a/src/server/game/Entities/Creature/TemporarySummon.cpp
+++ b/src/server/game/Entities/Creature/TemporarySummon.cpp
@@ -368,7 +368,7 @@ void Puppet::InitSummon()
{
Minion::InitSummon();
if (!SetCharmedBy(GetOwner(), CHARM_TYPE_POSSESS))
- ASSERT(false);
+ ABORT();
}
void Puppet::Update(uint32 time)
diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
index 71d0f13488c..3d92f9e18cf 100644
--- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp
+++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
@@ -51,7 +51,7 @@ void DynamicObject::AddToWorld()
///- Register the dynamicObject for guid lookup and for caster
if (!IsInWorld())
{
- sObjectAccessor->AddObject(this);
+ GetMap()->GetObjectsStore().Insert<DynamicObject>(GetGUID(), this);
WorldObject::AddToWorld();
BindToCaster();
}
@@ -74,11 +74,12 @@ void DynamicObject::RemoveFromWorld()
UnbindFromCaster();
WorldObject::RemoveFromWorld();
- sObjectAccessor->RemoveObject(this);
+ GetMap()->GetObjectsStore().Remove<DynamicObject>(GetGUID());
+
}
}
-bool DynamicObject::CreateDynamicObject(uint32 guidlow, Unit* caster, uint32 spellId, Position const& pos, float radius, DynamicObjectType type)
+bool DynamicObject::CreateDynamicObject(ObjectGuid::LowType guidlow, Unit* caster, uint32 spellId, Position const& pos, float radius, DynamicObjectType type)
{
SetMap(caster->GetMap());
Relocate(pos);
@@ -88,7 +89,7 @@ bool DynamicObject::CreateDynamicObject(uint32 guidlow, Unit* caster, uint32 spe
return false;
}
- WorldObject::_Create(guidlow, HIGHGUID_DYNAMICOBJECT, caster->GetPhaseMask());
+ WorldObject::_Create(guidlow, HighGuid::DynamicObject, caster->GetPhaseMask());
SetEntry(spellId);
SetObjectScale(1);
diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.h b/src/server/game/Entities/DynamicObject/DynamicObject.h
index f850573ec5a..44c771c77c4 100644
--- a/src/server/game/Entities/DynamicObject/DynamicObject.h
+++ b/src/server/game/Entities/DynamicObject/DynamicObject.h
@@ -41,7 +41,7 @@ class DynamicObject : public WorldObject, public GridObject<DynamicObject>, publ
void AddToWorld() override;
void RemoveFromWorld() override;
- bool CreateDynamicObject(uint32 guidlow, Unit* caster, uint32 spellId, Position const& pos, float radius, DynamicObjectType type);
+ bool CreateDynamicObject(ObjectGuid::LowType guidlow, Unit* caster, uint32 spellId, Position const& pos, float radius, DynamicObjectType type);
void Update(uint32 p_time) override;
void Remove();
void SetDuration(int32 newDuration);
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 9777672e175..c1ec2294c3d 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -52,7 +52,7 @@ GameObject::GameObject() : WorldObject(false), MapObject(),
m_goInfo = NULL;
m_goData = NULL;
- m_DBTableGuid = 0;
+ m_spawnId = 0;
m_rotation = 0;
m_lootRecipientGroup = 0;
@@ -115,7 +115,7 @@ void GameObject::RemoveFromOwner()
// This happens when a mage portal is despawned after the caster changes map (for example using the portal)
TC_LOG_DEBUG("misc", "Removed GameObject (GUID: %u Entry: %u SpellId: %u LinkedGO: %u) that just lost any reference to the owner (%s) GO list",
- GetGUIDLow(), GetGOInfo()->entry, m_spellId, GetGOInfo()->GetLinkedGameObjectEntry(), ownerGUID.ToString().c_str());
+ GetGUID().GetCounter(), GetGOInfo()->entry, m_spellId, GetGOInfo()->GetLinkedGameObjectEntry(), ownerGUID.ToString().c_str());
SetOwnerGUID(ObjectGuid::Empty);
}
@@ -127,7 +127,9 @@ void GameObject::AddToWorld()
if (m_zoneScript)
m_zoneScript->OnGameObjectCreate(this);
- sObjectAccessor->AddObject(this);
+ GetMap()->GetObjectsStore().Insert<GameObject>(GetGUID(), this);
+ if (m_spawnId)
+ GetMap()->GetGameObjectBySpawnIdStore().insert(std::make_pair(m_spawnId, this));
// The state can be changed after GameObject::Create but before GameObject::AddToWorld
bool toggledState = GetGoType() == GAMEOBJECT_TYPE_CHEST ? getLootState() == GO_READY : (GetGoState() == GO_STATE_READY || IsTransport());
@@ -156,12 +158,16 @@ void GameObject::RemoveFromWorld()
if (m_model)
if (GetMap()->ContainsGameObjectModel(*m_model))
GetMap()->RemoveGameObjectModel(*m_model);
+
WorldObject::RemoveFromWorld();
- sObjectAccessor->RemoveObject(this);
+
+ if (m_spawnId)
+ Trinity::Containers::MultimapErasePair(GetMap()->GetGameObjectBySpawnIdStore(), m_spawnId, this);
+ GetMap()->GetObjectsStore().Remove<GameObject>(GetGUID());
}
}
-bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMask, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, GOState go_state, uint32 artKit)
+bool GameObject::Create(ObjectGuid::LowType guidlow, uint32 name_id, Map* map, uint32 phaseMask, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, GOState go_state, uint32 artKit)
{
ASSERT(map);
SetMap(map);
@@ -200,7 +206,7 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMa
if (goinfo->type == GAMEOBJECT_TYPE_TRANSPORT)
m_updateFlag = (m_updateFlag | UPDATEFLAG_TRANSPORT) & ~UPDATEFLAG_POSITION;
- Object::_Create(guidlow, goinfo->entry, HIGHGUID_GAMEOBJECT);
+ Object::_Create(guidlow, goinfo->entry, HighGuid::GameObject);
m_goInfo = goinfo;
@@ -273,7 +279,7 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMa
break;
}
- if (GameObjectAddon const* addon = sObjectMgr->GetGameObjectAddon(guidlow))
+ if (GameObjectAddon const* addon = sObjectMgr->GetGameObjectAddon(GetSpawnId()))
{
if (addon->InvisibilityValue)
{
@@ -390,7 +396,7 @@ void GameObject::Update(uint32 diff)
time_t now = time(NULL);
if (m_respawnTime <= now) // timer expired
{
- ObjectGuid dbtableHighGuid(HIGHGUID_GAMEOBJECT, GetEntry(), m_DBTableGuid);
+ ObjectGuid dbtableHighGuid(HighGuid::GameObject, GetEntry(), m_spawnId);
time_t linkedRespawntime = GetMap()->GetLinkedRespawnTime(dbtableHighGuid);
if (linkedRespawntime) // Can't respawn, the master is dead
{
@@ -446,9 +452,9 @@ void GameObject::Update(uint32 diff)
}
// Respawn timer
- uint32 poolid = GetDBTableGUIDLow() ? sPoolMgr->IsPartOfAPool<GameObject>(GetDBTableGUIDLow()) : 0;
+ uint32 poolid = GetSpawnId() ? sPoolMgr->IsPartOfAPool<GameObject>(GetSpawnId()) : 0;
if (poolid)
- sPoolMgr->UpdatePool<GameObject>(poolid, GetDBTableGUIDLow());
+ sPoolMgr->UpdatePool<GameObject>(poolid, GetSpawnId());
else
GetMap()->AddToMap(this);
}
@@ -686,9 +692,9 @@ void GameObject::Delete()
SetGoState(GO_STATE_READY);
SetUInt32Value(GAMEOBJECT_FLAGS, GetGOInfo()->flags);
- uint32 poolid = GetDBTableGUIDLow() ? sPoolMgr->IsPartOfAPool<GameObject>(GetDBTableGUIDLow()) : 0;
+ uint32 poolid = GetSpawnId() ? sPoolMgr->IsPartOfAPool<GameObject>(GetSpawnId()) : 0;
if (poolid)
- sPoolMgr->UpdatePool<GameObject>(poolid, GetDBTableGUIDLow());
+ sPoolMgr->UpdatePool<GameObject>(poolid, GetSpawnId());
else
AddObjectToRemoveList();
}
@@ -737,7 +743,7 @@ void GameObject::SaveToDB()
{
// this should only be used when the gameobject has already been loaded
// preferably after adding to map, because mapid may not be valid otherwise
- GameObjectData const* data = sObjectMgr->GetGOData(m_DBTableGuid);
+ GameObjectData const* data = sObjectMgr->GetGOData(m_spawnId);
if (!data)
{
TC_LOG_ERROR("misc", "GameObject::SaveToDB failed, cannot get gameobject data!");
@@ -754,10 +760,11 @@ void GameObject::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask)
if (!goI)
return;
- if (!m_DBTableGuid)
- m_DBTableGuid = GetGUIDLow();
+ if (!m_spawnId)
+ m_spawnId = sObjectMgr->GenerateGameObjectSpawnId();
+
// update in loaded data (changing data only in this place)
- GameObjectData& data = sObjectMgr->NewGOData(m_DBTableGuid);
+ GameObjectData& data = sObjectMgr->NewGOData(m_spawnId);
// data->guid = guid must not be updated at save
data.id = GetEntry();
@@ -783,11 +790,11 @@ void GameObject::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask)
uint8 index = 0;
PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAMEOBJECT);
- stmt->setUInt32(0, m_DBTableGuid);
+ stmt->setUInt32(0, m_spawnId);
trans->Append(stmt);
stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_GAMEOBJECT);
- stmt->setUInt32(index++, m_DBTableGuid);
+ stmt->setUInt32(index++, m_spawnId);
stmt->setUInt32(index++, GetEntry());
stmt->setUInt16(index++, uint16(mapid));
stmt->setUInt8(index++, spawnMask);
@@ -808,13 +815,13 @@ void GameObject::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask)
WorldDatabase.CommitTransaction(trans);
}
-bool GameObject::LoadGameObjectFromDB(uint32 guid, Map* map, bool addToMap)
+bool GameObject::LoadGameObjectFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap)
{
- GameObjectData const* data = sObjectMgr->GetGOData(guid);
+ GameObjectData const* data = sObjectMgr->GetGOData(spawnId);
if (!data)
{
- TC_LOG_ERROR("sql.sql", "Gameobject (GUID: %u) not found in table `gameobject`, can't load. ", guid);
+ TC_LOG_ERROR("sql.sql", "Gameobject (GUID: %u) not found in table `gameobject`, can't load. ", spawnId);
return false;
}
@@ -835,10 +842,8 @@ bool GameObject::LoadGameObjectFromDB(uint32 guid, Map* map, bool addToMap)
GOState go_state = data->go_state;
uint32 artKit = data->artKit;
- m_DBTableGuid = guid;
- if (map->GetInstanceId() != 0) guid = sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT);
-
- if (!Create(guid, entry, map, phaseMask, x, y, z, ang, rotation0, rotation1, rotation2, rotation3, animprogress, go_state, artKit))
+ m_spawnId = spawnId;
+ if (!Create(map->GenerateLowGuid<HighGuid::GameObject>(), entry, map, phaseMask, x, y, z, ang, rotation0, rotation1, rotation2, rotation3, animprogress, go_state, artKit))
return false;
if (data->spawntimesecs >= 0)
@@ -854,13 +859,13 @@ bool GameObject::LoadGameObjectFromDB(uint32 guid, Map* map, bool addToMap)
else
{
m_respawnDelayTime = data->spawntimesecs;
- m_respawnTime = GetMap()->GetGORespawnTime(m_DBTableGuid);
+ m_respawnTime = GetMap()->GetGORespawnTime(m_spawnId);
// ready to respawn
if (m_respawnTime && m_respawnTime <= time(NULL))
{
m_respawnTime = 0;
- GetMap()->RemoveGORespawnTime(m_DBTableGuid);
+ GetMap()->RemoveGORespawnTime(m_spawnId);
}
}
}
@@ -881,18 +886,18 @@ bool GameObject::LoadGameObjectFromDB(uint32 guid, Map* map, bool addToMap)
void GameObject::DeleteFromDB()
{
- GetMap()->RemoveGORespawnTime(m_DBTableGuid);
- sObjectMgr->DeleteGOData(m_DBTableGuid);
+ GetMap()->RemoveGORespawnTime(m_spawnId);
+ sObjectMgr->DeleteGOData(m_spawnId);
PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAMEOBJECT);
- stmt->setUInt32(0, m_DBTableGuid);
+ stmt->setUInt32(0, m_spawnId);
WorldDatabase.Execute(stmt);
stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_EVENT_GAMEOBJECT);
- stmt->setUInt32(0, m_DBTableGuid);
+ stmt->setUInt32(0, m_spawnId);
WorldDatabase.Execute(stmt);
}
@@ -960,7 +965,7 @@ Unit* GameObject::GetOwner() const
void GameObject::SaveRespawnTime()
{
if (m_goData && m_goData->dbData && m_respawnTime > time(NULL) && m_spawnedByDefault)
- GetMap()->SaveGORespawnTime(m_DBTableGuid, m_respawnTime);
+ GetMap()->SaveGORespawnTime(m_spawnId, m_respawnTime);
}
bool GameObject::IsNeverVisible() const
@@ -1017,7 +1022,7 @@ void GameObject::Respawn()
if (m_spawnedByDefault && m_respawnTime > 0)
{
m_respawnTime = time(NULL);
- GetMap()->RemoveGORespawnTime(m_DBTableGuid);
+ GetMap()->RemoveGORespawnTime(m_spawnId);
}
}
@@ -1142,12 +1147,12 @@ void GameObject::UseDoorOrButton(uint32 time_to_restore, bool alternative /* = f
void GameObject::SetGoArtKit(uint8 kit)
{
SetByteValue(GAMEOBJECT_BYTES_1, 2, kit);
- GameObjectData* data = const_cast<GameObjectData*>(sObjectMgr->GetGOData(m_DBTableGuid));
+ GameObjectData* data = const_cast<GameObjectData*>(sObjectMgr->GetGOData(m_spawnId));
if (data)
data->artKit = kit;
}
-void GameObject::SetGoArtKit(uint8 artkit, GameObject* go, uint32 lowguid)
+void GameObject::SetGoArtKit(uint8 artkit, GameObject* go, ObjectGuid::LowType lowguid)
{
const GameObjectData* data = NULL;
if (go)
@@ -1335,7 +1340,7 @@ void GameObject::Use(Unit* user)
if (info->goober.eventId)
{
- TC_LOG_DEBUG("maps.script", "Goober ScriptStart id %u for GO entry %u (GUID %u).", info->goober.eventId, GetEntry(), GetDBTableGUIDLow());
+ TC_LOG_DEBUG("maps.script", "Goober ScriptStart id %u for GO entry %u (GUID %u).", info->goober.eventId, GetEntry(), GetSpawnId());
GetMap()->ScriptsStart(sEventScripts, info->goober.eventId, player, this);
EventInform(info->goober.eventId, user);
}
@@ -1741,7 +1746,7 @@ void GameObject::Use(Unit* user)
default:
if (GetGoType() >= MAX_GAMEOBJECT_TYPE)
TC_LOG_ERROR("misc", "GameObject::Use(): unit (type: %u, guid: %u, name: %s) tries to use object (guid: %u, entry: %u, name: %s) of unknown type (%u)",
- user->GetTypeId(), user->GetGUIDLow(), user->GetName().c_str(), GetGUIDLow(), GetEntry(), GetGOInfo()->name.c_str(), GetGoType());
+ user->GetTypeId(), user->GetGUID().GetCounter(), user->GetName().c_str(), GetGUID().GetCounter(), GetEntry(), GetGOInfo()->name.c_str(), GetGoType());
break;
}
@@ -2273,9 +2278,9 @@ void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* t
void GameObject::GetRespawnPosition(float &x, float &y, float &z, float* ori /* = NULL*/) const
{
- if (m_DBTableGuid)
+ if (m_spawnId)
{
- if (GameObjectData const* data = sObjectMgr->GetGOData(GetDBTableGUIDLow()))
+ if (GameObjectData const* data = sObjectMgr->GetGOData(GetSpawnId()))
{
x = data->posX;
y = data->posY;
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index 7ef8ef2737d..a744efbe1e3 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -652,7 +652,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
void RemoveFromWorld() override;
void CleanupsBeforeDelete(bool finalCleanup = true) override;
- bool Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMask, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, GOState go_state, uint32 artKit = 0);
+ bool Create(ObjectGuid::LowType guidlow, uint32 name_id, Map* map, uint32 phaseMask, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, GOState go_state, uint32 artKit = 0);
void Update(uint32 p_time) override;
GameObjectTemplate const* GetGOInfo() const { return m_goInfo; }
GameObjectData const* GetGOData() const { return m_goData; }
@@ -662,7 +662,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
bool IsDynTransport() const;
bool IsDestructibleBuilding() const;
- uint32 GetDBTableGUIDLow() const { return m_DBTableGuid; }
+ ObjectGuid::LowType GetSpawnId() const { return m_spawnId; }
void UpdateRotationFields(float rotation2 = 0.0f, float rotation3 = 0.0f);
@@ -671,8 +671,8 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
void SaveToDB();
void SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask);
- bool LoadFromDB(uint32 guid, Map* map) { return LoadGameObjectFromDB(guid, map, false); }
- bool LoadGameObjectFromDB(uint32 guid, Map* map, bool addToMap = true);
+ bool LoadFromDB(ObjectGuid::LowType spawnId, Map* map) { return LoadGameObjectFromDB(spawnId, map, false); }
+ bool LoadGameObjectFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap = true);
void DeleteFromDB();
void SetOwnerGUID(ObjectGuid owner)
@@ -680,7 +680,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
// Owner already found and different than expected owner - remove object from old owner
if (owner && GetOwnerGUID() && GetOwnerGUID() != owner)
{
- ASSERT(false);
+ ABORT();
}
m_spawnedByDefault = false; // all object with owner is despawned after delay
SetGuidValue(OBJECT_FIELD_CREATED_BY, owner);
@@ -733,7 +733,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
void SetGoArtKit(uint8 artkit);
uint8 GetGoAnimProgress() const { return GetByteValue(GAMEOBJECT_BYTES_1, 3); }
void SetGoAnimProgress(uint8 animprogress) { SetByteValue(GAMEOBJECT_BYTES_1, 3, animprogress); }
- static void SetGoArtKit(uint8 artkit, GameObject* go, uint32 lowguid = 0);
+ static void SetGoArtKit(uint8 artkit, GameObject* go, ObjectGuid::LowType lowguid = 0);
void SetPhaseMask(uint32 newPhaseMask, bool update) override;
void EnableCollision(bool enable);
@@ -751,10 +751,10 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
void RemoveLootMode(uint16 lootMode) { m_LootMode &= ~lootMode; }
void ResetLootMode() { m_LootMode = LOOT_MODE_DEFAULT; }
- void AddToSkillupList(uint32 PlayerGuidLow) { m_SkillupList.push_back(PlayerGuidLow); }
- bool IsInSkillupList(uint32 PlayerGuidLow) const
+ void AddToSkillupList(ObjectGuid::LowType PlayerGuidLow) { m_SkillupList.push_back(PlayerGuidLow); }
+ bool IsInSkillupList(ObjectGuid::LowType PlayerGuidLow) const
{
- for (std::list<uint32>::const_iterator i = m_SkillupList.begin(); i != m_SkillupList.end(); ++i)
+ for (std::list<ObjectGuid::LowType>::const_iterator i = m_SkillupList.begin(); i != m_SkillupList.end(); ++i)
if (*i == PlayerGuidLow)
return true;
@@ -778,7 +778,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
bool IsLootAllowedFor(Player const* player) const;
bool HasLootRecipient() const { return !m_lootRecipient.IsEmpty() || m_lootRecipientGroup; }
uint32 m_groupLootTimer; // (msecs)timer used for group loot
- uint32 lootingGroupLowGUID; // used to find group which is looting
+ ObjectGuid::LowType lootingGroupLowGUID; // used to find group which is looting
bool hasQuest(uint32 quest_id) const override;
bool hasInvolvedQuest(uint32 quest_id) const override;
@@ -843,6 +843,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
float GetStationaryY() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionY(); return GetPositionY(); }
float GetStationaryZ() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionZ(); return GetPositionZ(); }
float GetStationaryO() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetOrientation(); return GetOrientation(); }
+ void RelocateStationaryPosition(float x, float y, float z, float o) { m_stationaryPosition.Relocate(x, y, z, o); }
float GetInteractionDistance();
@@ -860,7 +861,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
bool m_spawnedByDefault;
time_t m_cooldownTime; // used as internal reaction delay time store (not state change reaction).
// For traps this: spell casting cooldown, for doors/buttons: reset time.
- std::list<uint32> m_SkillupList;
+ std::list<ObjectGuid::LowType> m_SkillupList;
ObjectGuid m_ritualOwnerGUID; // used for GAMEOBJECT_TYPE_SUMMONING_RITUAL where GO is not summoned (no owner)
GuidSet m_unique_users;
@@ -869,7 +870,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
typedef std::map<uint32, ObjectGuid> ChairSlotAndUser;
ChairSlotAndUser ChairListSlots;
- uint32 m_DBTableGuid; ///< For new or temporary gameobjects is 0 for saved it is lowguid
+ ObjectGuid::LowType m_spawnId; ///< For new or temporary gameobjects is 0 for saved it is lowguid
GameObjectTemplate const* m_goInfo;
GameObjectData const* m_goData;
GameObjectValue m_goValue;
diff --git a/src/server/game/Entities/Item/Container/Bag.cpp b/src/server/game/Entities/Item/Container/Bag.cpp
index e3a325d9c2d..1d2fd9b2804 100644
--- a/src/server/game/Entities/Item/Container/Bag.cpp
+++ b/src/server/game/Entities/Item/Container/Bag.cpp
@@ -69,14 +69,14 @@ void Bag::RemoveFromWorld()
Item::RemoveFromWorld();
}
-bool Bag::Create(uint32 guidlow, uint32 itemid, Player const* owner)
+bool Bag::Create(ObjectGuid::LowType guidlow, uint32 itemid, Player const* owner)
{
ItemTemplate const* itemProto = sObjectMgr->GetItemTemplate(itemid);
if (!itemProto || itemProto->ContainerSlots > MAX_BAG_SIZE)
return false;
- Object::_Create(guidlow, 0, HIGHGUID_CONTAINER);
+ Object::_Create(guidlow, 0, HighGuid::Container);
SetEntry(itemid);
SetObjectScale(1.0f);
@@ -109,7 +109,7 @@ void Bag::SaveToDB(SQLTransaction& trans)
Item::SaveToDB(trans);
}
-bool Bag::LoadFromDB(uint32 guid, ObjectGuid owner_guid, Field* fields, uint32 entry)
+bool Bag::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field* fields, uint32 entry)
{
if (!Item::LoadFromDB(guid, owner_guid, fields, entry))
return false;
diff --git a/src/server/game/Entities/Item/Container/Bag.h b/src/server/game/Entities/Item/Container/Bag.h
index 11bff67855d..ead059030b6 100644
--- a/src/server/game/Entities/Item/Container/Bag.h
+++ b/src/server/game/Entities/Item/Container/Bag.h
@@ -35,7 +35,7 @@ class Bag : public Item
void AddToWorld() override;
void RemoveFromWorld() override;
- bool Create(uint32 guidlow, uint32 itemid, Player const* owner) override;
+ bool Create(ObjectGuid::LowType guidlow, ObjectGuid::LowType itemid, Player const* owner) override;
void Clear();
void StoreItem(uint8 slot, Item* pItem, bool update);
@@ -54,7 +54,7 @@ class Bag : public Item
// overwrite virtual Item::SaveToDB
void SaveToDB(SQLTransaction& trans) override;
// overwrite virtual Item::LoadFromDB
- bool LoadFromDB(uint32 guid, ObjectGuid owner_guid, Field* fields, uint32 entry) override;
+ bool LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field* fields, uint32 entry) override;
// overwrite virtual Item::DeleteFromDB
void DeleteFromDB(SQLTransaction& trans) override;
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index 141bac5e50f..1b7914fd85f 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -28,6 +28,7 @@
#include "ConditionMgr.h"
#include "Player.h"
#include "WorldSession.h"
+#include "TradeData.h"
void AddItemsSetItem(Player* player, Item* item)
{
@@ -255,9 +256,9 @@ Item::Item()
m_paidExtendedCost = 0;
}
-bool Item::Create(uint32 guidlow, uint32 itemid, Player const* owner)
+bool Item::Create(ObjectGuid::LowType guidlow, uint32 itemid, Player const* owner)
{
- Object::_Create(guidlow, 0, HIGHGUID_ITEM);
+ Object::_Create(guidlow, 0, HighGuid::Item);
SetEntry(itemid);
SetObjectScale(1.0f);
@@ -317,7 +318,7 @@ void Item::SaveToDB(SQLTransaction& trans)
if (!isInTransaction)
trans = CharacterDatabase.BeginTransaction();
- uint32 guid = GetGUIDLow();
+ ObjectGuid::LowType guid = GetGUID().GetCounter();
switch (uState)
{
case ITEM_NEW:
@@ -398,14 +399,14 @@ void Item::SaveToDB(SQLTransaction& trans)
CharacterDatabase.CommitTransaction(trans);
}
-bool Item::LoadFromDB(uint32 guid, ObjectGuid owner_guid, Field* fields, uint32 entry)
+bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field* fields, uint32 entry)
{
// 0 1 2 3 4 5 6 7 8 9 10
//result = CharacterDatabase.PQuery("SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text FROM item_instance WHERE guid = '%u'", guid);
// create item before any checks for store correct guid
// and allow use "FSetState(ITEM_REMOVED); SaveToDB();" for deleting item from DB
- Object::_Create(guid, 0, HIGHGUID_ITEM);
+ Object::_Create(guid, 0, HighGuid::Item);
// Set entry, MUST be before proto check
SetEntry(entry);
@@ -420,8 +421,8 @@ bool Item::LoadFromDB(uint32 guid, ObjectGuid owner_guid, Field* fields, uint32
SetOwnerGUID(owner_guid);
bool need_save = false; // need explicit save data at load fixes
- SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32()));
- SetGuidValue(ITEM_FIELD_GIFTCREATOR, ObjectGuid(HIGHGUID_PLAYER, fields[1].GetUInt32()));
+ SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid(HighGuid::Player, fields[0].GetUInt32()));
+ SetGuidValue(ITEM_FIELD_GIFTCREATOR, ObjectGuid(HighGuid::Player, fields[1].GetUInt32()));
SetCount(fields[2].GetUInt32());
uint32 duration = fields[3].GetUInt32();
@@ -480,7 +481,7 @@ bool Item::LoadFromDB(uint32 guid, ObjectGuid owner_guid, Field* fields, uint32
}
/*static*/
-void Item::DeleteFromDB(SQLTransaction& trans, uint32 itemGuid)
+void Item::DeleteFromDB(SQLTransaction& trans, ObjectGuid::LowType itemGuid)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE);
stmt->setUInt32(0, itemGuid);
@@ -489,7 +490,7 @@ void Item::DeleteFromDB(SQLTransaction& trans, uint32 itemGuid)
void Item::DeleteFromDB(SQLTransaction& trans)
{
- DeleteFromDB(trans, GetGUIDLow());
+ DeleteFromDB(trans, GetGUID().GetCounter());
// Delete the items if this is a container
if (!loot.isLooted())
@@ -497,7 +498,7 @@ void Item::DeleteFromDB(SQLTransaction& trans)
}
/*static*/
-void Item::DeleteFromInventoryDB(SQLTransaction& trans, uint32 itemGuid)
+void Item::DeleteFromInventoryDB(SQLTransaction& trans, ObjectGuid::LowType itemGuid)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_INVENTORY_BY_ITEM);
stmt->setUInt32(0, itemGuid);
@@ -506,7 +507,7 @@ void Item::DeleteFromInventoryDB(SQLTransaction& trans, uint32 itemGuid)
void Item::DeleteFromInventoryDB(SQLTransaction& trans)
{
- DeleteFromInventoryDB(trans, GetGUIDLow());
+ DeleteFromInventoryDB(trans, GetGUID().GetCounter());
}
ItemTemplate const* Item::GetTemplate() const
@@ -1061,7 +1062,7 @@ Item* Item::CreateItem(uint32 itemEntry, uint32 count, Player const* player)
ASSERT(count != 0 && "pProto->Stackable == 0 but checked at loading already");
Item* item = NewItemOrBag(proto);
- if (item->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_ITEM), itemEntry, player))
+ if (item->Create(sObjectMgr->GetGenerator<HighGuid::Item>().Generate(), itemEntry, player))
{
item->SetCount(count);
return item;
@@ -1070,7 +1071,7 @@ Item* Item::CreateItem(uint32 itemEntry, uint32 count, Player const* player)
delete item;
}
else
- ASSERT(false);
+ ABORT();
return NULL;
}
@@ -1101,7 +1102,7 @@ bool Item::IsBindedNotWith(Player const* player) const
return false;
if (HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_BOP_TRADEABLE))
- if (allowedGUIDs.find(player->GetGUIDLow()) != allowedGUIDs.end())
+ if (allowedGUIDs.find(player->GetGUID().GetCounter()) != allowedGUIDs.end())
return false;
// BOA item case
@@ -1118,16 +1119,28 @@ void Item::BuildUpdate(UpdateDataMapType& data_map)
ClearUpdateMask(false);
}
+void Item::AddToObjectUpdate()
+{
+ if (Player* owner = GetOwner())
+ owner->GetMap()->AddUpdateObject(this);
+}
+
+void Item::RemoveFromObjectUpdate()
+{
+ if (Player* owner = GetOwner())
+ owner->GetMap()->RemoveUpdateObject(this);
+}
+
void Item::SaveRefundDataToDB()
{
SQLTransaction trans = CharacterDatabase.BeginTransaction();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_REFUND_INSTANCE);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
trans->Append(stmt);
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_REFUND_INSTANCE);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, GetRefundRecipient());
stmt->setUInt32(2, GetPaidMoney());
stmt->setUInt16(3, uint16(GetPaidExtendedCost()));
@@ -1141,7 +1154,7 @@ void Item::DeleteRefundDataFromDB(SQLTransaction* trans)
if (trans)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_REFUND_INSTANCE);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
(*trans)->Append(stmt);
}
@@ -1220,7 +1233,7 @@ void Item::ClearSoulboundTradeable(Player* currentOwner)
allowedGUIDs.clear();
SetState(ITEM_CHANGED, currentOwner);
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_BOP_TRADE);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
CharacterDatabase.Execute(stmt);
}
@@ -1242,7 +1255,7 @@ void Item::ItemContainerSaveLootToDB()
if (loot.isLooted()) // no money and no loot
return;
- uint32 container_id = GetGUIDLow();
+ ObjectGuid::LowType container_id = GetGUID().GetCounter();
SQLTransaction trans = CharacterDatabase.BeginTransaction();
loot.containerID = container_id; // Save this for when a LootItem is removed
@@ -1310,7 +1323,7 @@ bool Item::ItemContainerLoadLootFromDB()
// Default. If there are no records for this item then it will be rolled for in Player::SendLoot()
m_lootGenerated = false;
- uint32 container_id = GetGUIDLow();
+ ObjectGuid::LowType container_id = GetGUID().GetCounter();
// Save this for later use
loot.containerID = container_id;
@@ -1364,7 +1377,7 @@ bool Item::ItemContainerLoadLootFromDB()
// If container item is in a bag, add that player as an allowed looter
if (GetBagSlot())
- loot_item.allowedGUIDs.insert(GetOwner()->GetGUIDLow());
+ loot_item.allowedGUIDs.insert(GetOwner()->GetGUID().GetCounter());
// Finally add the LootItem to the container
loot.items.push_back(loot_item);
@@ -1386,7 +1399,7 @@ bool Item::ItemContainerLoadLootFromDB()
void Item::ItemContainerDeleteLootItemsFromDB()
{
// Deletes items associated with an openable item from the DB
- uint32 containerId = GetGUIDLow();
+ ObjectGuid::LowType containerId = GetGUID().GetCounter();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEMCONTAINER_ITEMS);
stmt->setUInt32(0, containerId);
SQLTransaction trans = CharacterDatabase.BeginTransaction();
@@ -1397,7 +1410,7 @@ void Item::ItemContainerDeleteLootItemsFromDB()
void Item::ItemContainerDeleteLootItemFromDB(uint32 itemID)
{
// Deletes a single item associated with an openable item from the DB
- uint32 containerId = GetGUIDLow();
+ ObjectGuid::LowType containerId = GetGUID().GetCounter();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEMCONTAINER_ITEM);
stmt->setUInt32(0, containerId);
stmt->setUInt32(1, itemID);
@@ -1409,7 +1422,7 @@ void Item::ItemContainerDeleteLootItemFromDB(uint32 itemID)
void Item::ItemContainerDeleteLootMoneyFromDB()
{
// Deletes the money loot associated with an openable item from the DB
- uint32 containerId = GetGUIDLow();
+ ObjectGuid::LowType containerId = GetGUID().GetCounter();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEMCONTAINER_MONEY);
stmt->setUInt32(0, containerId);
SQLTransaction trans = CharacterDatabase.BeginTransaction();
@@ -1423,3 +1436,19 @@ void Item::ItemContainerDeleteLootMoneyAndLootItemsFromDB()
ItemContainerDeleteLootMoneyFromDB();
ItemContainerDeleteLootItemsFromDB();
}
+
+void Item::SetCount(uint32 value)
+{
+ SetUInt32Value(ITEM_FIELD_STACK_COUNT, value);
+
+ if (Player* player = GetOwner())
+ {
+ if (TradeData* tradeData = player->GetTradeData())
+ {
+ TradeSlots slot = tradeData->GetTradeSlotForItem(GetGUID());
+
+ if (slot != TRADE_SLOT_INVALID)
+ tradeData->SetItem(slot, this, true);
+ }
+ }
+}
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index b832aeb5614..1eb6530a996 100644
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -211,7 +211,7 @@ class Item : public Object
Item();
- virtual bool Create(uint32 guidlow, uint32 itemid, Player const* owner);
+ virtual bool Create(ObjectGuid::LowType guidlow, ObjectGuid::LowType itemid, Player const* owner);
ItemTemplate const* GetTemplate() const;
@@ -225,10 +225,10 @@ class Item : public Object
bool IsBindedNotWith(Player const* player) const;
bool IsBoundByEnchant() const;
virtual void SaveToDB(SQLTransaction& trans);
- virtual bool LoadFromDB(uint32 guid, ObjectGuid owner_guid, Field* fields, uint32 entry);
- static void DeleteFromDB(SQLTransaction& trans, uint32 itemGuid);
+ virtual bool LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field* fields, uint32 entry);
+ static void DeleteFromDB(SQLTransaction& trans, ObjectGuid::LowType itemGuid);
virtual void DeleteFromDB(SQLTransaction& trans);
- static void DeleteFromInventoryDB(SQLTransaction& trans, uint32 itemGuid);
+ static void DeleteFromInventoryDB(SQLTransaction& trans, ObjectGuid::LowType itemGuid);
// Lootable items and their contents
void ItemContainerSaveLootToDB();
@@ -262,7 +262,7 @@ class Item : public Object
bool GemsFitSockets() const;
uint32 GetCount() const { return GetUInt32Value(ITEM_FIELD_STACK_COUNT); }
- void SetCount(uint32 value) { SetUInt32Value(ITEM_FIELD_STACK_COUNT, value); }
+ void SetCount(uint32 value);
uint32 GetMaxStackCount() const { return GetTemplate()->GetMaxStackSize(); }
uint8 GetGemCountWithID(uint32 GemID) const;
uint8 GetGemCountWithLimitCategory(uint32 limitCategory) const;
@@ -331,7 +331,7 @@ class Item : public Object
// Item Refund system
void SetNotRefundable(Player* owner, bool changestate = true, SQLTransaction* trans = NULL);
- void SetRefundRecipient(uint32 pGuidLow) { m_refundRecipient = pGuidLow; }
+ void SetRefundRecipient(ObjectGuid::LowType pGuidLow) { m_refundRecipient = pGuidLow; }
void SetPaidMoney(uint32 money) { m_paidMoney = money; }
void SetPaidExtendedCost(uint32 iece) { m_paidExtendedCost = iece; }
@@ -350,6 +350,9 @@ class Item : public Object
void BuildUpdate(UpdateDataMapType&) override;
+ void AddToObjectUpdate() override;
+ void RemoveFromObjectUpdate() override;
+
uint32 GetScriptId() const { return GetTemplate()->ScriptId; }
private:
std::string m_text;
@@ -359,7 +362,7 @@ class Item : public Object
int16 uQueuePos;
bool mb_in_trade; // true if item is currently in trade-window
time_t m_lastPlayedTimeUpdate;
- uint32 m_refundRecipient;
+ ObjectGuid::LowType m_refundRecipient;
uint32 m_paidMoney;
uint32 m_paidExtendedCost;
AllowedLooterSet allowedGUIDs;
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index fc55c09bffa..afb987f1980 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -67,7 +67,7 @@ WorldObject::~WorldObject()
{
TC_LOG_FATAL("misc", "WorldObject::~WorldObject Corpse Type: %d (%s) deleted but still in map!!",
ToCorpse()->GetType(), GetGUID().ToString().c_str());
- ASSERT(false);
+ ABORT();
}
ResetMap();
}
@@ -80,15 +80,13 @@ Object::~Object()
TC_LOG_FATAL("misc", "Object::~Object %s deleted but still in world!!", GetGUID().ToString().c_str());
if (isType(TYPEMASK_ITEM))
TC_LOG_FATAL("misc", "Item slot %u", ((Item*)this)->GetSlot());
- ASSERT(false);
- RemoveFromWorld();
+ ABORT();
}
if (m_objectUpdated)
{
TC_LOG_FATAL("misc", "Object::~Object %s deleted but still in update list!!", GetGUID().ToString().c_str());
- ASSERT(false);
- sObjectAccessor->RemoveUpdateObject(this);
+ ABORT();
}
delete [] m_uint32Values;
@@ -105,7 +103,7 @@ void Object::_InitValues()
m_objectUpdated = false;
}
-void Object::_Create(uint32 guidlow, uint32 entry, HighGuid guidhigh)
+void Object::_Create(ObjectGuid::LowType guidlow, uint32 entry, HighGuid guidhigh)
{
if (!m_uint32Values) _InitValues();
@@ -133,7 +131,8 @@ void Object::AddToWorld()
m_inWorld = true;
// synchronize values mirror with values array (changes will send in updatecreate opcode any way
- ClearUpdateMask(true);
+ ASSERT(!m_objectUpdated);
+ ClearUpdateMask(false);
}
void Object::RemoveFromWorld()
@@ -418,7 +417,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const
case TYPEID_GAMEOBJECT:
case TYPEID_DYNAMICOBJECT:
case TYPEID_CORPSE:
- *data << uint32(GetGUIDLow()); // GetGUIDLow()
+ *data << uint32(GetGUID().GetCounter()); // GetGUID().GetCounter()
break;
//! Unit, Player and default here are sending wrong values.
/// @todo Research the proper formula
@@ -509,6 +508,15 @@ void Object::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* targe
data->append(fieldBuffer);
}
+void Object::AddToObjectUpdateIfNeeded()
+{
+ if (m_inWorld && !m_objectUpdated)
+ {
+ AddToObjectUpdate();
+ m_objectUpdated = true;
+ }
+}
+
void Object::ClearUpdateMask(bool remove)
{
_changesMask.Clear();
@@ -516,7 +524,8 @@ void Object::ClearUpdateMask(bool remove)
if (m_objectUpdated)
{
if (remove)
- sObjectAccessor->RemoveUpdateObject(this);
+ RemoveFromObjectUpdate();
+
m_objectUpdated = false;
}
}
@@ -614,11 +623,7 @@ void Object::SetInt32Value(uint16 index, int32 value)
m_int32Values[index] = value;
_changesMask.SetBit(index);
- if (m_inWorld && !m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ AddToObjectUpdateIfNeeded();
}
}
@@ -631,11 +636,7 @@ void Object::SetUInt32Value(uint16 index, uint32 value)
m_uint32Values[index] = value;
_changesMask.SetBit(index);
- if (m_inWorld && !m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ AddToObjectUpdateIfNeeded();
}
}
@@ -657,11 +658,7 @@ void Object::SetUInt64Value(uint16 index, uint64 value)
_changesMask.SetBit(index);
_changesMask.SetBit(index + 1);
- if (m_inWorld && !m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ AddToObjectUpdateIfNeeded();
}
}
@@ -674,11 +671,7 @@ bool Object::AddGuidValue(uint16 index, ObjectGuid value)
_changesMask.SetBit(index);
_changesMask.SetBit(index + 1);
- if (m_inWorld && !m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ AddToObjectUpdateIfNeeded();
return true;
}
@@ -696,11 +689,7 @@ bool Object::RemoveGuidValue(uint16 index, ObjectGuid value)
_changesMask.SetBit(index);
_changesMask.SetBit(index + 1);
- if (m_inWorld && !m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ AddToObjectUpdateIfNeeded();
return true;
}
@@ -717,11 +706,7 @@ void Object::SetFloatValue(uint16 index, float value)
m_floatValues[index] = value;
_changesMask.SetBit(index);
- if (m_inWorld && !m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ AddToObjectUpdateIfNeeded();
}
}
@@ -741,11 +726,8 @@ void Object::SetByteValue(uint16 index, uint8 offset, uint8 value)
m_uint32Values[index] |= uint32(uint32(value) << (offset * 8));
_changesMask.SetBit(index);
- if (m_inWorld && !m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ AddToObjectUpdateIfNeeded();
+
}
}
@@ -765,11 +747,7 @@ void Object::SetUInt16Value(uint16 index, uint8 offset, uint16 value)
m_uint32Values[index] |= uint32(uint32(value) << (offset * 16));
_changesMask.SetBit(index);
- if (m_inWorld && !m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ AddToObjectUpdateIfNeeded();
}
}
@@ -782,11 +760,7 @@ void Object::SetGuidValue(uint16 index, ObjectGuid value)
_changesMask.SetBit(index);
_changesMask.SetBit(index + 1);
- if (m_inWorld && !m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ AddToObjectUpdateIfNeeded();
}
}
@@ -856,11 +830,7 @@ void Object::SetFlag(uint16 index, uint32 newFlag)
m_uint32Values[index] = newval;
_changesMask.SetBit(index);
- if (m_inWorld && !m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ AddToObjectUpdateIfNeeded();
}
}
@@ -877,11 +847,7 @@ void Object::RemoveFlag(uint16 index, uint32 oldFlag)
m_uint32Values[index] = newval;
_changesMask.SetBit(index);
- if (m_inWorld && !m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ AddToObjectUpdateIfNeeded();
}
}
@@ -921,11 +887,7 @@ void Object::SetByteFlag(uint16 index, uint8 offset, uint8 newFlag)
m_uint32Values[index] |= uint32(uint32(newFlag) << (offset * 8));
_changesMask.SetBit(index);
- if (m_inWorld && !m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ AddToObjectUpdateIfNeeded();
}
}
@@ -944,11 +906,7 @@ void Object::RemoveByteFlag(uint16 index, uint8 offset, uint8 oldFlag)
m_uint32Values[index] &= ~uint32(uint32(oldFlag) << (offset * 8));
_changesMask.SetBit(index);
- if (m_inWorld && !m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ AddToObjectUpdateIfNeeded();
}
}
@@ -1108,7 +1066,7 @@ void WorldObject::CleanupsBeforeDelete(bool /*finalCleanup*/)
transport->RemovePassenger(this);
}
-void WorldObject::_Create(uint32 guidlow, HighGuid guidhigh, uint32 phaseMask)
+void WorldObject::_Create(ObjectGuid::LowType guidlow, HighGuid guidhigh, uint32 phaseMask)
{
Object::_Create(guidlow, 0, guidhigh);
m_phaseMask = phaseMask;
@@ -1158,7 +1116,7 @@ bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool
float sizefactor = GetObjectSize() + obj->GetObjectSize();
float maxdist = dist2compare + sizefactor;
- if (GetTransport() && obj->GetTransport() && obj->GetTransport()->GetGUIDLow() == GetTransport()->GetGUIDLow())
+ if (GetTransport() && obj->GetTransport() && obj->GetTransport()->GetGUID().GetCounter() == GetTransport()->GetGUID().GetCounter())
{
float dtx = m_movementInfo.transport.pos.m_positionX - obj->m_movementInfo.transport.pos.m_positionX;
float dty = m_movementInfo.transport.pos.m_positionY - obj->m_movementInfo.transport.pos.m_positionY;
@@ -1747,11 +1705,7 @@ bool WorldObject::CanDetectStealthOf(WorldObject const* obj, bool checkAlert) co
void Object::ForceValuesUpdateAtIndex(uint32 i)
{
_changesMask.SetBit(i);
- if (m_inWorld && !m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ AddToObjectUpdateIfNeeded();
}
void Unit::BuildHeartBeatMsg(WorldPacket* data) const
@@ -1789,13 +1743,13 @@ void WorldObject::SendObjectDeSpawnAnim(ObjectGuid guid)
void WorldObject::SetMap(Map* map)
{
ASSERT(map);
- ASSERT(!IsInWorld() || GetTypeId() == TYPEID_CORPSE);
+ ASSERT(!IsInWorld());
if (m_currMap == map) // command add npc: first create, than loadfromdb
return;
if (m_currMap)
{
TC_LOG_FATAL("misc", "WorldObject::SetMap: obj %u new map %u %u, old map %u %u", (uint32)GetTypeId(), map->GetId(), map->GetInstanceId(), m_currMap->GetId(), m_currMap->GetInstanceId());
- ASSERT(false);
+ ABORT();
}
m_currMap = map;
m_mapId = map->GetId();
@@ -1829,7 +1783,7 @@ void WorldObject::AddObjectToRemoveList()
Map* map = FindMap();
if (!map)
{
- TC_LOG_ERROR("misc", "Object (TypeId: %u Entry: %u GUID: %u) at attempt add to move list not have valid map (Id: %u).", GetTypeId(), GetEntry(), GetGUIDLow(), GetMapId());
+ TC_LOG_ERROR("misc", "Object (TypeId: %u Entry: %u GUID: %u) at attempt add to move list not have valid map (Id: %u).", GetTypeId(), GetEntry(), GetGUID().GetCounter(), GetMapId());
return;
}
@@ -1910,7 +1864,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
break;
}
- if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), this, phase, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), nullptr, vehId))
+ if (!summon->Create(GenerateLowGuid<HighGuid::Unit>(), this, phase, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), nullptr, vehId))
{
delete summon;
return NULL;
@@ -1964,6 +1918,11 @@ void WorldObject::SetZoneScript()
}
}
+void WorldObject::ClearZoneScript()
+{
+ m_zoneScript = NULL;
+}
+
TempSummon* WorldObject::SummonCreature(uint32 entry, const Position &pos, TempSummonType spwtype, uint32 duration, uint32 /*vehId*/) const
{
if (Map* map = FindMap())
@@ -2004,7 +1963,7 @@ GameObject* WorldObject::SummonGameObject(uint32 entry, float x, float y, float
Map* map = GetMap();
GameObject* go = new GameObject();
- if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), entry, map, GetPhaseMask(), x, y, z, ang, rotation0, rotation1, rotation2, rotation3, 100, GO_STATE_READY))
+ if (!go->Create(map->GenerateLowGuid<HighGuid::GameObject>(), entry, map, GetPhaseMask(), x, y, z, ang, rotation0, rotation1, rotation2, rotation3, 100, GO_STATE_READY))
{
delete go;
return NULL;
@@ -2288,7 +2247,7 @@ void WorldObject::MovePosition(Position &pos, float dist, float angle)
if (!Trinity::IsValidMapCoord(destx, desty, pos.m_positionZ))
{
TC_LOG_FATAL("misc", "WorldObject::MovePosition: Object (TypeId: %u Entry: %u GUID: %u) has invalid coordinates X: %f and Y: %f were passed!",
- GetTypeId(), GetEntry(), GetGUIDLow(), destx, desty);
+ GetTypeId(), GetEntry(), GetGUID().GetCounter(), destx, desty);
return;
}
@@ -2563,6 +2522,16 @@ void WorldObject::BuildUpdate(UpdateDataMapType& data_map)
ClearUpdateMask(false);
}
+void WorldObject::AddToObjectUpdate()
+{
+ GetMap()->AddUpdateObject(this);
+}
+
+void WorldObject::RemoveFromObjectUpdate()
+{
+ GetMap()->RemoveUpdateObject(this);
+}
+
ObjectGuid WorldObject::GetTransGUID() const
{
if (GetTransport())
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index e673e346a5f..c9e3d069218 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -101,9 +101,6 @@ class Object
virtual void RemoveFromWorld();
ObjectGuid GetGUID() const { return GetGuidValue(OBJECT_FIELD_GUID); }
- uint32 GetGUIDLow() const { return GetGuidValue(OBJECT_FIELD_GUID).GetCounter(); }
- uint32 GetGUIDMid() const { return GetGuidValue(OBJECT_FIELD_GUID).GetEntry(); }
- uint32 GetGUIDHigh() const { return GetGuidValue(OBJECT_FIELD_GUID).GetHigh(); }
PackedGuid const& GetPackGUID() const { return m_PackGUID; }
uint32 GetEntry() const { return GetUInt32Value(OBJECT_FIELD_ENTRY); }
void SetEntry(uint32 entry) { SetUInt32Value(OBJECT_FIELD_ENTRY, entry); }
@@ -207,7 +204,7 @@ class Object
Object();
void _InitValues();
- void _Create(uint32 guidlow, uint32 entry, HighGuid guidhigh);
+ void _Create(ObjectGuid::LowType guidlow, uint32 entry, HighGuid guidhigh);
std::string _ConcatFields(uint16 startIndex, uint16 size) const;
void _LoadIntoDataField(std::string const& data, uint32 startOffset, uint32 count);
@@ -234,6 +231,10 @@ class Object
uint16 _fieldNotifyFlags;
+ virtual void AddToObjectUpdate() = 0;
+ virtual void RemoveFromObjectUpdate() = 0;
+ void AddToObjectUpdateIfNeeded();
+
bool m_objectUpdated;
private:
@@ -430,7 +431,7 @@ class WorldObject : public Object, public WorldLocation
virtual void Update (uint32 /*time_diff*/) { }
- void _Create(uint32 guidlow, HighGuid guidhigh, uint32 phaseMask);
+ void _Create(ObjectGuid::LowType guidlow, HighGuid guidhigh, uint32 phaseMask);
virtual void RemoveFromWorld() override;
void GetNearPoint2D(float &x, float &y, float distance, float absAngle) const;
@@ -535,6 +536,7 @@ class WorldObject : public Object, public WorldLocation
Map const* GetBaseMap() const;
void SetZoneScript();
+ void ClearZoneScript();
ZoneScript* GetZoneScript() const { return m_zoneScript; }
TempSummon* SummonCreature(uint32 id, Position const &pos, TempSummonType spwtype = TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime = 0, uint32 vehId = 0) const;
@@ -555,6 +557,9 @@ class WorldObject : public Object, public WorldLocation
virtual void UpdateObjectVisibility(bool forced = true);
void BuildUpdate(UpdateDataMapType&) override;
+ void AddToObjectUpdate() override;
+ void RemoveFromObjectUpdate() override;
+
//relocation and visibility system functions
void AddToNotify(uint16 f) { m_notifyflags |= f;}
bool isNeedNotify(uint16 f) const { return (m_notifyflags & f) != 0; }
diff --git a/src/server/game/Entities/Object/ObjectGuid.cpp b/src/server/game/Entities/Object/ObjectGuid.cpp
index b86a253a84d..552705d8df8 100644
--- a/src/server/game/Entities/Object/ObjectGuid.cpp
+++ b/src/server/game/Entities/Object/ObjectGuid.cpp
@@ -28,18 +28,18 @@ char const* ObjectGuid::GetTypeName(HighGuid high)
{
switch (high)
{
- case HIGHGUID_ITEM: return "Item";
- case HIGHGUID_PLAYER: return "Player";
- case HIGHGUID_GAMEOBJECT: return "Gameobject";
- case HIGHGUID_TRANSPORT: return "Transport";
- case HIGHGUID_UNIT: return "Creature";
- case HIGHGUID_PET: return "Pet";
- case HIGHGUID_VEHICLE: return "Vehicle";
- case HIGHGUID_DYNAMICOBJECT: return "DynObject";
- case HIGHGUID_CORPSE: return "Corpse";
- case HIGHGUID_MO_TRANSPORT: return "MoTransport";
- case HIGHGUID_INSTANCE: return "InstanceID";
- case HIGHGUID_GROUP: return "Group";
+ case HighGuid::Item: return "Item";
+ case HighGuid::Player: return "Player";
+ case HighGuid::GameObject: return "Gameobject";
+ case HighGuid::Transport: return "Transport";
+ case HighGuid::Unit: return "Creature";
+ case HighGuid::Pet: return "Pet";
+ case HighGuid::Vehicle: return "Vehicle";
+ case HighGuid::DynamicObject: return "DynObject";
+ case HighGuid::Corpse: return "Corpse";
+ case HighGuid::Mo_Transport: return "MoTransport";
+ case HighGuid::Instance: return "InstanceID";
+ case HighGuid::Group: return "Group";
default:
return "<unknown>";
}
@@ -57,15 +57,14 @@ std::string ObjectGuid::ToString() const
return str.str();
}
-template<HighGuid high>
-uint32 ObjectGuidGenerator<high>::Generate()
+ObjectGuid ObjectGuid::Global(HighGuid type, LowType counter)
{
- if (_nextGuid >= ObjectGuid::GetMaxCounter(high) - 1)
- {
- TC_LOG_ERROR("", "%s guid overflow!! Can't continue, shutting down server. ", ObjectGuid::GetTypeName(high));
- World::StopNow(ERROR_EXIT_CODE);
- }
- return _nextGuid++;
+ return ObjectGuid(type, counter);
+}
+
+ObjectGuid ObjectGuid::MapSpecific(HighGuid type, uint32 entry, LowType counter)
+{
+ return ObjectGuid(type, entry, counter);
}
ByteBuffer& operator<<(ByteBuffer& buf, ObjectGuid const& guid)
@@ -92,14 +91,8 @@ ByteBuffer& operator>>(ByteBuffer& buf, PackedGuidReader const& guid)
return buf;
}
-template uint32 ObjectGuidGenerator<HIGHGUID_ITEM>::Generate();
-template uint32 ObjectGuidGenerator<HIGHGUID_PLAYER>::Generate();
-template uint32 ObjectGuidGenerator<HIGHGUID_GAMEOBJECT>::Generate();
-template uint32 ObjectGuidGenerator<HIGHGUID_TRANSPORT>::Generate();
-template uint32 ObjectGuidGenerator<HIGHGUID_UNIT>::Generate();
-template uint32 ObjectGuidGenerator<HIGHGUID_PET>::Generate();
-template uint32 ObjectGuidGenerator<HIGHGUID_VEHICLE>::Generate();
-template uint32 ObjectGuidGenerator<HIGHGUID_DYNAMICOBJECT>::Generate();
-template uint32 ObjectGuidGenerator<HIGHGUID_CORPSE>::Generate();
-template uint32 ObjectGuidGenerator<HIGHGUID_INSTANCE>::Generate();
-template uint32 ObjectGuidGenerator<HIGHGUID_GROUP>::Generate();
+void ObjectGuidGeneratorBase::HandleCounterOverflow(HighGuid high)
+{
+ TC_LOG_ERROR("misc", "%s guid overflow!! Can't continue, shutting down server. ", ObjectGuid::GetTypeName(high));
+ World::StopNow(ERROR_EXIT_CODE);
+} \ No newline at end of file
diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h
index b541328c467..74fffe09796 100644
--- a/src/server/game/Entities/Object/ObjectGuid.h
+++ b/src/server/game/Entities/Object/ObjectGuid.h
@@ -21,9 +21,8 @@
#include "Common.h"
#include "ByteBuffer.h"
-
+#include <type_traits>
#include <functional>
-#include <unordered_set>
enum TypeID
{
@@ -52,23 +51,57 @@ enum TypeMask
TYPEMASK_SEER = TYPEMASK_PLAYER | TYPEMASK_UNIT | TYPEMASK_DYNAMICOBJECT
};
-enum HighGuid
+enum class HighGuid
+{
+ Item = 0x4000, // blizz 4000
+ Container = 0x4000, // blizz 4000
+ Player = 0x0000, // blizz 0000
+ GameObject = 0xF110, // blizz F110
+ Transport = 0xF120, // blizz F120 (for GAMEOBJECT_TYPE_TRANSPORT)
+ Unit = 0xF130, // blizz F130
+ Pet = 0xF140, // blizz F140
+ Vehicle = 0xF150, // blizz F550
+ DynamicObject = 0xF100, // blizz F100
+ Corpse = 0xF101, // blizz F100
+ Mo_Transport = 0x1FC0, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT)
+ Instance = 0x1F40, // blizz 1F40
+ Group = 0x1F50,
+};
+
+template<HighGuid high>
+struct ObjectGuidTraits
{
- HIGHGUID_ITEM = 0x4000, // blizz 4000
- HIGHGUID_CONTAINER = 0x4000, // blizz 4000
- HIGHGUID_PLAYER = 0x0000, // blizz 0000
- HIGHGUID_GAMEOBJECT = 0xF110, // blizz F110
- HIGHGUID_TRANSPORT = 0xF120, // blizz F120 (for GAMEOBJECT_TYPE_TRANSPORT)
- HIGHGUID_UNIT = 0xF130, // blizz F130
- HIGHGUID_PET = 0xF140, // blizz F140
- HIGHGUID_VEHICLE = 0xF150, // blizz F550
- HIGHGUID_DYNAMICOBJECT = 0xF100, // blizz F100
- HIGHGUID_CORPSE = 0xF101, // blizz F100
- HIGHGUID_MO_TRANSPORT = 0x1FC0, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT)
- HIGHGUID_INSTANCE = 0x1F40, // blizz 1F40
- HIGHGUID_GROUP = 0x1F50
+ static bool const Global = false;
+ static bool const MapSpecific = false;
};
+#define GUID_TRAIT_GLOBAL(highguid) \
+ template<> struct ObjectGuidTraits<highguid> \
+ { \
+ static bool const Global = true; \
+ static bool const MapSpecific = false; \
+ };
+
+#define GUID_TRAIT_MAP_SPECIFIC(highguid) \
+ template<> struct ObjectGuidTraits<highguid> \
+ { \
+ static bool const Global = false; \
+ static bool const MapSpecific = true; \
+ };
+
+GUID_TRAIT_GLOBAL(HighGuid::Player)
+GUID_TRAIT_GLOBAL(HighGuid::Item)
+GUID_TRAIT_GLOBAL(HighGuid::Mo_Transport)
+GUID_TRAIT_GLOBAL(HighGuid::Group)
+GUID_TRAIT_GLOBAL(HighGuid::Instance)
+GUID_TRAIT_MAP_SPECIFIC(HighGuid::Transport)
+GUID_TRAIT_MAP_SPECIFIC(HighGuid::Unit)
+GUID_TRAIT_MAP_SPECIFIC(HighGuid::Vehicle)
+GUID_TRAIT_MAP_SPECIFIC(HighGuid::Pet)
+GUID_TRAIT_MAP_SPECIFIC(HighGuid::GameObject)
+GUID_TRAIT_MAP_SPECIFIC(HighGuid::DynamicObject)
+GUID_TRAIT_MAP_SPECIFIC(HighGuid::Corpse)
+
class ObjectGuid;
class PackedGuid;
@@ -85,15 +118,16 @@ class ObjectGuid
typedef uint32 LowType;
+ template<HighGuid type>
+ static typename std::enable_if<ObjectGuidTraits<type>::Global, ObjectGuid>::type Create(LowType counter) { return Global(type, counter); }
+
+ template<HighGuid type>
+ static typename std::enable_if<ObjectGuidTraits<type>::MapSpecific, ObjectGuid>::type Create(uint32 entry, LowType counter) { return MapSpecific(type, entry, counter); }
+
ObjectGuid() : _guid(0) { }
explicit ObjectGuid(uint64 guid) : _guid(guid) { }
ObjectGuid(HighGuid hi, uint32 entry, LowType counter) : _guid(counter ? uint64(counter) | (uint64(entry) << 24) | (uint64(hi) << 48) : 0) { }
ObjectGuid(HighGuid hi, LowType counter) : _guid(counter ? uint64(counter) | (uint64(hi) << 48) : 0) { }
- ObjectGuid(ObjectGuid const& r) : _guid(r._guid) { }
- ObjectGuid(ObjectGuid&& r) : _guid(r._guid) { }
-
- ObjectGuid& operator=(ObjectGuid const& r) { _guid = r._guid; return *this; }
- ObjectGuid& operator=(ObjectGuid&& r) { _guid = r._guid; return *this; }
operator uint64() const { return _guid; }
PackedGuidReader ReadAsPacked() { return PackedGuidReader(*this); }
@@ -113,51 +147,51 @@ class ObjectGuid
: LowType(_guid & UI64LIT(0x00000000FFFFFFFF));
}
- static uint32 GetMaxCounter(HighGuid high)
+ static LowType GetMaxCounter(HighGuid high)
{
return HasEntry(high)
- ? uint32(0x00FFFFFF)
- : uint32(0xFFFFFFFF);
+ ? LowType(0x00FFFFFF)
+ : LowType(0xFFFFFFFF);
}
- uint32 GetMaxCounter() const { return GetMaxCounter(GetHigh()); }
+ ObjectGuid::LowType GetMaxCounter() const { return GetMaxCounter(GetHigh()); }
bool IsEmpty() const { return _guid == 0; }
- bool IsCreature() const { return GetHigh() == HIGHGUID_UNIT; }
- bool IsPet() const { return GetHigh() == HIGHGUID_PET; }
- bool IsVehicle() const { return GetHigh() == HIGHGUID_VEHICLE; }
+ bool IsCreature() const { return GetHigh() == HighGuid::Unit; }
+ bool IsPet() const { return GetHigh() == HighGuid::Pet; }
+ bool IsVehicle() const { return GetHigh() == HighGuid::Vehicle; }
bool IsCreatureOrPet() const { return IsCreature() || IsPet(); }
bool IsCreatureOrVehicle() const { return IsCreature() || IsVehicle(); }
bool IsAnyTypeCreature() const { return IsCreature() || IsPet() || IsVehicle(); }
- bool IsPlayer() const { return !IsEmpty() && GetHigh() == HIGHGUID_PLAYER; }
+ bool IsPlayer() const { return !IsEmpty() && GetHigh() == HighGuid::Player; }
bool IsUnit() const { return IsAnyTypeCreature() || IsPlayer(); }
- bool IsItem() const { return GetHigh() == HIGHGUID_ITEM; }
- bool IsGameObject() const { return GetHigh() == HIGHGUID_GAMEOBJECT; }
- bool IsDynamicObject() const { return GetHigh() == HIGHGUID_DYNAMICOBJECT; }
- bool IsCorpse() const { return GetHigh() == HIGHGUID_CORPSE; }
- bool IsTransport() const { return GetHigh() == HIGHGUID_TRANSPORT; }
- bool IsMOTransport() const { return GetHigh() == HIGHGUID_MO_TRANSPORT; }
+ bool IsItem() const { return GetHigh() == HighGuid::Item; }
+ bool IsGameObject() const { return GetHigh() == HighGuid::GameObject; }
+ bool IsDynamicObject() const { return GetHigh() == HighGuid::DynamicObject; }
+ bool IsCorpse() const { return GetHigh() == HighGuid::Corpse; }
+ bool IsTransport() const { return GetHigh() == HighGuid::Transport; }
+ bool IsMOTransport() const { return GetHigh() == HighGuid::Mo_Transport; }
bool IsAnyTypeGameObject() const { return IsGameObject() || IsTransport() || IsMOTransport(); }
- bool IsInstance() const { return GetHigh() == HIGHGUID_INSTANCE; }
- bool IsGroup() const { return GetHigh() == HIGHGUID_GROUP; }
+ bool IsInstance() const { return GetHigh() == HighGuid::Instance; }
+ bool IsGroup() const { return GetHigh() == HighGuid::Group; }
static TypeID GetTypeId(HighGuid high)
{
switch (high)
{
- case HIGHGUID_ITEM: return TYPEID_ITEM;
- //case HIGHGUID_CONTAINER: return TYPEID_CONTAINER; HIGHGUID_CONTAINER==HIGHGUID_ITEM currently
- case HIGHGUID_UNIT: return TYPEID_UNIT;
- case HIGHGUID_PET: return TYPEID_UNIT;
- case HIGHGUID_PLAYER: return TYPEID_PLAYER;
- case HIGHGUID_GAMEOBJECT: return TYPEID_GAMEOBJECT;
- case HIGHGUID_DYNAMICOBJECT: return TYPEID_DYNAMICOBJECT;
- case HIGHGUID_CORPSE: return TYPEID_CORPSE;
- case HIGHGUID_MO_TRANSPORT: return TYPEID_GAMEOBJECT;
- case HIGHGUID_VEHICLE: return TYPEID_UNIT;
+ case HighGuid::Item: return TYPEID_ITEM;
+ //case HighGuid::Container: return TYPEID_CONTAINER; HighGuid::Container==HighGuid::Item currently
+ case HighGuid::Unit: return TYPEID_UNIT;
+ case HighGuid::Pet: return TYPEID_UNIT;
+ case HighGuid::Player: return TYPEID_PLAYER;
+ case HighGuid::GameObject: return TYPEID_GAMEOBJECT;
+ case HighGuid::DynamicObject: return TYPEID_DYNAMICOBJECT;
+ case HighGuid::Corpse: return TYPEID_CORPSE;
+ case HighGuid::Mo_Transport: return TYPEID_GAMEOBJECT;
+ case HighGuid::Vehicle: return TYPEID_UNIT;
// unknown
- case HIGHGUID_INSTANCE:
- case HIGHGUID_GROUP:
+ case HighGuid::Instance:
+ case HighGuid::Group:
default: return TYPEID_OBJECT;
}
}
@@ -178,19 +212,19 @@ class ObjectGuid
{
switch (high)
{
- case HIGHGUID_ITEM:
- case HIGHGUID_PLAYER:
- case HIGHGUID_DYNAMICOBJECT:
- case HIGHGUID_CORPSE:
- case HIGHGUID_MO_TRANSPORT:
- case HIGHGUID_INSTANCE:
- case HIGHGUID_GROUP:
+ case HighGuid::Item:
+ case HighGuid::Player:
+ case HighGuid::DynamicObject:
+ case HighGuid::Corpse:
+ case HighGuid::Mo_Transport:
+ case HighGuid::Instance:
+ case HighGuid::Group:
return false;
- case HIGHGUID_GAMEOBJECT:
- case HIGHGUID_TRANSPORT:
- case HIGHGUID_UNIT:
- case HIGHGUID_PET:
- case HIGHGUID_VEHICLE:
+ case HighGuid::GameObject:
+ case HighGuid::Transport:
+ case HighGuid::Unit:
+ case HighGuid::Pet:
+ case HighGuid::Vehicle:
default:
return true;
}
@@ -198,6 +232,9 @@ class ObjectGuid
bool HasEntry() const { return HasEntry(GetHigh()); }
+ static ObjectGuid Global(HighGuid type, LowType counter);
+ static ObjectGuid MapSpecific(HighGuid type, uint32 entry, LowType counter);
+
explicit ObjectGuid(uint32 const&) = delete; // no implementation, used to catch wrong type assignment
ObjectGuid(HighGuid, uint32, uint64 counter) = delete; // no implementation, used to catch wrong type assignment
ObjectGuid(HighGuid, uint64 counter) = delete; // no implementation, used to catch wrong type assignment
@@ -233,18 +270,33 @@ class PackedGuid
ByteBuffer _packedGuid;
};
-template<HighGuid high>
-class ObjectGuidGenerator
+
+class ObjectGuidGeneratorBase
{
- public:
- explicit ObjectGuidGenerator(uint32 start = 1) : _nextGuid(start) { }
+public:
+ ObjectGuidGeneratorBase(ObjectGuid::LowType start = 1) : _nextGuid(start) { }
- void Set(uint32 val) { _nextGuid = val; }
- uint32 Generate();
- uint32 GetNextAfterMaxUsed() const { return _nextGuid; }
+ virtual void Set(ObjectGuid::LowType val) { _nextGuid = val; }
+ virtual ObjectGuid::LowType Generate() = 0;
+ ObjectGuid::LowType GetNextAfterMaxUsed() const { return _nextGuid; }
- private:
- uint32 _nextGuid;
+protected:
+ static void HandleCounterOverflow(HighGuid high);
+ ObjectGuid::LowType _nextGuid;
+};
+
+template<HighGuid high>
+class ObjectGuidGenerator : public ObjectGuidGeneratorBase
+{
+public:
+ explicit ObjectGuidGenerator(ObjectGuid::LowType start = 1) : ObjectGuidGeneratorBase(start) { }
+
+ ObjectGuid::LowType Generate() override
+ {
+ if (_nextGuid >= ObjectGuid::GetMaxCounter(high) - 1)
+ HandleCounterOverflow(high);
+ return _nextGuid++;
+ }
};
ByteBuffer& operator<<(ByteBuffer& buf, ObjectGuid const& guid);
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index c9b9c72d432..a399600d2f2 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -52,7 +52,7 @@ Pet::Pet(Player* owner, PetType type) :
}
m_name = "Pet";
- m_regenTimer = PET_FOCUS_REGEN_INTERVAL;
+ m_focusRegenTimer = PET_FOCUS_REGEN_INTERVAL;
}
Pet::~Pet()
@@ -66,7 +66,7 @@ void Pet::AddToWorld()
if (!IsInWorld())
{
///- Register the pet for guid lookup
- sObjectAccessor->AddObject(this);
+ GetMap()->GetObjectsStore().Insert<Pet>(GetGUID(), this);
Unit::AddToWorld();
AIM_Initialize();
}
@@ -90,7 +90,7 @@ void Pet::RemoveFromWorld()
{
///- Don't call the function for Creature, normal mobs + totems go in a different storage
Unit::RemoveFromWorld();
- sObjectAccessor->RemoveObject(this);
+ GetMap()->GetObjectsStore().Remove<Pet>(GetGUID());
}
}
@@ -98,7 +98,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
{
m_loading = true;
- uint32 ownerid = owner->GetGUIDLow();
+ ObjectGuid::LowType ownerid = owner->GetGUID().GetCounter();
PreparedStatement* stmt;
PreparedQueryResult result;
@@ -174,7 +174,8 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
}
Map* map = owner->GetMap();
- uint32 guid = sObjectMgr->GenerateLowGuid(HIGHGUID_PET);
+ ObjectGuid::LowType guid = map->GenerateLowGuid<HighGuid::Pet>();
+
if (!Create(guid, map, owner->GetPhaseMask(), petEntry, petId))
return false;
@@ -191,7 +192,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
if (!IsPositionValid())
{
TC_LOG_ERROR("entities.pet", "Pet (guidlow %d, entry %d) not loaded. Suggested coordinates isn't valid (X: %f Y: %f)",
- GetGUIDLow(), GetEntry(), GetPositionX(), GetPositionY());
+ GetGUID().GetCounter(), GetEntry(), GetPositionX(), GetPositionY());
return false;
}
@@ -248,7 +249,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
if (!IsPositionValid())
{
TC_LOG_ERROR("entities.pet", "Pet (guidlow %d, entry %d) not loaded. Suggested coordinates isn't valid (X: %f Y: %f)",
- GetGUIDLow(), GetEntry(), GetPositionX(), GetPositionY());
+ GetGUID().GetCounter(), GetEntry(), GetPositionX(), GetPositionY());
return false;
}
@@ -332,7 +333,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
CleanupActionBar(); // remove unknown spells from action bar after load
- TC_LOG_DEBUG("entities.pet", "New Pet has guid %u", GetGUIDLow());
+ TC_LOG_DEBUG("entities.pet", "New Pet has guid %u", GetGUID().GetCounter());
owner->PetSpellInitialize();
@@ -344,7 +345,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
if (getPetType() == HUNTER_PET)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_DECLINED_NAME);
- stmt->setUInt32(0, owner->GetGUIDLow());
+ stmt->setUInt32(0, owner->GetGUID().GetCounter());
stmt->setUInt32(1, GetCharmInfo()->GetPetNumber());
result = CharacterDatabase.Query(stmt);
@@ -414,7 +415,7 @@ void Pet::SavePetToDB(PetSaveMode mode)
// current/stable/not_in_slot
if (mode >= PET_SAVE_AS_CURRENT)
{
- uint32 ownerLowGUID = GetOwnerGUID().GetCounter();
+ ObjectGuid::LowType ownerLowGUID = GetOwnerGUID().GetCounter();
std::string name = m_name;
CharacterDatabase.EscapeString(name);
trans = CharacterDatabase.BeginTransaction();
@@ -484,7 +485,7 @@ void Pet::SavePetToDB(PetSaveMode mode)
}
}
-void Pet::DeleteFromDB(uint32 guidlow)
+void Pet::DeleteFromDB(ObjectGuid::LowType guidlow)
{
SQLTransaction trans = CharacterDatabase.BeginTransaction();
@@ -588,22 +589,22 @@ void Pet::Update(uint32 diff)
}
//regenerate focus for hunter pets or energy for deathknight's ghoul
- if (m_regenTimer)
+ if (m_focusRegenTimer)
{
- if (m_regenTimer > diff)
- m_regenTimer -= diff;
+ if (m_focusRegenTimer > diff)
+ m_focusRegenTimer -= diff;
else
{
switch (getPowerType())
{
case POWER_FOCUS:
Regenerate(POWER_FOCUS);
- m_regenTimer += PET_FOCUS_REGEN_INTERVAL - diff;
- if (!m_regenTimer) ++m_regenTimer;
+ m_focusRegenTimer += PET_FOCUS_REGEN_INTERVAL - diff;
+ if (!m_focusRegenTimer) ++m_focusRegenTimer;
// Reset if large diff (lag) causes focus to get 'stuck'
- if (m_regenTimer > PET_FOCUS_REGEN_INTERVAL)
- m_regenTimer = PET_FOCUS_REGEN_INTERVAL;
+ if (m_focusRegenTimer > PET_FOCUS_REGEN_INTERVAL)
+ m_focusRegenTimer = PET_FOCUS_REGEN_INTERVAL;
break;
@@ -614,7 +615,7 @@ void Pet::Update(uint32 diff)
// if (!m_regenTimer) ++m_regenTimer;
// break;
default:
- m_regenTimer = 0;
+ m_focusRegenTimer = 0;
break;
}
}
@@ -769,7 +770,7 @@ bool Pet::CreateBaseAtCreature(Creature* creature)
if (!IsPositionValid())
{
TC_LOG_ERROR("entities.pet", "Pet (guidlow %d, entry %d) not created base at creature. Suggested coordinates isn't valid (X: %f Y: %f)",
- GetGUIDLow(), GetEntry(), GetPositionX(), GetPositionY());
+ GetGUID().GetCounter(), GetEntry(), GetPositionX(), GetPositionY());
return false;
}
@@ -806,7 +807,7 @@ bool Pet::CreateBaseAtCreatureInfo(CreatureTemplate const* cinfo, Unit* owner)
bool Pet::CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map, uint32 phaseMask)
{
TC_LOG_DEBUG("entities.pet", "Pet::CreateBaseForTamed");
- uint32 guid=sObjectMgr->GenerateLowGuid(HIGHGUID_PET);
+ ObjectGuid::LowType guid=map->GenerateLowGuid<HighGuid::Pet>();
uint32 petId = sObjectMgr->GeneratePetNumber();
if (!Create(guid, map, phaseMask, cinfo->Entry, petId))
return false;
@@ -1183,7 +1184,7 @@ void Pet::_SaveSpells(SQLTransaction& trans)
void Pet::_LoadAuras(uint32 timediff)
{
- TC_LOG_DEBUG("entities.pet", "Loading auras for pet %u", GetGUIDLow());
+ TC_LOG_DEBUG("entities.pet", "Loading auras for pet %u", GetGUID().GetCounter());
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_AURA);
stmt->setUInt32(0, m_charmInfo->GetPetNumber());
@@ -1679,7 +1680,7 @@ void Pet::resetTalentsForAllPetsOf(Player* owner, Pet* onlinePet /*= NULL*/)
uint32 exceptPetNumber = onlinePet ? onlinePet->GetCharmInfo()->GetPetNumber() : 0;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_PET);
- stmt->setUInt32(0, owner->GetGUIDLow());
+ stmt->setUInt32(0, owner->GetGUID().GetCounter());
stmt->setUInt32(1, exceptPetNumber);
PreparedQueryResult resultPets = CharacterDatabase.Query(stmt);
@@ -1688,7 +1689,7 @@ void Pet::resetTalentsForAllPetsOf(Player* owner, Pet* onlinePet /*= NULL*/)
return;
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_SPELL_LIST);
- stmt->setUInt32(0, owner->GetGUIDLow());
+ stmt->setUInt32(0, owner->GetGUID().GetCounter());
stmt->setUInt32(1, exceptPetNumber);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
@@ -1834,15 +1835,15 @@ bool Pet::IsPermanentPetFor(Player* owner) const
}
}
-bool Pet::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint32 petId)
+bool Pet::Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint32 petId)
{
ASSERT(map);
SetMap(map);
SetPhaseMask(phaseMask, false);
- Object::_Create(guidlow, petId, HIGHGUID_PET);
+ Object::_Create(guidlow, petId, HighGuid::Pet);
- m_DBTableGuid = guidlow;
+ m_spawnId = guidlow;
m_originalEntry = Entry;
if (!InitEntry(Entry))
diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h
index b1d7fcaa28a..c8e95a06a2c 100644
--- a/src/server/game/Entities/Pet/Pet.h
+++ b/src/server/game/Entities/Pet/Pet.h
@@ -55,7 +55,7 @@ class Pet : public Guardian
bool IsPermanentPetFor(Player* owner) const; // pet have tab in character windows and set UNIT_FIELD_PETNUMBER
- bool Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint32 pet_number);
+ bool Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint32 pet_number);
bool CreateBaseAtCreature(Creature* creature);
bool CreateBaseAtCreatureInfo(CreatureTemplate const* cinfo, Unit* owner);
bool CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map, uint32 phaseMask);
@@ -63,7 +63,7 @@ class Pet : public Guardian
bool IsLoading() const override { return m_loading;}
void SavePetToDB(PetSaveMode mode);
void Remove(PetSaveMode mode, bool returnreagent = false);
- static void DeleteFromDB(uint32 guidlow);
+ static void DeleteFromDB(ObjectGuid::LowType guidlow);
void setDeathState(DeathState s) override; // overwrite virtual Creature::setDeathState and Unit::setDeathState
void Update(uint32 diff) override; // overwrite virtual Creature::Update and Unit::Update
@@ -152,18 +152,18 @@ class Pet : public Guardian
int32 m_duration; // time until unsummon (used mostly for summoned guardians and not used for controlled pets)
uint64 m_auraRaidUpdateMask;
bool m_loading;
- uint32 m_regenTimer;
+ uint32 m_focusRegenTimer;
DeclinedName *m_declinedname;
private:
void SaveToDB(uint32, uint8, uint32) override // override of Creature::SaveToDB - must not be called
{
- ASSERT(false);
+ ABORT();
}
void DeleteFromDB() override // override of Creature::DeleteFromDB - must not be called
{
- ASSERT(false);
+ ABORT();
}
};
#endif
diff --git a/src/server/game/Entities/Player/KillRewarder.cpp b/src/server/game/Entities/Player/KillRewarder.cpp
new file mode 100644
index 00000000000..ad2f8f641ea
--- /dev/null
+++ b/src/server/game/Entities/Player/KillRewarder.cpp
@@ -0,0 +1,274 @@
+/*
+ * 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 "KillRewarder.h"
+#include "SpellAuraEffects.h"
+#include "Creature.h"
+#include "Formulas.h"
+#include "Group.h"
+#include "Guild.h"
+#include "GuildMgr.h"
+#include "InstanceScript.h"
+#include "Pet.h"
+#include "Player.h"
+
+ // == KillRewarder ====================================================
+ // KillRewarder encapsulates logic of rewarding player upon kill with:
+ // * XP;
+ // * honor;
+ // * reputation;
+ // * kill credit (for quest objectives).
+ // Rewarding is initiated in two cases: when player kills unit in Unit::Kill()
+ // and on battlegrounds in Battleground::RewardXPAtKill().
+ //
+ // Rewarding algorithm is:
+ // 1. Initialize internal variables to default values.
+ // 2. In case when player is in group, initialize variables necessary for group calculations:
+ // 2.1. _count - number of alive group members within reward distance;
+ // 2.2. _sumLevel - sum of levels of alive group members within reward distance;
+ // 2.3. _maxLevel - maximum level of alive group member within reward distance;
+ // 2.4. _maxNotGrayMember - maximum level of alive group member within reward distance,
+ // for whom victim is not gray;
+ // 2.5. _isFullXP - flag identifying that for all group members victim is not gray,
+ // so 100% XP will be rewarded (50% otherwise).
+ // 3. Reward killer (and group, if necessary).
+ // 3.1. If killer is in group, reward group.
+ // 3.1.1. Initialize initial XP amount based on maximum level of group member,
+ // for whom victim is not gray.
+ // 3.1.2. Alter group rate if group is in raid (not for battlegrounds).
+ // 3.1.3. Reward each group member (even dead) within reward distance (see 4. for more details).
+ // 3.2. Reward single killer (not group case).
+ // 3.2.1. Initialize initial XP amount based on killer's level.
+ // 3.2.2. Reward killer (see 4. for more details).
+ // 4. Reward player.
+ // 4.1. Give honor (player must be alive and not on BG).
+ // 4.2. Give XP.
+ // 4.2.1. If player is in group, adjust XP:
+ // * set to 0 if player's level is more than maximum level of not gray member;
+ // * cut XP in half if _isFullXP is false.
+ // 4.2.2. Apply auras modifying rewarded XP.
+ // 4.2.3. Give XP to player.
+ // 4.2.4. If player has pet, reward pet with XP (100% for single player, 50% for group case).
+ // 4.3. Give reputation (player must not be on BG).
+ // 4.4. Give kill credit (player must not be in group, or he must be alive or without corpse).
+ // 5. Credit instance encounter.
+
+KillRewarder::KillRewarder(Player* killer, Unit* victim, bool isBattleGround) :
+ // 1. Initialize internal variables to default values.
+ _killer(killer), _victim(victim), _group(killer->GetGroup()),
+ _groupRate(1.0f), _maxNotGrayMember(nullptr), _count(0), _sumLevel(0), _xp(0),
+ _isFullXP(false), _maxLevel(0), _isBattleGround(isBattleGround), _isPvP(false)
+{
+ // mark the credit as pvp if victim is player
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ _isPvP = true;
+ // or if its owned by player and its not a vehicle
+ else if (victim->GetCharmerOrOwnerGUID().IsPlayer())
+ _isPvP = !victim->IsVehicle();
+
+ _InitGroupData();
+}
+
+inline void KillRewarder::_InitGroupData()
+{
+ if (_group)
+ {
+ // 2. In case when player is in group, initialize variables necessary for group calculations:
+ for (GroupReference* itr = _group->GetFirstMember(); itr != nullptr; itr = itr->next())
+ if (Player* member = itr->GetSource())
+ if (member->IsAlive() && member->IsAtGroupRewardDistance(_victim))
+ {
+ const uint8 lvl = member->getLevel();
+ // 2.1. _count - number of alive group members within reward distance;
+ ++_count;
+ // 2.2. _sumLevel - sum of levels of alive group members within reward distance;
+ _sumLevel += lvl;
+ // 2.3. _maxLevel - maximum level of alive group member within reward distance;
+ if (_maxLevel < lvl)
+ _maxLevel = lvl;
+ // 2.4. _maxNotGrayMember - maximum level of alive group member within reward distance,
+ // for whom victim is not gray;
+ uint32 grayLevel = Trinity::XP::GetGrayLevel(lvl);
+ if (_victim->getLevel() > grayLevel && (!_maxNotGrayMember || _maxNotGrayMember->getLevel() < lvl))
+ _maxNotGrayMember = member;
+ }
+ // 2.5. _isFullXP - flag identifying that for all group members victim is not gray,
+ // so 100% XP will be rewarded (50% otherwise).
+ _isFullXP = _maxNotGrayMember && (_maxLevel == _maxNotGrayMember->getLevel());
+ }
+ else
+ _count = 1;
+}
+
+inline void KillRewarder::_InitXP(Player* player)
+{
+ // Get initial value of XP for kill.
+ // XP is given:
+ // * on battlegrounds;
+ // * otherwise, not in PvP;
+ // * not if killer is on vehicle.
+ if (_isBattleGround || (!_isPvP && !_killer->GetVehicle()))
+ _xp = Trinity::XP::Gain(player, _victim, _isBattleGround);
+}
+
+inline void KillRewarder::_RewardHonor(Player* player)
+{
+ // Rewarded player must be alive.
+ if (player->IsAlive())
+ player->RewardHonor(_victim, _count, -1, true);
+}
+
+inline void KillRewarder::_RewardXP(Player* player, float rate)
+{
+ uint32 xp(_xp);
+ if (_group)
+ {
+ // 4.2.1. If player is in group, adjust XP:
+ // * set to 0 if player's level is more than maximum level of not gray member;
+ // * cut XP in half if _isFullXP is false.
+ if (_maxNotGrayMember && player->IsAlive() &&
+ _maxNotGrayMember->getLevel() >= player->getLevel())
+ xp = _isFullXP ?
+ uint32(xp * rate) : // Reward FULL XP if all group members are not gray.
+ uint32(xp * rate / 2) + 1; // Reward only HALF of XP if some of group members are gray.
+ else
+ xp = 0;
+ }
+ if (xp)
+ {
+ // 4.2.2. Apply auras modifying rewarded XP (SPELL_AURA_MOD_XP_PCT).
+ for (auto const& aura : player->GetAuraEffectsByType(SPELL_AURA_MOD_XP_PCT))
+ AddPct(xp, aura->GetAmount());
+
+ // 4.2.3. Give XP to player.
+ player->GiveXP(xp, _victim, _groupRate);
+ if (Pet* pet = player->GetPet())
+ // 4.2.4. If player has pet, reward pet with XP (100% for single player, 50% for group case).
+ pet->GivePetXP(_group ? xp / 2 : xp);
+ }
+}
+
+inline void KillRewarder::_RewardReputation(Player* player, float rate)
+{
+ // 4.3. Give reputation (player must not be on BG).
+ // Even dead players and corpses are rewarded.
+ player->RewardReputation(_victim, rate);
+}
+
+inline void KillRewarder::_RewardKillCredit(Player* player)
+{
+ // 4.4. Give kill credit (player must not be in group, or he must be alive or without corpse).
+ if (!_group || player->IsAlive() || !player->GetCorpse())
+ if (Creature* target = _victim->ToCreature())
+ {
+ player->KilledMonster(target->GetCreatureTemplate(), target->GetGUID());
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE, target->GetCreatureType(), 1, target);
+ }
+}
+
+void KillRewarder::_RewardPlayer(Player* player, bool isDungeon)
+{
+ // 4. Reward player.
+ if (!_isBattleGround)
+ {
+ // 4.1. Give honor (player must be alive and not on BG).
+ _RewardHonor(player);
+ // 4.1.1 Send player killcredit for quests with PlayerSlain
+ if (_victim->GetTypeId() == TYPEID_PLAYER)
+ player->KilledPlayerCredit();
+ }
+ // Give XP only in PvE or in battlegrounds.
+ // Give reputation and kill credit only in PvE.
+ if (!_isPvP || _isBattleGround)
+ {
+ float const rate = _group ?
+ _groupRate * float(player->getLevel()) / _sumLevel : // Group rate depends on summary level.
+ 1.0f; // Personal rate is 100%.
+ if (_xp)
+ // 4.2. Give XP.
+ _RewardXP(player, rate);
+ if (!_isBattleGround)
+ {
+ // If killer is in dungeon then all members receive full reputation at kill.
+ _RewardReputation(player, isDungeon ? 1.0f : rate);
+ _RewardKillCredit(player);
+ }
+ }
+}
+
+void KillRewarder::_RewardGroup()
+{
+ if (_maxLevel)
+ {
+ if (_maxNotGrayMember)
+ // 3.1.1. Initialize initial XP amount based on maximum level of group member,
+ // for whom victim is not gray.
+ _InitXP(_maxNotGrayMember);
+ // To avoid unnecessary calculations and calls,
+ // proceed only if XP is not ZERO or player is not on battleground
+ // (battleground rewards only XP, that's why).
+ if (!_isBattleGround || _xp)
+ {
+ bool const isDungeon = !_isPvP && sMapStore.LookupEntry(_killer->GetMapId())->IsDungeon();
+ if (!_isBattleGround)
+ {
+ // 3.1.2. Alter group rate if group is in raid (not for battlegrounds).
+ bool const isRaid = !_isPvP && sMapStore.LookupEntry(_killer->GetMapId())->IsRaid() && _group->isRaidGroup();
+ _groupRate = Trinity::XP::xp_in_group_rate(_count, isRaid);
+ }
+
+ // 3.1.3. Reward each group member (even dead or corpse) within reward distance.
+ for (GroupReference* itr = _group->GetFirstMember(); itr != nullptr; itr = itr->next())
+ {
+ if (Player* member = itr->GetSource())
+ {
+ if (member->IsAtGroupRewardDistance(_victim))
+ {
+ _RewardPlayer(member, isDungeon);
+ member->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL, 1, 0, _victim);
+ }
+ }
+ }
+ }
+ }
+}
+
+void KillRewarder::Reward()
+{
+ // 3. Reward killer (and group, if necessary).
+ if (_group)
+ // 3.1. If killer is in group, reward group.
+ _RewardGroup();
+ else
+ {
+ // 3.2. Reward single killer (not group case).
+ // 3.2.1. Initialize initial XP amount based on killer's level.
+ _InitXP(_killer);
+ // To avoid unnecessary calculations and calls,
+ // proceed only if XP is not ZERO or player is not on battleground
+ // (battleground rewards only XP, that's why).
+ if (!_isBattleGround || _xp)
+ // 3.2.2. Reward killer.
+ _RewardPlayer(_killer, false);
+ }
+
+ // 5. Credit instance encounter.
+ if (Creature* victim = _victim->ToCreature())
+ if (victim->IsDungeonBoss())
+ if (InstanceScript* instance = _victim->GetInstanceScript())
+ instance->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, _victim->GetEntry(), _victim);
+}
diff --git a/src/server/game/Entities/Player/KillRewarder.h b/src/server/game/Entities/Player/KillRewarder.h
new file mode 100644
index 00000000000..577a8ffea20
--- /dev/null
+++ b/src/server/game/Entities/Player/KillRewarder.h
@@ -0,0 +1,59 @@
+/*
+ * 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 KillRewarder_h__
+#define KillRewarder_h__
+
+#include "Define.h"
+
+class Player;
+class Unit;
+class Group;
+
+class KillRewarder
+{
+public:
+ KillRewarder(Player* killer, Unit* victim, bool isBattleGround);
+
+ void Reward();
+
+private:
+ void _InitXP(Player* player);
+ void _InitGroupData();
+
+ void _RewardHonor(Player* player);
+ void _RewardXP(Player* player, float rate);
+ void _RewardReputation(Player* player, float rate);
+ void _RewardKillCredit(Player* player);
+ void _RewardPlayer(Player* player, bool isDungeon);
+ void _RewardGroup();
+
+ Player* _killer;
+ Unit* _victim;
+ Group* _group;
+ float _groupRate;
+ Player* _maxNotGrayMember;
+ uint32 _count;
+ uint32 _sumLevel;
+ uint32 _xp;
+ bool _isFullXP;
+ uint8 _maxLevel;
+ bool _isBattleGround;
+ bool _isPvP;
+};
+
+#endif // KillRewarder_h__
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 3e4e516edc4..a8f015a8749 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -48,6 +48,7 @@
#include "GuildMgr.h"
#include "InstanceSaveMgr.h"
#include "InstanceScript.h"
+#include "KillRewarder.h"
#include "LFGMgr.h"
#include "Language.h"
#include "Log.h"
@@ -69,6 +70,7 @@
#include "SpellMgr.h"
#include "SpellHistory.h"
#include "Transport.h"
+#include "TicketMgr.h"
#include "UpdateData.h"
#include "UpdateFieldFlags.h"
#include "UpdateMask.h"
@@ -288,374 +290,6 @@ std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi)
return ss;
}
-//== TradeData =================================================
-
-TradeData* TradeData::GetTraderData() const
-{
- return m_trader->GetTradeData();
-}
-
-Item* TradeData::GetItem(TradeSlots slot) const
-{
- return m_items[slot] ? m_player->GetItemByGuid(m_items[slot]) : NULL;
-}
-
-bool TradeData::HasItem(ObjectGuid itemGuid) const
-{
- for (uint8 i = 0; i < TRADE_SLOT_COUNT; ++i)
- if (m_items[i] == itemGuid)
- return true;
-
- return false;
-}
-
-TradeSlots TradeData::GetTradeSlotForItem(ObjectGuid itemGuid) const
-{
- for (uint8 i = 0; i < TRADE_SLOT_COUNT; ++i)
- if (m_items[i] == itemGuid)
- return TradeSlots(i);
-
- return TRADE_SLOT_INVALID;
-}
-
-Item* TradeData::GetSpellCastItem() const
-{
- return m_spellCastItem ? m_player->GetItemByGuid(m_spellCastItem) : NULL;
-}
-
-void TradeData::SetItem(TradeSlots slot, Item* item)
-{
- ObjectGuid itemGuid;
- if (item)
- itemGuid = item->GetGUID();
-
- if (m_items[slot] == itemGuid)
- return;
-
- m_items[slot] = itemGuid;
-
- SetAccepted(false);
- GetTraderData()->SetAccepted(false);
-
- Update();
-
- // need remove possible trader spell applied to changed item
- if (slot == TRADE_SLOT_NONTRADED)
- GetTraderData()->SetSpell(0);
-
- // need remove possible player spell applied (possible move reagent)
- SetSpell(0);
-}
-
-void TradeData::SetSpell(uint32 spell_id, Item* castItem /*= NULL*/)
-{
- ObjectGuid itemGuid = castItem ? castItem->GetGUID() : ObjectGuid::Empty;
-
- if (m_spell == spell_id && m_spellCastItem == itemGuid)
- return;
-
- m_spell = spell_id;
- m_spellCastItem = itemGuid;
-
- SetAccepted(false);
- GetTraderData()->SetAccepted(false);
-
- Update(true); // send spell info to item owner
- Update(false); // send spell info to caster self
-}
-
-void TradeData::SetMoney(uint32 money)
-{
- if (m_money == money)
- return;
-
- if (!m_player->HasEnoughMoney(money))
- {
- TradeStatusInfo info;
- info.Status = TRADE_STATUS_CLOSE_WINDOW;
- info.Result = EQUIP_ERR_NOT_ENOUGH_MONEY;
- m_player->GetSession()->SendTradeStatus(info);
- return;
- }
-
- m_money = money;
-
- SetAccepted(false);
- GetTraderData()->SetAccepted(false);
-
- Update(true);
-}
-
-void TradeData::Update(bool forTarget /*= true*/)
-{
- if (forTarget)
- m_trader->GetSession()->SendUpdateTrade(true); // player state for trader
- else
- m_player->GetSession()->SendUpdateTrade(false); // player state for player
-}
-
-void TradeData::SetAccepted(bool state, bool crosssend /*= false*/)
-{
- m_accepted = state;
-
- if (!state)
- {
- TradeStatusInfo info;
- info.Status = TRADE_STATUS_BACK_TO_TRADE;
- if (crosssend)
- m_trader->GetSession()->SendTradeStatus(info);
- else
- m_player->GetSession()->SendTradeStatus(info);
- }
-}
-
-// == KillRewarder ====================================================
-// KillRewarder incapsulates logic of rewarding player upon kill with:
-// * XP;
-// * honor;
-// * reputation;
-// * kill credit (for quest objectives).
-// Rewarding is initiated in two cases: when player kills unit in Unit::Kill()
-// and on battlegrounds in Battleground::RewardXPAtKill().
-//
-// Rewarding algorithm is:
-// 1. Initialize internal variables to default values.
-// 2. In case when player is in group, initialize variables necessary for group calculations:
-// 2.1. _count - number of alive group members within reward distance;
-// 2.2. _sumLevel - sum of levels of alive group members within reward distance;
-// 2.3. _maxLevel - maximum level of alive group member within reward distance;
-// 2.4. _maxNotGrayMember - maximum level of alive group member within reward distance,
-// for whom victim is not gray;
-// 2.5. _isFullXP - flag identifying that for all group members victim is not gray,
-// so 100% XP will be rewarded (50% otherwise).
-// 3. Reward killer (and group, if necessary).
-// 3.1. If killer is in group, reward group.
-// 3.1.1. Initialize initial XP amount based on maximum level of group member,
-// for whom victim is not gray.
-// 3.1.2. Alter group rate if group is in raid (not for battlegrounds).
-// 3.1.3. Reward each group member (even dead) within reward distance (see 4. for more details).
-// 3.2. Reward single killer (not group case).
-// 3.2.1. Initialize initial XP amount based on killer's level.
-// 3.2.2. Reward killer (see 4. for more details).
-// 4. Reward player.
-// 4.1. Give honor (player must be alive and not on BG).
-// 4.2. Give XP.
-// 4.2.1. If player is in group, adjust XP:
-// * set to 0 if player's level is more than maximum level of not gray member;
-// * cut XP in half if _isFullXP is false.
-// 4.2.2. Apply auras modifying rewarded XP.
-// 4.2.3. Give XP to player.
-// 4.2.4. If player has pet, reward pet with XP (100% for single player, 50% for group case).
-// 4.3. Give reputation (player must not be on BG).
-// 4.4. Give kill credit (player must not be in group, or he must be alive or without corpse).
-// 5. Credit instance encounter.
-KillRewarder::KillRewarder(Player* killer, Unit* victim, bool isBattleGround) :
- // 1. Initialize internal variables to default values.
- _killer(killer), _victim(victim), _group(killer->GetGroup()),
- _groupRate(1.0f), _maxNotGrayMember(NULL), _count(0), _sumLevel(0), _xp(0),
- _isFullXP(false), _maxLevel(0), _isBattleGround(isBattleGround), _isPvP(false)
-{
- // mark the credit as pvp if victim is player
- if (victim->GetTypeId() == TYPEID_PLAYER)
- _isPvP = true;
- // or if its owned by player and its not a vehicle
- else if (victim->GetCharmerOrOwnerGUID().IsPlayer())
- _isPvP = !victim->IsVehicle();
-
- _InitGroupData();
-}
-
-inline void KillRewarder::_InitGroupData()
-{
- if (_group)
- {
- // 2. In case when player is in group, initialize variables necessary for group calculations:
- for (GroupReference* itr = _group->GetFirstMember(); itr != NULL; itr = itr->next())
- if (Player* member = itr->GetSource())
- if (member->IsAlive() && member->IsAtGroupRewardDistance(_victim))
- {
- const uint8 lvl = member->getLevel();
- // 2.1. _count - number of alive group members within reward distance;
- ++_count;
- // 2.2. _sumLevel - sum of levels of alive group members within reward distance;
- _sumLevel += lvl;
- // 2.3. _maxLevel - maximum level of alive group member within reward distance;
- if (_maxLevel < lvl)
- _maxLevel = lvl;
- // 2.4. _maxNotGrayMember - maximum level of alive group member within reward distance,
- // for whom victim is not gray;
- uint32 grayLevel = Trinity::XP::GetGrayLevel(lvl);
- if (_victim->getLevel() > grayLevel && (!_maxNotGrayMember || _maxNotGrayMember->getLevel() < lvl))
- _maxNotGrayMember = member;
- }
- // 2.5. _isFullXP - flag identifying that for all group members victim is not gray,
- // so 100% XP will be rewarded (50% otherwise).
- _isFullXP = _maxNotGrayMember && (_maxLevel == _maxNotGrayMember->getLevel());
- }
- else
- _count = 1;
-}
-
-inline void KillRewarder::_InitXP(Player* player)
-{
- // Get initial value of XP for kill.
- // XP is given:
- // * on battlegrounds;
- // * otherwise, not in PvP;
- // * not if killer is on vehicle.
- if (_isBattleGround || (!_isPvP && !_killer->GetVehicle()))
- _xp = Trinity::XP::Gain(player, _victim);
-}
-
-inline void KillRewarder::_RewardHonor(Player* player)
-{
- // Rewarded player must be alive.
- if (player->IsAlive())
- player->RewardHonor(_victim, _count, -1, true);
-}
-
-inline void KillRewarder::_RewardXP(Player* player, float rate)
-{
- uint32 xp(_xp);
- if (_group)
- {
- // 4.2.1. If player is in group, adjust XP:
- // * set to 0 if player's level is more than maximum level of not gray member;
- // * cut XP in half if _isFullXP is false.
- if (_maxNotGrayMember && player->IsAlive() &&
- _maxNotGrayMember->getLevel() >= player->getLevel())
- xp = _isFullXP ?
- uint32(xp * rate) : // Reward FULL XP if all group members are not gray.
- uint32(xp * rate / 2) + 1; // Reward only HALF of XP if some of group members are gray.
- else
- xp = 0;
- }
- if (xp)
- {
- // 4.2.2. Apply auras modifying rewarded XP (SPELL_AURA_MOD_XP_PCT).
- Unit::AuraEffectList const& auras = player->GetAuraEffectsByType(SPELL_AURA_MOD_XP_PCT);
- for (Unit::AuraEffectList::const_iterator i = auras.begin(); i != auras.end(); ++i)
- AddPct(xp, (*i)->GetAmount());
-
- // 4.2.3. Give XP to player.
- player->GiveXP(xp, _victim, _groupRate);
- if (Pet* pet = player->GetPet())
- // 4.2.4. If player has pet, reward pet with XP (100% for single player, 50% for group case).
- pet->GivePetXP(_group ? xp / 2 : xp);
- }
-}
-
-inline void KillRewarder::_RewardReputation(Player* player, float rate)
-{
- // 4.3. Give reputation (player must not be on BG).
- // Even dead players and corpses are rewarded.
- player->RewardReputation(_victim, rate);
-}
-
-inline void KillRewarder::_RewardKillCredit(Player* player)
-{
- // 4.4. Give kill credit (player must not be in group, or he must be alive or without corpse).
- if (!_group || player->IsAlive() || !player->GetCorpse())
- if (Creature* target = _victim->ToCreature())
- {
- player->KilledMonster(target->GetCreatureTemplate(), target->GetGUID());
- player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE, target->GetCreatureType(), 1, target);
- }
-}
-
-void KillRewarder::_RewardPlayer(Player* player, bool isDungeon)
-{
- // 4. Reward player.
- if (!_isBattleGround)
- {
- // 4.1. Give honor (player must be alive and not on BG).
- _RewardHonor(player);
- // 4.1.1 Send player killcredit for quests with PlayerSlain
- if (_victim->GetTypeId() == TYPEID_PLAYER)
- player->KilledPlayerCredit();
- }
- // Give XP only in PvE or in battlegrounds.
- // Give reputation and kill credit only in PvE.
- if (!_isPvP || _isBattleGround)
- {
- const float rate = _group ?
- _groupRate * float(player->getLevel()) / _sumLevel : // Group rate depends on summary level.
- 1.0f; // Personal rate is 100%.
- if (_xp)
- // 4.2. Give XP.
- _RewardXP(player, rate);
- if (!_isBattleGround)
- {
- // If killer is in dungeon then all members receive full reputation at kill.
- _RewardReputation(player, isDungeon ? 1.0f : rate);
- _RewardKillCredit(player);
- }
- }
-}
-
-void KillRewarder::_RewardGroup()
-{
- if (_maxLevel)
- {
- if (_maxNotGrayMember)
- // 3.1.1. Initialize initial XP amount based on maximum level of group member,
- // for whom victim is not gray.
- _InitXP(_maxNotGrayMember);
- // To avoid unnecessary calculations and calls,
- // proceed only if XP is not ZERO or player is not on battleground
- // (battleground rewards only XP, that's why).
- if (!_isBattleGround || _xp)
- {
- const bool isDungeon = !_isPvP && sMapStore.LookupEntry(_killer->GetMapId())->IsDungeon();
- if (!_isBattleGround)
- {
- // 3.1.2. Alter group rate if group is in raid (not for battlegrounds).
- const bool isRaid = !_isPvP && sMapStore.LookupEntry(_killer->GetMapId())->IsRaid() && _group->isRaidGroup();
- _groupRate = Trinity::XP::xp_in_group_rate(_count, isRaid);
- }
-
- // 3.1.3. Reward each group member (even dead or corpse) within reward distance.
- for (GroupReference* itr = _group->GetFirstMember(); itr != NULL; itr = itr->next())
- {
- if (Player* member = itr->GetSource())
- {
- if (member->IsAtGroupRewardDistance(_victim))
- {
- _RewardPlayer(member, isDungeon);
- member->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL, 1, 0, _victim);
- }
- }
- }
- }
- }
-}
-
-void KillRewarder::Reward()
-{
- // 3. Reward killer (and group, if necessary).
- if (_group)
- // 3.1. If killer is in group, reward group.
- _RewardGroup();
- else
- {
- // 3.2. Reward single killer (not group case).
- // 3.2.1. Initialize initial XP amount based on killer's level.
- _InitXP(_killer);
- // To avoid unnecessary calculations and calls,
- // proceed only if XP is not ZERO or player is not on battleground
- // (battleground rewards only XP, that's why).
- if (!_isBattleGround || _xp)
- // 3.2.2. Reward killer.
- _RewardPlayer(_killer, false);
- }
-
- // 5. Credit instance encounter.
- if (Creature* victim = _victim->ToCreature())
- if (victim->IsDungeonBoss())
- if (InstanceScript* instance = _victim->GetInstanceScript())
- instance->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, _victim->GetEntry(), _victim);
-}
-
Player::Player(WorldSession* session): Unit(true)
{
m_speakTime = 0;
@@ -901,6 +535,8 @@ Player::Player(WorldSession* session): Unit(true)
SetPendingBind(0, 0);
_activeCheats = CHEAT_NONE;
+ healthBeforeDuel = 0;
+ manaBeforeDuel = 0;
m_achievementMgr = new AchievementMgr(this);
m_reputationMgr = new ReputationMgr(this);
}
@@ -957,12 +593,12 @@ void Player::CleanupsBeforeDelete(bool finalCleanup)
itr->second.save->RemovePlayer(this);
}
-bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo)
+bool Player::Create(ObjectGuid::LowType guidlow, CharacterCreateInfo* createInfo)
{
//FIXME: outfitId not used in player creating
/// @todo need more checks against packet modifications
- Object::_Create(guidlow, 0, HIGHGUID_PLAYER);
+ Object::_Create(guidlow, 0, HighGuid::Player);
m_name = createInfo->Name;
@@ -1802,7 +1438,7 @@ void Player::Update(uint32 p_time)
{
// m_nextSave reset in SaveToDB call
SaveToDB();
- TC_LOG_DEBUG("entities.player", "Player '%s' (GUID: %u) saved", GetName().c_str(), GetGUIDLow());
+ TC_LOG_DEBUG("entities.player", "Player '%s' (GUID: %u) saved", GetName().c_str(), GetGUID().GetCounter());
}
else
m_nextSave -= p_time;
@@ -1911,7 +1547,7 @@ void Player::setDeathState(DeathState s)
{
if (!cur)
{
- TC_LOG_ERROR("entities.player", "setDeathState: attempt to kill a dead player %s(%d)", GetName().c_str(), GetGUIDLow());
+ TC_LOG_ERROR("entities.player", "setDeathState: attempt to kill a dead player %s(%d)", GetName().c_str(), GetGUID().GetCounter());
return;
}
@@ -1961,7 +1597,7 @@ bool Player::BuildEnumData(PreparedQueryResult result, WorldPacket* data)
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
uint8 plrRace = fields[2].GetUInt8();
uint8 plrClass = fields[3].GetUInt8();
uint8 gender = fields[4].GetUInt8();
@@ -1978,7 +1614,7 @@ bool Player::BuildEnumData(PreparedQueryResult result, WorldPacket* data)
return false;
}
- *data << ObjectGuid(HIGHGUID_PLAYER, guid);
+ *data << ObjectGuid(HighGuid::Player, guid);
*data << fields[1].GetString(); // name
*data << uint8(plrRace); // race
*data << uint8(plrClass); // class
@@ -2022,6 +1658,8 @@ bool Player::BuildEnumData(PreparedQueryResult result, WorldPacket* data)
uint32 charFlags = 0;
uint32 playerFlags = fields[14].GetUInt32();
+ if (atLoginFlags & AT_LOGIN_RESURRECT)
+ playerFlags &= ~PLAYER_FLAGS_GHOST;
if (playerFlags & PLAYER_FLAGS_HIDE_HELM)
charFlags |= CHARACTER_FLAG_HIDE_HELM;
if (playerFlags & PLAYER_FLAGS_HIDE_CLOAK)
@@ -2158,13 +1796,13 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
if (!MapManager::IsValidMapCoord(mapid, x, y, z, orientation))
{
TC_LOG_ERROR("maps", "TeleportTo: invalid map (%d) or invalid coordinates (X: %f, Y: %f, Z: %f, O: %f) given when teleporting player (GUID: %u, name: %s, map: %d, X: %f, Y: %f, Z: %f, O: %f).",
- mapid, x, y, z, orientation, GetGUIDLow(), GetName().c_str(), GetMapId(), GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
+ mapid, x, y, z, orientation, GetGUID().GetCounter(), GetName().c_str(), GetMapId(), GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
return false;
}
if (!GetSession()->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_DISABLE_MAP) && DisableMgr::IsDisabledFor(DISABLE_TYPE_MAP, mapid, this))
{
- TC_LOG_ERROR("maps", "Player (GUID: %u, name: %s) tried to enter a forbidden map %u", GetGUIDLow(), GetName().c_str(), mapid);
+ TC_LOG_ERROR("maps", "Player (GUID: %u, name: %s) tried to enter a forbidden map %u", GetGUID().GetCounter(), GetName().c_str(), mapid);
SendTransferAborted(mapid, TRANSFER_ABORT_MAP_NOT_ALLOWED);
return false;
}
@@ -2485,17 +2123,18 @@ void Player::RemoveFromWorld()
sBattlefieldMgr->HandlePlayerLeaveZone(this, m_zoneUpdateId);
}
- ///- Do not add/remove the player from the object storage
- ///- It will crash when updating the ObjectAccessor
- ///- The player should only be removed when logging out
- Unit::RemoveFromWorld();
-
+ // Remove items from world before self - player must be found in Item::RemoveFromObjectUpdate
for (uint8 i = PLAYER_SLOT_START; i < PLAYER_SLOT_END; ++i)
{
if (m_items[i])
m_items[i]->RemoveFromWorld();
}
+ ///- Do not add/remove the player from the object storage
+ ///- It will crash when updating the ObjectAccessor
+ ///- The player should only be removed when logging out
+ Unit::RemoveFromWorld();
+
for (ItemMap::iterator iter = mMitems.begin(); iter != mMitems.end(); ++iter)
iter->second->RemoveFromWorld();
@@ -2512,7 +2151,7 @@ void Player::RemoveFromWorld()
bool Player::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) const
{
- // players are immune to taunt (the aura and the spell effect).
+ // players are immune to taunt (the aura and the spell effect)
if (spellInfo->Effects[index].IsAura(SPELL_AURA_MOD_TAUNT))
return true;
if (spellInfo->Effects[index].IsEffect(SPELL_EFFECT_ATTACK_ME))
@@ -2817,7 +2456,7 @@ GameObject* Player::GetGameObjectIfCanInteractWith(ObjectGuid guid, GameobjectTy
return go;
TC_LOG_DEBUG("maps", "GetGameObjectIfCanInteractWith: GameObject '%s' [GUID: %u] is too far away from player %s [GUID: %u] to be used by him (distance=%f, maximal 10 is allowed)", go->GetGOInfo()->name.c_str(),
- go->GetGUIDLow(), GetName().c_str(), GetGUIDLow(), go->GetDistance(this));
+ go->GetGUID().GetCounter(), GetName().c_str(), GetGUID().GetCounter(), go->GetDistance(this));
}
}
@@ -2933,6 +2572,11 @@ void Player::SetGameMaster(bool on)
UpdateObjectVisibility();
}
+bool Player::CanBeGameMaster() const
+{
+ return GetSession()->HasPermission(rbac::RBAC_PERM_COMMAND_GM);
+}
+
void Player::SetGMVisible(bool on)
{
if (on)
@@ -3424,7 +3068,7 @@ void Player::RemoveMail(uint32 id)
}
}
-void Player::SendMailResult(uint32 mailId, MailResponseType mailAction, MailResponseResult mailError, uint32 equipError, uint32 item_guid, uint32 item_count)
+void Player::SendMailResult(uint32 mailId, MailResponseType mailAction, MailResponseResult mailError, uint32 equipError, ObjectGuid::LowType item_guid, uint32 item_count)
{
WorldPacket data(SMSG_SEND_MAIL_RESULT, (4+4+4+(mailError == MAIL_ERR_EQUIP_ERROR?4:(mailAction == MAIL_ITEM_TAKEN?4+4:0))));
data << (uint32) mailId;
@@ -3559,7 +3203,7 @@ bool Player::AddTalent(uint32 spellId, uint8 spec, bool learning)
return false;
}
-bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading /*= false*/, bool fromSkill /*= false*/)
+bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading /*= false*/, uint32 fromSkill /*= 0*/)
{
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo)
@@ -3817,10 +3461,10 @@ bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent
SkillLineAbilityMapBounds skill_bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spellId);
- // add dependent skills if this spell is not learned from adding skill already
- if (!fromSkill)
+ if (SpellLearnSkillNode const* spellLearnSkill = sSpellMgr->GetSpellLearnSkill(spellId))
{
- if (SpellLearnSkillNode const* spellLearnSkill = sSpellMgr->GetSpellLearnSkill(spellId))
+ // add dependent skills if this spell is not learned from adding skill already
+ if (spellLearnSkill->skill != fromSkill)
{
uint32 skill_value = GetPureSkillValue(spellLearnSkill->skill);
uint32 skill_max_value = GetPureMaxSkillValue(spellLearnSkill->skill);
@@ -3835,26 +3479,29 @@ bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent
SetSkill(spellLearnSkill->skill, spellLearnSkill->step, skill_value, skill_max_value);
}
- else
+ }
+ else
+ {
+ // not ranked skills
+ for (SkillLineAbilityMap::const_iterator _spell_idx = skill_bounds.first; _spell_idx != skill_bounds.second; ++_spell_idx)
{
- // not ranked skills
- for (SkillLineAbilityMap::const_iterator _spell_idx = skill_bounds.first; _spell_idx != skill_bounds.second; ++_spell_idx)
- {
- SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(_spell_idx->second->skillId);
- if (!pSkill)
- continue;
+ SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(_spell_idx->second->skillId);
+ if (!pSkill)
+ continue;
- ///@todo: confirm if rogues start with lockpicking skill at level 1 but only receive the spell to use it at level 16
- // Also added for runeforging. It's already confirmed this happens upon learning for Death Knights, not from character creation.
- if ((_spell_idx->second->AutolearnType == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN && !HasSkill(pSkill->id)) || ((pSkill->id == SKILL_LOCKPICKING || pSkill->id == SKILL_RUNEFORGING) && _spell_idx->second->max_value == 0))
- LearnDefaultSkill(pSkill->id, 0);
+ if (pSkill->id == fromSkill)
+ continue;
- if (pSkill->id == SKILL_MOUNTS && !Has310Flyer(false))
- for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
- if (spellInfo->Effects[i].ApplyAuraName == SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED &&
- spellInfo->Effects[i].CalcValue() == 310)
- SetHas310Flyer(true);
- }
+ ///@todo: confirm if rogues start with lockpicking skill at level 1 but only receive the spell to use it at level 16
+ // Also added for runeforging. It's already confirmed this happens upon learning for Death Knights, not from character creation.
+ if ((_spell_idx->second->AutolearnType == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN && !HasSkill(pSkill->id)) || ((pSkill->id == SKILL_LOCKPICKING || pSkill->id == SKILL_RUNEFORGING) && _spell_idx->second->max_value == 0))
+ LearnDefaultSkill(pSkill->id, 0);
+
+ if (pSkill->id == SKILL_MOUNTS && !Has310Flyer(false))
+ for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ if (spellInfo->Effects[i].ApplyAuraName == SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED &&
+ spellInfo->Effects[i].CalcValue() == 310)
+ SetHas310Flyer(true);
}
}
@@ -3920,14 +3567,14 @@ bool Player::IsNeedCastPassiveSpellAtLearn(SpellInfo const* spellInfo) const
// note: form passives activated with shapeshift spells be implemented by HandleShapeshiftBoosts instead of spell_learn_spell
// 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)))) ||
+ bool need_cast = (!spellInfo->Stances || (form && (spellInfo->Stances & (UI64LIT(1) << (form - 1)))) ||
(!form && spellInfo->HasAttribute(SPELL_ATTR2_NOT_NEED_SHAPESHIFT)));
//Check CasterAuraStates
return need_cast && (!spellInfo->CasterAuraState || HasAuraState(AuraStateType(spellInfo->CasterAuraState)));
}
-void Player::LearnSpell(uint32 spell_id, bool dependent, bool fromSkill /*= false*/)
+void Player::LearnSpell(uint32 spell_id, bool dependent, uint32 fromSkill /*= 0*/)
{
PlayerSpellMap::iterator itr = m_spells.find(spell_id);
@@ -4531,30 +4178,31 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
updateRealmChars = false;
// Convert guid to low GUID for CharacterNameData, but also other methods on success
- uint32 guid = playerguid.GetCounter();
+ ObjectGuid::LowType guid = playerguid.GetCounter();
uint32 charDelete_method = sWorld->getIntConfig(CONFIG_CHARDELETE_METHOD);
if (deleteFinally)
charDelete_method = CHAR_DELETE_REMOVE;
- else if (CharacterNameData const* nameData = sWorld->GetCharacterNameData(playerguid)) // To avoid a query, we select loaded data. If it doesn't exist, return.
+ else if (CharacterInfo const* nameData = sWorld->GetCharacterInfo(playerguid)) // To avoid a query, we select loaded data. If it doesn't exist, return.
{
// Define the required variables
- uint32 charDelete_minLvl = sWorld->getIntConfig(nameData->m_class != CLASS_DEATH_KNIGHT ? CONFIG_CHARDELETE_MIN_LEVEL : CONFIG_CHARDELETE_HEROIC_MIN_LEVEL);
+ uint32 charDelete_minLvl = sWorld->getIntConfig(nameData->Class != CLASS_DEATH_KNIGHT ? CONFIG_CHARDELETE_MIN_LEVEL : CONFIG_CHARDELETE_HEROIC_MIN_LEVEL);
// if we want to finalize the character removal or the character does not meet the level requirement of either heroic or non-heroic settings,
// we set it to mode CHAR_DELETE_REMOVE
- if (nameData->m_level < charDelete_minLvl)
+ if (nameData->Level < charDelete_minLvl)
charDelete_method = CHAR_DELETE_REMOVE;
}
- // convert corpse to bones if exist (to prevent exiting Corpse in World without DB entry)
- // bones will be deleted by corpse/bones deleting thread shortly
- sObjectAccessor->ConvertCorpseForPlayer(playerguid);
-
- if (uint32 guildId = GetGuildIdFromDB(playerguid))
+ if (ObjectGuid::LowType guildId = GetGuildIdFromDB(playerguid))
if (Guild* guild = sGuildMgr->GetGuildById(guildId))
guild->DeleteMember(playerguid, false, false, true);
+ // close player ticket if any
+ GmTicket* ticket = sTicketMgr->GetTicketByPlayer(playerguid);
+ if (ticket)
+ ticket->SetClosedBy(playerguid);
+
// remove from arena teams
LeaveAllArenaTeams(playerguid);
@@ -4629,7 +4277,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
do
{
Field* itemFields = resultItems->Fetch();
- uint32 item_guidlow = itemFields[11].GetUInt32();
+ ObjectGuid::LowType item_guidlow = itemFields[11].GetUInt32();
uint32 item_template = itemFields[12].GetUInt32();
ItemTemplate const* itemProto = sObjectMgr->GetItemTemplate(item_template);
@@ -4676,7 +4324,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
{
do
{
- uint32 petguidlow = (*resultPets)[0].GetUInt32();
+ ObjectGuid::LowType petguidlow = (*resultPets)[0].GetUInt32();
Pet::DeleteFromDB(petguidlow);
} while (resultPets->NextRow());
}
@@ -4690,7 +4338,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
{
do
{
- if (Player* pFriend = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, 0, (*resultFriends)[0].GetUInt32())))
+ if (Player* pFriend = ObjectAccessor::FindPlayer(ObjectGuid(HighGuid::Player, 0, (*resultFriends)[0].GetUInt32())))
{
pFriend->GetSocial()->RemoveFromSocialList(guid, false);
sSocialMgr->SendFriendStatus(pFriend, FRIEND_REMOVED, guid, false);
@@ -4766,9 +4414,18 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
stmt->setUInt32(0, guid);
trans->Append(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_GM_TICKETS);
- stmt->setUInt32(0, guid);
- trans->Append(stmt);
+ if (sWorld->getBoolConfig(CONFIG_DELETE_CHARACTER_TICKET_TRACE))
+ {
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_PLAYER_GM_TICKETS_ON_CHAR_DELETION);
+ stmt->setUInt32(0, guid);
+ trans->Append(stmt);
+ }
+ else
+ {
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_GM_TICKETS);
+ stmt->setUInt32(0, guid);
+ trans->Append(stmt);
+ }
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_BY_OWNER);
stmt->setUInt32(0, guid);
@@ -4851,6 +4508,8 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
stmt->setUInt32(0, guid);
trans->Append(stmt);
+ Corpse::DeleteFromDB(playerguid, trans);
+
CharacterDatabase.CommitTransaction(trans);
break;
}
@@ -4872,7 +4531,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
if (updateRealmChars)
sWorld->UpdateRealmCharCount(accountId);
- sWorld->DeleteCharacterNameData(playerguid);
+ sWorld->DeleteCharacterInfo(playerguid);
}
/**
@@ -4910,7 +4569,7 @@ void Player::DeleteOldCharacters(uint32 keepDays)
do
{
Field* fields = result->Fetch();
- Player::DeleteFromDB(ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32()), fields[1].GetUInt32(), true, true);
+ Player::DeleteFromDB(ObjectGuid(HighGuid::Player, fields[0].GetUInt32()), fields[1].GetUInt32(), true, true);
}
while (result->NextRow());
}
@@ -4950,21 +4609,20 @@ void Player::BuildPlayerRepop()
// there must be SMSG.FORCE_RUN_SPEED_CHANGE, SMSG.FORCE_SWIM_SPEED_CHANGE, SMSG.MOVE_WATER_WALK
// there must be SMSG.STOP_MIRROR_TIMER
- // there we must send 888 opcode
- // the player cannot have a corpse already, only bones which are not returned by GetCorpse
- if (GetCorpse())
+ // the player cannot have a corpse already on current map, only bones which are not returned by GetCorpse
+ WorldLocation corpseLocation = GetCorpseLocation();
+ if (corpseLocation.GetMapId() == GetMapId())
{
- TC_LOG_ERROR("entities.player", "BuildPlayerRepop: player %s(%d) already has a corpse", GetName().c_str(), GetGUIDLow());
+ TC_LOG_ERROR("entities.player", "BuildPlayerRepop: player %s(%d) already has a corpse", GetName().c_str(), GetGUID().GetCounter());
return;
}
// create a corpse and place it at the player's location
- CreateCorpse();
- Corpse* corpse = GetCorpse();
+ Corpse* corpse = CreateCorpse();
if (!corpse)
{
- TC_LOG_ERROR("entities.player", "Error creating corpse for Player %s [%u]", GetName().c_str(), GetGUIDLow());
+ TC_LOG_ERROR("entities.player", "Error creating corpse for Player %s [%u]", GetName().c_str(), GetGUID().GetCounter());
return;
}
GetMap()->AddToMap(corpse);
@@ -5103,34 +4761,43 @@ void Player::KillPlayer()
UpdateObjectVisibility();
}
-void Player::CreateCorpse()
+void Player::OfflineResurrect(ObjectGuid const& guid, SQLTransaction& trans)
+{
+ Corpse::DeleteFromDB(guid, trans);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
+ stmt->setUInt16(0, uint16(AT_LOGIN_RESURRECT));
+ stmt->setUInt64(1, guid.GetCounter());
+ CharacterDatabase.ExecuteOrAppend(trans, stmt);
+}
+
+Corpse* Player::CreateCorpse()
{
// prevent existence 2 corpse for player
SpawnCorpseBones();
- uint32 _uf, _pb, _pb2, _cfb1, _cfb2;
+ uint32 _pb, _pb2, _cfb1, _cfb2;
Corpse* corpse = new Corpse((m_ExtraFlags & PLAYER_EXTRA_PVP_DEATH) ? CORPSE_RESURRECTABLE_PVP : CORPSE_RESURRECTABLE_PVE);
SetPvPDeath(false);
- if (!corpse->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_CORPSE), this))
+ if (!corpse->Create(GetMap()->GenerateLowGuid<HighGuid::Corpse>(), this))
{
delete corpse;
- return;
+ return nullptr;
}
- _uf = GetUInt32Value(UNIT_FIELD_BYTES_0);
+ _corpseLocation.WorldRelocate(*this);
+
_pb = GetUInt32Value(PLAYER_BYTES);
_pb2 = GetUInt32Value(PLAYER_BYTES_2);
- uint8 race = (uint8)(_uf);
uint8 skin = (uint8)(_pb);
uint8 face = (uint8)(_pb >> 8);
uint8 hairstyle = (uint8)(_pb >> 16);
uint8 haircolor = (uint8)(_pb >> 24);
uint8 facialhair = (uint8)(_pb2);
- _cfb1 = ((0x00) | (race << 8) | (getGender() << 16) | (skin << 24));
+ _cfb1 = ((0x00) | (getRace() << 8) | (GetByteValue(PLAYER_BYTES_3, 0) << 16) | (skin << 24));
_cfb2 = ((face) | (hairstyle << 8) | (haircolor << 16) | (facialhair << 24));
corpse->SetUInt32Value(CORPSE_FIELD_BYTES_1, _cfb1);
@@ -5164,24 +4831,27 @@ void Player::CreateCorpse()
}
}
+ // register for player, but not show
+ GetMap()->AddCorpse(corpse);
+
// we do not need to save corpses for BG/arenas
if (!GetMap()->IsBattlegroundOrArena())
corpse->SaveToDB();
- // register for player, but not show
- sObjectAccessor->AddCorpse(corpse);
+ return corpse;
}
-void Player::SpawnCorpseBones()
+void Player::SpawnCorpseBones(bool triggerSave /*= true*/)
{
- if (sObjectAccessor->ConvertCorpseForPlayer(GetGUID()))
- if (!GetSession()->PlayerLogoutWithSave()) // at logout we will already store the player
- SaveToDB(); // prevent loading as ghost without corpse
+ _corpseLocation.WorldRelocate();
+ if (GetMap()->ConvertCorpseToBones(GetGUID()))
+ if (triggerSave && !GetSession()->PlayerLogoutWithSave()) // at logout we will already store the player
+ SaveToDB(); // prevent loading as ghost without corpse
}
Corpse* Player::GetCorpse() const
{
- return sObjectAccessor->GetCorpseForPlayerGUID(GetGUID());
+ return GetMap()->GetCorpseByPlayer(GetGUID());
}
void Player::DurabilityLossAll(double percent, bool inventory)
@@ -6532,20 +6202,20 @@ void Player::SendActionButtons(uint32 state) const
}
GetSession()->SendPacket(&data);
- TC_LOG_DEBUG("network", "SMSG_ACTION_BUTTONS sent '%u' spec '%u' Sent", GetGUIDLow(), m_activeSpec);
+ TC_LOG_DEBUG("network", "SMSG_ACTION_BUTTONS sent '%u' spec '%u' Sent", GetGUID().GetCounter(), m_activeSpec);
}
bool Player::IsActionButtonDataValid(uint8 button, uint32 action, uint8 type)
{
if (button >= 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 );
+ 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(), GetGUID().GetCounter(), MAX_ACTION_BUTTONS );
return false;
}
if (action >= 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);
+ 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(), GetGUID().GetCounter(), MAX_ACTION_BUTTON_ACTION_VALUE);
return false;
}
@@ -6554,20 +6224,20 @@ bool Player::IsActionButtonDataValid(uint8 button, uint32 action, uint8 type)
case ACTION_BUTTON_SPELL:
if (!sSpellMgr->GetSpellInfo(action))
{
- 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());
+ 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(), GetGUID().GetCounter());
return false;
}
if (!HasSpell(action))
{
- 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());
+ 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(), GetGUID().GetCounter());
return false;
}
break;
case ACTION_BUTTON_ITEM:
if (!sObjectMgr->GetItemTemplate(action))
{
- 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());
+ 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(), GetGUID().GetCounter());
return false;
}
break;
@@ -6595,7 +6265,7 @@ ActionButton* Player::addActionButton(uint8 button, uint32 action, uint8 type)
// set data and update to CHANGED if not NEW
ab.SetActionAndType(action, ActionButtonType(type));
- TC_LOG_DEBUG("entities.player", "Player '%u' Added Action '%u' (type %u) to Button '%u'", GetGUIDLow(), action, type, button);
+ TC_LOG_DEBUG("entities.player", "Player '%u' Added Action '%u' (type %u) to Button '%u'", GetGUID().GetCounter(), action, type, button);
return &ab;
}
@@ -6610,7 +6280,7 @@ void Player::removeActionButton(uint8 button)
else
buttonItr->second.uState = ACTIONBUTTON_DELETED; // saved, will deleted at next save
- TC_LOG_DEBUG("entities.player", "Action Button '%u' Removed from Player '%u'", button, GetGUIDLow());
+ TC_LOG_DEBUG("entities.player", "Action Button '%u' Removed from Player '%u'", button, GetGUID().GetCounter());
}
ActionButton const* Player::GetActionButton(uint8 button)
@@ -6744,7 +6414,7 @@ void Player::CheckAreaExploreAndOutdoor()
AreaTableEntry const* areaEntry = GetAreaEntryByAreaFlagAndMap(areaFlag, GetMapId());
if (!areaEntry)
{
- TC_LOG_ERROR("entities.player", "Player %u discovered unknown area (x: %f y: %f z: %f map: %u", GetGUIDLow(), GetPositionX(), GetPositionY(), GetPositionZ(), GetMapId());
+ TC_LOG_ERROR("entities.player", "Player %u discovered unknown area (x: %f y: %f z: %f map: %u", GetGUID().GetCounter(), GetPositionX(), GetPositionY(), GetPositionZ(), GetMapId());
return;
}
@@ -6779,7 +6449,7 @@ void Player::CheckAreaExploreAndOutdoor()
GiveXP(XP, NULL);
SendExplorationExperience(area, XP);
}
- TC_LOG_DEBUG("entities.player", "Player %u discovered a new area: %u", GetGUIDLow(), area);
+ TC_LOG_DEBUG("entities.player", "Player %u discovered a new area: %u", GetGUID().GetCounter(), area);
}
}
}
@@ -6914,7 +6584,7 @@ void Player::RewardReputation(Unit* victim, float rate)
{
// support for: Championing - http://www.wowwiki.com/Championing
Map const* map = GetMap();
- if (map && map->IsNonRaidDungeon())
+ if (map->IsNonRaidDungeon())
if (LFGDungeonEntry const* dungeon = GetLFGDungeon(map->GetId(), map->GetDifficulty()))
if (dungeon->reclevel == 80)
ChampioningFaction = GetChampioningFaction();
@@ -7209,7 +6879,7 @@ void Player::ModifyHonorPoints(int32 value, SQLTransaction trans)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_HONOR_POINTS);
stmt->setUInt32(0, newValue);
- stmt->setUInt32(1, GetGUIDLow());
+ stmt->setUInt32(1, GetGUID().GetCounter());
trans->Append(stmt);
}
}
@@ -7225,12 +6895,12 @@ void Player::ModifyArenaPoints(int32 value, SQLTransaction trans)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ARENA_POINTS);
stmt->setUInt32(0, newValue);
- stmt->setUInt32(1, GetGUIDLow());
+ stmt->setUInt32(1, GetGUID().GetCounter());
trans->Append(stmt);
}
}
-uint32 Player::GetGuildIdFromDB(ObjectGuid guid)
+ObjectGuid::LowType Player::GetGuildIdFromDB(ObjectGuid guid)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_MEMBER);
stmt->setUInt32(0, guid.GetCounter());
@@ -7284,7 +6954,7 @@ uint32 Player::GetArenaTeamIdFromDB(ObjectGuid guid, uint8 type)
uint32 Player::GetZoneIdFromDB(ObjectGuid guid)
{
- uint32 guidLow = guid.GetCounter();
+ ObjectGuid::LowType guidLow = guid.GetCounter();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_ZONE);
stmt->setUInt32(0, guidLow);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
@@ -7630,7 +7300,7 @@ void Player::_ApplyItemMods(Item* item, uint8 slot, bool apply)
if (item->IsBroken())
return;
- TC_LOG_DEBUG("entities.player.items", "applying mods for item %u ", item->GetGUIDLow());
+ TC_LOG_DEBUG("entities.player.items", "applying mods for item %u ", item->GetGUID().GetCounter());
uint8 attacktype = Player::GetAttackBySlot(slot);
@@ -8095,7 +7765,7 @@ void Player::ApplyItemEquipSpell(Item* item, bool apply, bool form_change)
_Spell const& spellData = proto->Spells[i];
// no spell
- if (!spellData.SpellId)
+ if (spellData.SpellId <= 0)
continue;
// wrong triggering type
@@ -8223,7 +7893,7 @@ void Player::CastItemCombatSpell(Unit* target, WeaponAttackType attType, uint32
_Spell const& spellData = proto->Spells[i];
// no spell
- if (!spellData.SpellId)
+ if (spellData.SpellId <= 0)
continue;
// wrong triggering type
@@ -8289,7 +7959,7 @@ void Player::CastItemCombatSpell(Unit* target, WeaponAttackType attType, uint32
if (!spellInfo)
{
TC_LOG_ERROR("entities.player.items", "Player::CastItemCombatSpell(GUID: %u, name: %s, enchant: %i): unknown spell %i is cast, ignoring...",
- GetGUIDLow(), GetName().c_str(), pEnchant->ID, pEnchant->spellid[s]);
+ GetGUID().GetCounter(), GetName().c_str(), pEnchant->ID, pEnchant->spellid[s]);
continue;
}
@@ -8346,16 +8016,13 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, uint8
return;
}
- // use triggered flag only for items with many spell casts and for not first cast
- uint8 count = 0;
-
// item spells cast at use
for (uint8 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i)
{
_Spell const& spellData = proto->Spells[i];
// no spell
- if (!spellData.SpellId)
+ if (spellData.SpellId <= 0)
continue;
// wrong triggering type
@@ -8369,13 +8036,12 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, uint8
continue;
}
- Spell* spell = new Spell(this, spellInfo, (count > 0) ? TRIGGERED_FULL_MASK : TRIGGERED_NONE);
+ Spell* spell = new Spell(this, spellInfo, TRIGGERED_NONE);
spell->m_CastItem = item;
spell->m_cast_count = cast_count; // set count of casts
spell->m_glyphIndex = glyphIndex; // glyph index
spell->prepare(&targets);
-
- ++count;
+ return;
}
// Item enchantments spells cast at use
@@ -8397,13 +8063,12 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, uint8
continue;
}
- Spell* spell = new Spell(this, spellInfo, (count > 0) ? TRIGGERED_FULL_MASK : TRIGGERED_NONE);
+ Spell* spell = new Spell(this, spellInfo, TRIGGERED_NONE);
spell->m_CastItem = item;
spell->m_cast_count = cast_count; // set count of casts
spell->m_glyphIndex = glyphIndex; // glyph index
spell->prepare(&targets);
-
- ++count;
+ return;
}
}
}
@@ -8595,9 +8260,11 @@ void Player::RemovedInsignia(Player* looterPlr)
RepopAtGraveyard();
}
+ _corpseLocation.WorldRelocate();
+
// We have to convert player corpse to bones, not to be able to resurrect there
// SpawnCorpseBones isn't handy, 'cos it saves player while he in BG
- Corpse* bones = sObjectAccessor->ConvertCorpseForPlayer(GetGUID(), true);
+ Corpse* bones = GetMap()->ConvertCorpseToBones(GetGUID(), true);
if (!bones)
return;
@@ -9648,7 +9315,7 @@ uint32 Player::GetXPRestBonus(uint32 xp)
SetRestBonus(GetRestBonus() - rested_bonus);
- TC_LOG_DEBUG("entities.player", "GetXPRestBonus: Player %s (%u) gain %u xp (+%u Rested Bonus). Rested points=%f", GetName().c_str(), GetGUIDLow(), xp+rested_bonus, rested_bonus, GetRestBonus());
+ TC_LOG_DEBUG("entities.player", "GetXPRestBonus: Player %s (%u) gain %u xp (+%u Rested Bonus). Rested points=%f", GetName().c_str(), GetGUID().GetCounter(), xp+rested_bonus, rested_bonus, GetRestBonus());
return rested_bonus;
}
@@ -9680,7 +9347,7 @@ void Player::ResetPetTalents()
CharmInfo* charmInfo = pet->GetCharmInfo();
if (!charmInfo)
{
- TC_LOG_ERROR("entities.player", "Object (GUID: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", pet->GetGUIDLow(), pet->GetTypeId());
+ TC_LOG_ERROR("entities.player", "Object (GUID: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", pet->GetGUID().GetCounter(), pet->GetTypeId());
return;
}
pet->resetTalents();
@@ -11639,7 +11306,7 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec &dest
if (pItemslot >= CURRENCYTOKEN_SLOT_START && pItemslot < CURRENCYTOKEN_SLOT_END)
{
TC_LOG_ERROR("entities.player", "Possible hacking attempt: Player %s [guid: %u] tried to move token [guid: %u, entry: %u] out of the currency bag!",
- GetName().c_str(), GetGUIDLow(), pItem->GetGUIDLow(), pProto->ItemId);
+ GetName().c_str(), GetGUID().GetCounter(), pItem->GetGUID().GetCounter(), pProto->ItemId);
return EQUIP_ERR_ITEMS_CANT_BE_SWAPPED;
}
@@ -12076,7 +11743,7 @@ Item* Player::StoreNewItem(ItemPosCountVec const& dest, uint32 item, bool update
ss << ' ' << *itr;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_BOP_TRADE);
- stmt->setUInt32(0, pItem->GetGUIDLow());
+ stmt->setUInt32(0, pItem->GetGUID().GetCounter());
stmt->setString(1, ss.str());
CharacterDatabase.Execute(stmt);
}
@@ -12117,7 +11784,7 @@ Item* Player::_StoreItem(uint16 pos, Item* pItem, uint32 count, bool clone, bool
uint8 bag = pos >> 8;
uint8 slot = pos & 255;
- TC_LOG_DEBUG("entities.player.items", "STORAGE: StoreItem bag = %u, slot = %u, item = %u, count = %u, guid = %u", bag, slot, pItem->GetEntry(), count, pItem->GetGUIDLow());
+ TC_LOG_DEBUG("entities.player.items", "STORAGE: StoreItem bag = %u, slot = %u, item = %u, count = %u, guid = %u", bag, slot, pItem->GetEntry(), count, pItem->GetGUID().GetCounter());
Item* pItem2 = GetItemByPos(bag, slot);
@@ -12543,7 +12210,7 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT);
- stmt->setUInt32(0, pItem->GetGUIDLow());
+ stmt->setUInt32(0, pItem->GetGUID().GetCounter());
CharacterDatabase.Execute(stmt);
}
@@ -12909,7 +12576,7 @@ void Player::DestroyItemCount(Item* pItem, uint32 &count, bool update)
if (!pItem)
return;
- TC_LOG_DEBUG("entities.player.items", "STORAGE: DestroyItemCount item (GUID: %u, Entry: %u) count = %u", pItem->GetGUIDLow(), pItem->GetEntry(), count);
+ TC_LOG_DEBUG("entities.player.items", "STORAGE: DestroyItemCount item (GUID: %u, Entry: %u) count = %u", pItem->GetGUID().GetCounter(), pItem->GetEntry(), count);
if (pItem->GetCount() <= count)
{
@@ -13574,36 +13241,25 @@ void Player::TradeCancel(bool sendback)
void Player::UpdateSoulboundTradeItems()
{
- if (m_itemSoulboundTradeable.empty())
- return;
-
// also checks for garbage data
- for (ItemDurationList::iterator itr = m_itemSoulboundTradeable.begin(); itr != m_itemSoulboundTradeable.end();)
+ for (GuidUnorderedSet::iterator itr = m_itemSoulboundTradeable.begin(); itr != m_itemSoulboundTradeable.end();)
{
- ASSERT(*itr);
- if ((*itr)->GetOwnerGUID() != GetGUID())
- {
- m_itemSoulboundTradeable.erase(itr++);
- continue;
- }
- if ((*itr)->CheckSoulboundTradeExpire())
- {
- m_itemSoulboundTradeable.erase(itr++);
- continue;
- }
- ++itr;
+ Item* item = GetItemByGuid(*itr);
+ if (!item || item->GetOwnerGUID() != GetGUID() || item->CheckSoulboundTradeExpire())
+ itr = m_itemSoulboundTradeable.erase(itr);
+ else
+ ++itr;
}
}
void Player::AddTradeableItem(Item* item)
{
- m_itemSoulboundTradeable.push_back(item);
+ m_itemSoulboundTradeable.insert(item->GetGUID());
}
-/// @todo should never allow an item to be added to m_itemSoulboundTradeable twice
void Player::RemoveTradeableItem(Item* item)
{
- m_itemSoulboundTradeable.remove(item);
+ m_itemSoulboundTradeable.erase(item->GetGUID());
}
void Player::UpdateItemDuration(uint32 time, bool realtimeonly)
@@ -14264,7 +13920,7 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool
VendorItemData const* vendorItems = creature->GetVendorItems();
if (!vendorItems || vendorItems->Empty())
{
- TC_LOG_ERROR("sql.sql", "Creature %s (Entry: %u GUID: %u DB GUID: %u) has UNIT_NPC_FLAG_VENDOR set but has an empty trading item list.", creature->GetName().c_str(), creature->GetEntry(), creature->GetGUIDLow(), creature->GetDBTableGUIDLow());
+ TC_LOG_ERROR("sql.sql", "Creature %s (Entry: %u GUID: %u DB GUID: %u) has UNIT_NPC_FLAG_VENDOR set but has an empty trading item list.", creature->GetName().c_str(), creature->GetEntry(), creature->GetGUID().GetCounter(), creature->GetSpawnId());
canTalk = false;
}
break;
@@ -14299,7 +13955,7 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool
case GOSSIP_OPTION_TRAINER:
if (getClass() != creature->GetCreatureTemplate()->trainer_class && creature->GetCreatureTemplate()->trainer_type == TRAINER_TYPE_CLASS)
TC_LOG_ERROR("sql.sql", "GOSSIP_OPTION_TRAINER:: Player %s (GUID: %u) request wrong gossip menu: %u with wrong class: %u at Creature: %s (Entry: %u, Trainer Class: %u)",
- GetName().c_str(), GetGUIDLow(), menu->GetGossipMenu().GetMenuId(), getClass(), creature->GetName().c_str(), creature->GetEntry(), creature->GetCreatureTemplate()->trainer_class);
+ GetName().c_str(), GetGUID().GetCounter(), menu->GetGossipMenu().GetMenuId(), getClass(), creature->GetName().c_str(), creature->GetEntry(), creature->GetCreatureTemplate()->trainer_class);
// no break;
case GOSSIP_OPTION_GOSSIP:
case GOSSIP_OPTION_SPIRITGUIDE:
@@ -14427,7 +14083,7 @@ void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 men
{
if (gossipOptionId > GOSSIP_OPTION_QUESTGIVER)
{
- TC_LOG_ERROR("entities.player", "Player guid %u request invalid gossip option for GameObject entry %u", GetGUIDLow(), source->GetEntry());
+ TC_LOG_ERROR("entities.player", "Player guid %u request invalid gossip option for GameObject entry %u", GetGUID().GetCounter(), source->GetEntry());
return;
}
}
@@ -14460,7 +14116,7 @@ void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 men
break;
}
case GOSSIP_OPTION_OUTDOORPVP:
- sOutdoorPvPMgr->HandleGossipOption(this, source->GetGUID(), gossipListId);
+ sOutdoorPvPMgr->HandleGossipOption(this, source->ToCreature(), gossipListId);
break;
case GOSSIP_OPTION_SPIRITHEALER:
if (isDead())
@@ -14531,7 +14187,7 @@ void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 men
if (bgTypeId == BATTLEGROUND_TYPE_NONE)
{
- TC_LOG_ERROR("entities.player", "a user (guid %u) requested battlegroundlist from a npc who is no battlemaster", GetGUIDLow());
+ TC_LOG_ERROR("entities.player", "a user (guid %u) requested battlegroundlist from a npc who is no battlemaster", GetGUID().GetCounter());
return;
}
@@ -15076,15 +14732,15 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
uint32 qtime = 0;
if (quest->HasSpecialFlag(QUEST_SPECIAL_FLAGS_TIMED))
{
- uint32 limittime = quest->GetLimitTime();
+ uint32 timeAllowed = quest->GetTimeAllowed();
// shared timed quest
if (questGiver && questGiver->GetTypeId() == TYPEID_PLAYER)
- limittime = questGiver->ToPlayer()->getQuestStatusMap()[quest_id].Timer / IN_MILLISECONDS;
+ timeAllowed = questGiver->ToPlayer()->getQuestStatusMap()[quest_id].Timer / IN_MILLISECONDS;
AddTimedQuest(quest_id);
- questStatusData.Timer = limittime * IN_MILLISECONDS;
- qtime = static_cast<uint32>(time(NULL)) + limittime;
+ questStatusData.Timer = timeAllowed * IN_MILLISECONDS;
+ qtime = static_cast<uint32>(time(NULL)) + timeAllowed;
}
else
questStatusData.Timer = 0;
@@ -15108,7 +14764,7 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
// prepare Quest Tracker datas
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_QUEST_TRACK);
stmt->setUInt32(0, quest_id);
- stmt->setUInt32(1, GetGUIDLow());
+ stmt->setUInt32(1, GetGUID().GetCounter());
stmt->setString(2, GitRevision::GetHash());
stmt->setString(3, GitRevision::GetDate());
@@ -15141,7 +14797,7 @@ void Player::CompleteQuest(uint32 quest_id)
// prepare Quest Tracker datas
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_QUEST_TRACK_COMPLETE_TIME);
stmt->setUInt32(0, quest_id);
- stmt->setUInt32(1, GetGUIDLow());
+ stmt->setUInt32(1, GetGUID().GetCounter());
// add to Quest Tracker
CharacterDatabase.Execute(stmt);
@@ -15174,10 +14830,10 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
for (uint8 i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
{
- if (quest->RequiredSourceItemId[i])
+ if (quest->ItemDrop[i])
{
- uint32 count = quest->RequiredSourceItemCount[i];
- DestroyItemCount(quest->RequiredSourceItemId[i], count ? count : 9999, true);
+ uint32 count = quest->ItemDropQuantity[i];
+ DestroyItemCount(quest->ItemDrop[i], count ? count : 9999, true);
}
}
@@ -15384,9 +15040,9 @@ void Player::FailQuest(uint32 questId)
// Destroy items received on starting the quest.
DestroyItemCount(quest->RequiredItemId[i], quest->RequiredItemCount[i], true, true);
for (uint8 i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
- if (quest->RequiredSourceItemId[i] > 0 && quest->RequiredSourceItemCount[i] > 0)
+ if (quest->ItemDrop[i] > 0 && quest->ItemDropQuantity[i] > 0)
// Destroy items received during the quest.
- DestroyItemCount(quest->RequiredSourceItemId[i], quest->RequiredSourceItemCount[i], true, true);
+ DestroyItemCount(quest->ItemDrop[i], quest->ItemDropQuantity[i], true, true);
}
}
@@ -15568,7 +15224,7 @@ bool Player::SatisfyQuestClass(Quest const* qInfo, bool msg) const
bool Player::SatisfyQuestRace(Quest const* qInfo, bool msg)
{
- uint32 reqraces = qInfo->GetRequiredRaces();
+ uint32 reqraces = qInfo->GetAllowableRaces();
if (reqraces == 0)
return true;
if ((reqraces & getRaceMask()) == 0)
@@ -15640,8 +15296,7 @@ bool Player::SatisfyQuestStatus(Quest const* qInfo, bool msg)
bool Player::SatisfyQuestConditions(Quest const* qInfo, bool msg)
{
- ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_ACCEPT, qInfo->GetQuestId());
- if (!sConditionMgr->IsObjectMeetToConditions(this, conditions))
+ if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_QUEST_ACCEPT, qInfo->GetQuestId(), this))
{
if (msg)
{
@@ -15907,6 +15562,17 @@ bool Player::GetQuestRewardStatus(uint32 quest_id) const
Quest const* qInfo = sObjectMgr->GetQuestTemplate(quest_id);
if (qInfo)
{
+ if (qInfo->IsSeasonal() && !qInfo->IsRepeatable())
+ {
+ uint16 eventId = sGameEventMgr->GetEventIdForQuest(qInfo);
+ auto seasonalQuestItr = m_seasonalquests.find(eventId);
+ if (seasonalQuestItr != m_seasonalquests.end())
+ return seasonalQuestItr->second.find(quest_id) != seasonalQuestItr->second.end();
+
+ return false;
+ }
+
+
// for repeatable quests: rewarded field is set after first reward only to prevent getting XP more than once
if (!qInfo->IsRepeatable())
return m_RewardedQuests.find(quest_id) != m_RewardedQuests.end();
@@ -15925,8 +15591,18 @@ QuestStatus Player::GetQuestStatus(uint32 quest_id) const
return itr->second.Status;
if (Quest const* qInfo = sObjectMgr->GetQuestTemplate(quest_id))
+ {
+ if (qInfo->IsSeasonal() && !qInfo->IsRepeatable())
+ {
+ uint16 eventId = sGameEventMgr->GetEventIdForQuest(qInfo);
+ auto seasonalQuestItr = m_seasonalquests.find(eventId);
+ if (seasonalQuestItr == m_seasonalquests.end() || seasonalQuestItr->second.find(quest_id) == seasonalQuestItr->second.end())
+ return QUEST_STATUS_NONE;
+ }
+
if (!qInfo->IsRepeatable() && m_RewardedQuests.find(quest_id) != m_RewardedQuests.end())
return QUEST_STATUS_REWARDED;
+ }
}
return QUEST_STATUS_NONE;
}
@@ -16053,8 +15729,7 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver)
if (!quest)
continue;
- ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId());
- if (!sConditionMgr->IsObjectMeetToConditions(this, conditions))
+ if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId(), this))
continue;
QuestStatus status = GetQuestStatus(questId);
@@ -16081,8 +15756,7 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver)
if (!quest)
continue;
- ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId());
- if (!sConditionMgr->IsObjectMeetToConditions(this, conditions))
+ if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId(), this))
continue;
QuestStatus status = GetQuestStatus(questId);
@@ -16689,7 +16363,7 @@ bool Player::HasQuestForItem(uint32 itemid) const
for (uint8 j = 0; j < QUEST_SOURCE_ITEM_IDS_COUNT; ++j)
{
// examined item is a source item
- if (qinfo->RequiredSourceItemId[j] == itemid)
+ if (qinfo->ItemDrop[j] == itemid)
{
ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(itemid);
@@ -16698,9 +16372,9 @@ bool Player::HasQuestForItem(uint32 itemid) const
return true;
// allows custom amount drop when not 0
- if (qinfo->RequiredSourceItemCount[j])
+ if (qinfo->ItemDropQuantity[j])
{
- if (GetItemCount(itemid, true) < qinfo->RequiredSourceItemCount[j])
+ if (GetItemCount(itemid, true) < qinfo->ItemDropQuantity[j])
return true;
} else if (GetItemCount(itemid, true) < pProto->GetMaxStackSize())
return true;
@@ -16882,9 +16556,9 @@ bool Player::HasPvPForcingQuest() const
/*** LOAD SYSTEM ***/
/*********************************************************/
-void Player::Initialize(uint32 guid)
+void Player::Initialize(ObjectGuid::LowType guid)
{
- Object::_Create(guid, 0, HIGHGUID_PLAYER);
+ Object::_Create(guid, 0, HighGuid::Player);
}
void Player::_LoadDeclinedNames(PreparedQueryResult result)
@@ -17028,7 +16702,7 @@ void Player::SetHomebind(WorldLocation const& loc, uint32 areaId)
stmt->setFloat (2, m_homebindX);
stmt->setFloat (3, m_homebindY);
stmt->setFloat (4, m_homebindZ);
- stmt->setUInt32(5, GetGUIDLow());
+ stmt->setUInt32(5, GetGUID().GetCounter());
CharacterDatabase.Execute(stmt);
}
@@ -17093,12 +16767,12 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
return false;
}
- Object::_Create(guid.GetCounter(), 0, HIGHGUID_PLAYER);
+ Object::_Create(guid.GetCounter(), 0, HighGuid::Player);
m_name = fields[2].GetString();
// check name limitations
- if (ObjectMgr::CheckPlayerName(m_name) != CHAR_NAME_SUCCESS ||
+ if (ObjectMgr::CheckPlayerName(m_name, GetSession()->GetSessionDbcLocale()) != CHAR_NAME_SUCCESS ||
(!GetSession()->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RESERVEDNAME) &&
sObjectMgr->IsReservedName(m_name)))
{
@@ -17205,7 +16879,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
InitPrimaryProfessions(); // to max set before any spell loaded
// init saved position, and fix it later if problematic
- uint32 transLowGUID = fields[30].GetUInt32();
+ ObjectGuid::LowType transLowGUID = fields[30].GetUInt32();
Relocate(fields[12].GetFloat(), fields[13].GetFloat(), fields[14].GetFloat(), fields[16].GetFloat());
uint32 mapId = fields[15].GetUInt16();
uint32 instanceId = fields[58].GetUInt32();
@@ -17315,11 +16989,11 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
// currently we do not support transport in bg
else if (transLowGUID)
{
- ObjectGuid transGUID(HIGHGUID_MO_TRANSPORT, transLowGUID);
+ ObjectGuid transGUID(HighGuid::Mo_Transport, transLowGUID);
Transport* transport = NULL;
- if (GameObject* go = HashMapHolder<GameObject>::Find(transGUID))
- transport = go->ToTransport();
+ if (Transport* go = HashMapHolder<Transport>::Find(transGUID))
+ transport = go;
if (transport)
{
@@ -17376,12 +17050,12 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
if (!nodeEntry) // don't know taxi start node, to homebind
{
- TC_LOG_ERROR("entities.player", "Character %u have wrong data in taxi destination list, teleport to homebind.", GetGUIDLow());
+ TC_LOG_ERROR("entities.player", "Character %u have wrong data in taxi destination list, teleport to homebind.", GetGUID().GetCounter());
RelocateToHomebind();
}
else // have start node, to it
{
- TC_LOG_ERROR("entities.player", "Character %u have too short taxi destination list, teleport to original node.", GetGUIDLow());
+ TC_LOG_ERROR("entities.player", "Character %u have too short taxi destination list, teleport to original node.", GetGUID().GetCounter());
mapId = nodeEntry->map_id;
Relocate(nodeEntry->x, nodeEntry->y, nodeEntry->z, 0.0f);
}
@@ -17434,7 +17108,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
}
else if (map->IsDungeon()) // if map is dungeon...
{
- if (!((InstanceMap*)map)->CanEnter(this)) // ... and can't enter map, then look for entry point.
+ if (!((InstanceMap*)map)->CanEnter(this) || !CheckInstanceLoginValid(map)) // ... and can't enter map, then look for entry point.
{
areaTrigger = sObjectMgr->GetGoBackTrigger(mapId);
check = true;
@@ -17461,6 +17135,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
{
TC_LOG_ERROR("entities.player", "Player %s %s Map: %u, X: %f, Y: %f, Z: %f, O: %f. Areatrigger not found.",
m_name.c_str(), guid.ToString().c_str(), mapId, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
+ RelocateToHomebind();
map = NULL;
}
}
@@ -17523,7 +17198,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
if (HasAtLoginFlag(AT_LOGIN_RENAME))
{
- TC_LOG_ERROR("entities.player", "Player (GUID: %u) tried to login while forced to rename, can't load.'", GetGUIDLow());
+ TC_LOG_ERROR("entities.player", "Player (GUID: %u) tried to login while forced to rename, can't load.'", GetGUID().GetCounter());
return false;
}
@@ -17600,7 +17275,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
if (m_specsCount > MAX_TALENT_SPECS || m_activeSpec > MAX_TALENT_SPEC || m_specsCount < MIN_TALENT_SPECS)
{
m_activeSpec = 0;
- TC_LOG_ERROR("entities.player", "Player %s(GUID: %u) has SpecCount = %u and ActiveSpec = %u.", GetName().c_str(), GetGUIDLow(), m_specsCount, m_activeSpec);
+ TC_LOG_ERROR("entities.player", "Player %s(GUID: %u) has SpecCount = %u and ActiveSpec = %u.", GetName().c_str(), GetGUID().GetCounter(), m_specsCount, m_activeSpec);
}
_LoadTalents(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_TALENTS));
@@ -17640,7 +17315,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
// unread mails and next delivery time, actual mails not loaded
_LoadMailInit(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAIL_COUNT), holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAIL_DATE));
- m_social = sSocialMgr->LoadFromDB(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_SOCIAL_LIST), GetGUIDLow());
+ m_social = sSocialMgr->LoadFromDB(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_SOCIAL_LIST), GetGUID().GetCounter());
// check PLAYER_CHOSEN_TITLE compatibility with PLAYER__FIELD_KNOWN_TITLES
// note: PLAYER__FIELD_KNOWN_TITLES updated at quest status loaded
@@ -17821,12 +17496,12 @@ void Player::_LoadActions(PreparedQueryResult result)
void Player::_LoadAuras(PreparedQueryResult result, uint32 timediff)
{
- TC_LOG_DEBUG("entities.player.loading", "Loading auras for player %u", GetGUIDLow());
+ TC_LOG_DEBUG("entities.player.loading", "Loading auras for player %u", GetGUID().GetCounter());
/* 0 1 2 3 4 5 6 7 8 9 10
QueryResult* result = CharacterDatabase.PQuery("SELECT casterGuid, spell, effectMask, recalculateMask, stackCount, amount0, amount1, amount2, base_amount0, base_amount1, base_amount2,
11 12 13
- maxDuration, remainTime, remainCharges FROM character_aura WHERE guid = '%u'", GetGUIDLow());
+ maxDuration, remainTime, remainCharges FROM character_aura WHERE guid = '%u'", GetGUID().GetCounter());
*/
if (result)
@@ -17925,23 +17600,29 @@ void Player::_LoadGlyphAuras()
}
}
-void Player::LoadCorpse()
+void Player::LoadCorpse(PreparedQueryResult result)
{
- if (IsAlive())
- sObjectAccessor->ConvertCorpseForPlayer(GetGUID());
- else
+ if (IsAlive() || HasAtLoginFlag(AT_LOGIN_RESURRECT))
+ SpawnCorpseBones(false);
+
+ if (!IsAlive())
{
- if (Corpse* corpse = GetCorpse())
- ApplyModFlag(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTE_RELEASE_TIMER, corpse && !sMapStore.LookupEntry(corpse->GetMapId())->Instanceable());
+ if (result && !HasAtLoginFlag(AT_LOGIN_RESURRECT))
+ {
+ Field* fields = result->Fetch();
+ _corpseLocation.WorldRelocate(fields[0].GetUInt16(), fields[1].GetFloat(), fields[2].GetFloat(), fields[3].GetFloat(), fields[4].GetFloat());
+ ApplyModFlag(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTE_RELEASE_TIMER, !sMapStore.LookupEntry(_corpseLocation.GetMapId())->Instanceable());
+ }
else
- //Prevent Dead Player login without corpse
ResurrectPlayer(0.5f);
}
+
+ RemoveAtLoginFlag(AT_LOGIN_RESURRECT);
}
void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff)
{
- //QueryResult* result = CharacterDatabase.PQuery("SELECT data, text, bag, slot, item, item_template FROM character_inventory JOIN item_instance ON character_inventory.item = item_instance.guid WHERE character_inventory.guid = '%u' ORDER BY bag, slot", GetGUIDLow());
+ //QueryResult* result = CharacterDatabase.PQuery("SELECT data, text, bag, slot, item, item_template FROM character_inventory JOIN item_instance ON character_inventory.item = item_instance.guid WHERE character_inventory.guid = '%u' ORDER BY bag, slot", GetGUID().GetCounter());
//NOTE: the "order by `bag`" is important because it makes sure
//the bagMap is filled before items in the bags are loaded
//NOTE2: the "order by `slot`" is needed because mainhand weapons are (wrongly?)
@@ -17951,8 +17632,8 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff)
{
uint32 zoneId = GetZoneId();
- std::map<uint32, Bag*> bagMap; // fast guid lookup for bags
- std::map<uint32, Item*> invalidBagMap; // fast guid lookup for bags
+ std::map<ObjectGuid::LowType, Bag*> bagMap; // fast guid lookup for bags
+ std::map<ObjectGuid::LowType, Item*> invalidBagMap; // fast guid lookup for bags
std::list<Item*> problematicItems;
SQLTransaction trans = CharacterDatabase.BeginTransaction();
@@ -17963,7 +17644,7 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff)
Field* fields = result->Fetch();
if (Item* item = _LoadItem(trans, zoneId, timeDiff, fields))
{
- uint32 bagGuid = fields[11].GetUInt32();
+ ObjectGuid::LowType bagGuid = fields[11].GetUInt32();
uint8 slot = fields[12].GetUInt8();
uint8 err = EQUIP_ERR_OK;
@@ -18000,18 +17681,18 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff)
{
if (IsBagPos(item->GetPos()))
if (Bag* pBag = item->ToBag())
- bagMap[item->GetGUIDLow()] = pBag;
+ bagMap[item->GetGUID().GetCounter()] = pBag;
}
else
if (IsBagPos(item->GetPos()))
if (item->IsBag())
- invalidBagMap[item->GetGUIDLow()] = item;
+ invalidBagMap[item->GetGUID().GetCounter()] = item;
}
else
{
item->SetSlot(NULL_SLOT);
// Item is in the bag, find the bag
- std::map<uint32, Bag*>::iterator itr = bagMap.find(bagGuid);
+ std::map<ObjectGuid::LowType, Bag*>::iterator itr = bagMap.find(bagGuid);
if (itr != bagMap.end())
{
ItemPosCountVec dest;
@@ -18021,14 +17702,14 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff)
}
else if (invalidBagMap.find(bagGuid) != invalidBagMap.end())
{
- std::map<uint32, Item*>::iterator invalidBagItr = invalidBagMap.find(bagGuid);
+ std::map<ObjectGuid::LowType, Item*>::iterator invalidBagItr = invalidBagMap.find(bagGuid);
if (std::find(problematicItems.begin(), problematicItems.end(), invalidBagItr->second) != problematicItems.end())
err = EQUIP_ERR_INT_BAG_ERROR;
}
else
{
TC_LOG_ERROR("entities.player", "Player::_LoadInventory: player (GUID: %u, name: '%s') has item (GUID: %u, entry: %u) which doesnt have a valid bag (Bag GUID: %u, slot: %u). Possible cheat?",
- GetGUIDLow(), GetName().c_str(), item->GetGUIDLow(), item->GetEntry(), bagGuid, slot);
+ GetGUID().GetCounter(), GetName().c_str(), item->GetGUID().GetCounter(), item->GetEntry(), bagGuid, slot);
item->DeleteFromInventoryDB(trans);
delete item;
continue;
@@ -18042,7 +17723,7 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff)
else
{
TC_LOG_ERROR("entities.player", "Player::_LoadInventory: player (GUID: %u, name: '%s') has item (GUID: %u, entry: %u) which can't be loaded into inventory (Bag GUID: %u, slot: %u) by reason %u. Item will be sent by mail.",
- GetGUIDLow(), GetName().c_str(), item->GetGUIDLow(), item->GetEntry(), bagGuid, slot, err);
+ GetGUID().GetCounter(), GetName().c_str(), item->GetGUID().GetCounter(), item->GetEntry(), bagGuid, slot, err);
item->DeleteFromInventoryDB(trans);
problematicItems.push_back(item);
}
@@ -18073,7 +17754,7 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff)
Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, Field* fields)
{
Item* item = NULL;
- uint32 itemGuid = fields[13].GetUInt32();
+ ObjectGuid::LowType itemGuid = fields[13].GetUInt32();
uint32 itemEntry = fields[14].GetUInt32();
if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemEntry))
{
@@ -18087,14 +17768,14 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
if (IsAlive() && item->IsLimitedToAnotherMapOrZone(GetMapId(), zoneId))
{
TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player (GUID: %u, name: '%s', map: %u) has item (GUID: %u, entry: %u) limited to another map (%u). Deleting item.",
- GetGUIDLow(), GetName().c_str(), GetMapId(), item->GetGUIDLow(), item->GetEntry(), zoneId);
+ GetGUID().GetCounter(), GetName().c_str(), GetMapId(), item->GetGUID().GetCounter(), item->GetEntry(), zoneId);
remove = true;
}
// "Conjured items disappear if you are logged out for more than 15 minutes"
else if (timeDiff > 15 * MINUTE && proto->Flags & ITEM_PROTO_FLAG_CONJURED)
{
TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player (GUID: %u, name: '%s', diff: %u) has conjured item (GUID: %u, entry: %u) with expired lifetime (15 minutes). Deleting item.",
- GetGUIDLow(), GetName().c_str(), timeDiff, item->GetGUIDLow(), item->GetEntry());
+ GetGUID().GetCounter(), GetName().c_str(), timeDiff, item->GetGUID().GetCounter(), item->GetEntry());
remove = true;
}
else if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_REFUNDABLE))
@@ -18102,10 +17783,10 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
if (item->GetPlayedTime() > (2 * HOUR))
{
TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player (GUID: %u, name: '%s') has item (GUID: %u, entry: %u) with expired refund time (%u). Deleting refund data and removing refundable flag.",
- GetGUIDLow(), GetName().c_str(), item->GetGUIDLow(), item->GetEntry(), item->GetPlayedTime());
+ GetGUID().GetCounter(), GetName().c_str(), item->GetGUID().GetCounter(), item->GetEntry(), item->GetPlayedTime());
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_REFUND_INSTANCE);
- stmt->setUInt32(0, item->GetGUIDLow());
+ stmt->setUInt32(0, item->GetGUID().GetCounter());
trans->Append(stmt);
item->RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_REFUNDABLE);
@@ -18113,8 +17794,8 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
else
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ITEM_REFUNDS);
- stmt->setUInt32(0, item->GetGUIDLow());
- stmt->setUInt32(1, GetGUIDLow());
+ stmt->setUInt32(0, item->GetGUID().GetCounter());
+ stmt->setUInt32(1, GetGUID().GetCounter());
if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
{
item->SetRefundRecipient((*result)[0].GetUInt32());
@@ -18125,7 +17806,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
else
{
TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player (GUID: %u, name: '%s') has item (GUID: %u, entry: %u) with refundable flags, but without data in item_refund_instance. Removing flag.",
- GetGUIDLow(), GetName().c_str(), item->GetGUIDLow(), item->GetEntry());
+ GetGUID().GetCounter(), GetName().c_str(), item->GetGUID().GetCounter(), item->GetEntry());
item->RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_REFUNDABLE);
}
}
@@ -18133,7 +17814,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
else if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_BOP_TRADEABLE))
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ITEM_BOP_TRADE);
- stmt->setUInt32(0, item->GetGUIDLow());
+ stmt->setUInt32(0, item->GetGUID().GetCounter());
if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
{
std::string strGUID = (*result)[0].GetString();
@@ -18153,7 +17834,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
else
{
TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player (GUID: %u, name: '%s') has item (GUID: %u, entry: %u) with ITEM_FLAG_BOP_TRADEABLE flag, but without data in item_soulbound_trade_data. Removing flag.",
- GetGUIDLow(), GetName().c_str(), item->GetGUIDLow(), item->GetEntry());
+ GetGUID().GetCounter(), GetName().c_str(), item->GetGUID().GetCounter(), item->GetEntry());
item->RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_BOP_TRADEABLE);
}
}
@@ -18175,7 +17856,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
else
{
TC_LOG_ERROR("entities.player", "Player::_LoadInventory: player (GUID: %u, name: '%s') has broken item (GUID: %u, entry: %u) in inventory. Deleting item.",
- GetGUIDLow(), GetName().c_str(), itemGuid, itemEntry);
+ GetGUID().GetCounter(), GetName().c_str(), itemGuid, itemEntry);
remove = true;
}
// Remove item from inventory if necessary
@@ -18190,7 +17871,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
else
{
TC_LOG_ERROR("entities.player", "Player::_LoadInventory: player (GUID: %u, name: '%s') has unknown item (entry: %u) in inventory. Deleting item.",
- GetGUIDLow(), GetName().c_str(), itemEntry);
+ GetGUID().GetCounter(), GetName().c_str(), itemEntry);
Item::DeleteFromInventoryDB(trans, itemGuid);
Item::DeleteFromDB(trans, itemGuid);
}
@@ -18211,7 +17892,7 @@ void Player::_LoadMailedItems(Mail* mail)
{
Field* fields = result->Fetch();
- uint32 itemGuid = fields[11].GetUInt32();
+ ObjectGuid::LowType itemGuid = fields[11].GetUInt32();
uint32 itemTemplate = fields[12].GetUInt32();
mail->AddItem(itemGuid, itemTemplate);
@@ -18220,7 +17901,7 @@ void Player::_LoadMailedItems(Mail* mail)
if (!proto)
{
- TC_LOG_ERROR("entities.player", "Player %u has unknown item_template (ProtoType) in mailed items(GUID: %u template: %u) in mail (%u), deleted.", GetGUIDLow(), itemGuid, itemTemplate, mail->messageID);
+ TC_LOG_ERROR("entities.player", "Player %u has unknown item_template (ProtoType) in mailed items(GUID: %u template: %u) in mail (%u), deleted.", GetGUID().GetCounter(), itemGuid, itemTemplate, mail->messageID);
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_MAIL_ITEM);
stmt->setUInt32(0, itemGuid);
@@ -18234,7 +17915,7 @@ void Player::_LoadMailedItems(Mail* mail)
Item* item = NewItemOrBag(proto);
- if (!item->LoadFromDB(itemGuid, ObjectGuid(HIGHGUID_PLAYER, fields[13].GetUInt32()), fields, itemTemplate))
+ if (!item->LoadFromDB(itemGuid, ObjectGuid(HighGuid::Player, fields[13].GetUInt32()), fields, itemTemplate))
{
TC_LOG_ERROR("entities.player", "Player::_LoadMailedItems - Item in mail (%u) doesn't exist !!!! - item guid: %u, deleted from mail", mail->messageID, itemGuid);
@@ -18272,7 +17953,7 @@ void Player::_LoadMail()
m_mail.clear();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAIL);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (result)
@@ -18334,7 +18015,7 @@ void Player::_LoadQuestStatus(PreparedQueryResult result)
//// 0 1 2 3 4 5 6 7 8 9 10
//QueryResult* result = CharacterDatabase.PQuery("SELECT quest, status, explored, timer, mobcount1, mobcount2, mobcount3, mobcount4, itemcount1, itemcount2, itemcount3,
// 11 12
- // itemcount4, playercount FROM character_queststatus WHERE guid = '%u'", GetGUIDLow());
+ // itemcount4, playercount FROM character_queststatus WHERE guid = '%u'", GetGUID().GetCounter());
if (result)
{
@@ -18357,7 +18038,7 @@ void Player::_LoadQuestStatus(PreparedQueryResult result)
{
questStatusData.Status = QUEST_STATUS_INCOMPLETE;
TC_LOG_ERROR("entities.player", "Player %s (GUID: %u) has invalid quest %d status (%u), replaced by QUEST_STATUS_INCOMPLETE(3).",
- GetName().c_str(), GetGUIDLow(), quest_id, qstatus);
+ GetName().c_str(), GetGUID().GetCounter(), quest_id, qstatus);
}
questStatusData.Explored = (fields[2].GetUInt8() > 0);
@@ -18406,7 +18087,7 @@ void Player::_LoadQuestStatus(PreparedQueryResult result)
++slot;
}
- TC_LOG_DEBUG("entities.player.loading", "Quest status is {%u} for quest {%u} for player (GUID: %u)", questStatusData.Status, quest_id, GetGUIDLow());
+ TC_LOG_DEBUG("entities.player.loading", "Quest status is {%u} for quest {%u} for player (GUID: %u)", questStatusData.Status, quest_id, GetGUID().GetCounter());
}
}
while (result->NextRow());
@@ -18459,7 +18140,7 @@ void Player::_LoadDailyQuestStatus(PreparedQueryResult result)
m_DFQuests.clear();
- //QueryResult* result = CharacterDatabase.PQuery("SELECT quest, time FROM character_queststatus_daily WHERE guid = '%u'", GetGUIDLow());
+ //QueryResult* result = CharacterDatabase.PQuery("SELECT quest, time FROM character_queststatus_daily WHERE guid = '%u'", GetGUID().GetCounter());
if (result)
{
@@ -18480,7 +18161,7 @@ void Player::_LoadDailyQuestStatus(PreparedQueryResult result)
if (quest_daily_idx >= PLAYER_MAX_DAILY_QUESTS) // max amount with exist data in query
{
- TC_LOG_ERROR("entities.player", "Player (GUID: %u) have more 25 daily quest records in `charcter_queststatus_daily`", GetGUIDLow());
+ TC_LOG_ERROR("entities.player", "Player (GUID: %u) have more 25 daily quest records in `charcter_queststatus_daily`", GetGUID().GetCounter());
break;
}
@@ -18496,7 +18177,7 @@ void Player::_LoadDailyQuestStatus(PreparedQueryResult result)
SetUInt32Value(PLAYER_FIELD_DAILY_QUESTS_1+quest_daily_idx, quest_id);
++quest_daily_idx;
- TC_LOG_DEBUG("entities.player.loading", "Daily quest (%u) cooldown for player (GUID: %u)", quest_id, GetGUIDLow());
+ TC_LOG_DEBUG("entities.player.loading", "Daily quest (%u) cooldown for player (GUID: %u)", quest_id, GetGUID().GetCounter());
}
while (result->NextRow());
}
@@ -18519,7 +18200,7 @@ void Player::_LoadWeeklyQuestStatus(PreparedQueryResult result)
continue;
m_weeklyquests.insert(quest_id);
- TC_LOG_DEBUG("entities.player.loading", "Weekly quest {%u} cooldown for player (GUID: %u)", quest_id, GetGUIDLow());
+ TC_LOG_DEBUG("entities.player.loading", "Weekly quest {%u} cooldown for player (GUID: %u)", quest_id, GetGUID().GetCounter());
}
while (result->NextRow());
}
@@ -18543,7 +18224,7 @@ void Player::_LoadSeasonalQuestStatus(PreparedQueryResult result)
continue;
m_seasonalquests[event_id].insert(quest_id);
- TC_LOG_DEBUG("entities.player.loading", "Seasonal quest {%u} cooldown for player (GUID: %u)", quest_id, GetGUIDLow());
+ TC_LOG_DEBUG("entities.player.loading", "Seasonal quest {%u} cooldown for player (GUID: %u)", quest_id, GetGUID().GetCounter());
}
while (result->NextRow());
}
@@ -18566,7 +18247,7 @@ void Player::_LoadMonthlyQuestStatus(PreparedQueryResult result)
continue;
m_monthlyquests.insert(quest_id);
- TC_LOG_DEBUG("entities.player.loading", "Monthly quest {%u} cooldown for player (GUID: %u)", quest_id, GetGUIDLow());
+ TC_LOG_DEBUG("entities.player.loading", "Monthly quest {%u} cooldown for player (GUID: %u)", quest_id, GetGUID().GetCounter());
}
while (result->NextRow());
}
@@ -18576,7 +18257,7 @@ void Player::_LoadMonthlyQuestStatus(PreparedQueryResult result)
void Player::_LoadSpells(PreparedQueryResult result)
{
- //QueryResult* result = CharacterDatabase.PQuery("SELECT spell, active, disabled FROM character_spell WHERE guid = '%u'", GetGUIDLow());
+ //QueryResult* result = CharacterDatabase.PQuery("SELECT spell, active, disabled FROM character_spell WHERE guid = '%u'", GetGUID().GetCounter());
if (result)
{
@@ -18588,7 +18269,7 @@ void Player::_LoadSpells(PreparedQueryResult result)
void Player::_LoadGroup(PreparedQueryResult result)
{
- //QueryResult* result = CharacterDatabase.PQuery("SELECT guid FROM group_member WHERE memberGuid=%u", GetGUIDLow());
+ //QueryResult* result = CharacterDatabase.PQuery("SELECT guid FROM group_member WHERE memberGuid=%u", GetGUID().GetCounter());
if (result)
{
if (Group* group = sGroupMgr->GetGroupByDbStoreId((*result)[0].GetUInt32()))
@@ -18642,12 +18323,12 @@ void Player::_LoadBoundInstances(PreparedQueryResult result)
if (!mapEntry || !mapEntry->IsDungeon())
{
- TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) has bind to not existed or not dungeon map %d (%s)", GetName().c_str(), GetGUIDLow(), mapId, mapname.c_str());
+ TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) has bind to not existed or not dungeon map %d (%s)", GetName().c_str(), GetGUID().GetCounter(), mapId, mapname.c_str());
deleteInstance = true;
}
else if (difficulty >= MAX_DIFFICULTY)
{
- TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) has bind to not existed difficulty %d instance for map %u (%s)", GetName().c_str(), GetGUIDLow(), difficulty, mapId, mapname.c_str());
+ TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) has bind to not existed difficulty %d instance for map %u (%s)", GetName().c_str(), GetGUID().GetCounter(), difficulty, mapId, mapname.c_str());
deleteInstance = true;
}
else
@@ -18655,12 +18336,12 @@ void Player::_LoadBoundInstances(PreparedQueryResult result)
MapDifficulty const* mapDiff = GetMapDifficultyData(mapId, Difficulty(difficulty));
if (!mapDiff)
{
- TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) has bind to not existed difficulty %d instance for map %u (%s)", GetName().c_str(), GetGUIDLow(), difficulty, mapId, mapname.c_str());
+ TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) has bind to not existed difficulty %d instance for map %u (%s)", GetName().c_str(), GetGUID().GetCounter(), difficulty, mapId, mapname.c_str());
deleteInstance = true;
}
else if (!perm && group)
{
- TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) is in group %d but has a non-permanent character bind to map %d (%s), %d, %d", GetName().c_str(), GetGUIDLow(), group->GetLowGUID(), mapId, mapname.c_str(), instanceId, difficulty);
+ TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) is in group %d but has a non-permanent character bind to map %d (%s), %d, %d", GetName().c_str(), GetGUID().GetCounter(), group->GetLowGUID(), mapId, mapname.c_str(), instanceId, difficulty);
deleteInstance = true;
}
}
@@ -18669,7 +18350,7 @@ void Player::_LoadBoundInstances(PreparedQueryResult result)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_INSTANCE_BY_INSTANCE_GUID);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, instanceId);
CharacterDatabase.Execute(stmt);
@@ -18725,7 +18406,7 @@ void Player::UnbindInstance(BoundInstancesMap::iterator &itr, Difficulty difficu
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_INSTANCE_BY_INSTANCE_GUID);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, itr->second.save->GetInstanceId());
CharacterDatabase.Execute(stmt);
@@ -18755,7 +18436,7 @@ InstancePlayerBind* Player::BindToInstance(InstanceSave* save, bool permanent, b
stmt->setUInt32(0, save->GetInstanceId());
stmt->setBool(1, permanent);
- stmt->setUInt32(2, GetGUIDLow());
+ stmt->setUInt32(2, GetGUID().GetCounter());
stmt->setUInt32(3, bind.save->GetInstanceId());
CharacterDatabase.Execute(stmt);
@@ -18765,7 +18446,7 @@ InstancePlayerBind* Player::BindToInstance(InstanceSave* save, bool permanent, b
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_INSTANCE);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, save->GetInstanceId());
stmt->setBool(2, permanent);
@@ -18786,7 +18467,7 @@ InstancePlayerBind* Player::BindToInstance(InstanceSave* save, bool permanent, b
bind.save = save;
bind.perm = permanent;
if (!load)
- TC_LOG_DEBUG("maps", "Player::BindToInstance: %s(%d) is now bound to map %d, instance %d, difficulty %d", GetName().c_str(), GetGUIDLow(), save->GetMapId(), save->GetInstanceId(), save->GetDifficulty());
+ TC_LOG_DEBUG("maps", "Player::BindToInstance: %s(%d) is now bound to map %d, instance %d, difficulty %d", GetName().c_str(), GetGUID().GetCounter(), save->GetMapId(), save->GetInstanceId(), save->GetDifficulty());
sScriptMgr->OnPlayerBindToInstance(this, save->GetDifficulty(), save->GetMapId(), permanent);
return &bind;
}
@@ -18803,9 +18484,11 @@ void Player::BindToInstance()
WorldPacket data(SMSG_INSTANCE_SAVE_CREATED, 4);
data << uint32(0);
GetSession()->SendPacket(&data);
- BindToInstance(mapSave, true);
-
- GetSession()->SendCalendarRaidLockout(mapSave, true);
+ if (!IsGameMaster())
+ {
+ BindToInstance(mapSave, true);
+ GetSession()->SendCalendarRaidLockout(mapSave, true);
+ }
}
void Player::SetPendingBind(uint32 instanceId, uint32 bindTimer)
@@ -18985,29 +18668,37 @@ bool Player::Satisfy(AccessRequirement const* ar, uint32 target_map, bool report
return true;
}
-bool Player::CheckInstanceLoginValid()
+bool Player::CheckInstanceLoginValid(Map* map)
{
- if (!FindMap())
- return false;
-
- if (!GetMap()->IsDungeon() || IsGameMaster())
+ if (!map->IsDungeon() || IsGameMaster())
return true;
- if (GetMap()->IsRaid())
+ if (map->IsRaid())
{
// cannot be in raid instance without a group
if (!GetGroup())
- return false;
+ return IsInstanceLoginGameMasterException();
}
else
{
// cannot be in normal instance without a group and more players than 1 in instance
- if (!GetGroup() && GetMap()->GetPlayersCountExceptGMs() > 1)
- return false;
+ if (!GetGroup() && map->GetPlayersCountExceptGMs() > 1)
+ return IsInstanceLoginGameMasterException();
}
// do checks for satisfy accessreqs, instance full, encounter in progress (raid), perm bind group != perm bind player
- return sMapMgr->CanPlayerEnter(GetMap()->GetId(), this, true);
+ return sMapMgr->CanPlayerEnter(map->GetId(), this, true) || IsInstanceLoginGameMasterException();
+}
+
+bool Player::IsInstanceLoginGameMasterException() const
+{
+ if (CanBeGameMaster())
+ {
+ ChatHandler(GetSession()).SendSysMessage(LANG_INSTANCE_LOGIN_GAMEMASTER_EXCEPTION);
+ return true;
+ }
+ else
+ return false;
}
bool Player::CheckInstanceCount(uint32 instanceId) const
@@ -19053,7 +18744,7 @@ bool Player::_LoadHomeBind(PreparedQueryResult result)
else
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_HOMEBIND);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
CharacterDatabase.Execute(stmt);
}
}
@@ -19067,7 +18758,7 @@ bool Player::_LoadHomeBind(PreparedQueryResult result)
m_homebindZ = info->positionZ;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PLAYER_HOMEBIND);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt16(1, m_homebindMapId);
stmt->setUInt16(2, m_homebindAreaId);
stmt->setFloat (3, m_homebindX);
@@ -19115,12 +18806,12 @@ void Player::SaveToDB(bool create /*=false*/)
//! Insert query
/// @todo: Filter out more redundant fields that can take their default value at player create
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER);
- stmt->setUInt32(index++, GetGUIDLow());
+ stmt->setUInt32(index++, GetGUID().GetCounter());
stmt->setUInt32(index++, GetSession()->GetAccountId());
stmt->setString(index++, GetName());
stmt->setUInt8(index++, getRace());
stmt->setUInt8(index++, getClass());
- stmt->setUInt8(index++, getGender());
+ stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_3, 0)); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect
stmt->setUInt8(index++, getLevel());
stmt->setUInt32(index++, GetUInt32Value(PLAYER_XP));
stmt->setUInt32(index++, GetMoney());
@@ -19138,9 +18829,9 @@ void Player::SaveToDB(bool create /*=false*/)
stmt->setFloat(index++, finiteAlways(GetTransOffsetY()));
stmt->setFloat(index++, finiteAlways(GetTransOffsetZ()));
stmt->setFloat(index++, finiteAlways(GetTransOffsetO()));
- uint32 transLowGUID = 0;
+ ObjectGuid::LowType transLowGUID = 0;
if (GetTransport())
- transLowGUID = GetTransport()->GetGUIDLow();
+ transLowGUID = GetTransport()->GetGUID().GetCounter();
stmt->setUInt32(index++, transLowGUID);
std::ostringstream ss;
@@ -19225,7 +18916,7 @@ void Player::SaveToDB(bool create /*=false*/)
stmt->setString(index++, GetName());
stmt->setUInt8(index++, getRace());
stmt->setUInt8(index++, getClass());
- stmt->setUInt8(index++, getGender());
+ stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_3, 0)); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect
stmt->setUInt8(index++, getLevel());
stmt->setUInt32(index++, GetUInt32Value(PLAYER_XP));
stmt->setUInt32(index++, GetMoney());
@@ -19258,9 +18949,9 @@ void Player::SaveToDB(bool create /*=false*/)
stmt->setFloat(index++, finiteAlways(GetTransOffsetY()));
stmt->setFloat(index++, finiteAlways(GetTransOffsetZ()));
stmt->setFloat(index++, finiteAlways(GetTransOffsetO()));
- uint32 transLowGUID = 0;
+ ObjectGuid::LowType transLowGUID = 0;
if (GetTransport())
- transLowGUID = GetTransport()->GetGUIDLow();
+ transLowGUID = GetTransport()->GetGUID().GetCounter();
stmt->setUInt32(index++, transLowGUID);
std::ostringstream ss;
@@ -19340,7 +19031,7 @@ void Player::SaveToDB(bool create /*=false*/)
stmt->setUInt8(index++, IsInWorld() && !GetSession()->PlayerLogout() ? 1 : 0);
// Index
- stmt->setUInt32(index++, GetGUIDLow());
+ stmt->setUInt32(index++, GetGUID().GetCounter());
}
SQLTransaction trans = CharacterDatabase.BeginTransaction();
@@ -19393,7 +19084,7 @@ void Player::SaveGoldToDB(SQLTransaction& trans)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_MONEY);
stmt->setUInt32(0, GetMoney());
- stmt->setUInt32(1, GetGUIDLow());
+ stmt->setUInt32(1, GetGUID().GetCounter());
trans->Append(stmt);
}
@@ -19407,7 +19098,7 @@ void Player::_SaveActions(SQLTransaction& trans)
{
case ACTIONBUTTON_NEW:
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_ACTION);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt8(1, m_activeSpec);
stmt->setUInt8(2, itr->first);
stmt->setUInt32(3, itr->second.GetAction());
@@ -19421,7 +19112,7 @@ void Player::_SaveActions(SQLTransaction& trans)
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ACTION);
stmt->setUInt32(0, itr->second.GetAction());
stmt->setUInt8(1, uint8(itr->second.GetType()));
- stmt->setUInt32(2, GetGUIDLow());
+ stmt->setUInt32(2, GetGUID().GetCounter());
stmt->setUInt8(3, itr->first);
stmt->setUInt8(4, m_activeSpec);
trans->Append(stmt);
@@ -19431,7 +19122,7 @@ void Player::_SaveActions(SQLTransaction& trans)
break;
case ACTIONBUTTON_DELETED:
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_ACTION_BY_BUTTON_SPEC);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt8(1, itr->first);
stmt->setUInt8(2, m_activeSpec);
trans->Append(stmt);
@@ -19448,7 +19139,7 @@ void Player::_SaveActions(SQLTransaction& trans)
void Player::_SaveAuras(SQLTransaction& trans)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_AURA);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
trans->Append(stmt);
for (AuraMap::const_iterator itr = m_ownedAuras.begin(); itr != m_ownedAuras.end(); ++itr)
@@ -19481,7 +19172,7 @@ void Player::_SaveAuras(SQLTransaction& trans)
uint8 index = 0;
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_AURA);
- stmt->setUInt32(index++, GetGUIDLow());
+ stmt->setUInt32(index++, GetGUID().GetCounter());
stmt->setUInt64(index++, itr->second->GetCasterGUID().GetRawValue());
stmt->setUInt64(index++, itr->second->GetCastItemGUID().GetRawValue());
stmt->setUInt32(index++, itr->second->GetId());
@@ -19513,11 +19204,11 @@ void Player::_SaveInventory(SQLTransaction& trans)
continue;
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_INVENTORY_BY_ITEM);
- stmt->setUInt32(0, item->GetGUIDLow());
+ stmt->setUInt32(0, item->GetGUID().GetCounter());
trans->Append(stmt);
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE);
- stmt->setUInt32(0, item->GetGUIDLow());
+ stmt->setUInt32(0, item->GetGUID().GetCounter());
trans->Append(stmt);
m_items[i]->FSetState(ITEM_NEW);
}
@@ -19541,7 +19232,7 @@ void Player::_SaveInventory(SQLTransaction& trans)
}
else
{
- TC_LOG_ERROR("entities.player", "Can't find %s but is in refundable storage for player %u ! Removing.", itr->ToString().c_str(), GetGUIDLow());
+ TC_LOG_ERROR("entities.player", "Can't find %s but is in refundable storage for player %u ! Removing.", itr->ToString().c_str(), GetGUID().GetCounter());
m_refundableItems.erase(itr);
}
}
@@ -19554,7 +19245,7 @@ void Player::_SaveInventory(SQLTransaction& trans)
if (m_itemUpdateQueue.empty())
return;
- uint32 lowGuid = GetGUIDLow();
+ ObjectGuid::LowType lowGuid = GetGUID().GetCounter();
for (size_t i = 0; i < m_itemUpdateQueue.size(); ++i)
{
Item* item = m_itemUpdateQueue[i];
@@ -19562,17 +19253,17 @@ void Player::_SaveInventory(SQLTransaction& trans)
continue;
Bag* container = item->GetContainer();
- uint32 bag_guid = container ? container->GetGUIDLow() : 0;
+ ObjectGuid::LowType bag_guid = container ? container->GetGUID().GetCounter() : 0;
if (item->GetState() != ITEM_REMOVED)
{
Item* test = GetItemByPos(item->GetBagSlot(), item->GetSlot());
if (test == NULL)
{
- uint32 bagTestGUID = 0;
+ ObjectGuid::LowType bagTestGUID = 0;
if (Item* test2 = GetItemByPos(INVENTORY_SLOT_BAG_0, item->GetBagSlot()))
- bagTestGUID = test2->GetGUIDLow();
- TC_LOG_ERROR("entities.player", "Player(GUID: %u Name: %s)::_SaveInventory - the bag(%u) and slot(%u) values for the item with guid %u (state %d) are incorrect, the player doesn't have an item at that position!", lowGuid, GetName().c_str(), item->GetBagSlot(), item->GetSlot(), item->GetGUIDLow(), (int32)item->GetState());
+ bagTestGUID = test2->GetGUID().GetCounter();
+ TC_LOG_ERROR("entities.player", "Player(GUID: %u Name: %s)::_SaveInventory - the bag(%u) and slot(%u) values for the item with guid %u (state %d) are incorrect, the player doesn't have an item at that position!", lowGuid, GetName().c_str(), item->GetBagSlot(), item->GetSlot(), item->GetGUID().GetCounter(), (int32)item->GetState());
// according to the test that was just performed nothing should be in this slot, delete
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_INVENTORY_BY_BAG_SLOT);
stmt->setUInt32(0, bagTestGUID);
@@ -19588,7 +19279,7 @@ void Player::_SaveInventory(SQLTransaction& trans)
}
else if (test != item)
{
- TC_LOG_ERROR("entities.player", "Player(GUID: %u Name: %s)::_SaveInventory - the bag(%u) and slot(%u) values for the item with guid %u are incorrect, the item with guid %u is there instead!", lowGuid, GetName().c_str(), item->GetBagSlot(), item->GetSlot(), item->GetGUIDLow(), test->GetGUIDLow());
+ TC_LOG_ERROR("entities.player", "Player(GUID: %u Name: %s)::_SaveInventory - the bag(%u) and slot(%u) values for the item with guid %u are incorrect, the item with guid %u is there instead!", lowGuid, GetName().c_str(), item->GetBagSlot(), item->GetSlot(), item->GetGUID().GetCounter(), test->GetGUID().GetCounter());
// save all changes to the item...
if (item->GetState() != ITEM_NEW) // only for existing items, no dupes
item->SaveToDB(trans);
@@ -19605,12 +19296,12 @@ void Player::_SaveInventory(SQLTransaction& trans)
stmt->setUInt32(0, lowGuid);
stmt->setUInt32(1, bag_guid);
stmt->setUInt8 (2, item->GetSlot());
- stmt->setUInt32(3, item->GetGUIDLow());
+ stmt->setUInt32(3, item->GetGUID().GetCounter());
trans->Append(stmt);
break;
case ITEM_REMOVED:
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_INVENTORY_BY_ITEM);
- stmt->setUInt32(0, item->GetGUIDLow());
+ stmt->setUInt32(0, item->GetGUID().GetCounter());
trans->Append(stmt);
case ITEM_UNCHANGED:
break;
@@ -19717,7 +19408,7 @@ void Player::_SaveQuestStatus(SQLTransaction& trans)
uint8 index = 0;
stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_CHAR_QUESTSTATUS);
- stmt->setUInt32(index++, GetGUIDLow());
+ stmt->setUInt32(index++, GetGUID().GetCounter());
stmt->setUInt32(index++, statusItr->first);
stmt->setUInt8(index++, uint8(statusItr->second.Status));
stmt->setBool(index++, statusItr->second.Explored);
@@ -19736,7 +19427,7 @@ void Player::_SaveQuestStatus(SQLTransaction& trans)
else
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_QUESTSTATUS_BY_QUEST);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, saveItr->first);
trans->Append(stmt);
}
@@ -19749,7 +19440,7 @@ void Player::_SaveQuestStatus(SQLTransaction& trans)
if (saveItr->second == QUEST_DEFAULT_SAVE_TYPE)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_QUESTSTATUS_REWARDED);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, saveItr->first);
trans->Append(stmt);
@@ -19757,7 +19448,7 @@ void Player::_SaveQuestStatus(SQLTransaction& trans)
else if (saveItr->second == QUEST_FORCE_DELETE_SAVE_TYPE || !keepAbandoned)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_QUESTSTATUS_REWARDED_BY_QUEST);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, saveItr->first);
trans->Append(stmt);
}
@@ -19780,7 +19471,7 @@ void Player::_SaveDailyQuestStatus(SQLTransaction& trans)
// we don't need transactions here.
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_DAILY);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
trans->Append(stmt);
for (uint32 quest_daily_idx = 0; quest_daily_idx < PLAYER_MAX_DAILY_QUESTS; ++quest_daily_idx)
@@ -19788,7 +19479,7 @@ void Player::_SaveDailyQuestStatus(SQLTransaction& trans)
if (GetUInt32Value(PLAYER_FIELD_DAILY_QUESTS_1+quest_daily_idx))
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_DAILY);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, GetUInt32Value(PLAYER_FIELD_DAILY_QUESTS_1+quest_daily_idx));
stmt->setUInt64(2, uint64(m_lastDailyQuestTime));
trans->Append(stmt);
@@ -19800,7 +19491,7 @@ void Player::_SaveDailyQuestStatus(SQLTransaction& trans)
for (DFQuestsDoneList::iterator itr = m_DFQuests.begin(); itr != m_DFQuests.end(); ++itr)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_DAILY);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, (*itr));
stmt->setUInt64(2, uint64(m_lastDailyQuestTime));
trans->Append(stmt);
@@ -19815,7 +19506,7 @@ void Player::_SaveWeeklyQuestStatus(SQLTransaction& trans)
// we don't need transactions here.
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_WEEKLY);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
trans->Append(stmt);
for (QuestSet::const_iterator iter = m_weeklyquests.begin(); iter != m_weeklyquests.end(); ++iter)
@@ -19823,7 +19514,7 @@ void Player::_SaveWeeklyQuestStatus(SQLTransaction& trans)
uint32 questId = *iter;
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_WEEKLY);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, questId);
trans->Append(stmt);
}
@@ -19838,7 +19529,7 @@ void Player::_SaveSeasonalQuestStatus(SQLTransaction& trans)
// we don't need transactions here.
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_SEASONAL);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
trans->Append(stmt);
for (SeasonalEventQuestMap::const_iterator iter = m_seasonalquests.begin(); iter != m_seasonalquests.end(); ++iter)
@@ -19850,7 +19541,7 @@ void Player::_SaveSeasonalQuestStatus(SQLTransaction& trans)
uint32 questId = *itr;
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_SEASONAL);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, questId);
stmt->setUInt32(2, eventId);
trans->Append(stmt);
@@ -19867,7 +19558,7 @@ void Player::_SaveMonthlyQuestStatus(SQLTransaction& trans)
// we don't need transactions here.
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_MONTHLY);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
trans->Append(stmt);
for (QuestSet::const_iterator iter = m_monthlyquests.begin(); iter != m_monthlyquests.end(); ++iter)
@@ -19875,7 +19566,7 @@ void Player::_SaveMonthlyQuestStatus(SQLTransaction& trans)
uint32 questId = *iter;
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_MONTHLY);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, questId);
trans->Append(stmt);
}
@@ -19898,7 +19589,7 @@ void Player::_SaveSkills(SQLTransaction& trans)
if (itr->second.uState == SKILL_DELETED)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SKILL_BY_SKILL);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, itr->first);
trans->Append(stmt);
@@ -19914,7 +19605,7 @@ void Player::_SaveSkills(SQLTransaction& trans)
{
case SKILL_NEW:
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_SKILLS);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt16(1, uint16(itr->first));
stmt->setUInt16(2, value);
stmt->setUInt16(3, max);
@@ -19925,7 +19616,7 @@ void Player::_SaveSkills(SQLTransaction& trans)
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_SKILLS);
stmt->setUInt16(0, value);
stmt->setUInt16(1, max);
- stmt->setUInt32(2, GetGUIDLow());
+ stmt->setUInt32(2, GetGUID().GetCounter());
stmt->setUInt16(3, uint16(itr->first));
trans->Append(stmt);
@@ -19949,7 +19640,7 @@ void Player::_SaveSpells(SQLTransaction& trans)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SPELL_BY_SPELL);
stmt->setUInt32(0, itr->first);
- stmt->setUInt32(1, GetGUIDLow());
+ stmt->setUInt32(1, GetGUID().GetCounter());
trans->Append(stmt);
}
@@ -19957,7 +19648,7 @@ void Player::_SaveSpells(SQLTransaction& trans)
if (!itr->second->dependent && (itr->second->state == PLAYERSPELL_NEW || itr->second->state == PLAYERSPELL_CHANGED))
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_SPELL);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, itr->first);
stmt->setBool(2, itr->second->active);
stmt->setBool(3, itr->second->disabled);
@@ -19988,13 +19679,13 @@ void Player::_SaveStats(SQLTransaction& trans)
PreparedStatement* stmt = NULL;
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_STATS);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
trans->Append(stmt);
uint8 index = 0;
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_STATS);
- stmt->setUInt32(index++, GetGUIDLow());
+ stmt->setUInt32(index++, GetGUID().GetCounter());
stmt->setUInt32(index++, GetMaxHealth());
for (uint8 i = 0; i < MAX_POWERS; ++i)
@@ -20236,7 +19927,7 @@ void Player::ResetInstances(uint8 method, bool isRaid)
// if the map is loaded, reset it
Map* map = sMapMgr->FindMap(p->GetMapId(), p->GetInstanceId());
if (map && map->IsDungeon())
- if (!((InstanceMap*)map)->Reset(method))
+ if (!map->ToInstanceMap()->Reset(method))
{
++itr;
continue;
@@ -20456,7 +20147,7 @@ void Player::StopCastingCharm()
if (charm->GetCharmerGUID())
{
TC_LOG_FATAL("entities.player", "Charmed unit has charmer %s", charm->GetCharmerGUID().ToString().c_str());
- ASSERT(false);
+ ABORT();
}
else
SetCharm(charm, false);
@@ -20539,7 +20230,7 @@ void Player::AddMItem(Item* it)
{
ASSERT(it);
//ASSERT deleted, because items can be added before loading
- mMitems[it->GetGUIDLow()] = it;
+ mMitems[it->GetGUID().GetCounter()] = it;
}
bool Player::RemoveMItem(uint32 id)
@@ -20657,8 +20348,7 @@ void Player::VehicleSpellInitialize()
continue;
}
- ConditionList conditions = sConditionMgr->GetConditionsForVehicleSpell(vehicle->GetEntry(), spellId);
- if (!sConditionMgr->IsObjectMeetToConditions(this, vehicle, conditions))
+ if (!sConditionMgr->IsObjectMeetingVehicleSpellConditions(vehicle->GetEntry(), spellId, this, vehicle))
{
TC_LOG_DEBUG("condition", "VehicleSpellInitialize: conditions not met for Vehicle entry %u spell %u", vehicle->ToCreature()->GetEntry(), spellId);
data << uint16(0) << uint8(0) << uint8(i+8);
@@ -20958,8 +20648,8 @@ void Player::RemovePetitionsAndSigns(ObjectGuid guid, uint32 type)
do // this part effectively does nothing, since the deletion / modification only takes place _after_ the PetitionQuery. Though I don't know if the result remains intact if I execute the delete query beforehand.
{ // and SendPetitionQueryOpcode reads data from the DB
Field* fields = result->Fetch();
- ObjectGuid ownerguid = ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32());
- ObjectGuid petitionguid = ObjectGuid(HIGHGUID_ITEM, fields[1].GetUInt32());
+ ObjectGuid ownerguid = ObjectGuid(HighGuid::Player, fields[0].GetUInt32());
+ ObjectGuid petitionguid = ObjectGuid(HighGuid::Item, fields[1].GetUInt32());
// send update if charter owner in game
Player* owner = ObjectAccessor::FindConnectedPlayer(ownerguid);
@@ -21174,6 +20864,7 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc
// fill destinations path tail
uint32 sourcepath = 0;
uint32 totalcost = 0;
+ uint32 firstcost = 0;
uint32 prevnode = sourcenode;
uint32 lastnode = 0;
@@ -21192,6 +20883,8 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc
}
totalcost += cost;
+ if (i == 1)
+ firstcost = cost;
if (prevnode == sourcenode)
sourcepath = path;
@@ -21230,8 +20923,6 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc
}
//Checks and preparations done, DO FLIGHT
- ModifyMoney(-(int32)totalcost);
- UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING, totalcost);
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_FLIGHT_PATHS_TAKEN, 1);
// prevent stealth flight
@@ -21242,11 +20933,15 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc
TaxiNodesEntry const* lastPathNode = sTaxiNodesStore.LookupEntry(nodes[nodes.size()-1]);
ASSERT(lastPathNode);
m_taxi.ClearTaxiDestinations();
+ ModifyMoney(-(int32)totalcost);
+ UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING, totalcost);
TeleportTo(lastPathNode->map_id, lastPathNode->x, lastPathNode->y, lastPathNode->z, GetOrientation());
return false;
}
else
{
+ ModifyMoney(-(int32)firstcost);
+ UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING, firstcost);
GetSession()->SendActivateTaxiReply(ERR_TAXIOK);
GetSession()->SendDoFlight(mount_display_id, sourcepath);
}
@@ -21282,7 +20977,7 @@ void Player::ContinueTaxiFlight()
if (!sourceNode)
return;
- TC_LOG_DEBUG("entities.unit", "WORLD: Restart character %u taxi flight", GetGUIDLow());
+ TC_LOG_DEBUG("entities.unit", "WORLD: Restart character %u taxi flight", GetGUID().GetCounter());
uint32 mountDisplayId = sObjectMgr->GetTaxiMountDisplayId(sourceNode, GetTeam(), true);
if (!mountDisplayId)
@@ -21297,30 +20992,30 @@ void Player::ContinueTaxiFlight()
float distPrev = MAP_SIZE*MAP_SIZE;
float distNext =
- (nodeList[0].LocX-GetPositionX())*(nodeList[0].LocX-GetPositionX())+
- (nodeList[0].LocY-GetPositionY())*(nodeList[0].LocY-GetPositionY())+
- (nodeList[0].LocZ-GetPositionZ())*(nodeList[0].LocZ-GetPositionZ());
+ (nodeList[0]->LocX - GetPositionX())*(nodeList[0]->LocX - GetPositionX()) +
+ (nodeList[0]->LocY - GetPositionY())*(nodeList[0]->LocY - GetPositionY()) +
+ (nodeList[0]->LocZ - GetPositionZ())*(nodeList[0]->LocZ - GetPositionZ());
for (uint32 i = 1; i < nodeList.size(); ++i)
{
- TaxiPathNodeEntry const& node = nodeList[i];
- TaxiPathNodeEntry const& prevNode = nodeList[i-1];
+ TaxiPathNodeEntry const* node = nodeList[i];
+ TaxiPathNodeEntry const* prevNode = nodeList[i-1];
// skip nodes at another map
- if (node.MapID != GetMapId())
+ if (node->MapID != GetMapId())
continue;
distPrev = distNext;
distNext =
- (node.LocX-GetPositionX())*(node.LocX-GetPositionX())+
- (node.LocY-GetPositionY())*(node.LocY-GetPositionY())+
- (node.LocZ-GetPositionZ())*(node.LocZ-GetPositionZ());
+ (node->LocX - GetPositionX())*(node->LocX - GetPositionX()) +
+ (node->LocY - GetPositionY())*(node->LocY - GetPositionY()) +
+ (node->LocZ - GetPositionZ())*(node->LocZ - GetPositionZ());
float distNodes =
- (node.LocX-prevNode.LocX)*(node.LocX-prevNode.LocX)+
- (node.LocY-prevNode.LocY)*(node.LocY-prevNode.LocY)+
- (node.LocZ-prevNode.LocZ)*(node.LocZ-prevNode.LocZ);
+ (node->LocX - prevNode->LocX)*(node->LocX - prevNode->LocX) +
+ (node->LocY - prevNode->LocY)*(node->LocY - prevNode->LocY) +
+ (node->LocZ - prevNode->LocZ)*(node->LocZ - prevNode->LocZ);
if (distNext + distPrev < distNodes)
{
@@ -21384,11 +21079,11 @@ void Player::InitDisplayIds()
PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass());
if (!info)
{
- TC_LOG_ERROR("entities.player", "Player %u has incorrect race/class pair. Can't init display ids.", GetGUIDLow());
+ TC_LOG_ERROR("entities.player", "Player %s (%s) has incorrect race/class pair. Can't init display ids.", GetName().c_str(), GetGUID().ToString().c_str());
return;
}
- uint8 gender = getGender();
+ uint8 gender = GetByteValue(PLAYER_BYTES_3, 0);
switch (gender)
{
case GENDER_FEMALE:
@@ -21400,8 +21095,7 @@ void Player::InitDisplayIds()
SetNativeDisplayId(info->displayId_m);
break;
default:
- TC_LOG_ERROR("entities.player", "Invalid gender %u for player", gender);
- return;
+ TC_LOG_ERROR("entities.player", "Player %s (%s) has invalid gender %u", GetName().c_str(), GetGUID().ToString().c_str(), gender);
}
}
@@ -21458,7 +21152,7 @@ inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 c
if (pProto->Flags & ITEM_PROTO_FLAG_REFUNDABLE && crItem->ExtendedCost && pProto->GetMaxStackSize() == 1)
{
it->SetFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_REFUNDABLE);
- it->SetRefundRecipient(GetGUIDLow());
+ it->SetRefundRecipient(GetGUID().GetCounter());
it->SetPaidMoney(price);
it->SetPaidExtendedCost(crItem->ExtendedCost);
it->SaveRefundDataToDB();
@@ -21505,8 +21199,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin
return false;
}
- ConditionList conditions = sConditionMgr->GetConditionsForNpcVendorEvent(creature->GetEntry(), item);
- if (!sConditionMgr->IsObjectMeetToConditions(this, creature, conditions))
+ if (!sConditionMgr->IsObjectMeetingVendorItemConditions(creature->GetEntry(), item, this, creature))
{
TC_LOG_DEBUG("condition", "BuyItemFromVendor: conditions not met for creature entry %u item %u", creature->GetEntry(), item);
SendBuyError(BUY_ERR_CANT_FIND_ITEM, creature, item, 0);
@@ -21692,7 +21385,7 @@ void Player::UpdateHomebindTime(uint32 time)
data << uint32(m_HomebindTimer);
data << uint32(1);
GetSession()->SendPacket(&data);
- TC_LOG_DEBUG("maps", "PLAYER: Player '%s' (GUID: %u) will be teleported to homebind in 60 seconds", GetName().c_str(), GetGUIDLow());
+ TC_LOG_DEBUG("maps", "PLAYER: Player '%s' (GUID: %u) will be teleported to homebind in 60 seconds", GetName().c_str(), GetGUID().GetCounter());
}
}
@@ -22021,6 +21714,16 @@ void Player::LeaveBattleground(bool teleportToEntryPoint)
CastSpell(this, 26013, true); // Deserter
}
}
+
+ // track if player leaves the BG while inside it
+ if (bg->isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS) &&
+ (bg->GetStatus() == STATUS_IN_PROGRESS || bg->GetStatus() == STATUS_WAIT_JOIN))
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK);
+ stmt->setUInt32(0, GetGUID().GetCounter());
+ stmt->setUInt8(1, BG_DESERTION_TYPE_LEAVE_BG);
+ CharacterDatabase.Execute(stmt);
+ }
}
}
@@ -22060,9 +21763,9 @@ void Player::ReportedAfkBy(Player* reporter)
return;
// check if player has 'Idle' or 'Inactive' debuff
- if (m_bgData.bgAfkReporter.find(reporter->GetGUIDLow()) == m_bgData.bgAfkReporter.end() && !HasAura(43680) && !HasAura(43681) && reporter->CanReportAfkDueToLimit())
+ if (m_bgData.bgAfkReporter.find(reporter->GetGUID().GetCounter()) == m_bgData.bgAfkReporter.end() && !HasAura(43680) && !HasAura(43681) && reporter->CanReportAfkDueToLimit())
{
- m_bgData.bgAfkReporter.insert(reporter->GetGUIDLow());
+ m_bgData.bgAfkReporter.insert(reporter->GetGUID().GetCounter());
// 3 players have to complain to apply debuff
if (m_bgData.bgAfkReporter.size() >= 3)
{
@@ -22195,7 +21898,7 @@ void Player::UpdateVisibilityOf(WorldObject* target)
m_clientGUIDs.erase(target->GetGUID());
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "Object %u (Type: %u) out of range for player %u. Distance = %f", target->GetGUIDLow(), target->GetTypeId(), GetGUIDLow(), GetDistance(target));
+ TC_LOG_DEBUG("maps", "Object %u (Type: %u) out of range for player %u. Distance = %f", target->GetGUID().GetCounter(), target->GetTypeId(), GetGUID().GetCounter(), GetDistance(target));
#endif
}
}
@@ -22207,7 +21910,7 @@ void Player::UpdateVisibilityOf(WorldObject* target)
m_clientGUIDs.insert(target->GetGUID());
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "Object %u (Type: %u) is visible now for player %u. Distance = %f", target->GetGUIDLow(), target->GetTypeId(), GetGUIDLow(), GetDistance(target));
+ TC_LOG_DEBUG("maps", "Object %u (Type: %u) is visible now for player %u. Distance = %f", target->GetGUID().GetCounter(), target->GetTypeId(), GetGUID().GetCounter(), GetDistance(target));
#endif
// target aura duration for caster show only if target exist at caster client
@@ -22283,7 +21986,7 @@ void Player::UpdateVisibilityOf(T* target, UpdateData& data, std::set<Unit*>& vi
m_clientGUIDs.erase(target->GetGUID());
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "Object %u (Type: %u, Entry: %u) is out of range for player %u. Distance = %f", target->GetGUIDLow(), target->GetTypeId(), target->GetEntry(), GetGUIDLow(), GetDistance(target));
+ TC_LOG_DEBUG("maps", "Object %u (Type: %u, Entry: %u) is out of range for player %u. Distance = %f", target->GetGUID().GetCounter(), target->GetTypeId(), target->GetEntry(), GetGUID().GetCounter(), GetDistance(target));
#endif
}
}
@@ -22295,7 +21998,7 @@ void Player::UpdateVisibilityOf(T* target, UpdateData& data, std::set<Unit*>& vi
UpdateVisibilityOf_helper(m_clientGUIDs, target, visibleNow);
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "Object %u (Type: %u, Entry: %u) is visible now for player %u. Distance = %f", target->GetGUIDLow(), target->GetTypeId(), target->GetEntry(), GetGUIDLow(), GetDistance(target));
+ TC_LOG_DEBUG("maps", "Object %u (Type: %u, Entry: %u) is visible now for player %u. Distance = %f", target->GetGUID().GetCounter(), target->GetTypeId(), target->GetEntry(), GetGUID().GetCounter(), GetDistance(target));
#endif
}
}
@@ -22675,7 +22378,7 @@ void Player::ApplyEquipCooldown(Item* pItem)
_Spell const& spellData = pItem->GetTemplate()->Spells[i];
// no spell
- if (!spellData.SpellId)
+ if (spellData.SpellId <= 0)
continue;
// wrong triggering type (note: ITEM_SPELLTRIGGER_ON_NO_DELAY_USE not have cooldown)
@@ -22683,7 +22386,7 @@ void Player::ApplyEquipCooldown(Item* pItem)
continue;
// Don't replace longer cooldowns by equip cooldown if we have any.
- if (GetSpellHistory()->GetRemainingCooldown(spellData.SpellId) > 30 * IN_MILLISECONDS)
+ if (GetSpellHistory()->GetRemainingCooldown(sSpellMgr->EnsureSpellInfo(spellData.SpellId)) > 30 * IN_MILLISECONDS)
continue;
GetSpellHistory()->AddCooldown(spellData.SpellId, pItem->GetEntry(), std::chrono::seconds(30));
@@ -22957,9 +22660,9 @@ void Player::LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue)
RemoveSpell(ability->spellId);
// need learn
else if (!IsInWorld())
- AddSpell(ability->spellId, true, true, true, false, false, true);
+ AddSpell(ability->spellId, true, true, true, false, false, ability->skillId);
else
- LearnSpell(ability->spellId, true, true);
+ LearnSpell(ability->spellId, true, ability->skillId);
}
}
@@ -23292,7 +22995,7 @@ void Player::UpdateForQuestWorldObjects()
{
if (itr->IsGameObject())
{
- if (GameObject* obj = HashMapHolder<GameObject>::Find(*itr))
+ if (GameObject* obj = ObjectAccessor::GetGameObject(*this, *itr))
obj->BuildValuesUpdateBlockForPlayer(&udata, this);
}
else if (itr->IsCreatureOrVehicle())
@@ -23310,16 +23013,18 @@ void Player::UpdateForQuestWorldObjects()
{
//! This code doesn't look right, but it was logically converted to condition system to do the exact
//! same thing it did before. It definitely needs to be overlooked for intended functionality.
- ConditionList conds = sConditionMgr->GetConditionsForSpellClickEvent(obj->GetEntry(), _itr->second.spellId);
- bool buildUpdateBlock = false;
- for (ConditionList::const_iterator jtr = conds.begin(); jtr != conds.end() && !buildUpdateBlock; ++jtr)
- if ((*jtr)->ConditionType == CONDITION_QUESTREWARDED || (*jtr)->ConditionType == CONDITION_QUESTTAKEN)
- buildUpdateBlock = true;
-
- if (buildUpdateBlock)
+ if (ConditionContainer const* conds = sConditionMgr->GetConditionsForSpellClickEvent(obj->GetEntry(), _itr->second.spellId))
{
- obj->BuildValuesUpdateBlockForPlayer(&udata, this);
- break;
+ bool buildUpdateBlock = false;
+ for (ConditionContainer::const_iterator jtr = conds->begin(); jtr != conds->end() && !buildUpdateBlock; ++jtr)
+ if ((*jtr)->ConditionType == CONDITION_QUESTREWARDED || (*jtr)->ConditionType == CONDITION_QUESTTAKEN)
+ buildUpdateBlock = true;
+
+ if (buildUpdateBlock)
+ {
+ obj->BuildValuesUpdateBlockForPlayer(&udata, this);
+ break;
+ }
}
}
}
@@ -24128,7 +23833,7 @@ void Player::SetViewpoint(WorldObject* target, bool apply)
// farsight dynobj or puppet may be very far away
UpdateVisibilityOf(target);
- if (target->isType(TYPEMASK_UNIT) && !GetVehicle())
+ if (target->isType(TYPEMASK_UNIT) && target != GetVehicleBase())
((Unit*)target)->AddPlayerToVision(this);
}
else
@@ -24141,7 +23846,7 @@ void Player::SetViewpoint(WorldObject* target, bool apply)
return;
}
- if (target->isType(TYPEMASK_UNIT) && !GetVehicle())
+ if (target->isType(TYPEMASK_UNIT) && target != GetVehicleBase())
((Unit*)target)->RemovePlayerFromVision(this);
//must immediately set seer back otherwise may crash
@@ -24666,7 +24371,7 @@ void Player::_LoadSkills(PreparedQueryResult result)
if (!rcEntry)
{
TC_LOG_ERROR("entities.player", "Character: %s (GUID: %u Race: %u Class: %u) has skill %u not allowed for his race/class combination",
- GetName().c_str(), GetGUIDLow(), uint32(getRace()), uint32(getClass()), skill);
+ GetName().c_str(), GetGUID().GetCounter(), uint32(getRace()), uint32(getClass()), skill);
mSkillStatus.insert(SkillStatusMap::value_type(skill, SkillStatusData(0, SKILL_DELETED)));
continue;
@@ -24689,11 +24394,11 @@ void Player::_LoadSkills(PreparedQueryResult result)
if (value == 0)
{
- TC_LOG_ERROR("entities.player", "Character %u has skill %u with value 0. Will be deleted.", GetGUIDLow(), skill);
+ TC_LOG_ERROR("entities.player", "Character %u has skill %u with value 0. Will be deleted.", GetGUID().GetCounter(), skill);
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_SKILL);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt16(1, skill);
CharacterDatabase.Execute(stmt);
@@ -24726,7 +24431,7 @@ void Player::_LoadSkills(PreparedQueryResult result)
if (count >= PLAYER_MAX_SKILLS) // client limit
{
- TC_LOG_ERROR("entities.player", "Character %u has more than %u skills.", GetGUIDLow(), PLAYER_MAX_SKILLS);
+ TC_LOG_ERROR("entities.player", "Character %u has more than %u skills.", GetGUID().GetCounter(), PLAYER_MAX_SKILLS);
break;
}
}
@@ -25244,9 +24949,7 @@ bool Player::CanSeeSpellClickOn(Creature const* c) const
if (!itr->second.IsFitToRequirements(this, c))
return false;
- ConditionList conds = sConditionMgr->GetConditionsForSpellClickEvent(c->GetEntry(), itr->second.spellId);
- ConditionSourceInfo info = ConditionSourceInfo(const_cast<Player*>(this), const_cast<Creature*>(c));
- if (sConditionMgr->IsObjectMeetToConditions(info, conds))
+ if (sConditionMgr->IsObjectMeetingSpellClickConditions(c->GetEntry(), itr->second.spellId, const_cast<Player*>(this), const_cast<Creature*>(c)))
return true;
}
@@ -25462,11 +25165,11 @@ void Player::SendEquipmentSetList()
data << itr->second.IconName;
for (uint32 i = 0; i < EQUIPMENT_SLOT_END; ++i)
{
- // ignored slots stored in IgnoreMask, client wants "1" as raw GUID, so no HIGHGUID_ITEM
+ // ignored slots stored in IgnoreMask, client wants "1" as raw GUID, so no HighGuid::Item
if (itr->second.IgnoreMask & (1 << i))
data.appendPackGUID(uint64(1));
else
- data << ObjectGuid(HIGHGUID_ITEM, 0, itr->second.Items[i]).WriteAsPacked();
+ data << ObjectGuid(HighGuid::Item, 0, itr->second.Items[i]).WriteAsPacked();
}
++count; // client have limit but it checked at loading and set
@@ -25536,7 +25239,7 @@ void Player::_SaveEquipmentSets(SQLTransaction& trans)
stmt->setUInt32(j++, eqset.IgnoreMask);
for (uint8 i=0; i<EQUIPMENT_SLOT_END; ++i)
stmt->setUInt32(j++, eqset.Items[i]);
- stmt->setUInt32(j++, GetGUIDLow());
+ stmt->setUInt32(j++, GetGUID().GetCounter());
stmt->setUInt64(j++, eqset.Guid);
stmt->setUInt32(j, index);
trans->Append(stmt);
@@ -25545,7 +25248,7 @@ void Player::_SaveEquipmentSets(SQLTransaction& trans)
break;
case EQUIPMENT_SET_NEW:
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_EQUIP_SET);
- stmt->setUInt32(j++, GetGUIDLow());
+ stmt->setUInt32(j++, GetGUID().GetCounter());
stmt->setUInt64(j++, eqset.Guid);
stmt->setUInt32(j++, index);
stmt->setString(j++, eqset.Name.c_str());
@@ -25570,11 +25273,11 @@ void Player::_SaveEquipmentSets(SQLTransaction& trans)
void Player::_SaveBGData(SQLTransaction& trans)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_BGDATA);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
trans->Append(stmt);
/* guid, bgInstanceID, bgTeam, x, y, z, o, map, taxi[0], taxi[1], mountSpell */
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PLAYER_BGDATA);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, m_bgData.bgInstanceID);
stmt->setUInt16(2, m_bgData.bgTeam);
stmt->setFloat (3, m_bgData.joinPos.GetPositionX());
@@ -25612,7 +25315,7 @@ void Player::RemoveAtLoginFlag(AtLoginFlags flags, bool persist /*= false*/)
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_REM_AT_LOGIN_FLAG);
stmt->setUInt16(0, uint16(flags));
- stmt->setUInt32(1, GetGUIDLow());
+ stmt->setUInt32(1, GetGUID().GetCounter());
CharacterDatabase.Execute(stmt);
}
@@ -25663,7 +25366,7 @@ void Player::_LoadGlyphs(PreparedQueryResult result)
void Player::_SaveGlyphs(SQLTransaction& trans)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_GLYPHS);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
trans->Append(stmt);
@@ -25672,7 +25375,7 @@ void Player::_SaveGlyphs(SQLTransaction& trans)
uint8 index = 0;
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_GLYPHS);
- stmt->setUInt32(index++, GetGUIDLow());
+ stmt->setUInt32(index++, GetGUID().GetCounter());
stmt->setUInt8(index++, spec);
@@ -25705,7 +25408,7 @@ void Player::_SaveTalents(SQLTransaction& trans)
if (itr->second->state == PLAYERSPELL_REMOVED || itr->second->state == PLAYERSPELL_CHANGED)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_TALENT_BY_SPELL_SPEC);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, itr->first);
stmt->setUInt8(2, itr->second->spec);
trans->Append(stmt);
@@ -25714,7 +25417,7 @@ void Player::_SaveTalents(SQLTransaction& trans)
if (itr->second->state == PLAYERSPELL_NEW || itr->second->state == PLAYERSPELL_CHANGED)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_TALENT);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt32(1, itr->first);
stmt->setUInt8(2, itr->second->spec);
trans->Append(stmt);
@@ -25753,7 +25456,7 @@ void Player::UpdateSpecCount(uint8 count)
for (ActionButtonList::iterator itr = m_actionButtons.begin(); itr != m_actionButtons.end(); ++itr)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_ACTION);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt8(1, 1);
stmt->setUInt8(2, itr->first);
stmt->setUInt32(3, itr->second.GetAction());
@@ -25768,7 +25471,7 @@ void Player::UpdateSpecCount(uint8 count)
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_ACTION_EXCEPT_SPEC);
stmt->setUInt8(0, m_activeSpec);
- stmt->setUInt32(1, GetGUIDLow());
+ stmt->setUInt32(1, GetGUID().GetCounter());
trans->Append(stmt);
m_activeSpec = 0;
@@ -25909,7 +25612,7 @@ void Player::ActivateSpec(uint8 spec)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_ACTIONS_SPEC);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
stmt->setUInt8(1, m_activeSpec);
if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
_LoadActions(result);
@@ -25987,7 +25690,7 @@ void Player::SendRefundInfo(Item* item)
return;
}
- if (GetGUIDLow() != item->GetRefundRecipient()) // Formerly refundable item got traded
+ if (GetGUID().GetCounter() != item->GetRefundRecipient()) // Formerly refundable item got traded
{
TC_LOG_DEBUG("entities.player.items", "Item refund: item was traded!");
item->SetNotRefundable(this);
@@ -26057,7 +25760,7 @@ void Player::RefundItem(Item* item)
return;
}
- if (GetGUIDLow() != item->GetRefundRecipient()) // Formerly refundable item got traded
+ if (GetGUID().GetCounter() != item->GetRefundRecipient()) // Formerly refundable item got traded
{
TC_LOG_DEBUG("entities.player.items", "Item refund: item was traded!");
item->SetNotRefundable(this);
@@ -26166,7 +25869,7 @@ void Player::SendItemRetrievalMail(uint32 itemEntry, uint32 count)
draft.AddItem(item);
}
- draft.SendMailTo(trans, MailReceiver(this, GetGUIDLow()), sender);
+ draft.SendMailTo(trans, MailReceiver(this, GetGUID().GetCounter()), sender);
CharacterDatabase.CommitTransaction(trans);
}
@@ -26177,7 +25880,7 @@ void Player::SetRandomWinner(bool isWinner)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_BATTLEGROUND_RANDOM);
- stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(0, GetGUID().GetCounter());
CharacterDatabase.Execute(stmt);
}
@@ -26185,7 +25888,7 @@ void Player::SetRandomWinner(bool isWinner)
void Player::_LoadRandomBGStatus(PreparedQueryResult result)
{
- //QueryResult result = CharacterDatabase.PQuery("SELECT guid FROM character_battleground_random WHERE guid = '%u'", GetGUIDLow());
+ //QueryResult result = CharacterDatabase.PQuery("SELECT guid FROM character_battleground_random WHERE guid = '%u'", GetGUID().GetCounter());
if (result)
m_IsBGRandomWinner = true;
@@ -26435,14 +26138,14 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy
pet->Relocate(x, y, z, ang);
if (!pet->IsPositionValid())
{
- TC_LOG_ERROR("misc", "Pet (guidlow %d, entry %d) not summoned. Suggested coordinates isn't valid (X: %f Y: %f)", pet->GetGUIDLow(), pet->GetEntry(), pet->GetPositionX(), pet->GetPositionY());
+ TC_LOG_ERROR("misc", "Pet (guidlow %d, entry %d) not summoned. Suggested coordinates isn't valid (X: %f Y: %f)", pet->GetGUID().GetCounter(), pet->GetEntry(), pet->GetPositionX(), pet->GetPositionY());
delete pet;
return NULL;
}
Map* map = GetMap();
uint32 pet_number = sObjectMgr->GeneratePetNumber();
- if (!pet->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_PET), map, GetPhaseMask(), entry, pet_number))
+ if (!pet->Create(map->GenerateLowGuid<HighGuid::Pet>(), map, GetPhaseMask(), entry, pet_number))
{
TC_LOG_ERROR("misc", "no such creature entry %u", entry);
delete pet;
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index ef252e0243b..26944de9770 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -27,7 +27,9 @@
#include "PetDefines.h"
#include "QuestDef.h"
#include "SpellMgr.h"
+#include "SpellHistory.h"
#include "Unit.h"
+#include "TradeData.h"
#include <limits>
#include <string>
@@ -503,15 +505,16 @@ enum PlayerExtraFlags
// 2^n values
enum AtLoginFlags
{
- AT_LOGIN_NONE = 0x00,
- AT_LOGIN_RENAME = 0x01,
- AT_LOGIN_RESET_SPELLS = 0x02,
- AT_LOGIN_RESET_TALENTS = 0x04,
- AT_LOGIN_CUSTOMIZE = 0x08,
- AT_LOGIN_RESET_PET_TALENTS = 0x10,
- AT_LOGIN_FIRST = 0x20,
- AT_LOGIN_CHANGE_FACTION = 0x40,
- AT_LOGIN_CHANGE_RACE = 0x80
+ AT_LOGIN_NONE = 0x000,
+ AT_LOGIN_RENAME = 0x001,
+ AT_LOGIN_RESET_SPELLS = 0x002,
+ AT_LOGIN_RESET_TALENTS = 0x004,
+ AT_LOGIN_CUSTOMIZE = 0x008,
+ AT_LOGIN_RESET_PET_TALENTS = 0x010,
+ AT_LOGIN_FIRST = 0x020,
+ AT_LOGIN_CHANGE_FACTION = 0x040,
+ AT_LOGIN_CHANGE_RACE = 0x080,
+ AT_LOGIN_RESURRECT = 0x100,
};
typedef std::map<uint32, QuestStatusData> QuestStatusMap;
@@ -685,14 +688,6 @@ struct ItemPosCount
};
typedef std::vector<ItemPosCount> ItemPosCountVec;
-enum TradeSlots
-{
- TRADE_SLOT_COUNT = 7,
- TRADE_SLOT_TRADED_COUNT = 6,
- TRADE_SLOT_NONTRADED = 6,
- TRADE_SLOT_INVALID = -1
-};
-
enum TransferAbortReason
{
TRANSFER_ABORT_NONE = 0x00,
@@ -819,6 +814,7 @@ enum PlayerLoginQueryIndex
PLAYER_LOGIN_QUERY_LOAD_INSTANCE_LOCK_TIMES = 30,
PLAYER_LOGIN_QUERY_LOAD_SEASONAL_QUEST_STATUS = 31,
PLAYER_LOGIN_QUERY_LOAD_MONTHLY_QUEST_STATUS = 32,
+ PLAYER_LOGIN_QUERY_LOAD_CORPSE_LOCATION = 33,
MAX_PLAYER_LOGIN_QUERY
};
@@ -952,6 +948,8 @@ class PlayerTaxi
m_TaxiDestinations.pop_front();
return GetTaxiDestination();
}
+
+ std::deque<uint32> const& GetPath() const { return m_TaxiDestinations; }
bool empty() const { return m_TaxiDestinations.empty(); }
friend std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi);
@@ -1002,88 +1000,6 @@ struct TradeStatusInfo
uint8 Slot;
};
-class TradeData
-{
- public: // constructors
- TradeData(Player* player, Player* trader) :
- m_player(player), m_trader(trader), m_accepted(false), m_acceptProccess(false),
- m_money(0), m_spell(0), m_spellCastItem() { }
-
- Player* GetTrader() const { return m_trader; }
- TradeData* GetTraderData() const;
-
- Item* GetItem(TradeSlots slot) const;
- bool HasItem(ObjectGuid itemGuid) const;
- TradeSlots GetTradeSlotForItem(ObjectGuid itemGuid) const;
- void SetItem(TradeSlots slot, Item* item);
-
- uint32 GetSpell() const { return m_spell; }
- void SetSpell(uint32 spell_id, Item* castItem = NULL);
-
- Item* GetSpellCastItem() const;
- bool HasSpellCastItem() const { return !m_spellCastItem.IsEmpty(); }
-
- uint32 GetMoney() const { return m_money; }
- void SetMoney(uint32 money);
-
- bool IsAccepted() const { return m_accepted; }
- void SetAccepted(bool state, bool crosssend = false);
-
- bool IsInAcceptProcess() const { return m_acceptProccess; }
- void SetInAcceptProcess(bool state) { m_acceptProccess = state; }
-
- private: // internal functions
-
- void Update(bool for_trader = true);
-
- private: // fields
-
- Player* m_player; // Player who own of this TradeData
- Player* m_trader; // Player who trade with m_player
-
- bool m_accepted; // m_player press accept for trade list
- bool m_acceptProccess; // one from player/trader press accept and this processed
-
- uint32 m_money; // m_player place money to trade
-
- uint32 m_spell; // m_player apply spell to non-traded slot item
- ObjectGuid m_spellCastItem; // applied spell cast by item use
-
- ObjectGuid m_items[TRADE_SLOT_COUNT]; // traded items from m_player side including non-traded slot
-};
-
-class KillRewarder
-{
-public:
- KillRewarder(Player* killer, Unit* victim, bool isBattleGround);
-
- void Reward();
-
-private:
- void _InitXP(Player* player);
- void _InitGroupData();
-
- void _RewardHonor(Player* player);
- void _RewardXP(Player* player, float rate);
- void _RewardReputation(Player* player, float rate);
- void _RewardKillCredit(Player* player);
- void _RewardPlayer(Player* player, bool isDungeon);
- void _RewardGroup();
-
- Player* _killer;
- Unit* _victim;
- Group* _group;
- float _groupRate;
- Player* _maxNotGrayMember;
- uint32 _count;
- uint32 _sumLevel;
- uint32 _xp;
- bool _isFullXP;
- uint8 _maxLevel;
- bool _isBattleGround;
- bool _isPvP;
-};
-
class Player : public Unit, public GridObject<Player>
{
friend class WorldSession;
@@ -1112,13 +1028,13 @@ class Player : public Unit, public GridObject<Player>
void SetSummonPoint(uint32 mapid, float x, float y, float z);
void SummonIfPossible(bool agree);
- bool Create(uint32 guidlow, CharacterCreateInfo* createInfo);
+ bool Create(ObjectGuid::LowType guidlow, CharacterCreateInfo* createInfo);
void Update(uint32 time) override;
static bool BuildEnumData(PreparedQueryResult result, WorldPacket* data);
- bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) const override; // override Unit::IsImmunedToSpellEffect
+ bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) const override;
void SetInWater(bool apply);
@@ -1158,6 +1074,7 @@ class Player : public Unit, public GridObject<Player>
bool isAcceptWhispers() const { return (m_ExtraFlags & PLAYER_EXTRA_ACCEPT_WHISPERS) != 0; }
void SetAcceptWhispers(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_ACCEPT_WHISPERS; else m_ExtraFlags &= ~PLAYER_EXTRA_ACCEPT_WHISPERS; }
bool IsGameMaster() const { return (m_ExtraFlags & PLAYER_EXTRA_GM_ON) != 0; }
+ bool CanBeGameMaster() const;
void SetGameMaster(bool on);
bool isGMChat() const { return (m_ExtraFlags & PLAYER_EXTRA_GM_CHAT) != 0; }
void SetGMChat(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_GM_CHAT; else m_ExtraFlags &= ~PLAYER_EXTRA_GM_CHAT; }
@@ -1322,7 +1239,7 @@ class Player : public Unit, public GridObject<Player>
float GetReputationPriceDiscount(Creature const* creature) const;
- Player* GetTrader() const { return m_trade ? m_trade->GetTrader() : NULL; }
+ Player* GetTrader() const { return m_trade ? m_trade->GetTrader() : nullptr; }
TradeData* GetTradeData() const { return m_trade; }
void TradeCancel(bool sendback);
@@ -1343,7 +1260,7 @@ class Player : public Unit, public GridObject<Player>
void AddItemDurations(Item* item);
void RemoveItemDurations(Item* item);
void SendItemDurations();
- void LoadCorpse();
+ void LoadCorpse(PreparedQueryResult result);
void LoadPet();
bool AddItem(uint32 itemId, uint32 count);
@@ -1480,7 +1397,7 @@ class Player : public Unit, public GridObject<Player>
bool LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder);
bool IsLoading() const override;
- void Initialize(uint32 guid);
+ void Initialize(ObjectGuid::LowType guid);
static uint32 GetUInt32ValueFromArray(Tokenizer const& data, uint16 index);
static float GetFloatValueFromArray(Tokenizer const& data, uint16 index);
static uint32 GetZoneIdFromDB(ObjectGuid guid);
@@ -1546,7 +1463,7 @@ class Player : public Unit, public GridObject<Player>
void ClearComboPoints();
void SendComboPoints();
- void SendMailResult(uint32 mailId, MailResponseType mailAction, MailResponseResult mailError, uint32 equipError = 0, uint32 item_guid = 0, uint32 item_count = 0);
+ void SendMailResult(uint32 mailId, MailResponseType mailAction, MailResponseResult mailError, uint32 equipError = 0, ObjectGuid::LowType item_guid = 0, uint32 item_count = 0);
void SendNewMail();
void UpdateNextMailTimeAndUnreads();
void AddNewMailDeliverTime(time_t deliver_time);
@@ -1592,8 +1509,8 @@ class Player : public Unit, public GridObject<Player>
void SendProficiency(ItemClass itemClass, uint32 itemSubclassMask);
void SendInitialSpells();
- bool AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading = false, bool fromSkill = false);
- void LearnSpell(uint32 spell_id, bool dependent, bool fromSkill = false);
+ bool AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading = false, uint32 fromSkill = 0);
+ void LearnSpell(uint32 spell_id, bool dependent, uint32 fromSkill = 0);
void RemoveSpell(uint32 spell_id, bool disabled = false, bool learn_low_rank = true);
void ResetSpells(bool myClassOnly = false);
void LearnCustomSpells();
@@ -1712,7 +1629,7 @@ class Player : public Unit, public GridObject<Player>
void SetGuildIdInvited(uint32 GuildId) { m_GuildIdInvited = GuildId; }
uint32 GetGuildId() const { return GetUInt32Value(PLAYER_GUILDID); }
Guild* GetGuild();
- static uint32 GetGuildIdFromDB(ObjectGuid guid);
+ static ObjectGuid::LowType GetGuildIdFromDB(ObjectGuid guid);
static uint8 GetRankFromDB(ObjectGuid guid);
int GetGuildIdInvited() const { return m_GuildIdInvited; }
static void RemovePetitionsAndSigns(ObjectGuid guid, uint32 type);
@@ -1835,17 +1752,20 @@ class Player : public Unit, public GridObject<Player>
bool UpdatePosition(const Position &pos, bool teleport = false) { return UpdatePosition(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teleport); }
void UpdateUnderwaterState(Map* m, float x, float y, float z) override;
- void SendMessageToSet(WorldPacket* data, bool self) override {SendMessageToSetInRange(data, GetVisibilityRange(), self); }// overwrite Object::SendMessageToSet
- void SendMessageToSetInRange(WorldPacket* data, float fist, bool self) override;// overwrite Object::SendMessageToSetInRange
+ void SendMessageToSet(WorldPacket* data, bool self) override { SendMessageToSetInRange(data, GetVisibilityRange(), self); }
+ void SendMessageToSetInRange(WorldPacket* data, float dist, bool self) override;
void SendMessageToSetInRange(WorldPacket* data, float dist, bool self, bool own_team_only);
void SendMessageToSet(WorldPacket* data, Player const* skipped_rcvr) override;
void SendTeleportAckPacket();
Corpse* GetCorpse() const;
- void SpawnCorpseBones();
- void CreateCorpse();
+ void SpawnCorpseBones(bool triggerSave = true);
+ Corpse* CreateCorpse();
void KillPlayer();
+ static void OfflineResurrect(ObjectGuid const& guid, SQLTransaction& trans);
+ bool HasCorpse() const { return _corpseLocation.GetMapId() != MAPID_INVALID; }
+ WorldLocation GetCorpseLocation() const { return _corpseLocation; }
uint32 GetResurrectionSpellId();
void ResurrectPlayer(float restore_percent, bool applySickness = false);
void BuildPlayerRepop();
@@ -1877,7 +1797,7 @@ class Player : public Unit, public GridObject<Player>
void UpdateWeaponSkill (WeaponAttackType attType);
void UpdateCombatSkills(Unit* victim, WeaponAttackType attType, bool defence);
- void SetSkill(uint16 id, uint16 step, uint16 currVal, uint16 maxVal);
+ void SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal);
uint16 GetMaxSkillValue(uint32 skill) const; // max + perm. bonus + temp bonus
uint16 GetPureMaxSkillValue(uint32 skill) const; // max
uint16 GetSkillValue(uint32 skill) const; // skill value + perm. bonus + temp bonus
@@ -1941,6 +1861,12 @@ class Player : public Unit, public GridObject<Player>
void SetHonorPoints(uint32 value);
void SetArenaPoints(uint32 value);
+ // duel health and mana reset methods
+ void SaveHealthBeforeDuel() { healthBeforeDuel = GetHealth(); }
+ void SaveManaBeforeDuel() { manaBeforeDuel = GetPower(POWER_MANA); }
+ void RestoreHealthAfterDuel() { SetHealth(healthBeforeDuel); }
+ void RestoreManaAfterDuel() { SetPower(POWER_MANA, manaBeforeDuel); }
+
//End of PvP System
void SetDrunkValue(uint8 newDrunkValue, uint32 itemId = 0);
@@ -2192,7 +2118,7 @@ class Player : public Unit, public GridObject<Player>
void SendSavedInstances();
static void ConvertInstancesToGroup(Player* player, Group* group, bool switchLeader);
bool Satisfy(AccessRequirement const* ar, uint32 target_map, bool report = false);
- bool CheckInstanceLoginValid();
+ bool CheckInstanceLoginValid(Map* map);
bool CheckInstanceCount(uint32 instanceId) const;
void AddInstanceEnterTime(uint32 instanceId, time_t enterTime);
@@ -2364,7 +2290,6 @@ class Player : public Unit, public GridObject<Player>
void _LoadGroup(PreparedQueryResult result);
void _LoadSkills(PreparedQueryResult result);
void _LoadSpells(PreparedQueryResult result);
- void _LoadFriendList(PreparedQueryResult result);
bool _LoadHomeBind(PreparedQueryResult result);
void _LoadDeclinedNames(PreparedQueryResult result);
void _LoadArenaTeamInfo(PreparedQueryResult result);
@@ -2469,7 +2394,7 @@ class Player : public Unit, public GridObject<Player>
EnchantDurationList m_enchantDuration;
ItemDurationList m_itemDuration;
- ItemDurationList m_itemSoulboundTradeable;
+ GuidUnorderedSet m_itemSoulboundTradeable;
void ResetTimeSync();
void SendTimeSync();
@@ -2578,6 +2503,8 @@ class Player : public Unit, public GridObject<Player>
bool IsHasDelayedTeleport() const { return m_bHasDelayedTeleport; }
void SetDelayedTeleportFlag(bool setting) { m_bHasDelayedTeleport = setting; }
void ScheduleDelayedOperation(uint32 operation) { if (operation < DELAYED_END) m_DelayedOperations |= operation; }
+
+ bool IsInstanceLoginGameMasterException() const;
MapReference m_mapRef;
@@ -2624,6 +2551,12 @@ class Player : public Unit, public GridObject<Player>
uint32 _pendingBindTimer;
uint32 _activeCheats;
+
+ // variables to save health and mana before duel and restore them after duel
+ uint32 healthBeforeDuel;
+ uint32 manaBeforeDuel;
+
+ WorldLocation _corpseLocation;
};
void AddItemsSetItem(Player* player, Item* item);
diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp
index 77cd701ee35..b65584a4357 100644
--- a/src/server/game/Entities/Player/SocialMgr.cpp
+++ b/src/server/game/Entities/Player/SocialMgr.cpp
@@ -40,7 +40,7 @@ uint32 PlayerSocial::GetNumberOfSocialsWithFlag(SocialFlag flag)
return counter;
}
-bool PlayerSocial::AddToSocialList(uint32 friendGuid, bool ignore)
+bool PlayerSocial::AddToSocialList(ObjectGuid::LowType friendGuid, bool ignore)
{
// check client limits
if (ignore)
@@ -88,7 +88,7 @@ bool PlayerSocial::AddToSocialList(uint32 friendGuid, bool ignore)
return true;
}
-void PlayerSocial::RemoveFromSocialList(uint32 friendGuid, bool ignore)
+void PlayerSocial::RemoveFromSocialList(ObjectGuid::LowType friendGuid, bool ignore)
{
PlayerSocialMap::iterator itr = m_playerSocialMap.find(friendGuid);
if (itr == m_playerSocialMap.end()) // not exist
@@ -122,7 +122,7 @@ void PlayerSocial::RemoveFromSocialList(uint32 friendGuid, bool ignore)
}
}
-void PlayerSocial::SetFriendNote(uint32 friendGuid, std::string note)
+void PlayerSocial::SetFriendNote(ObjectGuid::LowType friendGuid, std::string note)
{
PlayerSocialMap::const_iterator itr = m_playerSocialMap.find(friendGuid);
if (itr == m_playerSocialMap.end()) // not exist
@@ -175,7 +175,7 @@ void PlayerSocial::SendSocialList(Player* player)
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_CONTACT_LIST");
}
-bool PlayerSocial::HasFriend(uint32 friendGuid)
+bool PlayerSocial::HasFriend(ObjectGuid::LowType friendGuid)
{
PlayerSocialMap::const_iterator itr = m_playerSocialMap.find(friendGuid);
if (itr != m_playerSocialMap.end())
@@ -183,7 +183,7 @@ bool PlayerSocial::HasFriend(uint32 friendGuid)
return false;
}
-bool PlayerSocial::HasIgnore(uint32 ignore_guid)
+bool PlayerSocial::HasIgnore(ObjectGuid::LowType ignore_guid)
{
PlayerSocialMap::const_iterator itr = m_playerSocialMap.find(ignore_guid);
if (itr != m_playerSocialMap.end())
@@ -195,7 +195,7 @@ SocialMgr::SocialMgr() { }
SocialMgr::~SocialMgr() { }
-void SocialMgr::GetFriendInfo(Player* player, uint32 friendGUID, FriendInfo &friendInfo)
+void SocialMgr::GetFriendInfo(Player* player, ObjectGuid::LowType friendGUID, FriendInfo &friendInfo)
{
if (!player)
return;
@@ -205,7 +205,7 @@ void SocialMgr::GetFriendInfo(Player* player, uint32 friendGUID, FriendInfo &fri
friendInfo.Level = 0;
friendInfo.Class = 0;
- Player* target = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, friendGUID));
+ Player* target = ObjectAccessor::FindPlayer(ObjectGuid(HighGuid::Player, friendGUID));
if (!target)
return;
@@ -239,14 +239,14 @@ void SocialMgr::GetFriendInfo(Player* player, uint32 friendGUID, FriendInfo &fri
}
}
-void SocialMgr::MakeFriendStatusPacket(FriendsResult result, uint32 guid, WorldPacket* data)
+void SocialMgr::MakeFriendStatusPacket(FriendsResult result, ObjectGuid::LowType guid, WorldPacket* data)
{
data->Initialize(SMSG_FRIEND_STATUS, 9);
*data << uint8(result);
*data << uint64(guid);
}
-void SocialMgr::SendFriendStatus(Player* player, FriendsResult result, uint32 friendGuid, bool broadcast)
+void SocialMgr::SendFriendStatus(Player* player, FriendsResult result, ObjectGuid::LowType friendGuid, bool broadcast)
{
FriendInfo fi;
@@ -290,10 +290,10 @@ void SocialMgr::BroadcastToFriendListers(Player* player, WorldPacket* packet)
AccountTypes gmSecLevel = AccountTypes(sWorld->getIntConfig(CONFIG_GM_LEVEL_IN_WHO_LIST));
for (SocialMap::const_iterator itr = m_socialMap.begin(); itr != m_socialMap.end(); ++itr)
{
- PlayerSocialMap::const_iterator itr2 = itr->second.m_playerSocialMap.find(player->GetGUIDLow());
+ PlayerSocialMap::const_iterator itr2 = itr->second.m_playerSocialMap.find(player->GetGUID().GetCounter());
if (itr2 != itr->second.m_playerSocialMap.end() && (itr2->second.Flags & SOCIAL_FLAG_FRIEND))
{
- Player* target = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, 0, itr->first));
+ Player* target = ObjectAccessor::FindPlayer(ObjectGuid(HighGuid::Player, 0, itr->first));
if (!target)
continue;
@@ -310,7 +310,7 @@ void SocialMgr::BroadcastToFriendListers(Player* player, WorldPacket* packet)
}
}
-PlayerSocial* SocialMgr::LoadFromDB(PreparedQueryResult result, uint32 guid)
+PlayerSocial* SocialMgr::LoadFromDB(PreparedQueryResult result, ObjectGuid::LowType guid)
{
PlayerSocial *social = &m_socialMap[guid];
social->SetPlayerGUID(guid);
@@ -318,7 +318,7 @@ PlayerSocial* SocialMgr::LoadFromDB(PreparedQueryResult result, uint32 guid)
if (!result)
return social;
- uint32 friendGuid = 0;
+ ObjectGuid::LowType friendGuid = 0;
uint8 flags = 0;
std::string note = "";
diff --git a/src/server/game/Entities/Player/SocialMgr.h b/src/server/game/Entities/Player/SocialMgr.h
index 5bf336a9abe..887b5de58df 100644
--- a/src/server/game/Entities/Player/SocialMgr.h
+++ b/src/server/game/Entities/Player/SocialMgr.h
@@ -21,6 +21,7 @@
#include "DatabaseEnv.h"
#include "Common.h"
+#include "ObjectGuid.h"
class SocialMgr;
class PlayerSocial;
@@ -60,8 +61,8 @@ struct FriendInfo
{ }
};
-typedef std::map<uint32, FriendInfo> PlayerSocialMap;
-typedef std::map<uint32, PlayerSocial> SocialMap;
+typedef std::map<ObjectGuid::LowType, FriendInfo> PlayerSocialMap;
+typedef std::map<ObjectGuid::LowType, PlayerSocial> SocialMap;
/// Results of friend related commands
enum FriendsResult
@@ -104,20 +105,20 @@ class PlayerSocial
public:
PlayerSocial();
// adding/removing
- bool AddToSocialList(uint32 friend_guid, bool ignore);
- void RemoveFromSocialList(uint32 friend_guid, bool ignore);
- void SetFriendNote(uint32 friendGuid, std::string note);
+ bool AddToSocialList(ObjectGuid::LowType friendGuid, bool ignore);
+ void RemoveFromSocialList(ObjectGuid::LowType friend_guid, bool ignore);
+ void SetFriendNote(ObjectGuid::LowType friendGuid, std::string note);
// Packet send's
void SendSocialList(Player* player);
// Misc
- bool HasFriend(uint32 friend_guid);
- bool HasIgnore(uint32 ignore_guid);
- uint32 GetPlayerGUID() const { return m_playerGUID; }
- void SetPlayerGUID(uint32 guid) { m_playerGUID = guid; }
+ bool HasFriend(ObjectGuid::LowType friend_guid);
+ bool HasIgnore(ObjectGuid::LowType ignore_guid);
+ ObjectGuid::LowType GetPlayerGUID() const { return m_playerGUID; }
+ void SetPlayerGUID(ObjectGuid::LowType guid) { m_playerGUID = guid; }
uint32 GetNumberOfSocialsWithFlag(SocialFlag flag);
private:
PlayerSocialMap m_playerSocialMap;
- uint32 m_playerGUID;
+ ObjectGuid::LowType m_playerGUID;
};
class SocialMgr
@@ -134,15 +135,15 @@ class SocialMgr
}
// Misc
- void RemovePlayerSocial(uint32 guid) { m_socialMap.erase(guid); }
+ void RemovePlayerSocial(ObjectGuid::LowType guid) { m_socialMap.erase(guid); }
- void GetFriendInfo(Player* player, uint32 friendGUID, FriendInfo &friendInfo);
+ void GetFriendInfo(Player* player, ObjectGuid::LowType friendGUID, FriendInfo &friendInfo);
// Packet management
- void MakeFriendStatusPacket(FriendsResult result, uint32 friend_guid, WorldPacket* data);
- void SendFriendStatus(Player* player, FriendsResult result, uint32 friend_guid, bool broadcast);
+ void MakeFriendStatusPacket(FriendsResult result, ObjectGuid::LowType friend_guid, WorldPacket* data);
+ void SendFriendStatus(Player* player, FriendsResult result, ObjectGuid::LowType friend_guid, bool broadcast);
void BroadcastToFriendListers(Player* player, WorldPacket* packet);
// Loading
- PlayerSocial *LoadFromDB(PreparedQueryResult result, uint32 guid);
+ PlayerSocial *LoadFromDB(PreparedQueryResult result, ObjectGuid::LowType guid);
private:
SocialMap m_socialMap;
};
diff --git a/src/server/game/Entities/Player/TradeData.cpp b/src/server/game/Entities/Player/TradeData.cpp
new file mode 100644
index 00000000000..bbbd1c81773
--- /dev/null
+++ b/src/server/game/Entities/Player/TradeData.cpp
@@ -0,0 +1,139 @@
+/*
+ * 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 "TradeData.h"
+#include "Player.h"
+#include "WorldSession.h"
+
+TradeData* TradeData::GetTraderData() const
+{
+ return _trader->GetTradeData();
+}
+
+Item* TradeData::GetItem(TradeSlots slot) const
+{
+ return !_items[slot].IsEmpty() ? _player->GetItemByGuid(_items[slot]) : nullptr;
+}
+
+bool TradeData::HasItem(ObjectGuid itemGuid) const
+{
+ for (uint8 i = 0; i < TRADE_SLOT_COUNT; ++i)
+ if (_items[i] == itemGuid)
+ return true;
+
+ return false;
+}
+
+TradeSlots TradeData::GetTradeSlotForItem(ObjectGuid itemGuid) const
+{
+ for (uint8 i = 0; i < TRADE_SLOT_COUNT; ++i)
+ if (_items[i] == itemGuid)
+ return TradeSlots(i);
+
+ return TRADE_SLOT_INVALID;
+}
+
+Item* TradeData::GetSpellCastItem() const
+{
+ return !_spellCastItem.IsEmpty() ? _player->GetItemByGuid(_spellCastItem) : nullptr;
+}
+
+void TradeData::SetItem(TradeSlots slot, Item* item, bool update /*= false*/)
+{
+ ObjectGuid itemGuid;
+ if (item)
+ itemGuid = item->GetGUID();
+
+ if (_items[slot] == itemGuid && !update)
+ return;
+
+ _items[slot] = itemGuid;
+
+ SetAccepted(false);
+ GetTraderData()->SetAccepted(false);
+
+ Update();
+
+ // need remove possible trader spell applied to changed item
+ if (slot == TRADE_SLOT_NONTRADED)
+ GetTraderData()->SetSpell(0);
+
+ // need remove possible player spell applied (possible move reagent)
+ SetSpell(0);
+}
+
+void TradeData::SetSpell(uint32 spell_id, Item* castItem /*= nullptr*/)
+{
+ ObjectGuid itemGuid = castItem ? castItem->GetGUID() : ObjectGuid::Empty;
+
+ if (_spell == spell_id && _spellCastItem == itemGuid)
+ return;
+
+ _spell = spell_id;
+ _spellCastItem = itemGuid;
+
+ SetAccepted(false);
+ GetTraderData()->SetAccepted(false);
+
+ Update(true); // send spell info to item owner
+ Update(false); // send spell info to caster self
+}
+
+void TradeData::SetMoney(uint32 money)
+{
+ if (_money == money)
+ return;
+
+ if (!_player->HasEnoughMoney(money))
+ {
+ TradeStatusInfo info;
+ info.Status = TRADE_STATUS_CLOSE_WINDOW;
+ info.Result = EQUIP_ERR_NOT_ENOUGH_MONEY;
+ _player->GetSession()->SendTradeStatus(info);
+ return;
+ }
+
+ _money = money;
+
+ SetAccepted(false);
+ GetTraderData()->SetAccepted(false);
+
+ Update(true);
+}
+
+void TradeData::Update(bool forTrader /*= true*/) const
+{
+ if (forTrader)
+ _trader->GetSession()->SendUpdateTrade(true); // player state for trader
+ else
+ _player->GetSession()->SendUpdateTrade(false); // player state for player
+}
+
+void TradeData::SetAccepted(bool state, bool forTrader /*= false*/)
+{
+ _accepted = state;
+
+ if (!state)
+ {
+ TradeStatusInfo info;
+ info.Status = TRADE_STATUS_BACK_TO_TRADE;
+ if (forTrader)
+ _trader->GetSession()->SendTradeStatus(info);
+ else
+ _player->GetSession()->SendTradeStatus(info);
+ }
+}
diff --git a/src/server/game/Entities/Player/TradeData.h b/src/server/game/Entities/Player/TradeData.h
new file mode 100644
index 00000000000..cfaf066bde0
--- /dev/null
+++ b/src/server/game/Entities/Player/TradeData.h
@@ -0,0 +1,81 @@
+/*
+ * 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 TradeData_h__
+#define TradeData_h__
+
+#include "ObjectGuid.h"
+
+enum TradeSlots
+{
+ TRADE_SLOT_COUNT = 7,
+ TRADE_SLOT_TRADED_COUNT = 6,
+ TRADE_SLOT_NONTRADED = 6,
+ TRADE_SLOT_INVALID = -1
+};
+
+class Item;
+class Player;
+
+class TradeData
+{
+public:
+ TradeData(Player* player, Player* trader) :
+ _player(player), _trader(trader), _accepted(false), _acceptProccess(false),
+ _money(0), _spell(0), _spellCastItem() { }
+
+ Player* GetTrader() const { return _trader; }
+ TradeData* GetTraderData() const;
+
+ Item* GetItem(TradeSlots slot) const;
+ bool HasItem(ObjectGuid itemGuid) const;
+ TradeSlots GetTradeSlotForItem(ObjectGuid itemGuid) const;
+ void SetItem(TradeSlots slot, Item* item, bool update = false);
+
+ uint32 GetSpell() const { return _spell; }
+ void SetSpell(uint32 spell_id, Item* castItem = nullptr);
+
+ Item* GetSpellCastItem() const;
+ bool HasSpellCastItem() const { return !_spellCastItem.IsEmpty(); }
+
+ uint32 GetMoney() const { return _money; }
+ void SetMoney(uint32 money);
+
+ bool IsAccepted() const { return _accepted; }
+ void SetAccepted(bool state, bool forTrader = false);
+
+ bool IsInAcceptProcess() const { return _acceptProccess; }
+ void SetInAcceptProcess(bool state) { _acceptProccess = state; }
+
+private:
+ void Update(bool for_trader = true) const;
+
+ Player* _player; // Player who own of this TradeData
+ Player* _trader; // Player who trade with _player
+
+ bool _accepted; // _player press accept for trade list
+ bool _acceptProccess; // one from player/trader press accept and this processed
+
+ uint32 _money; // _player place money to trade
+
+ uint32 _spell; // _player apply spell to non-traded slot item
+ ObjectGuid _spellCastItem; // applied spell cast by item use
+
+ ObjectGuid _items[TRADE_SLOT_COUNT]; // traded items from _player side including non-traded slot
+};
+
+#endif // TradeData_h__
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp
index d6a130c0317..99459dce81e 100644
--- a/src/server/game/Entities/Transport/Transport.cpp
+++ b/src/server/game/Entities/Transport/Transport.cpp
@@ -43,7 +43,7 @@ Transport::~Transport()
UnloadStaticPassengers();
}
-bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress)
+bool Transport::Create(ObjectGuid::LowType guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress)
{
Relocate(x, y, z, ang);
@@ -54,7 +54,7 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa
return false;
}
- Object::_Create(guidlow, 0, HIGHGUID_MO_TRANSPORT);
+ Object::_Create(guidlow, 0, HighGuid::Mo_Transport);
GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(entry);
@@ -281,7 +281,7 @@ void Transport::RemovePassenger(WorldObject* passenger)
}
}
-Creature* Transport::CreateNPCPassenger(uint32 guid, CreatureData const* data)
+Creature* Transport::CreateNPCPassenger(ObjectGuid::LowType guid, CreatureData const* data)
{
Map* map = GetMap();
Creature* creature = new Creature();
@@ -312,7 +312,7 @@ Creature* Transport::CreateNPCPassenger(uint32 guid, CreatureData const* data)
if (!creature->IsPositionValid())
{
- TC_LOG_ERROR("entities.transport", "Creature (guidlow %d, entry %d) not created. Suggested coordinates aren't valid (X: %f Y: %f)",creature->GetGUIDLow(),creature->GetEntry(),creature->GetPositionX(),creature->GetPositionY());
+ TC_LOG_ERROR("entities.transport", "Creature (guidlow %d, entry %d) not created. Suggested coordinates aren't valid (X: %f Y: %f)",creature->GetGUID().GetCounter(),creature->GetEntry(),creature->GetPositionX(),creature->GetPositionY());
delete creature;
return NULL;
}
@@ -328,7 +328,7 @@ Creature* Transport::CreateNPCPassenger(uint32 guid, CreatureData const* data)
return creature;
}
-GameObject* Transport::CreateGOPassenger(uint32 guid, GameObjectData const* data)
+GameObject* Transport::CreateGOPassenger(ObjectGuid::LowType guid, GameObjectData const* data)
{
Map* map = GetMap();
GameObject* go = new GameObject();
@@ -351,10 +351,11 @@ GameObject* Transport::CreateGOPassenger(uint32 guid, GameObjectData const* data
go->m_movementInfo.transport.pos.Relocate(x, y, z, o);
CalculatePassengerPosition(x, y, z, &o);
go->Relocate(x, y, z, o);
+ go->RelocateStationaryPosition(x, y, z, o);
if (!go->IsPositionValid())
{
- TC_LOG_ERROR("entities.transport", "GameObject (guidlow %d, entry %d) not created. Suggested coordinates aren't valid (X: %f Y: %f)", go->GetGUIDLow(), go->GetEntry(), go->GetPositionX(), go->GetPositionY());
+ TC_LOG_ERROR("entities.transport", "GameObject (guidlow %d, entry %d) not created. Suggested coordinates aren't valid (X: %f Y: %f)", go->GetGUID().GetCounter(), go->GetEntry(), go->GetPositionX(), go->GetPositionY());
delete go;
return NULL;
}
@@ -451,7 +452,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu
pos.GetPosition(x, y, z, o);
CalculatePassengerPosition(x, y, z, &o);
- if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, phase, entry, x, y, z, o, nullptr, vehId))
+ if (!summon->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, phase, entry, x, y, z, o, nullptr, vehId))
{
delete summon;
return NULL;
@@ -703,6 +704,7 @@ void Transport::UpdatePassengerPositions(PassengerSet& passengers)
break;
case TYPEID_GAMEOBJECT:
GetMap()->GameObjectRelocation(passenger->ToGameObject(), x, y, z, o, false);
+ passenger->ToGameObject()->RelocateStationaryPosition(x, y, z, o);
break;
case TYPEID_DYNAMICOBJECT:
GetMap()->DynamicObjectRelocation(passenger->ToDynObject(), x, y, z, o);
diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h
index c56ceb1696d..3a2d0e4a7bd 100644
--- a/src/server/game/Entities/Transport/Transport.h
+++ b/src/server/game/Entities/Transport/Transport.h
@@ -27,7 +27,7 @@ struct CreatureData;
class Transport : public GameObject, public TransportBase
{
- friend Transport* TransportMgr::CreateTransport(uint32, uint32, Map*);
+ friend Transport* TransportMgr::CreateTransport(uint32, ObjectGuid::LowType, Map*);
Transport();
public:
@@ -35,7 +35,7 @@ class Transport : public GameObject, public TransportBase
~Transport();
- bool Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress);
+ bool Create(ObjectGuid::LowType guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress);
void CleanupsBeforeDelete(bool finalCleanup = true) override;
void Update(uint32 diff) override;
@@ -47,8 +47,8 @@ class Transport : public GameObject, public TransportBase
void RemovePassenger(WorldObject* passenger);
PassengerSet const& GetPassengers() const { return _passengers; }
- Creature* CreateNPCPassenger(uint32 guid, CreatureData const* data);
- GameObject* CreateGOPassenger(uint32 guid, GameObjectData const* data);
+ Creature* CreateNPCPassenger(ObjectGuid::LowType guid, CreatureData const* data);
+ GameObject* CreateGOPassenger(ObjectGuid::LowType guid, GameObjectData const* data);
/**
* @fn bool Transport::SummonPassenger(uint64, Position const&, TempSummonType, SummonPropertiesEntry const*, uint32, Unit*, uint32, uint32)
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index d02a22d43f4..277ead92df7 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -721,7 +721,7 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam
if (!victim->ToCreature()->hasLootRecipient())
victim->ToCreature()->SetLootRecipient(this);
- if (IsControlledByPlayer())
+ if (IsControlledByPlayer() || (ToTempSummon() && ToTempSummon()->GetSummoner() && ToTempSummon()->GetSummoner()->GetTypeId() == TYPEID_PLAYER))
victim->ToCreature()->LowerPlayerDamageReq(health < damage ? health : damage);
}
@@ -841,7 +841,7 @@ void Unit::CastSpell(SpellCastTargets const& targets, SpellInfo const* spellInfo
{
if (!spellInfo)
{
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell by caster: %s %u)", (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUIDLow() : GetEntry()));
+ TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell by caster: %s %u)", (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry()));
return;
}
@@ -869,7 +869,7 @@ void Unit::CastSpell(Unit* victim, uint32 spellId, TriggerCastFlags triggerFlags
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo)
{
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUIDLow() : GetEntry()));
+ TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry()));
return;
}
@@ -919,7 +919,7 @@ void Unit::CastCustomSpell(uint32 spellId, CustomSpellValues const& value, Unit*
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo)
{
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUIDLow() : GetEntry()));
+ TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry()));
return;
}
SpellCastTargets targets;
@@ -933,7 +933,7 @@ void Unit::CastSpell(float x, float y, float z, uint32 spellId, bool triggered,
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo)
{
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUIDLow() : GetEntry()));
+ TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry()));
return;
}
SpellCastTargets targets;
@@ -947,7 +947,7 @@ void Unit::CastSpell(GameObject* go, uint32 spellId, bool triggered, Item* castI
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo)
{
- TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUIDLow() : GetEntry()));
+ TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry()));
return;
}
SpellCastTargets targets;
@@ -1977,10 +1977,10 @@ void Unit::AttackerStateUpdate (Unit* victim, WeaponAttackType attType, bool ext
if (GetTypeId() == TYPEID_PLAYER)
TC_LOG_DEBUG("entities.unit", "AttackerStateUpdate: (Player) %u attacked %u (TypeId: %u) for %u dmg, absorbed %u, blocked %u, resisted %u.",
- GetGUIDLow(), victim->GetGUIDLow(), victim->GetTypeId(), damageInfo.damage, damageInfo.absorb, damageInfo.blocked_amount, damageInfo.resist);
+ GetGUID().GetCounter(), victim->GetGUID().GetCounter(), victim->GetTypeId(), damageInfo.damage, damageInfo.absorb, damageInfo.blocked_amount, damageInfo.resist);
else
TC_LOG_DEBUG("entities.unit", "AttackerStateUpdate: (NPC) %u attacked %u (TypeId: %u) for %u dmg, absorbed %u, blocked %u, resisted %u.",
- GetGUIDLow(), victim->GetGUIDLow(), victim->GetTypeId(), damageInfo.damage, damageInfo.absorb, damageInfo.blocked_amount, damageInfo.resist);
+ GetGUID().GetCounter(), victim->GetGUID().GetCounter(), victim->GetTypeId(), damageInfo.damage, damageInfo.absorb, damageInfo.blocked_amount, damageInfo.resist);
}
}
@@ -2257,9 +2257,9 @@ void Unit::SendMeleeAttackStop(Unit* victim)
TC_LOG_DEBUG("entities.unit", "WORLD: Sent SMSG_ATTACKSTOP");
if (victim)
- 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());
+ TC_LOG_DEBUG("entities.unit", "%s %u stopped attacking %s %u", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUID().GetCounter(), (victim->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), victim->GetGUID().GetCounter());
else
- TC_LOG_DEBUG("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"), GetGUID().GetCounter());
}
bool Unit::isSpellBlocked(Unit* victim, SpellInfo const* spellProto, WeaponAttackType attackType)
@@ -3520,7 +3520,7 @@ void Unit::_UnapplyAura(AuraApplication * aurApp, AuraRemoveMode removeMode)
else
++iter;
}
- ASSERT(false);
+ ABORT();
}
void Unit::_RemoveNoStackAurasDueToAura(Aura* aura)
@@ -3630,7 +3630,7 @@ void Unit::RemoveOwnedAura(Aura* aura, AuraRemoveMode removeMode)
}
}
- ASSERT(false);
+ ABORT();
}
Aura* Unit::GetOwnedAura(uint32 spellId, ObjectGuid casterGUID, ObjectGuid itemCasterGUID, uint8 reqEffMask, Aura* except) const
@@ -3908,20 +3908,27 @@ void Unit::RemoveAurasWithAttribute(uint32 flags)
void Unit::RemoveNotOwnSingleTargetAuras(uint32 newPhase)
{
// single target auras from other casters
- for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
+ // Iterate m_ownedAuras - aura is marked as single target in Unit::AddAura (and pushed to m_ownedAuras).
+ // m_appliedAuras will NOT contain the aura before first Unit::Update after adding it to m_ownedAuras.
+ // Quickly removing such an aura will lead to it not being unregistered from caster's single cast auras container
+ // leading to assertion failures if the aura was cast on a player that can
+ // (and is changing map at the point where this function is called).
+ // Such situation occurs when player is logging in inside an instance and fails the entry check for any reason.
+ // The aura that was loaded from db (indirectly, via linked casts) gets removed before it has a chance
+ // to register in m_appliedAuras
+ for (AuraMap::iterator iter = m_ownedAuras.begin(); iter != m_ownedAuras.end();)
{
- AuraApplication const* aurApp = iter->second;
- Aura const* aura = aurApp->GetBase();
+ Aura const* aura = iter->second;
- if (aura->GetCasterGUID() != GetGUID() && aura->GetSpellInfo()->IsSingleTarget())
+ if (aura->GetCasterGUID() != GetGUID() && aura->IsSingleTarget())
{
if (!newPhase)
- RemoveAura(iter);
+ RemoveOwnedAura(iter);
else
{
Unit* caster = aura->GetCaster();
if (!caster || !caster->InSamePhase(newPhase))
- RemoveAura(iter);
+ RemoveOwnedAura(iter);
else
++iter;
}
@@ -4181,7 +4188,7 @@ void Unit::DelayOwnedAuras(uint32 spellId, ObjectGuid caster, int32 delaytime)
// update for out of range group members (on 1 slot use)
aura->SetNeedClientUpdateForTargets();
- TC_LOG_DEBUG("spells", "Aura %u partially interrupted on unit %u, new duration: %u ms", aura->GetId(), GetGUIDLow(), aura->GetDuration());
+ TC_LOG_DEBUG("spells", "Aura %u partially interrupted on unit %u, new duration: %u ms", aura->GetId(), GetGUID().GetCounter(), aura->GetDuration());
}
}
}
@@ -7468,8 +7475,8 @@ bool Unit::HandleAuraProc(Unit* victim, uint32 damage, Aura* triggeredByAura, Sp
uint32 stack = triggeredByAura->GetStackAmount();
int32 const mod = (GetMap()->GetSpawnMode() & 1) ? 1500 : 1250;
int32 dmg = 0;
- for (uint8 i = 1; i < stack; ++i)
- dmg += mod * stack;
+ for (uint8 i = 1; i <= stack; ++i)
+ dmg += mod * i;
if (Unit* caster = triggeredByAura->GetCaster())
caster->CastCustomSpell(70701, SPELLVALUE_BASE_POINT0, dmg);
break;
@@ -8284,6 +8291,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
case 15337: // Improved Spirit Tap (Rank 1)
case 15338: // Improved Spirit Tap (Rank 2)
{
+ ASSERT(procSpell);
if (procSpell->SpellFamilyFlags[0] & 0x800000)
if ((procSpell->Id != 58381) || !roll_chance_i(50))
return false;
@@ -8545,7 +8553,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
// try detect target manually if not set
if (target == NULL)
- target = !(procFlags & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS)) && triggerEntry && triggerEntry->IsPositive() ? this : victim;
+ target = !(procFlags & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS)) && triggerEntry->IsPositive() ? this : victim;
if (basepoints0)
CastCustomSpell(target, trigger_spell_id, &basepoints0, NULL, NULL, true, castItem, triggeredByAura);
@@ -9450,7 +9458,7 @@ void Unit::SetMinion(Minion *minion, bool apply)
{
OutDebugInfo();
(*itr)->OutDebugInfo();
- ASSERT(false);
+ ABORT();
}
ASSERT((*itr)->GetTypeId() == TYPEID_UNIT);
@@ -9641,7 +9649,7 @@ Unit* Unit::GetMagicHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo)
&& _IsValidAttackTarget(magnet, spellInfo))
{
/// @todo handle this charge drop by proc in cast phase on explicit target
- if (victim && spellInfo->Speed > 0.0f)
+ if (spellInfo->Speed > 0.0f)
{
// Set up missile speed based delay
uint32 delay = uint32(std::floor(std::max<float>(victim->GetDistance(this), 5.0f) / spellInfo->Speed * 1000.0f));
@@ -12980,9 +12988,6 @@ void Unit::ModSpellCastTime(SpellInfo const* spellInfo, int32 & castTime, Spell*
if (!spellInfo || castTime < 0)
return;
- 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);
@@ -12996,6 +13001,25 @@ void Unit::ModSpellCastTime(SpellInfo const* spellInfo, int32 & castTime, Spell*
castTime = 500;
}
+void Unit::ModSpellDurationTime(SpellInfo const* spellInfo, int32 & duration, Spell* spell)
+{
+ if (!spellInfo || duration < 0)
+ return;
+
+ 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, duration, spell);
+
+ if (!(spellInfo->HasAttribute(SPELL_ATTR0_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL) || spellInfo->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS)) &&
+ ((GetTypeId() == TYPEID_PLAYER && spellInfo->SpellFamilyName) || GetTypeId() == TYPEID_UNIT))
+ duration = int32(float(duration) * GetFloatValue(UNIT_MOD_CAST_SPEED));
+ else if (spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO) && !spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG))
+ duration = int32(float(duration) * m_modAttackSpeedPct[RANGED_ATTACK]);
+}
+
DiminishingLevels Unit::GetDiminishing(DiminishingGroup group)
{
for (Diminishing::iterator i = m_Diminishing.begin(); i != m_Diminishing.end(); ++i)
@@ -13171,6 +13195,10 @@ bool Unit::IsInFeralForm() const
bool Unit::IsInDisallowedMountForm() const
{
+ if (SpellInfo const* transformSpellInfo = sSpellMgr->GetSpellInfo(getTransForm()))
+ if (transformSpellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_MOUNTED))
+ return false;
+
if (ShapeshiftForm form = GetShapeshiftForm())
{
SpellShapeshiftEntry const* shapeshift = sSpellShapeshiftStore.LookupEntry(form);
@@ -13418,7 +13446,7 @@ void Unit::SetLevel(uint8 lvl)
if (player->GetGroup())
player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_LEVEL);
- sWorld->UpdateCharacterNameDataLevel(GetGUID(), lvl);
+ sWorld->UpdateCharacterInfoLevel(GetGUID(), lvl);
}
}
@@ -13600,7 +13628,7 @@ void Unit::RemoveFromWorld()
if (GetCharmerGUID())
{
TC_LOG_FATAL("entities.unit", "Unit %u has charmer guid when removed from world", GetEntry());
- ASSERT(false);
+ ABORT();
}
if (Unit* owner = GetOwner())
@@ -13608,7 +13636,7 @@ void Unit::RemoveFromWorld()
if (owner->m_Controlled.find(this) != owner->m_Controlled.end())
{
TC_LOG_FATAL("entities.unit", "Unit %u is in controlled list of %u when removed from world", GetEntry(), owner->GetEntry());
- ASSERT(false);
+ ABORT();
}
}
@@ -13761,16 +13789,16 @@ void CharmInfo::InitPossessCreateSpells()
break;
}
- for (uint32 i = 0; i < CREATURE_MAX_SPELLS; ++i)
+ for (uint8 i = 0; i < CREATURE_MAX_SPELLS; ++i)
{
uint32 spellId = _unit->ToCreature()->m_spells[i];
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- if (spellInfo && !spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD))
+ if (spellInfo)
{
if (spellInfo->IsPassive())
_unit->CastSpell(_unit, spellInfo, true);
else
- AddSpellToActionBar(spellInfo, ACT_PASSIVE);
+ AddSpellToActionBar(spellInfo, ACT_PASSIVE, i % MAX_UNIT_ACTION_BAR_INDEX);
}
}
}
@@ -13793,7 +13821,7 @@ void CharmInfo::InitCharmCreateSpells()
uint32 spellId = _unit->ToCreature()->m_spells[x];
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- if (!spellInfo || spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD))
+ if (!spellInfo)
{
_charmspells[x].SetActionAndType(spellId, ACT_DISABLED);
continue;
@@ -13828,11 +13856,12 @@ void CharmInfo::InitCharmCreateSpells()
}
}
-bool CharmInfo::AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates newstate)
+bool CharmInfo::AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates newstate, uint8 preferredSlot)
{
uint32 spell_id = spellInfo->Id;
uint32 first_id = spellInfo->GetFirstRankSpell()->Id;
+ ASSERT(preferredSlot < MAX_UNIT_ACTION_BAR_INDEX);
// new spell rank can be already listed
for (uint8 i = 0; i < MAX_UNIT_ACTION_BAR_INDEX; ++i)
{
@@ -13849,9 +13878,10 @@ bool CharmInfo::AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates new
// or use empty slot in other case
for (uint8 i = 0; i < MAX_UNIT_ACTION_BAR_INDEX; ++i)
{
- if (!PetActionBar[i].GetAction() && PetActionBar[i].IsActionBarForSpell())
+ uint8 j = (preferredSlot + i) % MAX_UNIT_ACTION_BAR_INDEX;
+ if (!PetActionBar[j].GetAction() && PetActionBar[j].IsActionBarForSpell())
{
- SetActionBar(i, spell_id, newstate == ACT_DECIDE ? spellInfo->IsAutocastable() ? ACT_DISABLED : ACT_PASSIVE : newstate);
+ SetActionBar(j, spell_id, newstate == ACT_DECIDE ? spellInfo->IsAutocastable() ? ACT_DISABLED : ACT_PASSIVE : newstate);
return true;
}
}
@@ -14170,9 +14200,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u
continue;
// do checks using conditions table
- ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_SPELL_PROC, spellProto->Id);
- ConditionSourceInfo condInfo = ConditionSourceInfo(eventInfo.GetActor(), eventInfo.GetActionTarget());
- if (!sConditionMgr->IsObjectMeetToConditions(condInfo, conditions))
+ if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_SPELL_PROC, spellProto->Id, eventInfo.GetActor(), eventInfo.GetActionTarget()))
continue;
// AuraScript Hook
@@ -14641,6 +14669,9 @@ bool Unit::IsPolymorphed() const
void Unit::SetDisplayId(uint32 modelId)
{
SetUInt32Value(UNIT_FIELD_DISPLAYID, modelId);
+ // Set Gender by modelId
+ if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(modelId))
+ SetByteValue(UNIT_FIELD_BYTES_0, 2, minfo->gender);
}
void Unit::RestoreDisplayId()
@@ -15790,7 +15821,7 @@ void Unit::SetFeared(bool apply)
}
if (Player* player = ToPlayer())
- if(!player->HasUnitState(UNIT_STATE_POSSESSED))
+ if (!player->HasUnitState(UNIT_STATE_POSSESSED))
player->SetClientControl(this, !apply);
}
@@ -15832,11 +15863,11 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au
ASSERT(type != CHARM_TYPE_POSSESS || charmer->GetTypeId() == TYPEID_PLAYER);
ASSERT((type == CHARM_TYPE_VEHICLE) == IsVehicle());
- TC_LOG_DEBUG("entities.unit", "SetCharmedBy: charmer %u (GUID %u), charmed %u (GUID %u), type %u.", charmer->GetEntry(), charmer->GetGUIDLow(), GetEntry(), GetGUIDLow(), uint32(type));
+ TC_LOG_DEBUG("entities.unit", "SetCharmedBy: charmer %u (GUID %u), charmed %u (GUID %u), type %u.", charmer->GetEntry(), charmer->GetGUID().GetCounter(), GetEntry(), GetGUID().GetCounter(), uint32(type));
if (this == charmer)
{
- TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: Unit %u (GUID %u) is trying to charm itself!", GetEntry(), GetGUIDLow());
+ TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: Unit %u (GUID %u) is trying to charm itself!", GetEntry(), GetGUID().GetCounter());
return false;
}
@@ -15845,14 +15876,14 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au
if (GetTypeId() == TYPEID_PLAYER && ToPlayer()->GetTransport())
{
- TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: Player on transport is trying to charm %u (GUID %u)", GetEntry(), GetGUIDLow());
+ TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: Player on transport is trying to charm %u (GUID %u)", GetEntry(), GetGUID().GetCounter());
return false;
}
// Already charmed
if (GetCharmerGUID())
{
- TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: %u (GUID %u) has already been charmed but %u (GUID %u) is trying to charm it!", GetEntry(), GetGUIDLow(), charmer->GetEntry(), charmer->GetGUIDLow());
+ TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: %u (GUID %u) has already been charmed but %u (GUID %u) is trying to charm it!", GetEntry(), GetGUID().GetCounter(), charmer->GetEntry(), charmer->GetGUID().GetCounter());
return false;
}
@@ -15879,7 +15910,7 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au
// StopCastingCharm may remove a possessed pet?
if (!IsInWorld())
{
- TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: %u (GUID %u) is not in world but %u (GUID %u) is trying to charm it!", GetEntry(), GetGUIDLow(), charmer->GetEntry(), charmer->GetGUIDLow());
+ TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: %u (GUID %u) is not in world but %u (GUID %u) is trying to charm it!", GetEntry(), GetGUID().GetCounter(), charmer->GetEntry(), charmer->GetGUID().GetCounter());
return false;
}
@@ -15976,7 +16007,7 @@ void Unit::RemoveCharmedBy(Unit* charmer)
{
// TC_LOG_FATAL("entities.unit", "Unit::RemoveCharmedBy: this: " UI64FMTD " true charmer: " UI64FMTD " false charmer: " UI64FMTD,
// GetGUID(), GetCharmerGUID(), charmer->GetGUID());
-// ASSERT(false);
+// ABORT();
return;
}
@@ -16011,7 +16042,7 @@ void Unit::RemoveCharmedBy(Unit* charmer)
// Vehicle should not attack its passenger after he exists the seat
if (type != CHARM_TYPE_VEHICLE)
- LastCharmerGUID = charmer->GetGUID();
+ LastCharmerGUID = ASSERT_NOTNULL(charmer)->GetGUID();
}
// If charmer still exists
@@ -16873,9 +16904,7 @@ bool Unit::HandleSpellClick(Unit* clicker, int8 seatId)
continue;
//! Check database conditions
- ConditionList conds = sConditionMgr->GetConditionsForSpellClickEvent(spellClickEntry, itr->second.spellId);
- ConditionSourceInfo info = ConditionSourceInfo(clicker, this);
- if (!sConditionMgr->IsObjectMeetToConditions(info, conds))
+ if (!sConditionMgr->IsObjectMeetingSpellClickConditions(spellClickEntry, itr->second.spellId, clicker, this))
continue;
Unit* caster = (itr->second.castFlags & NPC_CLICK_CAST_CASTER_CLICKER) ? clicker : this;
@@ -16971,6 +17000,12 @@ void Unit::_EnterVehicle(Vehicle* vehicle, int8 seatId, AuraApplication const* a
}
}
+ // If vehicle flag for fixed position set (cannons), or if the following hardcoded units, then set state rooted
+ // 30236 | Argent Cannon
+ // 39759 | Tankbuster Cannon
+ if ((vehicle->GetVehicleInfo()->m_flags & VEHICLE_FLAG_FIXED_POSITION) || vehicle->GetBase()->GetEntry() == 30236 || vehicle->GetBase()->GetEntry() == 39759)
+ SetControlled(true, UNIT_STATE_ROOT);
+
ASSERT(!m_vehicle);
(void)vehicle->AddPassenger(this, seatId);
}
@@ -17273,7 +17308,7 @@ void Unit::SendChangeCurrentVictimOpcode(HostileReference* pHostileReference)
for (ThreatContainer::StorageType::const_iterator itr = tlist.begin(); itr != tlist.end(); ++itr)
{
data << (*itr)->getUnitGuid().WriteAsPacked();
- data << uint32((*itr)->getThreat());
+ data << uint32((*itr)->getThreat() * 100);
}
SendMessageToSet(&data, false);
}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 39b1c34be55..2ddbe398f76 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -898,6 +898,12 @@ public:
uint32 GetHitMask() const { return _hitMask; }
SpellInfo const* GetSpellInfo() const { return NULL; }
+ SpellInfo const* EnsureSpellInfo() const
+ {
+ SpellInfo const* spellInfo = GetSpellInfo();
+ ASSERT(spellInfo);
+ return spellInfo;
+ }
SpellSchoolMask GetSchoolMask() const { return SPELL_SCHOOL_MASK_NONE; }
DamageInfo* GetDamageInfo() const { return _damageInfo; }
@@ -1119,7 +1125,7 @@ struct CharmInfo
void InitEmptyActionBar(bool withAttack = true);
//return true if successful
- bool AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates newstate = ACT_DECIDE);
+ bool AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates newstate = ACT_DECIDE, uint8 preferredSlot = 0);
bool RemoveSpellFromActionBar(uint32 spell_id);
void LoadPetActionBar(const std::string& data);
void BuildActionBar(WorldPacket* data);
@@ -1395,6 +1401,7 @@ class Unit : public WorldObject
void DealDamageMods(Unit* victim, uint32 &damage, uint32* absorb);
uint32 DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDamage = NULL, DamageEffectType damagetype = DIRECT_DAMAGE, SpellSchoolMask damageSchoolMask = SPELL_SCHOOL_MASK_NORMAL, SpellInfo const* spellProto = NULL, bool durabilityLoss = true);
void Kill(Unit* victim, bool durabilityLoss = true);
+ void KillSelf(bool durabilityLoss = true) { Kill(this, durabilityLoss); }
int32 DealHeal(Unit* victim, uint32 addhealth);
void ProcDamageAndSpell(Unit* victim, uint32 procAttacker, uint32 procVictim, uint32 procEx, uint32 amount, WeaponAttackType attType = BASE_ATTACK, SpellInfo const* procSpell = NULL, SpellInfo const* procAura = NULL);
@@ -1982,6 +1989,7 @@ class Unit : public WorldObject
int32 CalcSpellDuration(SpellInfo const* spellProto);
int32 ModSpellDuration(SpellInfo const* spellProto, Unit const* target, int32 duration, bool positive, uint32 effectMask);
void ModSpellCastTime(SpellInfo const* spellProto, int32& castTime, Spell* spell = NULL);
+ void ModSpellDurationTime(SpellInfo const* spellProto, int32& castTime, Spell* spell = NULL);
float CalculateLevelPenalty(SpellInfo const* spellProto) const;
void addFollower(FollowerReference* pRef) { m_FollowingRefManager.insertFirst(pRef); }
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp
index b6f9534ac51..982b931fd4f 100755
--- a/src/server/game/Entities/Vehicle/Vehicle.cpp
+++ b/src/server/game/Entities/Vehicle/Vehicle.cpp
@@ -115,12 +115,12 @@ void Vehicle::Uninstall()
if (_status == STATUS_UNINSTALLING && !GetBase()->HasUnitTypeMask(UNIT_MASK_MINION))
{
TC_LOG_ERROR("entities.vehicle", "Vehicle GuidLow: %u, Entry: %u attempts to uninstall, but already has STATUS_UNINSTALLING! "
- "Check Uninstall/PassengerBoarded script hooks for errors.", _me->GetGUIDLow(), _me->GetEntry());
+ "Check Uninstall/PassengerBoarded script hooks for errors.", _me->GetGUID().GetCounter(), _me->GetEntry());
return;
}
_status = STATUS_UNINSTALLING;
- TC_LOG_DEBUG("entities.vehicle", "Vehicle::Uninstall Entry: %u, GuidLow: %u", _creatureEntry, _me->GetGUIDLow());
+ TC_LOG_DEBUG("entities.vehicle", "Vehicle::Uninstall Entry: %u, GuidLow: %u", _creatureEntry, _me->GetGUID().GetCounter());
RemoveAllPassengers();
if (GetBase()->GetTypeId() == TYPEID_UNIT)
@@ -143,7 +143,7 @@ void Vehicle::Reset(bool evading /*= false*/)
if (GetBase()->GetTypeId() != TYPEID_UNIT)
return;
- TC_LOG_DEBUG("entities.vehicle", "Vehicle::Reset (Entry: %u, GuidLow: %u, DBGuid: %u)", GetCreatureEntry(), _me->GetGUIDLow(), _me->ToCreature()->GetDBTableGUIDLow());
+ TC_LOG_DEBUG("entities.vehicle", "Vehicle::Reset (Entry: %u, GuidLow: %u, DBGuid: %u)", GetCreatureEntry(), _me->GetGUID().GetCounter(), _me->ToCreature()->GetSpawnId());
ApplyAllImmunities();
InstallAllAccessories(evading);
@@ -192,6 +192,12 @@ void Vehicle::ApplyAllImmunities()
_me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, true);
}
+ // If vehicle flag for fixed position set (cannons), or if the following hardcoded units, then set state rooted
+ // 30236 | Argent Cannon
+ // 39759 | Tankbuster Cannon
+ if ((GetVehicleInfo()->m_flags & VEHICLE_FLAG_FIXED_POSITION) || GetBase()->GetEntry() == 30236 || GetBase()->GetEntry() == 39759)
+ _me->SetControlled(true, UNIT_STATE_ROOT);
+
// Different immunities for vehicles goes below
switch (GetVehicleInfo()->m_ID)
{
@@ -221,7 +227,7 @@ void Vehicle::ApplyAllImmunities()
void Vehicle::RemoveAllPassengers()
{
- TC_LOG_DEBUG("entities.vehicle", "Vehicle::RemoveAllPassengers. Entry: %u, GuidLow: %u", _creatureEntry, _me->GetGUIDLow());
+ TC_LOG_DEBUG("entities.vehicle", "Vehicle::RemoveAllPassengers. Entry: %u, GuidLow: %u", _creatureEntry, _me->GetGUID().GetCounter());
/// Setting to_Abort to true will cause @VehicleJoinEvent::Abort to be executed on next @Unit::UpdateEvents call
/// This will properly "reset" the pending join process for the passenger.
@@ -358,13 +364,13 @@ void Vehicle::InstallAccessory(uint32 entry, int8 seatId, bool minion, uint8 typ
if (_status == STATUS_UNINSTALLING)
{
TC_LOG_ERROR("entities.vehicle", "Vehicle (GuidLow: %u, DB GUID: %u, Entry: %u) attempts to install accessory (Entry: %u) on seat %d with STATUS_UNINSTALLING! "
- "Check Uninstall/PassengerBoarded script hooks for errors.", _me->GetGUIDLow(),
- (_me->GetTypeId() == TYPEID_UNIT ? _me->ToCreature()->GetDBTableGUIDLow() : _me->GetGUIDLow()), GetCreatureEntry(), entry, (int32)seatId);
+ "Check Uninstall/PassengerBoarded script hooks for errors.", _me->GetGUID().GetCounter(),
+ (_me->GetTypeId() == TYPEID_UNIT ? _me->ToCreature()->GetSpawnId() : _me->GetGUID().GetCounter()), GetCreatureEntry(), entry, (int32)seatId);
return;
}
TC_LOG_DEBUG("entities.vehicle", "Vehicle (GuidLow: %u, DB Guid: %u, Entry %u): installing accessory (Entry: %u) on seat: %d",
- _me->GetGUIDLow(), (_me->GetTypeId() == TYPEID_UNIT ? _me->ToCreature()->GetDBTableGUIDLow() : _me->GetGUIDLow()), GetCreatureEntry(),
+ _me->GetGUID().GetCounter(), (_me->GetTypeId() == TYPEID_UNIT ? _me->ToCreature()->GetSpawnId() : _me->GetGUID().GetCounter()), GetCreatureEntry(),
entry, (int32)seatId);
TempSummon* accessory = _me->SummonCreature(entry, *_me, TempSummonType(type), summonTime);
@@ -399,13 +405,13 @@ bool Vehicle::AddPassenger(Unit* unit, int8 seatId)
if (_status == STATUS_UNINSTALLING)
{
TC_LOG_ERROR("entities.vehicle", "Passenger GuidLow: %u, Entry: %u, attempting to board vehicle GuidLow: %u, Entry: %u during uninstall! SeatId: %d",
- unit->GetGUIDLow(), unit->GetEntry(), _me->GetGUIDLow(), _me->GetEntry(), (int32)seatId);
+ unit->GetGUID().GetCounter(), unit->GetEntry(), _me->GetGUID().GetCounter(), _me->GetEntry(), (int32)seatId);
return false;
}
TC_LOG_DEBUG("entities.vehicle", "Unit %s scheduling enter vehicle (entry: %u, vehicleId: %u, guid: %u (dbguid: %u) on seat %d",
- unit->GetName().c_str(), _me->GetEntry(), _vehicleInfo->m_ID, _me->GetGUIDLow(),
- (_me->GetTypeId() == TYPEID_UNIT ? _me->ToCreature()->GetDBTableGUIDLow() : 0), (int32)seatId);
+ unit->GetName().c_str(), _me->GetEntry(), _vehicleInfo->m_ID, _me->GetGUID().GetCounter(),
+ (_me->GetTypeId() == TYPEID_UNIT ? _me->ToCreature()->GetSpawnId() : 0), (int32)seatId);
// The seat selection code may kick other passengers off the vehicle.
// While the validity of the following may be arguable, it is possible that when such a passenger
@@ -474,7 +480,7 @@ Vehicle* Vehicle::RemovePassenger(Unit* unit)
ASSERT(seat != Seats.end());
TC_LOG_DEBUG("entities.vehicle", "Unit %s exit vehicle entry %u id %u dbguid %u seat %d",
- unit->GetName().c_str(), _me->GetEntry(), _vehicleInfo->m_ID, _me->GetGUIDLow(), (int32)seat->first);
+ unit->GetName().c_str(), _me->GetEntry(), _vehicleInfo->m_ID, _me->GetGUID().GetCounter(), (int32)seat->first);
if (seat->second.SeatInfo->CanEnterOrExit() && ++UsableSeatNum)
_me->SetFlag(UNIT_NPC_FLAGS, (_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK));
@@ -849,7 +855,7 @@ void VehicleJoinEvent::Abort(uint64)
if (Target)
{
TC_LOG_DEBUG("entities.vehicle", "Passenger GuidLow: %u, Entry: %u, board on vehicle GuidLow: %u, Entry: %u SeatId: %d cancelled",
- Passenger->GetGUIDLow(), Passenger->GetEntry(), Target->GetBase()->GetGUIDLow(), Target->GetBase()->GetEntry(), (int32)Seat->first);
+ Passenger->GetGUID().GetCounter(), Passenger->GetEntry(), Target->GetBase()->GetGUID().GetCounter(), Target->GetBase()->GetEntry(), (int32)Seat->first);
/// @SPELL_AURA_CONTROL_VEHICLE auras can be applied even when the passenger is not (yet) on the vehicle.
/// When this code is triggered it means that something went wrong in @Vehicle::AddPassenger, and we should remove
@@ -858,7 +864,7 @@ void VehicleJoinEvent::Abort(uint64)
}
else
TC_LOG_DEBUG("entities.vehicle", "Passenger GuidLow: %u, Entry: %u, board on uninstalled vehicle SeatId: %d cancelled",
- Passenger->GetGUIDLow(), Passenger->GetEntry(), (int32)Seat->first);
+ Passenger->GetGUID().GetCounter(), Passenger->GetEntry(), (int32)Seat->first);
if (Passenger->IsInWorld() && Passenger->HasUnitTypeMask(UNIT_MASK_ACCESSORY))
Passenger->ToCreature()->DespawnOrUnsummon();
diff --git a/src/server/game/Entities/Vehicle/VehicleDefines.h b/src/server/game/Entities/Vehicle/VehicleDefines.h
index c00bc429f38..3726e9ddf8f 100644
--- a/src/server/game/Entities/Vehicle/VehicleDefines.h
+++ b/src/server/game/Entities/Vehicle/VehicleDefines.h
@@ -44,7 +44,8 @@ enum VehicleFlags
VEHICLE_FLAG_FULLSPEEDPITCHING = 0x00000020, // Sets MOVEFLAG2_FULLSPEEDPITCHING
VEHICLE_FLAG_CUSTOM_PITCH = 0x00000040, // If set use pitchMin and pitchMax from DBC, otherwise pitchMin = -pi/2, pitchMax = pi/2
VEHICLE_FLAG_ADJUST_AIM_ANGLE = 0x00000400, // Lua_IsVehicleAimAngleAdjustable
- VEHICLE_FLAG_ADJUST_AIM_POWER = 0x00000800 // Lua_IsVehicleAimPowerAdjustable
+ VEHICLE_FLAG_ADJUST_AIM_POWER = 0x00000800, // Lua_IsVehicleAimPowerAdjustable
+ VEHICLE_FLAG_FIXED_POSITION = 0x00200000 // Used for cannons, when they should be rooted
};
enum VehicleSpells
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp
index 2264612f89b..9e5e7ff9990 100644
--- a/src/server/game/Events/GameEventMgr.cpp
+++ b/src/server/game/Events/GameEventMgr.cpp
@@ -371,7 +371,7 @@ void GameEventMgr::LoadFromDB()
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
int16 event_id = fields[1].GetInt8();
int32 internal_event_id = mGameEvent.size() + event_id - 1;
@@ -417,7 +417,7 @@ void GameEventMgr::LoadFromDB()
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
int16 event_id = fields[1].GetInt8();
int32 internal_event_id = mGameEvent.size() + event_id - 1;
@@ -463,7 +463,7 @@ void GameEventMgr::LoadFromDB()
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
uint32 entry = fields[1].GetUInt32();
uint16 event_id = fields[2].GetUInt8();
@@ -712,7 +712,7 @@ void GameEventMgr::LoadFromDB()
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
uint16 event_id = fields[1].GetUInt8();
uint32 npcflag = fields[2].GetUInt32();
@@ -798,7 +798,7 @@ void GameEventMgr::LoadFromDB()
NPCVendorList& vendors = mGameEventVendors[event_id];
NPCVendorEntry newEntry;
- uint32 guid = fields[1].GetUInt32();
+ ObjectGuid::LowType guid = fields[1].GetUInt32();
newEntry.item = fields[2].GetUInt32();
newEntry.maxcount = fields[3].GetUInt32();
newEntry.incrtime = fields[4].GetUInt32();
@@ -917,7 +917,7 @@ void GameEventMgr::LoadFromDB()
uint32 GameEventMgr::GetNPCFlag(Creature* cr)
{
uint32 mask = 0;
- uint32 guid = cr->GetDBTableGUIDLow();
+ ObjectGuid::LowType guid = cr->GetSpawnId();
for (ActiveEvents::iterator e_itr = m_ActiveEvents.begin(); e_itr != m_ActiveEvents.end(); ++e_itr)
{
@@ -1115,25 +1115,34 @@ void GameEventMgr::ApplyNewEvent(uint16 event_id)
void GameEventMgr::UpdateEventNPCFlags(uint16 event_id)
{
+ std::unordered_map<uint32, std::unordered_set<ObjectGuid::LowType>> creaturesByMap;
+
// go through the creatures whose npcflags are changed in the event
for (NPCFlagList::iterator itr = mGameEventNPCFlags[event_id].begin(); itr != mGameEventNPCFlags[event_id].end(); ++itr)
- {
// get the creature data from the low guid to get the entry, to be able to find out the whole guid
if (CreatureData const* data = sObjectMgr->GetCreatureData(itr->first))
+ creaturesByMap[data->mapid].insert(itr->first);
+
+ for (auto const& p : creaturesByMap)
+ {
+ sMapMgr->DoForAllMapsWithMapId(p.first, [this, &p](Map* map)
{
- Creature* cr = HashMapHolder<Creature>::Find(ObjectGuid(HIGHGUID_UNIT, data->id, itr->first));
- // if we found the creature, modify its npcflag
- if (cr)
+ for (auto& spawnId : p.second)
{
- uint32 npcflag = GetNPCFlag(cr);
- if (const CreatureTemplate* ci = cr->GetCreatureTemplate())
- npcflag |= ci->npcflag;
- cr->SetUInt32Value(UNIT_NPC_FLAGS, npcflag);
- // reset gossip options, since the flag change might have added / removed some
- //cr->ResetGossipOptions();
+ auto creatureBounds = map->GetCreatureBySpawnIdStore().equal_range(spawnId);
+ for (auto itr = creatureBounds.first; itr != creatureBounds.second; ++itr)
+ {
+ Creature* creature = itr->second;
+ uint32 npcflag = GetNPCFlag(creature);
+ if (CreatureTemplate const* creatureTemplate = creature->GetCreatureTemplate())
+ npcflag |= creatureTemplate->npcflag;
+
+ creature->SetUInt32Value(UNIT_NPC_FLAGS, npcflag);
+ // reset gossip options, since the flag change might have added / removed some
+ //cr->ResetGossipOptions();
+ }
}
- // if we didn't find it, then the npcflag will be updated when the creature is loaded
- }
+ });
}
}
@@ -1252,8 +1261,16 @@ void GameEventMgr::GameEventUnspawn(int16 event_id)
{
sObjectMgr->RemoveCreatureFromGrid(*itr, data);
- if (Creature* creature = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_UNIT, data->id, *itr), (Creature*)NULL))
- creature->AddObjectToRemoveList();
+ sMapMgr->DoForAllMapsWithMapId(data->mapid, [&itr](Map* map)
+ {
+ auto creatureBounds = map->GetCreatureBySpawnIdStore().equal_range(*itr);
+ for (auto itr2 = creatureBounds.first; itr2 != creatureBounds.second;)
+ {
+ Creature* creature = itr2->second;
+ ++itr2;
+ creature->AddObjectToRemoveList();
+ }
+ });
}
}
@@ -1274,8 +1291,16 @@ void GameEventMgr::GameEventUnspawn(int16 event_id)
{
sObjectMgr->RemoveGameobjectFromGrid(*itr, data);
- if (GameObject* pGameobject = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_GAMEOBJECT, data->id, *itr), (GameObject*)NULL))
- pGameobject->AddObjectToRemoveList();
+ sMapMgr->DoForAllMapsWithMapId(data->mapid, [&itr](Map* map)
+ {
+ auto gameobjectBounds = map->GetGameObjectBySpawnIdStore().equal_range(*itr);
+ for (auto itr2 = gameobjectBounds.first; itr2 != gameobjectBounds.second;)
+ {
+ GameObject* go = itr2->second;
+ ++itr2;
+ go->AddObjectToRemoveList();
+ }
+ });
}
}
if (internal_event_id < 0 || internal_event_id >= int32(mGameEventPoolIds.size()))
@@ -1300,53 +1325,43 @@ void GameEventMgr::ChangeEquipOrModel(int16 event_id, bool activate)
continue;
// Update if spawned
- Creature* creature = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_UNIT, data->id, itr->first), (Creature*)NULL);
- if (creature)
+ sMapMgr->DoForAllMapsWithMapId(data->mapid, [&itr, activate](Map* map)
+
{
- if (activate)
+ auto creatureBounds = map->GetCreatureBySpawnIdStore().equal_range(itr->first);
+ for (auto itr2 = creatureBounds.first; itr2 != creatureBounds.second; ++itr2)
{
- itr->second.equipement_id_prev = creature->GetCurrentEquipmentId();
- itr->second.modelid_prev = creature->GetDisplayId();
- creature->LoadEquipment(itr->second.equipment_id, true);
- if (itr->second.modelid > 0 && itr->second.modelid_prev != itr->second.modelid &&
- sObjectMgr->GetCreatureModelInfo(itr->second.modelid))
+ Creature* creature = itr2->second;
+ if (activate)
{
- creature->SetDisplayId(itr->second.modelid);
- creature->SetNativeDisplayId(itr->second.modelid);
+ itr->second.equipement_id_prev = creature->GetCurrentEquipmentId();
+ itr->second.modelid_prev = creature->GetDisplayId();
+ creature->LoadEquipment(itr->second.equipment_id, true);
+ if (itr->second.modelid > 0 && itr->second.modelid_prev != itr->second.modelid &&
+ sObjectMgr->GetCreatureModelInfo(itr->second.modelid))
+ {
+ creature->SetDisplayId(itr->second.modelid);
+ creature->SetNativeDisplayId(itr->second.modelid);
+ }
}
- }
- else
- {
- creature->LoadEquipment(itr->second.equipement_id_prev, true);
- if (itr->second.modelid_prev > 0 && itr->second.modelid_prev != itr->second.modelid &&
- sObjectMgr->GetCreatureModelInfo(itr->second.modelid_prev))
+ else
{
- creature->SetDisplayId(itr->second.modelid_prev);
- creature->SetNativeDisplayId(itr->second.modelid_prev);
+ creature->LoadEquipment(itr->second.equipement_id_prev, true);
+ if (itr->second.modelid_prev > 0 && itr->second.modelid_prev != itr->second.modelid &&
+ sObjectMgr->GetCreatureModelInfo(itr->second.modelid_prev))
+ {
+ creature->SetDisplayId(itr->second.modelid_prev);
+ creature->SetNativeDisplayId(itr->second.modelid_prev);
+ }
}
}
- }
- else // If not spawned
- {
- CreatureData const* data2 = sObjectMgr->GetCreatureData(itr->first);
- if (data2 && activate)
- {
- CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(data2->id);
- uint32 displayID = ObjectMgr::ChooseDisplayId(cinfo, data2);
- sObjectMgr->GetCreatureModelRandomGender(&displayID);
-
- if (data2->equipmentId == 0)
- itr->second.equipement_id_prev = 0; ///@todo: verify this line
- else if (data2->equipmentId != -1)
- itr->second.equipement_id_prev = data->equipmentId;
- itr->second.modelid_prev = displayID;
- }
- }
+ });
// now last step: put in data
- // just to have write access to it
CreatureData& data2 = sObjectMgr->NewOrExistCreatureData(itr->first);
if (activate)
{
+ itr->second.modelid_prev = data2.displayid;
+ itr->second.equipement_id_prev = data2.equipmentId;
data2.displayid = itr->second.modelid;
data2.equipmentId = itr->second.equipment_id;
}
@@ -1385,7 +1400,7 @@ bool GameEventMgr::hasGameObjectQuestActiveEventExcept(uint32 quest_id, uint16 e
}
return false;
}
-bool GameEventMgr::hasCreatureActiveEventExcept(uint32 creature_id, uint16 event_id)
+bool GameEventMgr::hasCreatureActiveEventExcept(ObjectGuid::LowType creature_id, uint16 event_id)
{
for (ActiveEvents::iterator e_itr = m_ActiveEvents.begin(); e_itr != m_ActiveEvents.end(); ++e_itr)
{
@@ -1401,7 +1416,7 @@ bool GameEventMgr::hasCreatureActiveEventExcept(uint32 creature_id, uint16 event
}
return false;
}
-bool GameEventMgr::hasGameObjectActiveEventExcept(uint32 go_id, uint16 event_id)
+bool GameEventMgr::hasGameObjectActiveEventExcept(ObjectGuid::LowType go_id, uint16 event_id)
{
for (ActiveEvents::iterator e_itr = m_ActiveEvents.begin(); e_itr != m_ActiveEvents.end(); ++e_itr)
{
@@ -1594,24 +1609,43 @@ void GameEventMgr::SendWorldStateUpdate(Player* player, uint16 event_id)
}
}
-void GameEventMgr::RunSmartAIScripts(uint16 event_id, bool activate)
+class GameEventAIHookWorker
{
- //! Iterate over every supported source type (creature and gameobject)
- //! Not entirely sure how this will affect units in non-loaded grids.
+public:
+ GameEventAIHookWorker(uint16 eventId, bool activate) : _eventId(eventId), _activate(activate) { }
+
+ void Visit(std::unordered_map<ObjectGuid, Creature*>& creatureMap)
{
- boost::shared_lock<boost::shared_mutex> lock(*HashMapHolder<Creature>::GetLock());
- HashMapHolder<Creature>::MapType const& m = ObjectAccessor::GetCreatures();
- for (HashMapHolder<Creature>::MapType::const_iterator iter = m.begin(); iter != m.end(); ++iter)
- if (iter->second->IsInWorld())
- iter->second->AI()->sOnGameEvent(activate, event_id);
+ for (auto const& p : creatureMap)
+ if (p.second->IsInWorld() && p.second->IsAIEnabled)
+ p.second->AI()->sOnGameEvent(_activate, _eventId);
}
+
+ void Visit(std::unordered_map<ObjectGuid, GameObject*>& gameObjectMap)
{
- boost::shared_lock<boost::shared_mutex> lock(*HashMapHolder<GameObject>::GetLock());
- HashMapHolder<GameObject>::MapType const& m = ObjectAccessor::GetGameObjects();
- for (HashMapHolder<GameObject>::MapType::const_iterator iter = m.begin(); iter != m.end(); ++iter)
- if (iter->second->IsInWorld())
- iter->second->AI()->OnGameEvent(activate, event_id);
+ for (auto const& p : gameObjectMap)
+ if (p.second->IsInWorld())
+ p.second->AI()->OnGameEvent(_activate, _eventId);
}
+
+ template<class T>
+ void Visit(std::unordered_map<ObjectGuid, T*>&) { }
+
+private:
+ uint16 _eventId;
+ bool _activate;
+};
+
+void GameEventMgr::RunSmartAIScripts(uint16 event_id, bool activate)
+{
+ //! Iterate over every supported source type (creature and gameobject)
+ //! Not entirely sure how this will affect units in non-loaded grids.
+ sMapMgr->DoForAllMaps([event_id, activate](Map* map)
+ {
+ GameEventAIHookWorker worker(event_id, activate);
+ TypeContainerVisitor<GameEventAIHookWorker, MapStoredObjectTypesContainer> visitor(worker);
+ visitor.Visit(map->GetObjectsStore());
+ });
}
uint16 GameEventMgr::GetEventIdForQuest(Quest const* quest) const
diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h
index eb29e463a4d..57f30eb4015 100644
--- a/src/server/game/Events/GameEventMgr.h
+++ b/src/server/game/Events/GameEventMgr.h
@@ -20,6 +20,7 @@
#define TRINITY_GAMEEVENT_MGR_H
#include "Common.h"
+#include "ObjectGuid.h"
#include "SharedDefines.h"
#include "Define.h"
@@ -144,14 +145,14 @@ class GameEventMgr
void SaveWorldEventStateToDB(uint16 event_id);
bool hasCreatureQuestActiveEventExcept(uint32 quest_id, uint16 event_id);
bool hasGameObjectQuestActiveEventExcept(uint32 quest_id, uint16 event_id);
- bool hasCreatureActiveEventExcept(uint32 creature_guid, uint16 event_id);
- bool hasGameObjectActiveEventExcept(uint32 go_guid, uint16 event_id);
+ bool hasCreatureActiveEventExcept(ObjectGuid::LowType creature_guid, uint16 event_id);
+ bool hasGameObjectActiveEventExcept(ObjectGuid::LowType go_guid, uint16 event_id);
- typedef std::list<uint32> GuidList;
+ typedef std::list<ObjectGuid::LowType> GuidList;
typedef std::list<uint32> IdList;
typedef std::vector<GuidList> GameEventGuidMap;
typedef std::vector<IdList> GameEventIdMap;
- typedef std::pair<uint32, ModelEquip> ModelEquipPair;
+ typedef std::pair<ObjectGuid::LowType, ModelEquip> ModelEquipPair;
typedef std::list<ModelEquipPair> ModelEquipList;
typedef std::vector<ModelEquipList> GameEventModelEquipMap;
typedef std::pair<uint32, uint32> QuestRelation;
@@ -160,7 +161,7 @@ class GameEventMgr
typedef std::list<NPCVendorEntry> NPCVendorList;
typedef std::vector<NPCVendorList> GameEventNPCVendorMap;
typedef std::map<uint32 /*quest id*/, GameEventQuestToEventConditionNum> QuestIdToEventConditionMap;
- typedef std::pair<uint32 /*guid*/, uint32 /*npcflag*/> GuidNPCFlagPair;
+ typedef std::pair<ObjectGuid::LowType /*guid*/, uint32 /*npcflag*/> GuidNPCFlagPair;
typedef std::list<GuidNPCFlagPair> NPCFlagList;
typedef std::vector<NPCFlagList> GameEventNPCFlagMap;
typedef std::vector<uint32> GameEventBitmask;
diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp
index 35d6ba91401..ca974ba9a37 100644
--- a/src/server/game/Globals/ObjectAccessor.cpp
+++ b/src/server/game/Globals/ObjectAccessor.cpp
@@ -28,99 +28,61 @@
#include "ObjectMgr.h"
#include "Pet.h"
#include "Player.h"
+#include "Transport.h"
#include "World.h"
#include <boost/thread/shared_mutex.hpp>
#include <boost/thread/locks.hpp>
-ObjectAccessor::ObjectAccessor() { }
-
-ObjectAccessor::~ObjectAccessor() { }
-
-template<class T> T* ObjectAccessor::GetObjectInWorld(uint32 mapid, float x, float y, ObjectGuid guid, T* /*fake*/)
-{
- T* obj = HashMapHolder<T>::Find(guid);
- if (!obj || obj->GetMapId() != mapid)
- return NULL;
-
- CellCoord p = Trinity::ComputeCellCoord(x, y);
- if (!p.IsCoordValid())
- {
- TC_LOG_ERROR("misc", "ObjectAccessor::GetObjectInWorld: invalid coordinates supplied X:%f Y:%f grid cell [%u:%u]", x, y, p.x_coord, p.y_coord);
- return NULL;
- }
-
- CellCoord q = Trinity::ComputeCellCoord(obj->GetPositionX(), obj->GetPositionY());
- if (!q.IsCoordValid())
- {
- TC_LOG_ERROR("misc", "ObjectAccessor::GetObjecInWorld: object (GUID: %u TypeId: %u) has invalid coordinates X:%f Y:%f grid cell [%u:%u]", obj->GetGUIDLow(), obj->GetTypeId(), obj->GetPositionX(), obj->GetPositionY(), q.x_coord, q.y_coord);
- return NULL;
- }
-
- int32 dx = int32(p.x_coord) - int32(q.x_coord);
- int32 dy = int32(p.y_coord) - int32(q.y_coord);
-
- if (dx > -2 && dx < 2 && dy > -2 && dy < 2)
- return obj;
- else
- return NULL;
-}
-
-Player* ObjectAccessor::GetObjectInWorld(ObjectGuid guid, Player* /*typeSpecifier*/)
-{
- Player* player = HashMapHolder<Player>::Find(guid);
- return player && player->IsInWorld() ? player : NULL;
-}
-
-WorldObject* ObjectAccessor::GetWorldObject(WorldObject const& p, ObjectGuid guid)
+WorldObject* ObjectAccessor::GetWorldObject(WorldObject const& p, ObjectGuid const& guid)
{
switch (guid.GetHigh())
{
- case HIGHGUID_PLAYER: return GetPlayer(p, guid);
- case HIGHGUID_TRANSPORT:
- case HIGHGUID_MO_TRANSPORT:
- case HIGHGUID_GAMEOBJECT: return GetGameObject(p, guid);
- case HIGHGUID_VEHICLE:
- case HIGHGUID_UNIT: return GetCreature(p, guid);
- case HIGHGUID_PET: return GetPet(p, guid);
- case HIGHGUID_DYNAMICOBJECT: return GetDynamicObject(p, guid);
- case HIGHGUID_CORPSE: return GetCorpse(p, guid);
+ case HighGuid::Player: return GetPlayer(p, guid);
+ case HighGuid::Transport:
+ case HighGuid::Mo_Transport:
+ case HighGuid::GameObject: return GetGameObject(p, guid);
+ case HighGuid::Vehicle:
+ case HighGuid::Unit: return GetCreature(p, guid);
+ case HighGuid::Pet: return GetPet(p, guid);
+ case HighGuid::DynamicObject: return GetDynamicObject(p, guid);
+ case HighGuid::Corpse: return GetCorpse(p, guid);
default: return NULL;
}
}
-Object* ObjectAccessor::GetObjectByTypeMask(WorldObject const& p, ObjectGuid guid, uint32 typemask)
+Object* ObjectAccessor::GetObjectByTypeMask(WorldObject const& p, ObjectGuid const& guid, uint32 typemask)
{
switch (guid.GetHigh())
{
- case HIGHGUID_ITEM:
+ case HighGuid::Item:
if (typemask & TYPEMASK_ITEM && p.GetTypeId() == TYPEID_PLAYER)
return ((Player const&)p).GetItemByGuid(guid);
break;
- case HIGHGUID_PLAYER:
+ case HighGuid::Player:
if (typemask & TYPEMASK_PLAYER)
return GetPlayer(p, guid);
break;
- case HIGHGUID_TRANSPORT:
- case HIGHGUID_MO_TRANSPORT:
- case HIGHGUID_GAMEOBJECT:
+ case HighGuid::Transport:
+ case HighGuid::Mo_Transport:
+ case HighGuid::GameObject:
if (typemask & TYPEMASK_GAMEOBJECT)
return GetGameObject(p, guid);
break;
- case HIGHGUID_UNIT:
- case HIGHGUID_VEHICLE:
+ case HighGuid::Unit:
+ case HighGuid::Vehicle:
if (typemask & TYPEMASK_UNIT)
return GetCreature(p, guid);
break;
- case HIGHGUID_PET:
+ case HighGuid::Pet:
if (typemask & TYPEMASK_UNIT)
return GetPet(p, guid);
break;
- case HIGHGUID_DYNAMICOBJECT:
+ case HighGuid::DynamicObject:
if (typemask & TYPEMASK_DYNAMICOBJECT)
return GetDynamicObject(p, guid);
break;
- case HIGHGUID_CORPSE:
+ case HighGuid::Corpse:
break;
default:
break;
@@ -129,51 +91,62 @@ Object* ObjectAccessor::GetObjectByTypeMask(WorldObject const& p, ObjectGuid gui
return NULL;
}
-Corpse* ObjectAccessor::GetCorpse(WorldObject const& u, ObjectGuid guid)
+Corpse* ObjectAccessor::GetCorpse(WorldObject const& u, ObjectGuid const& guid)
{
- return GetObjectInMap(guid, u.GetMap(), (Corpse*)NULL);
+ return u.GetMap()->GetCorpse(guid);
}
-GameObject* ObjectAccessor::GetGameObject(WorldObject const& u, ObjectGuid guid)
+GameObject* ObjectAccessor::GetGameObject(WorldObject const& u, ObjectGuid const& guid)
{
- return GetObjectInMap(guid, u.GetMap(), (GameObject*)NULL);
+ return u.GetMap()->GetGameObject(guid);
}
-Transport* ObjectAccessor::GetTransport(WorldObject const& u, ObjectGuid guid)
+Transport* ObjectAccessor::GetTransport(WorldObject const& u, ObjectGuid const& guid)
{
- if (!guid.IsMOTransport())
- return NULL;
+ return u.GetMap()->GetTransport(guid);
+}
- GameObject* go = GetGameObject(u, guid);
- return go ? go->ToTransport() : NULL;
+DynamicObject* ObjectAccessor::GetDynamicObject(WorldObject const& u, ObjectGuid const& guid)
+{
+ return u.GetMap()->GetDynamicObject(guid);
}
-DynamicObject* ObjectAccessor::GetDynamicObject(WorldObject const& u, ObjectGuid guid)
+Unit* ObjectAccessor::GetUnit(WorldObject const& u, ObjectGuid const& guid)
{
- return GetObjectInMap(guid, u.GetMap(), (DynamicObject*)NULL);
+ if (guid.IsPlayer())
+ return GetPlayer(u, guid);
+
+ if (guid.IsPet())
+ return GetPet(u, guid);
+
+ return GetCreature(u, guid);
}
-Unit* ObjectAccessor::GetUnit(WorldObject const& u, ObjectGuid guid)
+Creature* ObjectAccessor::GetCreature(WorldObject const& u, ObjectGuid const& guid)
{
- return GetObjectInMap(guid, u.GetMap(), (Unit*)NULL);
+ return u.GetMap()->GetCreature(guid);
}
-Creature* ObjectAccessor::GetCreature(WorldObject const& u, ObjectGuid guid)
+Pet* ObjectAccessor::GetPet(WorldObject const& u, ObjectGuid const& guid)
{
- return GetObjectInMap(guid, u.GetMap(), (Creature*)NULL);
+ return u.GetMap()->GetPet(guid);
}
-Pet* ObjectAccessor::GetPet(WorldObject const& u, ObjectGuid guid)
+Player* ObjectAccessor::GetPlayer(Map const* m, ObjectGuid const& guid)
{
- return GetObjectInMap(guid, u.GetMap(), (Pet*)NULL);
+ if (Player* player = HashMapHolder<Player>::Find(guid))
+ if (player->IsInWorld() && player->GetMap() == m)
+ return player;
+
+ return nullptr;
}
-Player* ObjectAccessor::GetPlayer(WorldObject const& u, ObjectGuid guid)
+Player* ObjectAccessor::GetPlayer(WorldObject const& u, ObjectGuid const& guid)
{
- return GetObjectInMap(guid, u.GetMap(), (Player*)NULL);
+ return GetPlayer(u.GetMap(), guid);
}
-Creature* ObjectAccessor::GetCreatureOrPetOrVehicle(WorldObject const& u, ObjectGuid guid)
+Creature* ObjectAccessor::GetCreatureOrPetOrVehicle(WorldObject const& u, ObjectGuid const& guid)
{
if (guid.IsPet())
return GetPet(u, guid);
@@ -184,26 +157,17 @@ Creature* ObjectAccessor::GetCreatureOrPetOrVehicle(WorldObject const& u, Object
return NULL;
}
-Pet* ObjectAccessor::FindPet(ObjectGuid guid)
-{
- return GetObjectInWorld(guid, (Pet*)NULL);
-}
-
-Player* ObjectAccessor::FindPlayer(ObjectGuid guid)
+Player* ObjectAccessor::FindPlayer(ObjectGuid const& guid)
{
- return GetObjectInWorld(guid, (Player*)NULL);
+ Player* player = HashMapHolder<Player>::Find(guid);
+ return player && player->IsInWorld() ? player : nullptr;
}
-Player* ObjectAccessor::FindConnectedPlayer(ObjectGuid guid)
+Player* ObjectAccessor::FindConnectedPlayer(ObjectGuid const& guid)
{
return HashMapHolder<Player>::Find(guid);
}
-Unit* ObjectAccessor::FindUnit(ObjectGuid guid)
-{
- return GetObjectInWorld(guid, (Unit*)NULL);
-}
-
Player* ObjectAccessor::FindPlayerByName(std::string const& name)
{
boost::shared_lock<boost::shared_mutex> lock(*HashMapHolder<Player>::GetLock());
@@ -242,6 +206,11 @@ Player* ObjectAccessor::FindConnectedPlayerByName(std::string const& name)
return NULL;
}
+HashMapHolder<Player>::MapType const& ObjectAccessor::GetPlayers()
+{
+ return HashMapHolder<Player>::GetContainer();
+}
+
void ObjectAccessor::SaveAllPlayers()
{
boost::shared_lock<boost::shared_mutex> lock(*HashMapHolder<Player>::GetLock());
@@ -251,207 +220,6 @@ void ObjectAccessor::SaveAllPlayers()
itr->second->SaveToDB();
}
-Corpse* ObjectAccessor::GetCorpseForPlayerGUID(ObjectGuid guid)
-{
- boost::shared_lock<boost::shared_mutex> lock(_corpseLock);
-
- Player2CorpsesMapType::iterator iter = i_player2corpse.find(guid);
- if (iter == i_player2corpse.end())
- return NULL;
-
- ASSERT(iter->second->GetType() != CORPSE_BONES);
-
- return iter->second;
-}
-
-void ObjectAccessor::RemoveCorpse(Corpse* corpse)
-{
- ASSERT(corpse && corpse->GetType() != CORPSE_BONES);
-
- boost::upgrade_lock<boost::shared_mutex> lock(_corpseLock);
-
- /// @todo more works need to be done for corpse and other world object
- if (Map* map = corpse->FindMap())
- {
- corpse->DestroyForNearbyPlayers();
- if (corpse->IsInGrid())
- map->RemoveFromMap(corpse, false);
- else
- {
- corpse->RemoveFromWorld();
- corpse->ResetMap();
- }
- }
- else
-
- corpse->RemoveFromWorld();
-
- // Critical section
- {
- boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock);
-
- Player2CorpsesMapType::iterator iter = i_player2corpse.find(corpse->GetOwnerGUID());
- if (iter == i_player2corpse.end()) /// @todo Fix this
- return;
-
- // build mapid*cellid -> guid_set map
- CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY());
- sObjectMgr->DeleteCorpseCellData(corpse->GetMapId(), cellCoord.GetId(), corpse->GetOwnerGUID().GetCounter());
-
- i_player2corpse.erase(iter);
- }
-}
-
-void ObjectAccessor::AddCorpse(Corpse* corpse)
-{
- ASSERT(corpse && corpse->GetType() != CORPSE_BONES);
-
- // Critical section
- {
- boost::unique_lock<boost::shared_mutex> lock(_corpseLock);
-
- ASSERT(i_player2corpse.find(corpse->GetOwnerGUID()) == i_player2corpse.end());
- i_player2corpse[corpse->GetOwnerGUID()] = corpse;
-
- // build mapid*cellid -> guid_set map
- CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY());
- sObjectMgr->AddCorpseCellData(corpse->GetMapId(), cellCoord.GetId(), corpse->GetOwnerGUID().GetCounter(), corpse->GetInstanceId());
- }
-}
-
-void ObjectAccessor::AddCorpsesToGrid(GridCoord const& gridpair, GridType& grid, Map* map)
-{
- boost::shared_lock<boost::shared_mutex> lock(_corpseLock);
-
- for (Player2CorpsesMapType::iterator iter = i_player2corpse.begin(); iter != i_player2corpse.end(); ++iter)
- {
- // We need this check otherwise a corpose may be added to a grid twice
- if (iter->second->IsInGrid())
- continue;
-
- if (iter->second->GetGridCoord() == gridpair)
- {
- // verify, if the corpse in our instance (add only corpses which are)
- if (map->Instanceable())
- {
- if (iter->second->GetInstanceId() == map->GetInstanceId())
- grid.AddWorldObject(iter->second);
- }
- else
- grid.AddWorldObject(iter->second);
- }
- }
-}
-
-Corpse* ObjectAccessor::ConvertCorpseForPlayer(ObjectGuid player_guid, bool insignia /*=false*/)
-{
- Corpse* corpse = GetCorpseForPlayerGUID(player_guid);
- if (!corpse)
- {
- //in fact this function is called from several places
- //even when player doesn't have a corpse, not an error
- return NULL;
- }
-
- TC_LOG_DEBUG("misc", "Deleting Corpse and spawned bones.");
-
- // Map can be NULL
- Map* map = corpse->FindMap();
-
- // remove corpse from player_guid -> corpse map and from current map
- RemoveCorpse(corpse);
-
- // remove corpse from DB
- SQLTransaction trans = CharacterDatabase.BeginTransaction();
- corpse->DeleteFromDB(trans);
- CharacterDatabase.CommitTransaction(trans);
-
- Corpse* bones = NULL;
- // create the bones only if the map and the grid is loaded at the corpse's location
- // ignore bones creating option in case insignia
-
- if (map && (insignia ||
- (map->IsBattlegroundOrArena() ? sWorld->getBoolConfig(CONFIG_DEATH_BONES_BG_OR_ARENA) : sWorld->getBoolConfig(CONFIG_DEATH_BONES_WORLD))) &&
- !map->IsRemovalGrid(corpse->GetPositionX(), corpse->GetPositionY()))
- {
- // Create bones, don't change Corpse
- bones = new Corpse;
- bones->Create(corpse->GetGUIDLow(), map);
-
- for (uint8 i = OBJECT_FIELD_TYPE + 1; i < CORPSE_END; ++i) // don't overwrite guid and object type
- bones->SetUInt32Value(i, corpse->GetUInt32Value(i));
-
- bones->SetGridCoord(corpse->GetGridCoord());
- // bones->m_time = m_time; // don't overwrite time
- // bones->m_type = m_type; // don't overwrite type
- bones->Relocate(corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetOrientation());
- bones->SetPhaseMask(corpse->GetPhaseMask(), false);
-
- bones->SetUInt32Value(CORPSE_FIELD_FLAGS, CORPSE_FLAG_UNK2 | CORPSE_FLAG_BONES);
- bones->SetGuidValue(CORPSE_FIELD_OWNER, ObjectGuid::Empty);
-
- for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i)
- {
- if (corpse->GetUInt32Value(CORPSE_FIELD_ITEM + i))
- bones->SetUInt32Value(CORPSE_FIELD_ITEM + i, 0);
- }
-
- // add bones in grid store if grid loaded where corpse placed
- map->AddToMap(bones);
- }
-
- // all references to the corpse should be removed at this point
- delete corpse;
-
- return bones;
-}
-
-void ObjectAccessor::RemoveOldCorpses()
-{
- time_t now = time(NULL);
- Player2CorpsesMapType::iterator next;
- for (Player2CorpsesMapType::iterator itr = i_player2corpse.begin(); itr != i_player2corpse.end(); itr = next)
- {
- next = itr;
- ++next;
-
- if (!itr->second->IsExpired(now))
- continue;
-
- ConvertCorpseForPlayer(itr->first);
- }
-}
-
-void ObjectAccessor::Update(uint32 /*diff*/)
-{
- UpdateDataMapType update_players;
-
- while (!i_objects.empty())
- {
- Object* obj = *i_objects.begin();
- ASSERT(obj && obj->IsInWorld());
- i_objects.erase(i_objects.begin());
- obj->BuildUpdate(update_players);
- }
-
- WorldPacket packet; // here we allocate a std::vector with a size of 0x10000
- for (UpdateDataMapType::iterator iter = update_players.begin(); iter != update_players.end(); ++iter)
- {
- iter->second.BuildPacket(&packet);
- iter->first->GetSession()->SendPacket(&packet);
- packet.clear(); // clean the string
- }
-}
-
-void ObjectAccessor::UnloadAll()
-{
- for (Player2CorpsesMapType::const_iterator itr = i_player2corpse.begin(); itr != i_player2corpse.end(); ++itr)
- {
- itr->second->RemoveFromWorld();
- delete itr->second;
- }
-}
-
/// Define the static members of HashMapHolder
template <class T> typename HashMapHolder<T>::MapType HashMapHolder<T>::_objectMap;
@@ -460,15 +228,5 @@ template <class T> boost::shared_mutex HashMapHolder<T>::_lock;
/// Global definitions for the hashmap storage
template class HashMapHolder<Player>;
-template class HashMapHolder<Pet>;
-template class HashMapHolder<GameObject>;
-template class HashMapHolder<DynamicObject>;
-template class HashMapHolder<Creature>;
-template class HashMapHolder<Corpse>;
-
-template Player* ObjectAccessor::GetObjectInWorld<Player>(uint32 mapid, float x, float y, ObjectGuid guid, Player* /*fake*/);
-template Pet* ObjectAccessor::GetObjectInWorld<Pet>(uint32 mapid, float x, float y, ObjectGuid guid, Pet* /*fake*/);
-template Creature* ObjectAccessor::GetObjectInWorld<Creature>(uint32 mapid, float x, float y, ObjectGuid guid, Creature* /*fake*/);
-template Corpse* ObjectAccessor::GetObjectInWorld<Corpse>(uint32 mapid, float x, float y, ObjectGuid guid, Corpse* /*fake*/);
-template GameObject* ObjectAccessor::GetObjectInWorld<GameObject>(uint32 mapid, float x, float y, ObjectGuid guid, GameObject* /*fake*/);
-template DynamicObject* ObjectAccessor::GetObjectInWorld<DynamicObject>(uint32 mapid, float x, float y, ObjectGuid guid, DynamicObject* /*fake*/);
+
+template class HashMapHolder<Transport>;
diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h
index 2d32e747eb1..d5fb8564b96 100644
--- a/src/server/game/Globals/ObjectAccessor.h
+++ b/src/server/game/Globals/ObjectAccessor.h
@@ -30,7 +30,6 @@
#include "UpdateData.h"
#include "Object.h"
-
class Creature;
class Corpse;
class Unit;
@@ -46,6 +45,9 @@ template <class T>
class HashMapHolder
{
public:
+ static_assert(std::is_same<Player, T>::value
+ || std::is_same<Transport, T>::value,
+ "Only Player and Transport can be registered in global HashMapHolder");
typedef std::unordered_map<ObjectGuid, T*> MapType;
@@ -83,165 +85,47 @@ class HashMapHolder
static MapType _objectMap;
};
-class ObjectAccessor
+namespace ObjectAccessor
{
- private:
- ObjectAccessor();
- ~ObjectAccessor();
- ObjectAccessor(const ObjectAccessor&);
- ObjectAccessor& operator=(const ObjectAccessor&);
-
- public:
- /// @todo: Override these template functions for each holder type and add assertions
-
- static ObjectAccessor* instance()
- {
- static ObjectAccessor instance;
- return &instance;
- }
-
- template<class T> static T* GetObjectInOrOutOfWorld(ObjectGuid guid, T* /*typeSpecifier*/)
- {
- return HashMapHolder<T>::Find(guid);
- }
-
- static Unit* GetObjectInOrOutOfWorld(ObjectGuid guid, Unit* /*typeSpecifier*/)
- {
- if (guid.IsPlayer())
- return (Unit*)GetObjectInOrOutOfWorld(guid, (Player*)NULL);
-
- if (guid.IsPet())
- return (Unit*)GetObjectInOrOutOfWorld(guid, (Pet*)NULL);
-
- return (Unit*)GetObjectInOrOutOfWorld(guid, (Creature*)NULL);
- }
-
- // returns object if is in world
- template<class T> static T* GetObjectInWorld(ObjectGuid guid, T* /*typeSpecifier*/)
- {
- return HashMapHolder<T>::Find(guid);
- }
-
- // Player may be not in world while in ObjectAccessor
- static Player* GetObjectInWorld(ObjectGuid guid, Player* /*typeSpecifier*/);
-
- static Unit* GetObjectInWorld(ObjectGuid guid, Unit* /*typeSpecifier*/)
- {
- if (guid.IsPlayer())
- return (Unit*)GetObjectInWorld(guid, (Player*)NULL);
-
- if (guid.IsPet())
- return (Unit*)GetObjectInWorld(guid, (Pet*)NULL);
-
- return (Unit*)GetObjectInWorld(guid, (Creature*)NULL);
- }
-
- // returns object if is in map
- template<class T> static T* GetObjectInMap(ObjectGuid guid, Map* map, T* /*typeSpecifier*/)
- {
- ASSERT(map);
- if (T * obj = GetObjectInWorld(guid, (T*)NULL))
- if (obj->GetMap() == map)
- return obj;
- return NULL;
- }
-
- template<class T> static T* GetObjectInWorld(uint32 mapid, float x, float y, ObjectGuid guid, T* /*fake*/);
-
- // these functions return objects only if in map of specified object
- static WorldObject* GetWorldObject(WorldObject const&, ObjectGuid);
- static Object* GetObjectByTypeMask(WorldObject const&, ObjectGuid, uint32 typemask);
- static Corpse* GetCorpse(WorldObject const& u, ObjectGuid guid);
- static GameObject* GetGameObject(WorldObject const& u, ObjectGuid guid);
- static Transport* GetTransport(WorldObject const& u, ObjectGuid guid);
- static DynamicObject* GetDynamicObject(WorldObject const& u, ObjectGuid guid);
- static Unit* GetUnit(WorldObject const&, ObjectGuid guid);
- static Creature* GetCreature(WorldObject const& u, ObjectGuid guid);
- static Pet* GetPet(WorldObject const&, ObjectGuid guid);
- static Player* GetPlayer(WorldObject const&, ObjectGuid guid);
- static Creature* GetCreatureOrPetOrVehicle(WorldObject const&, ObjectGuid);
-
- // these functions return objects if found in whole world
- // ACCESS LIKE THAT IS NOT THREAD SAFE
- static Pet* FindPet(ObjectGuid);
- static Player* FindPlayer(ObjectGuid);
- static Creature* FindCreature(ObjectGuid);
- static Unit* FindUnit(ObjectGuid);
- static Player* FindPlayerByName(std::string const& name);
-
- // this returns Player even if he is not in world, for example teleporting
- static Player* FindConnectedPlayer(ObjectGuid);
- static Player* FindConnectedPlayerByName(std::string const& name);
-
- // when using this, you must use the hashmapholder's lock
- static HashMapHolder<Player>::MapType const& GetPlayers()
- {
- return HashMapHolder<Player>::GetContainer();
- }
-
- // when using this, you must use the hashmapholder's lock
- static HashMapHolder<Creature>::MapType const& GetCreatures()
- {
- return HashMapHolder<Creature>::GetContainer();
- }
-
- // when using this, you must use the hashmapholder's lock
- static HashMapHolder<GameObject>::MapType const& GetGameObjects()
- {
- return HashMapHolder<GameObject>::GetContainer();
- }
-
- template<class T> static void AddObject(T* object)
- {
- HashMapHolder<T>::Insert(object);
- }
-
- template<class T> static void RemoveObject(T* object)
- {
- HashMapHolder<T>::Remove(object);
- }
-
- static void SaveAllPlayers();
-
- //non-static functions
- void AddUpdateObject(Object* obj)
- {
- std::lock_guard<std::mutex> lock(_objectLock);
- i_objects.insert(obj);
- }
-
- void RemoveUpdateObject(Object* obj)
- {
- std::lock_guard<std::mutex> lock(_objectLock);
- i_objects.erase(obj);
- }
-
- //Thread safe
- Corpse* GetCorpseForPlayerGUID(ObjectGuid guid);
- void RemoveCorpse(Corpse* corpse);
- void AddCorpse(Corpse* corpse);
- void AddCorpsesToGrid(GridCoord const& gridpair, GridType& grid, Map* map);
- Corpse* ConvertCorpseForPlayer(ObjectGuid player_guid, bool insignia = false);
-
- //Thread unsafe
- void Update(uint32 diff);
- void RemoveOldCorpses();
- void UnloadAll();
-
- private:
- static void _buildChangeObjectForPlayer(WorldObject*, UpdateDataMapType&);
- static void _buildPacket(Player*, Object*, UpdateDataMapType&);
- void _update();
-
- typedef std::unordered_map<ObjectGuid, Corpse*> Player2CorpsesMapType;
- typedef std::unordered_map<Player*, UpdateData>::value_type UpdateDataValueType;
-
- std::set<Object*> i_objects;
- Player2CorpsesMapType i_player2corpse;
-
- std::mutex _objectLock;
- boost::shared_mutex _corpseLock;
+ // these functions return objects only if in map of specified object
+ WorldObject* GetWorldObject(WorldObject const&, ObjectGuid const&);
+ Object* GetObjectByTypeMask(WorldObject const&, ObjectGuid const&, uint32 typemask);
+ Corpse* GetCorpse(WorldObject const& u, ObjectGuid const& guid);
+ GameObject* GetGameObject(WorldObject const& u, ObjectGuid const& guid);
+ Transport* GetTransport(WorldObject const& u, ObjectGuid const& guid);
+ DynamicObject* GetDynamicObject(WorldObject const& u, ObjectGuid const& guid);
+ Unit* GetUnit(WorldObject const&, ObjectGuid const& guid);
+ Creature* GetCreature(WorldObject const& u, ObjectGuid const& guid);
+ Pet* GetPet(WorldObject const&, ObjectGuid const& guid);
+ Player* GetPlayer(Map const*, ObjectGuid const& guid);
+ Player* GetPlayer(WorldObject const&, ObjectGuid const& guid);
+ Creature* GetCreatureOrPetOrVehicle(WorldObject const&, ObjectGuid const&);
+
+ // these functions return objects if found in whole world
+ // ACCESS LIKE THAT IS NOT THREAD SAFE
+ Player* FindPlayer(ObjectGuid const&);
+ Player* FindPlayerByName(std::string const& name);
+
+ // this returns Player even if he is not in world, for example teleporting
+ Player* FindConnectedPlayer(ObjectGuid const&);
+ Player* FindConnectedPlayerByName(std::string const& name);
+
+ // when using this, you must use the hashmapholder's lock
+ HashMapHolder<Player>::MapType const& GetPlayers();
+
+ template<class T>
+ void AddObject(T* object)
+ {
+ HashMapHolder<T>::Insert(object);
+ }
+
+ template<class T>
+ void RemoveObject(T* object)
+ {
+ HashMapHolder<T>::Remove(object);
+ }
+
+ void SaveAllPlayers();
};
-#define sObjectAccessor ObjectAccessor::instance()
#endif
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 42fe92999e9..b2be5c49b91 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -223,15 +223,8 @@ ObjectMgr::ObjectMgr():
_itemTextId(1),
_mailId(1),
_hiPetNumber(1),
- _hiCharGuid(1),
- _hiCreatureGuid(1),
- _hiPetGuid(1),
- _hiVehicleGuid(1),
- _hiItemGuid(1),
- _hiGoGuid(1),
- _hiDoGuid(1),
- _hiCorpseGuid(1),
- _hiMoTransGuid(1),
+ _creatureSpawnId(1),
+ _gameObjectSpawnId(1),
DBCLocaleIndex(LOCALE_enUS)
{
for (uint8 i = 0; i < MAX_CLASSES; ++i)
@@ -298,8 +291,8 @@ void ObjectMgr::LoadCreatureLocales()
_creatureLocaleStore.clear(); // need for reload case
- QueryResult result = WorldDatabase.Query("SELECT entry, name_loc1, subname_loc1, name_loc2, subname_loc2, name_loc3, subname_loc3, name_loc4, subname_loc4, name_loc5, subname_loc5, name_loc6, subname_loc6, name_loc7, subname_loc7, name_loc8, subname_loc8 FROM locales_creature");
-
+ // 0 1 2 3
+ QueryResult result = WorldDatabase.Query("SELECT entry, locale, Name, Title FROM creature_template_locale");
if (!result)
return;
@@ -307,16 +300,20 @@ void ObjectMgr::LoadCreatureLocales()
{
Field* fields = result->Fetch();
- uint32 entry = fields[0].GetUInt32();
+ uint32 id = fields[0].GetUInt32();
+ std::string localeName = fields[1].GetString();
- CreatureLocale& data = _creatureLocaleStore[entry];
+ std::string name = fields[2].GetString();
+ std::string title = fields[3].GetString();
+
+ CreatureLocale& data = _creatureLocaleStore[id];
+ LocaleConstant locale = GetLocaleByName(localeName);
+ if (locale == LOCALE_enUS)
+ continue;
+
+ AddLocaleString(name, locale, data.Name);
+ AddLocaleString(title, locale, data.Title);
- for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i)
- {
- LocaleConstant locale = (LocaleConstant) i;
- AddLocaleString(fields[1 + 2 * (i - 1)].GetString(), locale, data.Name);
- AddLocaleString(fields[1 + 2 * (i - 1) + 1].GetString(), locale, data.SubName);
- }
} while (result->NextRow());
TC_LOG_INFO("server.loading", ">> Loaded %u creature locale strings in %u ms", uint32(_creatureLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime));
@@ -449,7 +446,7 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields)
creatureTemplate.Modelid3 = fields[8].GetUInt32();
creatureTemplate.Modelid4 = fields[9].GetUInt32();
creatureTemplate.Name = fields[10].GetString();
- creatureTemplate.SubName = fields[11].GetString();
+ creatureTemplate.Title = fields[11].GetString();
creatureTemplate.IconName = fields[12].GetString();
creatureTemplate.GossipMenuId = fields[13].GetUInt32();
creatureTemplate.minlevel = fields[14].GetUInt8();
@@ -506,7 +503,7 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields)
creatureTemplate.RegenHealth = fields[71].GetBool();
creatureTemplate.MechanicImmuneMask = fields[72].GetUInt32();
creatureTemplate.flags_extra = fields[73].GetUInt32();
- creatureTemplate.ScriptID = GetScriptId(fields[74].GetCString());
+ creatureTemplate.ScriptID = GetScriptId(fields[74].GetString());
}
void ObjectMgr::LoadCreatureTemplateAddons()
@@ -558,6 +555,12 @@ void ObjectMgr::LoadCreatureTemplateAddons()
if (AdditionalSpellInfo->HasAura(SPELL_AURA_CONTROL_VEHICLE))
TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has SPELL_AURA_CONTROL_VEHICLE aura %lu defined in `auras` field in `creature_template_addon`.", entry, atoul(*itr));
+ if (std::find(creatureAddon.auras.begin(), creatureAddon.auras.end(), atoul(*itr)) != creatureAddon.auras.end())
+ {
+ TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has duplicate aura (spell %lu) in `auras` field in `creature_template_addon`.", entry, atoul(*itr));
+ continue;
+ }
+
creatureAddon.auras[i++] = atoul(*itr);
}
@@ -968,7 +971,7 @@ void ObjectMgr::LoadCreatureAddons()
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
CreatureData const* creData = GetCreatureData(guid);
if (!creData)
@@ -1006,6 +1009,12 @@ void ObjectMgr::LoadCreatureAddons()
if (AdditionalSpellInfo->HasAura(SPELL_AURA_CONTROL_VEHICLE))
TC_LOG_ERROR("sql.sql", "Creature (GUID: %u) has SPELL_AURA_CONTROL_VEHICLE aura %lu defined in `auras` field in `creature_addon`.", guid, atoul(*itr));
+ if (std::find(creatureAddon.auras.begin(), creatureAddon.auras.end(), atoul(*itr)) != creatureAddon.auras.end())
+ {
+ TC_LOG_ERROR("sql.sql", "Creature (GUID: %u) has duplicate aura (spell %lu) in `auras` field in `creature_addon`.", guid, atoul(*itr));
+ continue;
+ }
+
creatureAddon.auras[i++] = atoul(*itr);
}
@@ -1091,7 +1100,7 @@ GameObjectAddon const* ObjectMgr::GetGameObjectAddon(ObjectGuid::LowType lowguid
return NULL;
}
-CreatureAddon const* ObjectMgr::GetCreatureAddon(uint32 lowguid)
+CreatureAddon const* ObjectMgr::GetCreatureAddon(ObjectGuid::LowType lowguid)
{
CreatureAddonContainer::const_iterator itr = _creatureAddonStore.find(lowguid);
if (itr != _creatureAddonStore.end())
@@ -1345,8 +1354,8 @@ void ObjectMgr::LoadLinkedRespawn()
{
Field* fields = result->Fetch();
- uint32 guidLow = fields[0].GetUInt32();
- uint32 linkedGuidLow = fields[1].GetUInt32();
+ ObjectGuid::LowType guidLow = fields[0].GetUInt32();
+ ObjectGuid::LowType linkedGuidLow = fields[1].GetUInt32();
uint8 linkType = fields[2].GetUInt8();
ObjectGuid guid, linkedGuid;
@@ -1386,8 +1395,8 @@ void ObjectMgr::LoadLinkedRespawn()
break;
}
- guid = ObjectGuid(HIGHGUID_UNIT, slave->id, guidLow);
- linkedGuid = ObjectGuid(HIGHGUID_UNIT, master->id, linkedGuidLow);
+ guid = ObjectGuid(HighGuid::Unit, slave->id, guidLow);
+ linkedGuid = ObjectGuid(HighGuid::Unit, master->id, linkedGuidLow);
break;
}
case CREATURE_TO_GO:
@@ -1423,8 +1432,8 @@ void ObjectMgr::LoadLinkedRespawn()
break;
}
- guid = ObjectGuid(HIGHGUID_UNIT, slave->id, guidLow);
- linkedGuid = ObjectGuid(HIGHGUID_GAMEOBJECT, master->id, linkedGuidLow);
+ guid = ObjectGuid(HighGuid::Unit, slave->id, guidLow);
+ linkedGuid = ObjectGuid(HighGuid::GameObject, master->id, linkedGuidLow);
break;
}
case GO_TO_GO:
@@ -1460,8 +1469,8 @@ void ObjectMgr::LoadLinkedRespawn()
break;
}
- guid = ObjectGuid(HIGHGUID_GAMEOBJECT, slave->id, guidLow);
- linkedGuid = ObjectGuid(HIGHGUID_GAMEOBJECT, master->id, linkedGuidLow);
+ guid = ObjectGuid(HighGuid::GameObject, slave->id, guidLow);
+ linkedGuid = ObjectGuid(HighGuid::GameObject, master->id, linkedGuidLow);
break;
}
case GO_TO_CREATURE:
@@ -1497,8 +1506,8 @@ void ObjectMgr::LoadLinkedRespawn()
break;
}
- guid = ObjectGuid(HIGHGUID_GAMEOBJECT, slave->id, guidLow);
- linkedGuid = ObjectGuid(HIGHGUID_UNIT, master->id, linkedGuidLow);
+ guid = ObjectGuid(HighGuid::GameObject, slave->id, guidLow);
+ linkedGuid = ObjectGuid(HighGuid::Unit, master->id, linkedGuidLow);
break;
}
}
@@ -1511,14 +1520,14 @@ void ObjectMgr::LoadLinkedRespawn()
TC_LOG_INFO("server.loading", ">> Loaded " UI64FMTD " linked respawns in %u ms", uint64(_linkedRespawnStore.size()), GetMSTimeDiffToNow(oldMSTime));
}
-bool ObjectMgr::SetCreatureLinkedRespawn(uint32 guidLow, uint32 linkedGuidLow)
+bool ObjectMgr::SetCreatureLinkedRespawn(ObjectGuid::LowType guidLow, ObjectGuid::LowType linkedGuidLow)
{
if (!guidLow)
return false;
CreatureData const* master = GetCreatureData(guidLow);
ASSERT(master);
- ObjectGuid guid(HIGHGUID_UNIT, master->id, guidLow);
+ ObjectGuid guid(HighGuid::Unit, master->id, guidLow);
if (!linkedGuidLow) // we're removing the linking
{
@@ -1549,7 +1558,7 @@ bool ObjectMgr::SetCreatureLinkedRespawn(uint32 guidLow, uint32 linkedGuidLow)
return false;
}
- ObjectGuid linkedGuid(HIGHGUID_UNIT, slave->id, linkedGuidLow);
+ ObjectGuid linkedGuid(HighGuid::Unit, slave->id, linkedGuidLow);
_linkedRespawnStore[guid] = linkedGuid;
PreparedStatement *stmt = WorldDatabase.GetPreparedStatement(WORLD_REP_CREATURE_LINKED_RESPAWN);
@@ -1679,7 +1688,7 @@ void ObjectMgr::LoadCreatures()
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
uint32 entry = fields[1].GetUInt32();
CreatureTemplate const* cInfo = GetCreatureTemplate(entry);
@@ -1810,7 +1819,7 @@ void ObjectMgr::LoadCreatures()
TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " creatures in %u ms", _creatureDataStore.size(), GetMSTimeDiffToNow(oldMSTime));
}
-void ObjectMgr::AddCreatureToGrid(uint32 guid, CreatureData const* data)
+void ObjectMgr::AddCreatureToGrid(ObjectGuid::LowType guid, CreatureData const* data)
{
uint8 mask = data->spawnMask;
for (uint8 i = 0; mask != 0; i++, mask >>= 1)
@@ -1824,7 +1833,7 @@ void ObjectMgr::AddCreatureToGrid(uint32 guid, CreatureData const* data)
}
}
-void ObjectMgr::RemoveCreatureFromGrid(uint32 guid, CreatureData const* data)
+void ObjectMgr::RemoveCreatureFromGrid(ObjectGuid::LowType guid, CreatureData const* data)
{
uint8 mask = data->spawnMask;
for (uint8 i = 0; mask != 0; i++, mask >>= 1)
@@ -1838,7 +1847,7 @@ void ObjectMgr::RemoveCreatureFromGrid(uint32 guid, CreatureData const* data)
}
}
-uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay, float rotation0, float rotation1, float rotation2, float rotation3)
+ObjectGuid::LowType ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay, float rotation0, float rotation1, float rotation2, float rotation3)
{
GameObjectTemplate const* goinfo = GetGameObjectTemplate(entry);
if (!goinfo)
@@ -1848,7 +1857,8 @@ uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float
if (!map)
return 0;
- uint32 guid = GenerateLowGuid(HIGHGUID_GAMEOBJECT);
+ ObjectGuid::LowType guid = GenerateGameObjectSpawnId();
+
GameObjectData& data = NewGOData(guid);
data.id = entry;
data.mapid = mapId;
@@ -1888,40 +1898,8 @@ uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float
return guid;
}
-bool ObjectMgr::MoveCreatureData(uint32 guid, uint32 mapId, const Position& pos)
-{
- CreatureData& data = NewOrExistCreatureData(guid);
- if (!data.id)
- return false;
- RemoveCreatureFromGrid(guid, &data);
- if (data.posX == pos.GetPositionX() && data.posY == pos.GetPositionY() && data.posZ == pos.GetPositionZ())
- return true;
- data.posX = pos.GetPositionX();
- data.posY = pos.GetPositionY();
- data.posZ = pos.GetPositionZ();
- data.orientation = pos.GetOrientation();
- AddCreatureToGrid(guid, &data);
-
- // Spawn if necessary (loaded grids only)
- if (Map* map = sMapMgr->CreateBaseMap(mapId))
- {
- // We use spawn coords to spawn
- if (!map->Instanceable() && map->IsGridLoaded(data.posX, data.posY))
- {
- Creature* creature = new Creature();
- if (!creature->LoadCreatureFromDB(guid, map))
- {
- TC_LOG_ERROR("misc", "MoveCreatureData: Cannot add creature guid %u to map", guid);
- delete creature;
- return false;
- }
- }
- }
- return true;
-}
-
-uint32 ObjectMgr::AddCreatureData(uint32 entry, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay /*= 0*/)
+ObjectGuid::LowType ObjectMgr::AddCreatureData(uint32 entry, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay /*= 0*/)
{
CreatureTemplate const* cInfo = GetCreatureTemplate(entry);
if (!cInfo)
@@ -1929,8 +1907,11 @@ uint32 ObjectMgr::AddCreatureData(uint32 entry, uint32 mapId, float x, float y,
uint32 level = cInfo->minlevel == cInfo->maxlevel ? cInfo->minlevel : urand(cInfo->minlevel, cInfo->maxlevel); // Only used for extracting creature base stats
CreatureBaseStats const* stats = GetCreatureBaseStats(level, cInfo->unit_class);
+ Map* map = sMapMgr->CreateBaseMap(mapId);
+ if (!map)
+ return 0;
- uint32 guid = GenerateLowGuid(HIGHGUID_UNIT);
+ ObjectGuid::LowType guid = GenerateCreatureSpawnId();
CreatureData& data = NewOrExistCreatureData(guid);
data.id = entry;
data.mapid = mapId;
@@ -1955,19 +1936,15 @@ uint32 ObjectMgr::AddCreatureData(uint32 entry, uint32 mapId, float x, float y,
AddCreatureToGrid(guid, &data);
- // Spawn if necessary (loaded grids only)
- if (Map* map = sMapMgr->CreateBaseMap(mapId))
+ // We use spawn coords to spawn
+ if (!map->Instanceable() && !map->IsRemovalGrid(x, y))
{
- // We use spawn coords to spawn
- if (!map->Instanceable() && !map->IsRemovalGrid(x, y))
+ Creature* creature = new Creature();
+ if (!creature->LoadCreatureFromDB(guid, map))
{
- Creature* creature = new Creature();
- if (!creature->LoadCreatureFromDB(guid, map))
- {
- TC_LOG_ERROR("misc", "AddCreature: Cannot add creature entry %u to map", entry);
- delete creature;
- return 0;
- }
+ TC_LOG_ERROR("misc", "AddCreature: Cannot add creature entry %u to map", entry);
+ delete creature;
+ return 0;
}
}
@@ -2005,7 +1982,7 @@ void ObjectMgr::LoadGameobjects()
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
uint32 entry = fields[1].GetUInt32();
GameObjectTemplate const* gInfo = GetGameObjectTemplate(entry);
@@ -2133,7 +2110,7 @@ void ObjectMgr::LoadGameobjects()
TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " gameobjects in %u ms", _gameObjectDataStore.size(), GetMSTimeDiffToNow(oldMSTime));
}
-void ObjectMgr::AddGameobjectToGrid(uint32 guid, GameObjectData const* data)
+void ObjectMgr::AddGameobjectToGrid(ObjectGuid::LowType guid, GameObjectData const* data)
{
uint8 mask = data->spawnMask;
for (uint8 i = 0; mask != 0; i++, mask >>= 1)
@@ -2147,7 +2124,7 @@ void ObjectMgr::AddGameobjectToGrid(uint32 guid, GameObjectData const* data)
}
}
-void ObjectMgr::RemoveGameobjectFromGrid(uint32 guid, GameObjectData const* data)
+void ObjectMgr::RemoveGameobjectFromGrid(ObjectGuid::LowType guid, GameObjectData const* data)
{
uint8 mask = data->spawnMask;
for (uint8 i = 0; mask != 0; i++, mask >>= 1)
@@ -2161,9 +2138,9 @@ void ObjectMgr::RemoveGameobjectFromGrid(uint32 guid, GameObjectData const* data
}
}
-Player* ObjectMgr::GetPlayerByLowGUID(uint32 lowguid) const
+Player* ObjectMgr::GetPlayerByLowGUID(ObjectGuid::LowType lowguid) const
{
- ObjectGuid guid(HIGHGUID_PLAYER, lowguid);
+ ObjectGuid guid(HighGuid::Player, lowguid);
return ObjectAccessor::FindPlayer(guid);
}
@@ -2177,7 +2154,7 @@ ObjectGuid ObjectMgr::GetPlayerGUIDByName(std::string const& name) const
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (result)
- return ObjectGuid(HIGHGUID_PLAYER, (*result)[0].GetUInt32());
+ return ObjectGuid(HighGuid::Player, (*result)[0].GetUInt32());
return ObjectGuid::Empty;
}
@@ -2231,23 +2208,10 @@ uint32 ObjectMgr::GetPlayerTeamByGUID(ObjectGuid guid) const
uint32 ObjectMgr::GetPlayerAccountIdByGUID(ObjectGuid guid) const
{
- // prevent DB access for online player
- if (Player* player = ObjectAccessor::FindConnectedPlayer(guid))
- {
- return player->GetSession()->GetAccountId();
- }
+ if (CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(guid))
+ return characterInfo->AccountId;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ACCOUNT_BY_GUID);
- stmt->setUInt32(0, guid.GetCounter());
-
- PreparedQueryResult result = CharacterDatabase.Query(stmt);
-
- if (result)
- {
- uint32 acc = (*result)[0].GetUInt32();
- return acc;
- }
return 0;
}
@@ -2383,6 +2347,12 @@ void ObjectMgr::LoadItemTemplates()
itemTemplate.ContainerSlots = uint32(fields[26].GetUInt8());
itemTemplate.StatsCount = uint32(fields[27].GetUInt8());
+ if (itemTemplate.StatsCount > MAX_ITEM_PROTO_STATS)
+ {
+ TC_LOG_ERROR("sql.sql", "Item (Entry: %u) has too large value in statscount (%u), replace by hardcoded limit (%u).", entry, itemTemplate.StatsCount, MAX_ITEM_PROTO_STATS);
+ itemTemplate.StatsCount = MAX_ITEM_PROTO_STATS;
+ }
+
for (uint8 i = 0; i < itemTemplate.StatsCount; ++i)
{
itemTemplate.ItemStat[i].ItemStatType = uint32(fields[28 + i*2].GetUInt8());
@@ -2453,7 +2423,7 @@ void ObjectMgr::LoadItemTemplates()
itemTemplate.Duration = fields[129].GetUInt32();
itemTemplate.ItemLimitCategory = uint32(fields[130].GetInt16());
itemTemplate.HolidayId = fields[131].GetUInt32();
- itemTemplate.ScriptId = sObjectMgr->GetScriptId(fields[132].GetCString());
+ itemTemplate.ScriptId = sObjectMgr->GetScriptId(fields[132].GetString());
itemTemplate.DisenchantID = fields[133].GetUInt32();
itemTemplate.FoodType = uint32(fields[134].GetUInt8());
itemTemplate.MinMoneyLoot = fields[135].GetUInt32();
@@ -2569,7 +2539,7 @@ void ObjectMgr::LoadItemTemplates()
if (!req)
for (uint8 j = 0; j < MAX_ITEM_PROTO_SPELLS; ++j)
{
- if (itemTemplate.Spells[j].SpellId)
+ if (itemTemplate.Spells[j].SpellId > 0)
{
req = true;
break;
@@ -2630,12 +2600,6 @@ void ObjectMgr::LoadItemTemplates()
itemTemplate.ContainerSlots = MAX_BAG_SIZE;
}
- if (itemTemplate.StatsCount > MAX_ITEM_PROTO_STATS)
- {
- TC_LOG_ERROR("sql.sql", "Item (Entry: %u) has too large value in statscount (%u), replace by hardcoded limit (%u).", entry, itemTemplate.StatsCount, MAX_ITEM_PROTO_STATS);
- itemTemplate.StatsCount = MAX_ITEM_PROTO_STATS;
- }
-
for (uint8 j = 0; j < itemTemplate.StatsCount; ++j)
{
// for ItemStatValue != 0
@@ -2754,15 +2718,6 @@ void ObjectMgr::LoadItemTemplates()
TC_LOG_ERROR("sql.sql", "Item (Entry: %u) has broken spell in spellid_%d (%d)", entry, j+1, itemTemplate.Spells[j].SpellId);
itemTemplate.Spells[j].SpellId = 0;
}
-
- if (spellInfo && itemTemplate.Spells[j].SpellCategory
- && itemTemplate.Spells[j].SpellCategory != SPELL_CATEGORY_FOOD)
- {
- bool added = sSpellsByCategoryStore[itemTemplate.Spells[j].SpellCategory].insert(itemTemplate.Spells[j].SpellId).second;
- if (added)
- TC_LOG_DEBUG("sql.sql", "Item(Entry: %u) spellid_%d (%d) category %u added to sSpellsByCategoryStore",
- entry, j + 1, itemTemplate.Spells[j].SpellId, itemTemplate.Spells[j].SpellCategory);
- }
}
}
}
@@ -3966,36 +3921,32 @@ void ObjectMgr::LoadQuests()
mExclusiveQuestGroups.clear();
QueryResult result = WorldDatabase.Query("SELECT "
- //0 1 2 3 4 5 6 7 8
- "ID, Method, QuestLevel, MinLevel, QuestSortID, QuestType, SuggestedGroupNum, LimitTime, RequiredRaces,"
+ //0 1 2 3 4 5 6 7 8
+ "ID, QuestType, QuestLevel, MinLevel, QuestSortID, QuestInfoID, SuggestedGroupNum, TimeAllowed, AllowableRaces,"
// 9 10 11 12
"RequiredFactionId1, RequiredFactionId2, RequiredFactionValue1, RequiredFactionValue2, "
- // 13 14 15 16 17 18 19 20
- "NextQuestIdChain, RewardXPId, RewardOrRequiredMoney, RewardMoneyMaxLevel, RewardSpell, RewardSpellCast, RewardHonor, RewardHonorMultiplier, "
- // 21 22 23 24 25 26
- "SourceItemId, Flags, RewardTitle, RequiredPlayerKills, RewardTalents, RewardArenaPoints, "
- // 27 28 29 30 31 32 33 34
- "RewardItem1, RewardItem2, RewardItem3, RewardItem4, RewardAmount1, RewardAmount2, RewardAmount3, RewardAmount4, "
- // 35 36 37 38 39 40 41 42 43 44 45 46
- "RewardChoiceItemID1, RewardChoiceItemID2, RewardChoiceItemID3, RewardChoiceItemID4, RewardChoiceItemID5, RewardChoiceItemID6, RewardChoiceItemQuantity1, RewardChoiceItemQuantity2, RewardChoiceItemQuantity3, RewardChoiceItemQuantity4, RewardChoiceItemQuantity5, RewardChoiceItemQuantity6, "
- // 47 48 49 50 51 52 53 54 55 56
- "RewardFactionID1, RewardFactionID2, RewardFactionID3, RewardFactionID4, RewardFactionID5, RewardFactionValue1, RewardFactionValue2, RewardFactionValue3, RewardFactionValue4, RewardFactionValue5, "
- // 57 58 59 60 61
- "RewardFactionOverride1, RewardFactionOverride2, RewardFactionOverride3, RewardFactionOverride4, RewardFactionOverride5, "
- // 62 63 64 65
- "PointMapId, PointX, PointY, PointOption, "
- // 66 67 68 69 70 71 72
- "LogTitle, LogDescription, QuestDescription, EndText, OfferRewardText, RequestItemsText, QuestCompletionLog, "
- // 73 74 75 76 77 78 79 80
+ // 13 14 15 16 17 18 19 20
+ "RewardNextQuest, RewardXPDifficulty, RewardMoney, RewardBonusMoney, RewardDisplaySpell, RewardSpell, RewardHonor, RewardKillHonor, "
+ // 21 22 23 24 25 26
+ "StartItem, Flags, RewardTitle, RequiredPlayerKills, RewardTalents, RewardArenaPoints, "
+ // 27 28 29 30 31 32 33 34
+ "RewardItem1, RewardAmount1, RewardItem2, RewardAmount2, RewardItem3, RewardAmount3, RewardItem4, RewardAmount4, "
+ // 35 36 37 38 39 40 41 42 43 44 45 46
+ "RewardChoiceItemID1, RewardChoiceItemQuantity1, RewardChoiceItemID2, RewardChoiceItemQuantity2, RewardChoiceItemID3, RewardChoiceItemQuantity3, RewardChoiceItemID4, RewardChoiceItemQuantity4, RewardChoiceItemID5, RewardChoiceItemQuantity5, RewardChoiceItemID6, RewardChoiceItemQuantity6, "
+ // 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
+ "RewardFactionID1, RewardFactionValue1, RewardFactionOverride1, RewardFactionID2, RewardFactionValue2, RewardFactionOverride2, RewardFactionID3, RewardFactionValue3, RewardFactionOverride3, RewardFactionID4, RewardFactionValue4, RewardFactionOverride4, RewardFactionID5, RewardFactionValue5, RewardFactionOverride5,"
+ // 62 63 64 65
+ "POIContinent, POIx, POIy, POIPriority, "
+ // 66 67 68 69 70
+ "LogTitle, LogDescription, QuestDescription, AreaDescription, QuestCompletionLog, "
+ // 71 72 73 74 75 76 77 78
"RequiredNpcOrGo1, RequiredNpcOrGo2, RequiredNpcOrGo3, RequiredNpcOrGo4, RequiredNpcOrGoCount1, RequiredNpcOrGoCount2, RequiredNpcOrGoCount3, RequiredNpcOrGoCount4, "
- // 81 82 83 84 85 86 87 88
- "RequiredSourceItemId1, RequiredSourceItemId2, RequiredSourceItemId3, RequiredSourceItemId4, RequiredSourceItemCount1, RequiredSourceItemCount2, RequiredSourceItemCount3, RequiredSourceItemCount4, "
- // 89 90 91 92 93 94 95 96 97 98 99 100
+ // 79 80 81 82 83 84 85 86
+ "ItemDrop1, ItemDrop2, ItemDrop3, ItemDrop4, ItemDropQuantity1, ItemDropQuantity2, ItemDropQuantity3, ItemDropQuantity4, "
+ // 87 88 89 90 91 92 93 94 95 96 97 98
"RequiredItemId1, RequiredItemId2, RequiredItemId3, RequiredItemId4, RequiredItemId5, RequiredItemId6, RequiredItemCount1, RequiredItemCount2, RequiredItemCount3, RequiredItemCount4, RequiredItemCount5, RequiredItemCount6, "
- // 101 102 103 104 105 106 107 108 109 110 111 112 113
- "Unknown0, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4, DetailsEmote1, DetailsEmote2, DetailsEmote3, DetailsEmote4, DetailsEmoteDelay1, DetailsEmoteDelay2, DetailsEmoteDelay3, DetailsEmoteDelay4, "
- // 114 115 116 117 118 119 120 121 122 123
- "EmoteOnIncomplete, EmoteOnComplete, OfferRewardEmote1, OfferRewardEmote2, OfferRewardEmote3, OfferRewardEmote4, OfferRewardEmoteDelay1, OfferRewardEmoteDelay2, OfferRewardEmoteDelay3, OfferRewardEmoteDelay4"
+ // 99 100 101 102 103
+ "Unknown0, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4"
" FROM quest_template");
if (!result)
{
@@ -4016,6 +3967,75 @@ void ObjectMgr::LoadQuests()
std::map<uint32, uint32> usedMailTemplates;
+ // Load `quest_details`
+ // 0 1 2 3 4 5 6 7 8
+ result = WorldDatabase.Query("SELECT ID, Emote1, Emote2, Emote3, Emote4, EmoteDelay1, EmoteDelay2, EmoteDelay3, EmoteDelay4 FROM quest_details");
+
+ if (!result)
+ {
+ TC_LOG_ERROR("server.loading", ">> Loaded 0 quest details. DB table `quest_details` is empty.");
+ }
+ else
+ {
+ do
+ {
+ Field* fields = result->Fetch();
+ uint32 questId = fields[0].GetUInt32();
+
+ auto itr = _questTemplates.find(questId);
+ if (itr != _questTemplates.end())
+ itr->second->LoadQuestDetails(fields);
+ else
+ TC_LOG_ERROR("server.loading", "Table `quest_details` has data for quest %u but such quest does not exist", questId);
+ } while (result->NextRow());
+ }
+
+ // Load `quest_request_items`
+ // 0 1 2 3
+ result = WorldDatabase.Query("SELECT ID, EmoteOnComplete, EmoteOnIncomplete, CompletionText FROM quest_request_items");
+
+ if (!result)
+ {
+ TC_LOG_ERROR("server.loading", ">> Loaded 0 quest request items. DB table `quest_request_items` is empty.");
+ }
+ else
+ {
+ do
+ {
+ Field* fields = result->Fetch();
+ uint32 questId = fields[0].GetUInt32();
+
+ auto itr = _questTemplates.find(questId);
+ if (itr != _questTemplates.end())
+ itr->second->LoadQuestRequestItems(fields);
+ else
+ TC_LOG_ERROR("server.loading", "Table `quest_request_items` has data for quest %u but such quest does not exist", questId);
+ } while (result->NextRow());
+ }
+
+ // Load `quest_offer_reward`
+ // 0 1 2 3 4 5 6 7 8 9
+ result = WorldDatabase.Query("SELECT ID, Emote1, Emote2, Emote3, Emote4, EmoteDelay1, EmoteDelay2, EmoteDelay3, EmoteDelay4, RewardText FROM quest_offer_reward");
+
+ if (!result)
+ {
+ TC_LOG_ERROR("server.loading", ">> Loaded 0 quest reward emotes. DB table `quest_offer_reward` is empty.");
+ }
+ else
+ {
+ do
+ {
+ Field* fields = result->Fetch();
+ uint32 questId = fields[0].GetUInt32();
+
+ auto itr = _questTemplates.find(questId);
+ if (itr != _questTemplates.end())
+ itr->second->LoadQuestOfferReward(fields);
+ else
+ TC_LOG_ERROR("server.loading", "Table `quest_offer_reward` has data for quest %u but such quest does not exist", questId);
+ } while (result->NextRow());
+ }
+
// Load `quest_template_addon`
// 0 1 2 3 4 5 6 7 8
result = WorldDatabase.Query("SELECT ID, MaxLevel, AllowableClasses, SourceSpellID, PrevQuestID, NextQuestID, ExclusiveGroup, RewardMailTemplateID, RewardMailDelay, "
@@ -4150,13 +4170,13 @@ void ObjectMgr::LoadQuests()
qinfo->RequiredClasses = 0;
}
}
- // RequiredRaces, can be 0/RACEMASK_ALL_PLAYABLE to allow any race
- if (qinfo->RequiredRaces)
+ // AllowableRaces, can be 0/RACEMASK_ALL_PLAYABLE to allow any race
+ if (qinfo->AllowableRaces)
{
- if (!(qinfo->RequiredRaces & RACEMASK_ALL_PLAYABLE))
+ if (!(qinfo->AllowableRaces & RACEMASK_ALL_PLAYABLE))
{
- TC_LOG_ERROR("sql.sql", "Quest %u does not contain any playable races in `RequiredRaces` (%u), value set to 0 (all races).", qinfo->GetQuestId(), qinfo->RequiredRaces);
- qinfo->RequiredRaces = 0;
+ TC_LOG_ERROR("sql.sql", "Quest %u does not contain any playable races in `AllowableRaces` (%u), value set to 0 (all races).", qinfo->GetQuestId(), qinfo->AllowableRaces);
+ qinfo->AllowableRaces = 0;
}
}
// RequiredSkillId, can be 0
@@ -4258,26 +4278,26 @@ void ObjectMgr::LoadQuests()
// quest can't reward this title
}
- if (qinfo->SourceItemId)
+ if (qinfo->StartItem)
{
- if (!sObjectMgr->GetItemTemplate(qinfo->SourceItemId))
+ if (!sObjectMgr->GetItemTemplate(qinfo->StartItem))
{
- TC_LOG_ERROR("sql.sql", "Quest %u has `SourceItemId` = %u but item with entry %u does not exist, quest can't be done.",
- qinfo->GetQuestId(), qinfo->SourceItemId, qinfo->SourceItemId);
- qinfo->SourceItemId = 0; // quest can't be done for this requirement
+ TC_LOG_ERROR("sql.sql", "Quest %u has `StartItem` = %u but item with entry %u does not exist, quest can't be done.",
+ qinfo->GetQuestId(), qinfo->StartItem, qinfo->StartItem);
+ qinfo->StartItem = 0; // quest can't be done for this requirement
}
- else if (qinfo->SourceItemIdCount == 0)
+ else if (qinfo->StartItemCount == 0)
{
- TC_LOG_ERROR("sql.sql", "Quest %u has `SourceItemId` = %u but `SourceItemIdCount` = 0, set to 1 but need fix in DB.",
- qinfo->GetQuestId(), qinfo->SourceItemId);
- qinfo->SourceItemIdCount = 1; // update to 1 for allow quest work for backward compatibility with DB
+ TC_LOG_ERROR("sql.sql", "Quest %u has `StartItem` = %u but `StartItemCount` = 0, set to 1 but need fix in DB.",
+ qinfo->GetQuestId(), qinfo->StartItem);
+ qinfo->StartItemCount = 1; // update to 1 for allow quest work for backward compatibility with DB
}
}
- else if (qinfo->SourceItemIdCount>0)
+ else if (qinfo->StartItemCount>0)
{
- TC_LOG_ERROR("sql.sql", "Quest %u has `SourceItemId` = 0 but `SourceItemIdCount` = %u, useless value.",
- qinfo->GetQuestId(), qinfo->SourceItemIdCount);
- qinfo->SourceItemIdCount=0; // no quest work changes in fact
+ TC_LOG_ERROR("sql.sql", "Quest %u has `StartItem` = 0 but `StartItemCount` = %u, useless value.",
+ qinfo->GetQuestId(), qinfo->StartItemCount);
+ qinfo->StartItemCount=0; // no quest work changes in fact
}
if (qinfo->SourceSpellid)
@@ -4328,22 +4348,22 @@ void ObjectMgr::LoadQuests()
for (uint8 j = 0; j < QUEST_SOURCE_ITEM_IDS_COUNT; ++j)
{
- uint32 id = qinfo->RequiredSourceItemId[j];
+ uint32 id = qinfo->ItemDrop[j];
if (id)
{
if (!sObjectMgr->GetItemTemplate(id))
{
- TC_LOG_ERROR("sql.sql", "Quest %u has `RequiredSourceItemId%d` = %u but item with entry %u does not exist, quest can't be done.",
+ TC_LOG_ERROR("sql.sql", "Quest %u has `ItemDrop%d` = %u but item with entry %u does not exist, quest can't be done.",
qinfo->GetQuestId(), j+1, id, id);
// no changes, quest can't be done for this requirement
}
}
else
{
- if (qinfo->RequiredSourceItemCount[j]>0)
+ if (qinfo->ItemDropQuantity[j]>0)
{
- TC_LOG_ERROR("sql.sql", "Quest %u has `RequiredSourceItemId%d` = 0 but `RequiredSourceItemCount%d` = %u.",
- qinfo->GetQuestId(), j+1, j+1, qinfo->RequiredSourceItemCount[j]);
+ TC_LOG_ERROR("sql.sql", "Quest %u has `ItemDrop%d` = 0 but `ItemDropQuantity%d` = %u.",
+ qinfo->GetQuestId(), j+1, j+1, qinfo->ItemDropQuantity[j]);
// no changes, quest ignore this data
}
}
@@ -4464,55 +4484,55 @@ void ObjectMgr::LoadQuests()
}
}
- if (qinfo->RewardSpell)
+ if (qinfo->RewardDisplaySpell)
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->RewardSpell);
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->RewardDisplaySpell);
if (!spellInfo)
{
- TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpell` = %u but spell %u does not exist, spell removed as display reward.",
- qinfo->GetQuestId(), qinfo->RewardSpell, qinfo->RewardSpell);
- qinfo->RewardSpell = 0; // no spell reward will display for this quest
+ TC_LOG_ERROR("sql.sql", "Quest %u has `RewardDisplaySpell` = %u but spell %u does not exist, spell removed as display reward.",
+ qinfo->GetQuestId(), qinfo->RewardDisplaySpell, qinfo->RewardDisplaySpell);
+ qinfo->RewardDisplaySpell = 0; // no spell reward will display for this quest
}
else if (!SpellMgr::IsSpellValid(spellInfo))
{
- TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpell` = %u but spell %u is broken, quest will not have a spell reward.",
- qinfo->GetQuestId(), qinfo->RewardSpell, qinfo->RewardSpell);
- qinfo->RewardSpell = 0; // no spell reward will display for this quest
+ TC_LOG_ERROR("sql.sql", "Quest %u has `RewardDisplaySpell` = %u but spell %u is broken, quest will not have a spell reward.",
+ qinfo->GetQuestId(), qinfo->RewardDisplaySpell, qinfo->RewardDisplaySpell);
+ qinfo->RewardDisplaySpell = 0; // no spell reward will display for this quest
}
- else if (GetTalentSpellCost(qinfo->RewardSpell))
+ else if (GetTalentSpellCost(qinfo->RewardDisplaySpell))
{
- TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpell` = %u but spell %u is talent, quest will not have a spell reward.",
- qinfo->GetQuestId(), qinfo->RewardSpell, qinfo->RewardSpell);
- qinfo->RewardSpell = 0; // no spell reward will display for this quest
+ TC_LOG_ERROR("sql.sql", "Quest %u has `RewardDisplaySpell` = %u but spell %u is talent, quest will not have a spell reward.",
+ qinfo->GetQuestId(), qinfo->RewardDisplaySpell, qinfo->RewardDisplaySpell);
+ qinfo->RewardDisplaySpell = 0; // no spell reward will display for this quest
}
}
- if (qinfo->RewardSpellCast > 0)
+ if (qinfo->RewardSpell > 0)
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->RewardSpellCast);
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->RewardSpell);
if (!spellInfo)
{
- TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpellCast` = %u but spell %u does not exist, quest will not have a spell reward.",
- qinfo->GetQuestId(), qinfo->RewardSpellCast, qinfo->RewardSpellCast);
- qinfo->RewardSpellCast = 0; // no spell will be cast on player
+ TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpell` = %u but spell %u does not exist, quest will not have a spell reward.",
+ qinfo->GetQuestId(), qinfo->RewardSpell, qinfo->RewardSpell);
+ qinfo->RewardSpell = 0; // no spell will be cast on player
}
else if (!SpellMgr::IsSpellValid(spellInfo))
{
- TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpellCast` = %u but spell %u is broken, quest will not have a spell reward.",
- qinfo->GetQuestId(), qinfo->RewardSpellCast, qinfo->RewardSpellCast);
- qinfo->RewardSpellCast = 0; // no spell will be cast on player
+ TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpell` = %u but spell %u is broken, quest will not have a spell reward.",
+ qinfo->GetQuestId(), qinfo->RewardSpell, qinfo->RewardSpell);
+ qinfo->RewardSpell = 0; // no spell will be cast on player
}
- else if (GetTalentSpellCost(qinfo->RewardSpellCast))
+ else if (GetTalentSpellCost(qinfo->RewardSpell))
{
- TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpell` = %u but spell %u is talent, quest will not have a spell reward.",
- qinfo->GetQuestId(), qinfo->RewardSpellCast, qinfo->RewardSpellCast);
- qinfo->RewardSpellCast = 0; // no spell will be cast on player
+ TC_LOG_ERROR("sql.sql", "Quest %u has `RewardDisplaySpell` = %u but spell %u is talent, quest will not have a spell reward.",
+ qinfo->GetQuestId(), qinfo->RewardSpell, qinfo->RewardSpell);
+ qinfo->RewardSpell = 0; // no spell will be cast on player
}
}
@@ -4537,14 +4557,14 @@ void ObjectMgr::LoadQuests()
usedMailTemplates[qinfo->RewardMailTemplateId] = qinfo->GetQuestId();
}
- if (qinfo->NextQuestIdChain)
+ if (qinfo->RewardNextQuest)
{
- QuestMap::iterator qNextItr = _questTemplates.find(qinfo->NextQuestIdChain);
+ QuestMap::iterator qNextItr = _questTemplates.find(qinfo->RewardNextQuest);
if (qNextItr == _questTemplates.end())
{
- TC_LOG_ERROR("sql.sql", "Quest %u has `NextQuestIdChain` = %u but quest %u does not exist, quest chain will not work.",
- qinfo->GetQuestId(), qinfo->NextQuestIdChain, qinfo->NextQuestIdChain);
- qinfo->NextQuestIdChain = 0;
+ TC_LOG_ERROR("sql.sql", "Quest %u has `RewardNextQuest` = %u but quest %u does not exist, quest chain will not work.",
+ qinfo->GetQuestId(), qinfo->RewardNextQuest, qinfo->RewardNextQuest);
+ qinfo->RewardNextQuest = 0;
}
else
qNextItr->second->prevChainQuests.push_back(qinfo->GetQuestId());
@@ -4579,7 +4599,7 @@ void ObjectMgr::LoadQuests()
if (qinfo->ExclusiveGroup)
mExclusiveQuestGroups.insert(std::pair<int32, uint32>(qinfo->ExclusiveGroup, qinfo->GetQuestId()));
- if (qinfo->LimitTime)
+ if (qinfo->TimeAllowed)
qinfo->SetSpecialFlag(QUEST_SPECIAL_FLAGS_TIMED);
if (qinfo->RequiredPlayerKills)
qinfo->SetSpecialFlag(QUEST_SPECIAL_FLAGS_PLAYER_KILL);
@@ -4655,7 +4675,7 @@ void ObjectMgr::LoadQuestLocales()
AddLocaleString(fields[1 + 11 * (i - 1) + 2].GetString(), locale, data.Objectives);
AddLocaleString(fields[1 + 11 * (i - 1) + 3].GetString(), locale, data.OfferRewardText);
AddLocaleString(fields[1 + 11 * (i - 1) + 4].GetString(), locale, data.RequestItemsText);
- AddLocaleString(fields[1 + 11 * (i - 1) + 5].GetString(), locale, data.EndText);
+ AddLocaleString(fields[1 + 11 * (i - 1) + 5].GetString(), locale, data.AreaDescription);
AddLocaleString(fields[1 + 11 * (i - 1) + 6].GetString(), locale, data.CompletedText);
for (uint8 k = 0; k < 4; ++k)
@@ -5025,13 +5045,13 @@ void ObjectMgr::LoadEventScripts()
{
for (size_t node_idx = 0; node_idx < sTaxiPathNodesByPath[path_idx].size(); ++node_idx)
{
- TaxiPathNodeEntry const& node = sTaxiPathNodesByPath[path_idx][node_idx];
+ TaxiPathNodeEntry const* node = sTaxiPathNodesByPath[path_idx][node_idx];
- if (node.ArrivalEventID)
- evt_scripts.insert(node.ArrivalEventID);
+ if (node->ArrivalEventID)
+ evt_scripts.insert(node->ArrivalEventID);
- if (node.DepartureEventID)
- evt_scripts.insert(node.DepartureEventID);
+ if (node->DepartureEventID)
+ evt_scripts.insert(node->DepartureEventID);
}
}
@@ -5095,8 +5115,8 @@ void ObjectMgr::LoadSpellScriptNames()
Field* fields = result->Fetch();
- int32 spellId = fields[0].GetInt32();
- char const* scriptName = fields[1].GetCString();
+ int32 spellId = fields[0].GetInt32();
+ std::string const scriptName = fields[1].GetString();
bool allRanks = false;
if (spellId < 0)
@@ -5108,18 +5128,18 @@ void ObjectMgr::LoadSpellScriptNames()
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo)
{
- TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) does not exist.", scriptName, spellId);
+ TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) does not exist.", scriptName.c_str(), spellId);
continue;
}
if (allRanks)
{
if (!spellInfo->IsRanked())
- TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) has no ranks of spell.", scriptName, fields[0].GetInt32());
+ TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) has no ranks of spell.", scriptName.c_str(), fields[0].GetInt32());
if (spellInfo->GetFirstRankSpell()->Id != uint32(spellId))
{
- TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) is not first rank of spell.", scriptName, fields[0].GetInt32());
+ TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) is not first rank of spell.", scriptName.c_str(), fields[0].GetInt32());
continue;
}
@@ -5132,7 +5152,7 @@ void ObjectMgr::LoadSpellScriptNames()
else
{
if (spellInfo->IsRanked())
- TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) is ranked spell. Perhaps not all ranks are assigned to this script.", scriptName, spellId);
+ TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) is ranked spell. Perhaps not all ranks are assigned to this script.", scriptName.c_str(), spellId);
_spellScriptsStore.insert(SpellScriptsContainer::value_type(spellInfo->Id, GetScriptId(scriptName)));
}
@@ -5170,7 +5190,7 @@ void ObjectMgr::ValidateSpellScripts()
bool valid = true;
if (!spellScript && !auraScript)
{
- TC_LOG_ERROR("scripts", "Functions GetSpellScript() and GetAuraScript() of script `%s` do not return objects - script skipped", GetScriptName(sitr->second->second));
+ TC_LOG_ERROR("scripts", "Functions GetSpellScript() and GetAuraScript() of script `%s` do not return objects - script skipped", GetScriptName(sitr->second->second).c_str());
valid = false;
}
if (spellScript)
@@ -5306,7 +5326,7 @@ void ObjectMgr::LoadInstanceTemplate()
instanceTemplate.AllowMount = fields[3].GetBool();
instanceTemplate.Parent = uint32(fields[1].GetUInt16());
- instanceTemplate.ScriptId = sObjectMgr->GetScriptId(fields[2].GetCString());
+ instanceTemplate.ScriptId = sObjectMgr->GetScriptId(fields[2].GetString());
_instanceTemplateStore[mapID] = instanceTemplate;
@@ -5593,7 +5613,7 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
Player* player = NULL;
if (serverUp)
- player = ObjectAccessor::FindConnectedPlayer(ObjectGuid(HIGHGUID_PLAYER, m->receiver));
+ player = ObjectAccessor::FindConnectedPlayer(ObjectGuid(HighGuid::Player, m->receiver));
if (player && player->m_mailsLoaded)
{ // this code will run very improbably (the time is between 4 and 5 am, in game is online a player, who has old mail
@@ -5771,8 +5791,8 @@ void ObjectMgr::LoadAreaTriggerScripts()
{
Field* fields = result->Fetch();
- uint32 triggerId = fields[0].GetUInt32();
- char const* scriptName = fields[1].GetCString();
+ uint32 triggerId = fields[0].GetUInt32();
+ std::string const scriptName = fields[1].GetString();
AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(triggerId);
if (!atEntry)
@@ -5993,7 +6013,8 @@ WorldSafeLocsEntry const* ObjectMgr::GetClosestGraveYard(float x, float y, float
// not need to check validity of map object; MapId _MUST_ be valid here
if (range.first == range.second && !map->IsBattlegroundOrArena())
{
- TC_LOG_ERROR("sql.sql", "Table `game_graveyard_zone` incomplete: Zone %u Team %u does not have a linked graveyard.", zoneId, team);
+ if (zoneId != 0) // zone == 0 can't be fixed, used by bliz for bugged zones
+ TC_LOG_ERROR("sql.sql", "Table `game_graveyard_zone` incomplete: Zone %u Team %u does not have a linked graveyard.", zoneId, team);
return GetDefaultGraveYard(team);
}
@@ -6389,29 +6410,21 @@ void ObjectMgr::SetHighestGuids()
{
QueryResult result = CharacterDatabase.Query("SELECT MAX(guid) FROM characters");
if (result)
- _hiCharGuid = (*result)[0].GetUInt32()+1;
-
- result = WorldDatabase.Query("SELECT MAX(guid) FROM creature");
- if (result)
- _hiCreatureGuid = (*result)[0].GetUInt32()+1;
+ GetGuidSequenceGenerator<HighGuid::Player>().Set((*result)[0].GetUInt32()+1);
result = CharacterDatabase.Query("SELECT MAX(guid) FROM item_instance");
if (result)
- _hiItemGuid = (*result)[0].GetUInt32()+1;
+ GetGuidSequenceGenerator<HighGuid::Item>().Set((*result)[0].GetUInt32()+1);
// Cleanup other tables from nonexistent guids ( >= _hiItemGuid)
- CharacterDatabase.PExecute("DELETE FROM character_inventory WHERE item >= '%u'", _hiItemGuid); // One-time query
- CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid >= '%u'", _hiItemGuid); // One-time query
- CharacterDatabase.PExecute("DELETE FROM auctionhouse WHERE itemguid >= '%u'", _hiItemGuid); // One-time query
- CharacterDatabase.PExecute("DELETE FROM guild_bank_item WHERE item_guid >= '%u'", _hiItemGuid); // One-time query
-
- result = WorldDatabase.Query("SELECT MAX(guid) FROM gameobject");
- if (result)
- _hiGoGuid = (*result)[0].GetUInt32()+1;
+ CharacterDatabase.PExecute("DELETE FROM character_inventory WHERE item >= '%u'", GetGuidSequenceGenerator<HighGuid::Item>().GetNextAfterMaxUsed()); // One-time query
+ CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid >= '%u'", GetGuidSequenceGenerator<HighGuid::Item>().GetNextAfterMaxUsed()); // One-time query
+ CharacterDatabase.PExecute("DELETE FROM auctionhouse WHERE itemguid >= '%u'", GetGuidSequenceGenerator<HighGuid::Item>().GetNextAfterMaxUsed()); // One-time query
+ CharacterDatabase.PExecute("DELETE FROM guild_bank_item WHERE item_guid >= '%u'", GetGuidSequenceGenerator<HighGuid::Item>().GetNextAfterMaxUsed()); // One-time query
result = WorldDatabase.Query("SELECT MAX(guid) FROM transports");
if (result)
- _hiMoTransGuid = (*result)[0].GetUInt32()+1;
+ GetGuidSequenceGenerator<HighGuid::Mo_Transport>().Set((*result)[0].GetUInt32()+1);
result = CharacterDatabase.Query("SELECT MAX(id) FROM auctionhouse");
if (result)
@@ -6421,10 +6434,6 @@ void ObjectMgr::SetHighestGuids()
if (result)
_mailId = (*result)[0].GetUInt32()+1;
- result = CharacterDatabase.Query("SELECT MAX(corpseGuid) FROM corpse");
- if (result)
- _hiCorpseGuid = (*result)[0].GetUInt32()+1;
-
result = CharacterDatabase.Query("SELECT MAX(arenateamid) FROM arena_team");
if (result)
sArenaTeamMgr->SetNextArenaTeamId((*result)[0].GetUInt32()+1);
@@ -6440,6 +6449,14 @@ void ObjectMgr::SetHighestGuids()
result = CharacterDatabase.Query("SELECT MAX(guid) FROM groups");
if (result)
sGroupMgr->SetGroupDbStoreSize((*result)[0].GetUInt32()+1);
+
+ result = WorldDatabase.Query("SELECT MAX(guid) FROM creature");
+ if (result)
+ _creatureSpawnId = (*result)[0].GetUInt32() + 1;
+
+ result = WorldDatabase.Query("SELECT MAX(guid) FROM gameobject");
+ if (result)
+ _gameObjectSpawnId = (*result)[0].GetUInt32() + 1;
}
uint32 ObjectMgr::GenerateAuctionID()
@@ -6472,59 +6489,29 @@ uint32 ObjectMgr::GenerateMailID()
return _mailId++;
}
-uint32 ObjectMgr::GenerateLowGuid(HighGuid guidhigh)
+uint32 ObjectMgr::GeneratePetNumber()
{
- switch (guidhigh)
+ return ++_hiPetNumber;
+}
+
+uint32 ObjectMgr::GenerateCreatureSpawnId()
+{
+ if (_creatureSpawnId >= uint32(0xFFFFFF))
{
- case HIGHGUID_ITEM:
- {
- ASSERT(_hiItemGuid < 0xFFFFFFFE && "Item guid overflow!");
- return _hiItemGuid++;
- }
- case HIGHGUID_UNIT:
- {
- ASSERT(_hiCreatureGuid < 0x00FFFFFE && "Creature guid overflow!");
- return _hiCreatureGuid++;
- }
- case HIGHGUID_PET:
- {
- ASSERT(_hiPetGuid < 0x00FFFFFE && "Pet guid overflow!");
- return _hiPetGuid++;
- }
- case HIGHGUID_VEHICLE:
- {
- ASSERT(_hiVehicleGuid < 0x00FFFFFF && "Vehicle guid overflow!");
- return _hiVehicleGuid++;
- }
- case HIGHGUID_PLAYER:
- {
- ASSERT(_hiCharGuid < 0xFFFFFFFE && "Player guid overflow!");
- return _hiCharGuid++;
- }
- case HIGHGUID_GAMEOBJECT:
- {
- ASSERT(_hiGoGuid < 0x00FFFFFE && "Gameobject guid overflow!");
- return _hiGoGuid++;
- }
- case HIGHGUID_CORPSE:
- {
- ASSERT(_hiCorpseGuid < 0xFFFFFFFE && "Corpse guid overflow!");
- return _hiCorpseGuid++;
- }
- case HIGHGUID_DYNAMICOBJECT:
- {
- ASSERT(_hiDoGuid < 0xFFFFFFFE && "DynamicObject guid overflow!");
- return _hiDoGuid++;
- }
- case HIGHGUID_MO_TRANSPORT:
- {
- ASSERT(_hiMoTransGuid < 0xFFFFFFFE && "MO Transport guid overflow!");
- return _hiMoTransGuid++;
- }
- default:
- ASSERT(false && "ObjectMgr::GenerateLowGuid - Unknown HIGHGUID type");
- return 0;
+ TC_LOG_ERROR("misc", "Creature spawn id overflow!! Can't continue, shutting down server. ");
+ World::StopNow(ERROR_EXIT_CODE);
}
+ return _creatureSpawnId++;
+}
+
+uint32 ObjectMgr::GenerateGameObjectSpawnId()
+{
+ if (_gameObjectSpawnId >= uint32(0xFFFFFF))
+ {
+ TC_LOG_ERROR("misc", "Creature spawn id overflow!! Can't continue, shutting down server. ");
+ World::StopNow(ERROR_EXIT_CODE);
+ }
+ return _gameObjectSpawnId++;
}
void ObjectMgr::LoadGameObjectLocales()
@@ -6550,6 +6537,8 @@ void ObjectMgr::LoadGameObjectLocales()
GameObjectLocale& data = _gameObjectLocaleStore[id];
LocaleConstant locale = GetLocaleByName(localeName);
+ if (locale == LOCALE_enUS)
+ continue;
AddLocaleString(name, locale, data.Name);
AddLocaleString(castBarCaption, locale, data.CastBarCaption);
@@ -6661,7 +6650,7 @@ void ObjectMgr::LoadGameObjectTemplate()
got.raw.data[i] = fields[10 + i].GetInt32(); // data1 and data6 can be -1
got.AIName = fields[34].GetString();
- got.ScriptId = GetScriptId(fields[35].GetCString());
+ got.ScriptId = GetScriptId(fields[35].GetString());
// Checks
@@ -6908,49 +6897,6 @@ std::string ObjectMgr::GeneratePetName(uint32 entry)
return *(list0.begin()+urand(0, list0.size()-1)) + *(list1.begin()+urand(0, list1.size()-1));
}
-uint32 ObjectMgr::GeneratePetNumber()
-{
- return ++_hiPetNumber;
-}
-
-void ObjectMgr::LoadCorpses()
-{
- uint32 oldMSTime = getMSTime();
-
- PreparedQueryResult result = CharacterDatabase.Query(CharacterDatabase.GetPreparedStatement(CHAR_SEL_CORPSES));
- if (!result)
- {
- TC_LOG_INFO("server.loading", ">> Loaded 0 corpses. DB table `corpse` is empty.");
- return;
- }
-
- uint32 count = 0;
- do
- {
- Field* fields = result->Fetch();
- uint32 guid = fields[16].GetUInt32();
- CorpseType type = CorpseType(fields[13].GetUInt8());
- if (type >= MAX_CORPSE_TYPE)
- {
- TC_LOG_ERROR("misc", "Corpse (guid: %u) have wrong corpse type (%u), not loading.", guid, type);
- continue;
- }
-
- Corpse* corpse = new Corpse(type);
- if (!corpse->LoadCorpseFromDB(guid, fields))
- {
- delete corpse;
- continue;
- }
-
- sObjectAccessor->AddCorpse(corpse);
- ++count;
- }
- while (result->NextRow());
-
- TC_LOG_INFO("server.loading", ">> Loaded %u corpses in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
-}
-
void ObjectMgr::LoadReputationRewardRate()
{
uint32 oldMSTime = getMSTime();
@@ -7389,7 +7335,7 @@ void ObjectMgr::LoadNPCSpellClickSpells()
TC_LOG_INFO("server.loading", ">> Loaded %u spellclick definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
}
-void ObjectMgr::DeleteCreatureData(uint32 guid)
+void ObjectMgr::DeleteCreatureData(ObjectGuid::LowType guid)
{
// remove mapid*cellid -> guid_set map
CreatureData const* data = GetCreatureData(guid);
@@ -7399,7 +7345,7 @@ void ObjectMgr::DeleteCreatureData(uint32 guid)
_creatureDataStore.erase(guid);
}
-void ObjectMgr::DeleteGOData(uint32 guid)
+void ObjectMgr::DeleteGOData(ObjectGuid::LowType guid)
{
// remove mapid*cellid -> guid_set map
GameObjectData const* data = GetGOData(guid);
@@ -7409,20 +7355,6 @@ void ObjectMgr::DeleteGOData(uint32 guid)
_gameObjectDataStore.erase(guid);
}
-void ObjectMgr::AddCorpseCellData(uint32 mapid, uint32 cellid, uint32 player_guid, uint32 instance)
-{
- // corpses are always added to spawn mode 0 and they are spawned by their instance id
- CellObjectGuids& cell_guids = _mapObjectGuidsStore[MAKE_PAIR32(mapid, 0)][cellid];
- cell_guids.corpses[player_guid] = instance;
-}
-
-void ObjectMgr::DeleteCorpseCellData(uint32 mapid, uint32 cellid, uint32 player_guid)
-{
- // corpses are always added to spawn mode 0 and they are spawned by their instance id
- CellObjectGuids& cell_guids = _mapObjectGuidsStore[MAKE_PAIR32(mapid, 0)][cellid];
- cell_guids.corpses.erase(player_guid);
-}
-
void ObjectMgr::LoadQuestRelationsHelper(QuestRelations& map, QuestRelationsReverse* reverseMap, std::string const& table, bool starter, bool go)
{
uint32 oldMSTime = getMSTime();
@@ -7649,7 +7581,7 @@ bool isValidString(const std::wstring& wstr, uint32 strictMask, bool numericOrSp
return false;
}
-ResponseCodes ObjectMgr::CheckPlayerName(const std::string& name, bool create)
+ResponseCodes ObjectMgr::CheckPlayerName(std::string const& name, LocaleConstant locale, bool create /*= false*/)
{
std::wstring wname;
if (!Utf8toWStr(name, wname))
@@ -7671,7 +7603,7 @@ ResponseCodes ObjectMgr::CheckPlayerName(const std::string& name, bool create)
if (wname[i] == wname[i-1] && wname[i] == wname[i-2])
return CHAR_NAME_THREE_CONSECUTIVE;
- return CHAR_NAME_SUCCESS;
+ return ValidateName(name, locale);
}
bool ObjectMgr::IsValidCharterName(const std::string& name)
@@ -7692,7 +7624,7 @@ bool ObjectMgr::IsValidCharterName(const std::string& name)
return isValidString(wname, strictMask, true);
}
-PetNameInvalidReason ObjectMgr::CheckPetName(const std::string& name)
+PetNameInvalidReason ObjectMgr::CheckPetName(const std::string& name, LocaleConstant locale)
{
std::wstring wname;
if (!Utf8toWStr(name, wname))
@@ -7709,6 +7641,17 @@ PetNameInvalidReason ObjectMgr::CheckPetName(const std::string& name)
if (!isValidString(wname, strictMask, false))
return PET_NAME_MIXED_LANGUAGES;
+ switch (ValidateName(name, locale))
+ {
+ case CHAR_NAME_PROFANE:
+ return PET_NAME_PROFANE;
+ case CHAR_NAME_RESERVED:
+ return PET_NAME_RESERVED;
+ case RESPONSE_FAILURE:
+ return PET_NAME_INVALID;
+ default:
+ break;
+ }
return PET_NAME_SUCCESS;
}
@@ -8641,7 +8584,7 @@ void ObjectMgr::LoadScriptNames()
do
{
- _scriptNamesStore.emplace_back((*result)[0].GetCString());
+ _scriptNamesStore.push_back((*result)[0].GetString());
}
while (result->NextRow());
@@ -8655,11 +8598,18 @@ void ObjectMgr::LoadScriptNames()
TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " ScriptNames in %u ms", _scriptNamesStore.size(), GetMSTimeDiffToNow(oldMSTime));
}
-uint32 ObjectMgr::GetScriptId(char const* name)
+std::string const& ObjectMgr::GetScriptName(uint32 id) const
+{
+ static std::string const empty = "";
+ return id < _scriptNamesStore.size() ? _scriptNamesStore[id] : empty;
+}
+
+
+uint32 ObjectMgr::GetScriptId(std::string const& name)
{
// use binary search to find the script name in the sorted vector
// assume "" is the first element
- if (!name)
+ if (name.empty())
return 0;
ScriptNameContainer::const_iterator itr = std::lower_bound(_scriptNamesStore.begin(), _scriptNamesStore.end(), name);
@@ -9122,7 +9072,7 @@ VehicleAccessoryList const* ObjectMgr::GetVehicleAccessoryList(Vehicle* veh) con
if (Creature* cre = veh->GetBase()->ToCreature())
{
// Give preference to GUID-based accessories
- VehicleAccessoryContainer::const_iterator itr = _vehicleAccessoryStore.find(cre->GetDBTableGUIDLow());
+ VehicleAccessoryContainer::const_iterator itr = _vehicleAccessoryStore.find(cre->GetSpawnId());
if (itr != _vehicleAccessoryStore.end())
return &itr->second;
}
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 26f3ba7cff3..396be440205 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -36,12 +36,14 @@
#include "ObjectAccessor.h"
#include "ObjectDefines.h"
#include "VehicleDefines.h"
+#include "ConditionMgr.h"
+#include "DBCStores.h"
#include <string>
#include <tuple>
#include <map>
#include <limits>
-#include "ConditionMgr.h"
#include <functional>
+#include <memory>
class Item;
struct AccessRequirement;
@@ -256,7 +258,7 @@ struct ScriptInfo
struct // SCRIPT_COMMAND_RESPAWN_GAMEOBJECT (9)
{
- uint32 GOGuid; // datalong
+ ObjectGuid::LowType GOGuid; // datalong
uint32 DespawnDelay; // datalong2
} RespawnGameobject;
@@ -275,7 +277,7 @@ struct ScriptInfo
struct // SCRIPT_COMMAND_CLOSE_DOOR (12)
// SCRIPT_COMMAND_OPEN_DOOR (11)
{
- uint32 GOGuid; // datalong
+ ObjectGuid::LowType GOGuid; // datalong
uint32 ResetDelay; // datalong2
} ToggleDoor;
@@ -443,13 +445,11 @@ struct BroadcastText
typedef std::unordered_map<uint32, BroadcastText> BroadcastTextContainer;
-typedef std::set<uint32> CellGuidSet;
-typedef std::map<uint32/*player guid*/, uint32/*instance*/> CellCorpseSet;
+typedef std::set<ObjectGuid::LowType> CellGuidSet;
struct CellObjectGuids
{
CellGuidSet creatures;
CellGuidSet gameobjects;
- CellCorpseSet corpses;
};
typedef std::unordered_map<uint32/*cell_id*/, CellObjectGuids> CellObjectGuidsMap;
typedef std::unordered_map<uint32/*(mapid, spawnMode) pair*/, CellObjectGuidsMap> MapObjectGuids;
@@ -463,8 +463,8 @@ struct TrinityString
};
typedef std::map<ObjectGuid, ObjectGuid> LinkedRespawnContainer;
-typedef std::unordered_map<uint32, CreatureData> CreatureDataContainer;
-typedef std::unordered_map<uint32, GameObjectData> GameObjectDataContainer;
+typedef std::unordered_map<ObjectGuid::LowType, CreatureData> CreatureDataContainer;
+typedef std::unordered_map<ObjectGuid::LowType, GameObjectData> GameObjectDataContainer;
typedef std::map<TempSummonGroupKey, std::vector<TempSummonData> > TempSummonDataContainer;
typedef std::unordered_map<uint32, CreatureLocale> CreatureLocaleContainer;
typedef std::unordered_map<uint32, GameObjectLocale> GameObjectLocaleContainer;
@@ -564,14 +564,14 @@ struct GossipMenuItems
uint32 BoxMoney;
std::string BoxText;
uint32 BoxBroadcastTextId;
- ConditionList Conditions;
+ ConditionContainer Conditions;
};
struct GossipMenus
{
uint32 entry;
uint32 text_id;
- ConditionList conditions;
+ ConditionContainer conditions;
};
typedef std::multimap<uint32, GossipMenus> GossipMenusContainer;
@@ -706,7 +706,7 @@ class ObjectMgr
typedef std::map<uint32, uint32> CharacterConversionMap;
- Player* GetPlayerByLowGUID(uint32 lowguid) const;
+ Player* GetPlayerByLowGUID(ObjectGuid::LowType lowguid) const;
GameObjectTemplate const* GetGameObjectTemplate(uint32 entry);
GameObjectTemplateContainer const* GetGameObjectTemplates() const { return &_gameObjectTemplateStore; }
@@ -722,7 +722,7 @@ class ObjectMgr
static uint32 ChooseDisplayId(CreatureTemplate const* cinfo, CreatureData const* data = NULL);
static void ChooseCreatureFlags(CreatureTemplate const* cinfo, uint32& npcflag, uint32& unit_flags, uint32& dynamicflags, CreatureData const* data = NULL);
EquipmentInfo const* GetEquipmentInfo(uint32 entry, int8& id);
- CreatureAddon const* GetCreatureAddon(uint32 lowguid);
+ CreatureAddon const* GetCreatureAddon(ObjectGuid::LowType lowguid);
GameObjectAddon const* GetGameObjectAddon(ObjectGuid::LowType lowguid);
CreatureAddon const* GetCreatureTemplateAddon(uint32 entry);
ItemTemplate const* GetItemTemplate(uint32 entry);
@@ -778,7 +778,7 @@ class ObjectMgr
* If the player is online, the name is retrieved immediately otherwise
* a database query is done.
*
- * @remark Use sWorld->GetCharacterNameData because it doesn't require a database query when player is offline
+ * @remark Use sWorld->GetCharacterInfo because it doesn't require a database query when player is offline
*
* @param guid player full guid
* @param name returned name
@@ -984,7 +984,7 @@ class ObjectMgr
void LoadTempSummons();
void LoadCreatures();
void LoadLinkedRespawn();
- bool SetCreatureLinkedRespawn(uint32 guid, uint32 linkedGuid);
+ bool SetCreatureLinkedRespawn(ObjectGuid::LowType guid, ObjectGuid::LowType linkedGuid);
void LoadCreatureAddons();
void LoadGameObjectAddons();
void LoadCreatureModelInfo();
@@ -1023,7 +1023,6 @@ class ObjectMgr
void LoadExplorationBaseXP();
void LoadPetNames();
void LoadPetNumber();
- void LoadCorpses();
void LoadFishingBaseSkillLevel();
void LoadReputationRewardRate();
@@ -1059,11 +1058,20 @@ class ObjectMgr
CreatureBaseStats const* GetCreatureBaseStats(uint8 level, uint8 unitClass);
void SetHighestGuids();
- uint32 GenerateLowGuid(HighGuid guidhigh);
+
+ template<HighGuid type>
+ inline ObjectGuidGeneratorBase& GetGenerator()
+ {
+ static_assert(ObjectGuidTraits<type>::Global, "Only global guid can be generated in ObjectMgr context");
+ return GetGuidSequenceGenerator<type>();
+ }
+
uint32 GenerateAuctionID();
uint64 GenerateEquipmentSetGuid();
uint32 GenerateMailID();
uint32 GeneratePetNumber();
+ uint32 GenerateCreatureSpawnId();
+ uint32 GenerateGameObjectSpawnId();
typedef std::multimap<int32, uint32> ExclusiveQuestGroups;
typedef std::pair<ExclusiveQuestGroups::const_iterator, ExclusiveQuestGroups::const_iterator> ExclusiveQuestGroupsBounds;
@@ -1119,14 +1127,14 @@ class ObjectMgr
return NULL;
}
- CreatureData const* GetCreatureData(uint32 guid) const
+ CreatureData const* GetCreatureData(ObjectGuid::LowType guid) const
{
CreatureDataContainer::const_iterator itr = _creatureDataStore.find(guid);
if (itr == _creatureDataStore.end()) return NULL;
return &itr->second;
}
- CreatureData& NewOrExistCreatureData(uint32 guid) { return _creatureDataStore[guid]; }
- void DeleteCreatureData(uint32 guid);
+ CreatureData& NewOrExistCreatureData(ObjectGuid::LowType guid) { return _creatureDataStore[guid]; }
+ void DeleteCreatureData(ObjectGuid::LowType guid);
ObjectGuid GetLinkedRespawnGuid(ObjectGuid guid) const
{
LinkedRespawnContainer::const_iterator itr = _linkedRespawnStore.find(guid);
@@ -1188,14 +1196,14 @@ class ObjectMgr
return &itr->second;
}
- GameObjectData const* GetGOData(uint32 guid) const
+ GameObjectData const* GetGOData(ObjectGuid::LowType guid) const
{
GameObjectDataContainer::const_iterator itr = _gameObjectDataStore.find(guid);
if (itr == _gameObjectDataStore.end()) return NULL;
return &itr->second;
}
- GameObjectData& NewGOData(uint32 guid) { return _gameObjectDataStore[guid]; }
- void DeleteGOData(uint32 guid);
+ GameObjectData& NewGOData(ObjectGuid::LowType guid) { return _gameObjectDataStore[guid]; }
+ void DeleteGOData(ObjectGuid::LowType guid);
TrinityString const* GetTrinityString(uint32 entry) const
{
@@ -1209,25 +1217,21 @@ class ObjectMgr
LocaleConstant GetDBCLocaleIndex() const { return DBCLocaleIndex; }
void SetDBCLocaleIndex(LocaleConstant locale) { DBCLocaleIndex = locale; }
- void AddCorpseCellData(uint32 mapid, uint32 cellid, uint32 player_guid, uint32 instance);
- void DeleteCorpseCellData(uint32 mapid, uint32 cellid, uint32 player_guid);
-
// grid objects
- void AddCreatureToGrid(uint32 guid, CreatureData const* data);
- void RemoveCreatureFromGrid(uint32 guid, CreatureData const* data);
- void AddGameobjectToGrid(uint32 guid, GameObjectData const* data);
- void RemoveGameobjectFromGrid(uint32 guid, GameObjectData const* data);
- uint32 AddGOData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0, float rotation0 = 0, float rotation1 = 0, float rotation2 = 0, float rotation3 = 0);
- uint32 AddCreatureData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0);
- bool MoveCreatureData(uint32 guid, uint32 map, const Position& pos);
+ void AddCreatureToGrid(ObjectGuid::LowType guid, CreatureData const* data);
+ void RemoveCreatureFromGrid(ObjectGuid::LowType guid, CreatureData const* data);
+ void AddGameobjectToGrid(ObjectGuid::LowType guid, GameObjectData const* data);
+ void RemoveGameobjectFromGrid(ObjectGuid::LowType guid, GameObjectData const* data);
+ ObjectGuid::LowType AddGOData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0, float rotation0 = 0, float rotation1 = 0, float rotation2 = 0, float rotation3 = 0);
+ ObjectGuid::LowType AddCreatureData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0);
// reserved names
void LoadReservedPlayersNames();
bool IsReservedName(std::string const& name) const;
// name with valid structure and symbols
- static ResponseCodes CheckPlayerName(std::string const& name, bool create = false);
- static PetNameInvalidReason CheckPetName(std::string const& name);
+ static ResponseCodes CheckPlayerName(std::string const& name, LocaleConstant locale, bool create = false);
+ static PetNameInvalidReason CheckPetName(std::string const& name, LocaleConstant locale);
static bool IsValidCharterName(std::string const& name);
static bool CheckDeclinedNames(const std::wstring& w_ownname, DeclinedName const& names);
@@ -1266,8 +1270,8 @@ class ObjectMgr
bool IsVendorItemValid(uint32 vendor_entry, uint32 item, int32 maxcount, uint32 ptime, uint32 ExtendedCost, Player* player = NULL, std::set<uint32>* skip_vendors = NULL, uint32 ORnpcflag = 0) const;
void LoadScriptNames();
- char const* GetScriptName(uint32 id) const { return id < _scriptNamesStore.size() ? _scriptNamesStore[id].c_str() : ""; }
- uint32 GetScriptId(char const* name);
+ std::string const& GetScriptName(uint32 id) const;
+ uint32 GetScriptId(std::string const& name);
SpellClickInfoMapBounds GetSpellClickInfoMapBounds(uint32 creature_id) const
{
@@ -1327,17 +1331,21 @@ class ObjectMgr
uint32 _mailId;
uint32 _hiPetNumber;
+ uint32 _creatureSpawnId;
+ uint32 _gameObjectSpawnId;
+
// first free low guid for selected guid type
- uint32 _hiCharGuid;
- uint32 _hiCreatureGuid;
- uint32 _hiPetGuid;
- uint32 _hiVehicleGuid;
- uint32 _hiItemGuid;
- uint32 _hiGoGuid;
- uint32 _hiDoGuid;
- uint32 _hiCorpseGuid;
- uint32 _hiMoTransGuid;
+ template<HighGuid high>
+ inline ObjectGuidGeneratorBase& GetGuidSequenceGenerator()
+ {
+ auto itr = _guidGenerators.find(high);
+ if (itr == _guidGenerators.end())
+ itr = _guidGenerators.insert(std::make_pair(high, std::unique_ptr<ObjectGuidGenerator<high>>(new ObjectGuidGenerator<high>()))).first;
+
+ return *itr->second;
+ }
+ std::map<HighGuid, std::unique_ptr<ObjectGuidGeneratorBase>> _guidGenerators;
QuestMap _questTemplates;
typedef std::unordered_map<uint32, GossipText> GossipTextContainer;
@@ -1431,7 +1439,7 @@ class ObjectMgr
CreatureTemplateContainer _creatureTemplateStore;
CreatureModelContainer _creatureModelStore;
CreatureAddonContainer _creatureAddonStore;
- CreatureAddonContainer _creatureTemplateAddonStore;
+ CreatureAddonTemplateContainer _creatureTemplateAddonStore;
GameObjectAddonContainer _gameObjectAddonStore;
GameObjectQuestItemMap _gameObjectQuestItemStore;
CreatureQuestItemMap _creatureQuestItemStore;
diff --git a/src/server/game/Grids/GridDefines.h b/src/server/game/Grids/GridDefines.h
index 28670ad4968..8eae906ba87 100644
--- a/src/server/game/Grids/GridDefines.h
+++ b/src/server/game/Grids/GridDefines.h
@@ -20,6 +20,7 @@
#define TRINITY_GRIDDEFINES_H
#include "Common.h"
+#include "ObjectGuid.h"
#include "NGrid.h"
#include <cmath>
@@ -58,6 +59,7 @@ class Player;
// Creature used instead pet to simplify *::Visit templates (not required duplicate code for Creature->Pet case)
typedef TYPELIST_4(Player, Creature/*pets*/, Corpse/*resurrectable*/, DynamicObject/*farsight target*/) AllWorldObjectTypes;
typedef TYPELIST_4(GameObject, Creature/*except pets*/, DynamicObject, Corpse/*Bones*/) AllGridObjectTypes;
+typedef TYPELIST_5(Creature, GameObject, DynamicObject, Pet, Corpse) AllMapStoredObjectTypes;
typedef GridRefManager<Corpse> CorpseMapType;
typedef GridRefManager<Creature> CreatureMapType;
@@ -80,6 +82,7 @@ typedef NGrid<MAX_NUMBER_OF_CELLS, Player, AllWorldObjectTypes, AllGridObjectTyp
typedef TypeMapContainer<AllGridObjectTypes> GridTypeMapContainer;
typedef TypeMapContainer<AllWorldObjectTypes> WorldTypeMapContainer;
+typedef TypeUnorderedMapContainer<AllMapStoredObjectTypes, ObjectGuid> MapStoredObjectTypesContainer;
template<uint32 LIMIT>
struct CoordPair
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h
index 16e36d98d33..c2f5f75f98e 100644
--- a/src/server/game/Grids/Notifiers/GridNotifiers.h
+++ b/src/server/game/Grids/Notifiers/GridNotifiers.h
@@ -722,18 +722,6 @@ namespace Trinity
NearestGameObjectTypeInObjectRangeCheck(NearestGameObjectTypeInObjectRangeCheck const&);
};
- class GameObjectWithDbGUIDCheck
- {
- public:
- GameObjectWithDbGUIDCheck(WorldObject const& /*obj*/, uint32 db_guid) : i_db_guid(db_guid) { }
- bool operator()(GameObject const* go) const
- {
- return go->GetDBTableGUIDLow() == i_db_guid;
- }
- private:
- uint32 i_db_guid;
- };
-
// Unit checks
class MostHPMissingInRange
@@ -835,18 +823,6 @@ namespace Trinity
float i_range;
};
- class CreatureWithDbGUIDCheck
- {
- public:
- CreatureWithDbGUIDCheck(WorldObject const* /*obj*/, uint32 lowguid) : i_lowguid(lowguid) { }
- bool operator()(Creature* u)
- {
- return u->GetDBTableGUIDLow() == i_lowguid;
- }
- private:
- uint32 i_lowguid;
- };
-
class AnyFriendlyUnitInObjectRangeCheck
{
public:
diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp
index c7e1056a3ef..2c292c43785 100644
--- a/src/server/game/Grids/ObjectGridLoader.cpp
+++ b/src/server/game/Grids/ObjectGridLoader.cpp
@@ -62,7 +62,7 @@ class ObjectWorldLoader
{
public:
explicit ObjectWorldLoader(ObjectGridLoader& gloader)
- : i_cell(gloader.i_cell), i_map(gloader.i_map), i_corpses (0)
+ : i_cell(gloader.i_cell), i_map(gloader.i_map), i_grid(gloader.i_grid), i_corpses(gloader.i_corpses)
{ }
void Visit(CorpseMapType &m);
@@ -72,8 +72,9 @@ class ObjectWorldLoader
private:
Cell i_cell;
Map* i_map;
+ NGridType& i_grid;
public:
- uint32 i_corpses;
+ uint32& i_corpses;
};
template<class T> void ObjectGridLoader::SetObjectCell(T* /*obj*/, CellCoord const& /*cellCoord*/) { }
@@ -117,7 +118,7 @@ void LoadHelper(CellGuidSet const& guid_set, CellCoord &cell, GridRefManager<T>
for (CellGuidSet::const_iterator i_guid = guid_set.begin(); i_guid != guid_set.end(); ++i_guid)
{
T* obj = new T;
- uint32 guid = *i_guid;
+ ObjectGuid::LowType guid = *i_guid;
//TC_LOG_INFO("misc", "DEBUG: LoadHelper from table: %s for (guid: %u) Loading", table, guid);
if (!obj->LoadFromDB(guid, map))
{
@@ -129,38 +130,6 @@ void LoadHelper(CellGuidSet const& guid_set, CellCoord &cell, GridRefManager<T>
}
}
-void LoadHelper(CellCorpseSet const& cell_corpses, CellCoord &cell, CorpseMapType &m, uint32 &count, Map* map)
-{
- if (cell_corpses.empty())
- return;
-
- for (CellCorpseSet::const_iterator itr = cell_corpses.begin(); itr != cell_corpses.end(); ++itr)
- {
- if (itr->second != map->GetInstanceId())
- continue;
-
- ObjectGuid player_guid(HIGHGUID_PLAYER, itr->first);
-
- Corpse* obj = sObjectAccessor->GetCorpseForPlayerGUID(player_guid);
- if (!obj)
- continue;
-
- /// @todo this is a hack
- // corpse's map should be reset when the map is unloaded
- // but it may still exist when the grid is unloaded but map is not
- // in that case map == currMap
- obj->SetMap(map);
-
- if (obj->IsInGrid())
- {
- obj->AddToWorld();
- continue;
- }
-
- AddObjectHelper(cell, m, count, map, obj);
- }
-}
-
void ObjectGridLoader::Visit(GameObjectMapType &m)
{
CellCoord cellCoord = i_cell.GetCellCoord();
@@ -175,22 +144,33 @@ void ObjectGridLoader::Visit(CreatureMapType &m)
LoadHelper(cell_guids.creatures, cellCoord, m, i_creatures, i_map);
}
-void ObjectWorldLoader::Visit(CorpseMapType &m)
+void ObjectWorldLoader::Visit(CorpseMapType& /*m*/)
{
CellCoord cellCoord = i_cell.GetCellCoord();
- // corpses are always added to spawn mode 0 and they are spawned by their instance id
- CellObjectGuids const& cell_guids = sObjectMgr->GetCellObjectGuids(i_map->GetId(), 0, cellCoord.GetId());
- LoadHelper(cell_guids.corpses, cellCoord, m, i_corpses, i_map);
+ if (std::unordered_set<Corpse*> const* corpses = i_map->GetCorpsesInCell(cellCoord.GetId()))
+ {
+ for (Corpse* corpse : *corpses)
+ {
+ corpse->AddToWorld();
+ GridType& cell = i_grid.GetGridType(i_cell.CellX(), i_cell.CellY());
+ if (corpse->IsWorldObject())
+ cell.AddWorldObject(corpse);
+ else
+ cell.AddGridObject(corpse);
+
+ ++i_corpses;
+ }
+ }
}
void ObjectGridLoader::LoadN(void)
{
i_gameObjects = 0; i_creatures = 0; i_corpses = 0;
i_cell.data.Part.cell_y = 0;
- for (unsigned int x=0; x < MAX_NUMBER_OF_CELLS; ++x)
+ for (uint32 x = 0; x < MAX_NUMBER_OF_CELLS; ++x)
{
i_cell.data.Part.cell_x = x;
- for (unsigned int y=0; y < MAX_NUMBER_OF_CELLS; ++y)
+ for (uint32 y = 0; y < MAX_NUMBER_OF_CELLS; ++y)
{
i_cell.data.Part.cell_y = y;
@@ -205,7 +185,6 @@ void ObjectGridLoader::LoadN(void)
ObjectWorldLoader worker(*this);
TypeContainerVisitor<ObjectWorldLoader, WorldTypeMapContainer> visitor(worker);
i_grid.VisitGrid(x, y, visitor);
- i_corpses += worker.i_corpses;
}
}
}
@@ -256,7 +235,7 @@ void ObjectGridCleaner::Visit(GridRefManager<T> &m)
template void ObjectGridUnloader::Visit(CreatureMapType &);
template void ObjectGridUnloader::Visit(GameObjectMapType &);
template void ObjectGridUnloader::Visit(DynamicObjectMapType &);
-template void ObjectGridUnloader::Visit(CorpseMapType &);
+
template void ObjectGridCleaner::Visit(CreatureMapType &);
template void ObjectGridCleaner::Visit<GameObject>(GameObjectMapType &);
template void ObjectGridCleaner::Visit<DynamicObject>(DynamicObjectMapType &);
diff --git a/src/server/game/Grids/ObjectGridLoader.h b/src/server/game/Grids/ObjectGridLoader.h
index 54dadaefdb3..126ebd0d0a3 100644
--- a/src/server/game/Grids/ObjectGridLoader.h
+++ b/src/server/game/Grids/ObjectGridLoader.h
@@ -82,6 +82,7 @@ class ObjectGridCleaner
class ObjectGridUnloader
{
public:
+ void Visit(CorpseMapType& /*m*/) { } // corpses are deleted with Map
template<class T> void Visit(GridRefManager<T> &m);
};
#endif
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index 7e3b758d92c..4f8accee69c 100644
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -91,9 +91,9 @@ Group::~Group()
bool Group::Create(Player* leader)
{
ObjectGuid leaderGuid = leader->GetGUID();
- uint32 lowguid = sGroupMgr->GenerateGroupId();
+ ObjectGuid::LowType lowguid = sGroupMgr->GenerateGroupId();
- m_guid = ObjectGuid(HIGHGUID_GROUP, lowguid);
+ m_guid = ObjectGuid(HighGuid::Group, lowguid);
m_leaderGuid = leaderGuid;
m_leaderName = leader->GetName();
leader->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER);
@@ -162,15 +162,15 @@ bool Group::Create(Player* leader)
void Group::LoadGroupFromDB(Field* fields)
{
m_dbStoreId = fields[16].GetUInt32();
- m_guid = ObjectGuid(HIGHGUID_GROUP, sGroupMgr->GenerateGroupId());
- m_leaderGuid = ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32());
+ m_guid = ObjectGuid(HighGuid::Group, sGroupMgr->GenerateGroupId());
+ m_leaderGuid = ObjectGuid(HighGuid::Player, fields[0].GetUInt32());
// group leader not exist
if (!sObjectMgr->GetPlayerNameByGUID(m_leaderGuid, m_leaderName))
return;
m_lootMethod = LootMethod(fields[1].GetUInt8());
- m_looterGuid = ObjectGuid(HIGHGUID_PLAYER, fields[2].GetUInt32());
+ m_looterGuid = ObjectGuid(HighGuid::Player, fields[2].GetUInt32());
m_lootThreshold = ItemQualities(fields[3].GetUInt8());
for (uint8 i = 0; i < TARGETICONCOUNT; ++i)
@@ -192,16 +192,16 @@ void Group::LoadGroupFromDB(Field* fields)
else
m_raidDifficulty = Difficulty(r_diff);
- m_masterLooterGuid = ObjectGuid(HIGHGUID_PLAYER, fields[15].GetUInt32());
+ m_masterLooterGuid = ObjectGuid(HighGuid::Player, fields[15].GetUInt32());
if (m_groupType & GROUPTYPE_LFG)
sLFGMgr->_LoadFromDB(fields, GetGUID());
}
-void Group::LoadMemberFromDB(uint32 guidLow, uint8 memberFlags, uint8 subgroup, uint8 roles)
+void Group::LoadMemberFromDB(ObjectGuid::LowType guidLow, uint8 memberFlags, uint8 subgroup, uint8 roles)
{
MemberSlot member;
- member.guid = ObjectGuid(HIGHGUID_PLAYER, guidLow);
+ member.guid = ObjectGuid(HighGuid::Player, guidLow);
// skip non-existed member
if (!sObjectMgr->GetPlayerNameByGUID(member.guid, member.name))
@@ -539,7 +539,7 @@ bool Group::RemoveMember(ObjectGuid guid, const RemoveMethod& method /*= GROUP_R
}
// Reevaluate group enchanter if the leaving player had enchanting skill or the player is offline
- if ((player && player->GetSkillValue(SKILL_ENCHANTING)) || !player)
+ if (!player || player->GetSkillValue(SKILL_ENCHANTING))
ResetMaxEnchantingLevel();
// Remove player from loot rolls
@@ -659,7 +659,7 @@ void Group::ChangeLeader(ObjectGuid newLeaderGuid)
// Update the group leader
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_LEADER);
- stmt->setUInt32(0, newLeader->GetGUIDLow());
+ stmt->setUInt32(0, newLeader->GetGUID().GetCounter());
stmt->setUInt32(1, m_dbStoreId);
trans->Append(stmt);
@@ -925,7 +925,8 @@ void Group::GroupLoot(Loot* loot, WorldObject* pLootedObject)
//roll for over-threshold item if it's one-player loot
if (item->Quality >= uint32(m_lootThreshold))
{
- ObjectGuid newitemGUID = ObjectGuid(HIGHGUID_ITEM, sObjectMgr->GenerateLowGuid(HIGHGUID_ITEM));
+ ObjectGuid newitemGUID = ObjectGuid::Create<HighGuid::Item>(sObjectMgr->GetGenerator<HighGuid::Item>().Generate());
+
Roll* r = new Roll(newitemGUID, *i);
//a vector is filled with only near party members
@@ -1009,7 +1010,8 @@ void Group::GroupLoot(Loot* loot, WorldObject* pLootedObject)
continue;
}
- ObjectGuid newitemGUID = ObjectGuid(HIGHGUID_ITEM, sObjectMgr->GenerateLowGuid(HIGHGUID_ITEM));
+ ObjectGuid newitemGUID = ObjectGuid::Create<HighGuid::Item>(sObjectMgr->GetGenerator<HighGuid::Item>().Generate());
+
Roll* r = new Roll(newitemGUID, *i);
//a vector is filled with only near party members
@@ -1070,7 +1072,8 @@ void Group::NeedBeforeGreed(Loot* loot, WorldObject* lootedObject)
//roll for over-threshold item if it's one-player loot
if (item->Quality >= uint32(m_lootThreshold))
{
- ObjectGuid newitemGUID = ObjectGuid(HIGHGUID_ITEM, sObjectMgr->GenerateLowGuid(HIGHGUID_ITEM));
+ ObjectGuid newitemGUID = ObjectGuid::Create<HighGuid::Item>(sObjectMgr->GetGenerator<HighGuid::Item>().Generate());
+
Roll* r = new Roll(newitemGUID, *i);
for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next())
@@ -1145,7 +1148,8 @@ void Group::NeedBeforeGreed(Loot* loot, WorldObject* lootedObject)
continue;
item = sObjectMgr->GetItemTemplate(i->itemid);
- ObjectGuid newitemGUID = ObjectGuid(HIGHGUID_ITEM, sObjectMgr->GenerateLowGuid(HIGHGUID_ITEM));
+ ObjectGuid newitemGUID = ObjectGuid::Create<HighGuid::Item>(sObjectMgr->GetGenerator<HighGuid::Item>().Generate());
+
Roll* r = new Roll(newitemGUID, *i);
for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next())
@@ -2220,7 +2224,7 @@ ObjectGuid Group::GetGUID() const
return m_guid;
}
-uint32 Group::GetLowGUID() const
+ObjectGuid::LowType Group::GetLowGUID() const
{
return m_guid.GetCounter();
}
diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h
index 732afce9517..b814ab08026 100644
--- a/src/server/game/Groups/Group.h
+++ b/src/server/game/Groups/Group.h
@@ -186,7 +186,7 @@ class Group
// group manipulation methods
bool Create(Player* leader);
void LoadGroupFromDB(Field* field);
- void LoadMemberFromDB(uint32 guidLow, uint8 memberFlags, uint8 subgroup, uint8 roles);
+ void LoadMemberFromDB(ObjectGuid::LowType guidLow, uint8 memberFlags, uint8 subgroup, uint8 roles);
bool AddInvite(Player* player);
void RemoveInvite(Player* player);
void RemoveAllInvites();
@@ -211,7 +211,7 @@ class Group
bool IsCreated() const;
ObjectGuid GetLeaderGUID() const;
ObjectGuid GetGUID() const;
- uint32 GetLowGUID() const;
+ ObjectGuid::LowType GetLowGUID() const;
const char * GetLeaderName() const;
LootMethod GetLootMethod() const;
ObjectGuid GetLooterGuid() const;
diff --git a/src/server/game/Groups/GroupMgr.cpp b/src/server/game/Groups/GroupMgr.cpp
index ab80a208765..b8c8157b6d9 100644
--- a/src/server/game/Groups/GroupMgr.cpp
+++ b/src/server/game/Groups/GroupMgr.cpp
@@ -82,7 +82,7 @@ Group* GroupMgr::GetGroupByDbStoreId(uint32 storageId) const
return NULL;
}
-uint32 GroupMgr::GenerateGroupId()
+ObjectGuid::LowType GroupMgr::GenerateGroupId()
{
if (NextGroupId >= 0xFFFFFFFE)
{
@@ -92,7 +92,7 @@ uint32 GroupMgr::GenerateGroupId()
return NextGroupId++;
}
-Group* GroupMgr::GetGroupByGUID(uint32 groupId) const
+Group* GroupMgr::GetGroupByGUID(ObjectGuid::LowType groupId) const
{
GroupContainer::const_iterator itr = GroupStore.find(groupId);
if (itr != GroupStore.end())
diff --git a/src/server/game/Groups/GroupMgr.h b/src/server/game/Groups/GroupMgr.h
index 737c1771c14..ec02de16bc2 100644
--- a/src/server/game/Groups/GroupMgr.h
+++ b/src/server/game/Groups/GroupMgr.h
@@ -33,10 +33,10 @@ public:
return &instance;
}
- typedef std::map<uint32, Group*> GroupContainer;
+ typedef std::map<ObjectGuid::LowType, Group*> GroupContainer;
typedef std::vector<Group*> GroupDbContainer;
- Group* GetGroupByGUID(uint32 guid) const;
+ Group* GetGroupByGUID(ObjectGuid::LowType guid) const;
uint32 GenerateNewGroupDbStoreId();
void RegisterGroupDbStoreId(uint32 storageId, Group* group);
@@ -46,13 +46,13 @@ public:
void SetGroupDbStoreSize(uint32 newSize) { GroupDbStore.resize(newSize); }
void LoadGroups();
- uint32 GenerateGroupId();
+ ObjectGuid::LowType GenerateGroupId();
void AddGroup(Group* group);
void RemoveGroup(Group* group);
protected:
- uint32 NextGroupId;
+ ObjectGuid::LowType NextGroupId;
uint32 NextGroupDbStoreId;
GroupContainer GroupStore;
GroupDbContainer GroupDbStore;
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 04eb99b3097..d2fcad512bb 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -194,10 +194,10 @@ void Guild::EventLogEntry::WritePacket(WorldPacket& data) const
// Event type
data << uint8(m_eventType);
// Player 1
- data << ObjectGuid(HIGHGUID_PLAYER, m_playerGuid1);
+ data << ObjectGuid(HighGuid::Player, m_playerGuid1);
// Player 2 not for left/join guild events
if (m_eventType != GUILD_EVENT_LOG_JOIN_GUILD && m_eventType != GUILD_EVENT_LOG_LEAVE_GUILD)
- data << ObjectGuid(HIGHGUID_PLAYER, m_playerGuid2);
+ data << ObjectGuid(HighGuid::Player, m_playerGuid2);
// New Rank - only for promote/demote guild events
if (m_eventType == GUILD_EVENT_LOG_PROMOTE_PLAYER || m_eventType == GUILD_EVENT_LOG_DEMOTE_PLAYER)
data << uint8(m_newRank);
@@ -233,7 +233,7 @@ void Guild::BankEventLogEntry::SaveToDB(SQLTransaction& trans) const
void Guild::BankEventLogEntry::WritePacket(WorldPacket& data) const
{
data << uint8(m_eventType);
- data << ObjectGuid(HIGHGUID_PLAYER, m_playerGuid);
+ data << ObjectGuid(HighGuid::Player, m_playerGuid);
switch (m_eventType)
{
@@ -395,7 +395,7 @@ void Guild::BankTab::LoadFromDB(Field* fields)
bool Guild::BankTab::LoadItemFromDB(Field* fields)
{
uint8 slotId = fields[13].GetUInt8();
- uint32 itemGuid = fields[14].GetUInt32();
+ ObjectGuid::LowType itemGuid = fields[14].GetUInt32();
uint32 itemEntry = fields[15].GetUInt32();
if (slotId >= GUILD_BANK_MAX_SLOTS)
{
@@ -554,7 +554,7 @@ bool Guild::BankTab::SetItem(SQLTransaction& trans, uint8 slotId, Item* item)
stmt->setUInt32(0, m_guildId);
stmt->setUInt8 (1, m_tabId);
stmt->setUInt8 (2, slotId);
- stmt->setUInt32(3, item->GetGUIDLow());
+ stmt->setUInt32(3, item->GetGUID().GetCounter());
CharacterDatabase.ExecuteOrAppend(trans, stmt);
item->SetGuidValue(ITEM_FIELD_CONTAINED, ObjectGuid::Empty);
@@ -784,7 +784,7 @@ void EmblemInfo::WritePacket(WorldPacket& data) const
data << uint32(m_backgroundColor);
}
-void EmblemInfo::SaveToDB(uint32 guildId) const
+void EmblemInfo::SaveToDB(ObjectGuid::LowType guildId) const
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_EMBLEM_INFO);
stmt->setUInt32(0, m_style);
@@ -893,7 +893,7 @@ void Guild::PlayerMoveItemData::LogBankEvent(SQLTransaction& trans, MoveItemData
{
ASSERT(pFrom);
// Bank -> Char
- m_pGuild->_LogBankEvent(trans, GUILD_BANK_LOG_WITHDRAW_ITEM, pFrom->GetContainer(), m_pPlayer->GetGUIDLow(),
+ m_pGuild->_LogBankEvent(trans, GUILD_BANK_LOG_WITHDRAW_ITEM, pFrom->GetContainer(), m_pPlayer->GetGUID().GetCounter(),
pFrom->GetItem()->GetEntry(), count);
}
@@ -978,11 +978,11 @@ void Guild::BankMoveItemData::LogBankEvent(SQLTransaction& trans, MoveItemData*
ASSERT(pFrom->GetItem());
if (pFrom->IsBank())
// Bank -> Bank
- m_pGuild->_LogBankEvent(trans, GUILD_BANK_LOG_MOVE_ITEM, pFrom->GetContainer(), m_pPlayer->GetGUIDLow(),
+ m_pGuild->_LogBankEvent(trans, GUILD_BANK_LOG_MOVE_ITEM, pFrom->GetContainer(), m_pPlayer->GetGUID().GetCounter(),
pFrom->GetItem()->GetEntry(), count, m_container);
else
// Char -> Bank
- m_pGuild->_LogBankEvent(trans, GUILD_BANK_LOG_DEPOSIT_ITEM, m_container, m_pPlayer->GetGUIDLow(),
+ m_pGuild->_LogBankEvent(trans, GUILD_BANK_LOG_DEPOSIT_ITEM, m_container, m_pPlayer->GetGUID().GetCounter(),
pFrom->GetItem()->GetEntry(), count);
}
@@ -993,7 +993,7 @@ void Guild::BankMoveItemData::LogAction(MoveItemData* pFrom) const
{
sLog->outCommand(m_pPlayer->GetSession()->GetAccountId(),
"GM %s (Guid: %u) (Account: %u) deposit item: %s (Entry: %d Count: %u) to guild bank named: %s (Guild ID: %u)",
- m_pPlayer->GetName().c_str(), m_pPlayer->GetGUIDLow(), m_pPlayer->GetSession()->GetAccountId(),
+ m_pPlayer->GetName().c_str(), m_pPlayer->GetGUID().GetCounter(), m_pPlayer->GetSession()->GetAccountId(),
pFrom->GetItem()->GetTemplate()->Name1.c_str(), pFrom->GetItem()->GetEntry(), pFrom->GetItem()->GetCount(),
m_pGuild->GetName().c_str(), m_pGuild->GetId());
}
@@ -1522,7 +1522,7 @@ void Guild::HandleInviteMember(WorldSession* session, std::string const& name)
Player* player = session->GetPlayer();
// Do not show invitations from ignored players
- if (pInvitee->GetSocial()->HasIgnore(player->GetGUIDLow()))
+ if (pInvitee->GetSocial()->HasIgnore(player->GetGUID().GetCounter()))
return;
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && pInvitee->GetTeam() != player->GetTeam())
@@ -1554,7 +1554,7 @@ void Guild::HandleInviteMember(WorldSession* session, std::string const& name)
TC_LOG_DEBUG("guild", "Player %s invited %s to join his Guild", player->GetName().c_str(), name.c_str());
pInvitee->SetGuildIdInvited(m_id);
- _LogEvent(GUILD_EVENT_LOG_INVITE_PLAYER, player->GetGUIDLow(), pInvitee->GetGUIDLow());
+ _LogEvent(GUILD_EVENT_LOG_INVITE_PLAYER, player->GetGUID().GetCounter(), pInvitee->GetGUID().GetCounter());
WorldPacket data(SMSG_GUILD_INVITE, 8 + 10); // Guess size
data << player->GetName();
@@ -1595,7 +1595,7 @@ void Guild::HandleLeaveMember(WorldSession* session)
{
DeleteMember(player->GetGUID(), false, false);
- _LogEvent(GUILD_EVENT_LOG_LEAVE_GUILD, player->GetGUIDLow());
+ _LogEvent(GUILD_EVENT_LOG_LEAVE_GUILD, player->GetGUID().GetCounter());
_BroadcastEvent(GE_LEFT, player->GetGUID(), player->GetName().c_str());
SendCommandResult(session, GUILD_COMMAND_QUIT, ERR_GUILD_COMMAND_SUCCESS, m_name);
@@ -1629,7 +1629,7 @@ void Guild::HandleRemoveMember(WorldSession* session, std::string const& name)
ObjectGuid guid = member->GetGUID();
// After call to DeleteMember pointer to member becomes invalid
DeleteMember(guid, false, true);
- _LogEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, player->GetGUIDLow(), guid.GetCounter());
+ _LogEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, player->GetGUID().GetCounter(), guid.GetCounter());
_BroadcastEvent(GE_REMOVED, ObjectGuid::Empty, name.c_str(), player->GetName().c_str());
}
}
@@ -1683,7 +1683,7 @@ void Guild::HandleUpdateMemberRank(WorldSession* session, std::string const& nam
uint32 newRankId = member->GetRankId() + (demote ? 1 : -1);
member->ChangeRank(newRankId);
- _LogEvent(demote ? GUILD_EVENT_LOG_DEMOTE_PLAYER : GUILD_EVENT_LOG_PROMOTE_PLAYER, player->GetGUIDLow(), member->GetGUID().GetCounter(), newRankId);
+ _LogEvent(demote ? GUILD_EVENT_LOG_DEMOTE_PLAYER : GUILD_EVENT_LOG_PROMOTE_PLAYER, player->GetGUID().GetCounter(), member->GetGUID().GetCounter(), newRankId);
_BroadcastEvent(demote ? GE_DEMOTION : GE_PROMOTION, ObjectGuid::Empty, player->GetName().c_str(), name.c_str(), _GetRankName(newRankId).c_str());
}
}
@@ -1743,7 +1743,7 @@ void Guild::HandleMemberDepositMoney(WorldSession* session, uint32 amount)
player->ModifyMoney(-int32(amount));
player->SaveGoldToDB(trans);
- _LogBankEvent(trans, GUILD_BANK_LOG_DEPOSIT_MONEY, uint8(0), player->GetGUIDLow(), amount);
+ _LogBankEvent(trans, GUILD_BANK_LOG_DEPOSIT_MONEY, uint8(0), player->GetGUID().GetCounter(), amount);
CharacterDatabase.CommitTransaction(trans);
@@ -1794,7 +1794,7 @@ bool Guild::HandleMemberWithdrawMoney(WorldSession* session, uint32 amount, bool
_ModifyBankMoney(trans, amount, false);
// Log guild bank event
- _LogBankEvent(trans, repair ? GUILD_BANK_LOG_REPAIR_MONEY : GUILD_BANK_LOG_WITHDRAW_MONEY, uint8(0), player->GetGUIDLow(), amount);
+ _LogBankEvent(trans, repair ? GUILD_BANK_LOG_REPAIR_MONEY : GUILD_BANK_LOG_WITHDRAW_MONEY, uint8(0), player->GetGUID().GetCounter(), amount);
CharacterDatabase.CommitTransaction(trans);
std::string aux = ByteArrayToHexStr(reinterpret_cast<uint8*>(&m_bankMoney), 8, true);
@@ -1942,7 +1942,7 @@ bool Guild::LoadFromDB(Field* fields)
{
m_id = fields[0].GetUInt32();
m_name = fields[1].GetString();
- m_leaderGuid = ObjectGuid(HIGHGUID_PLAYER, fields[2].GetUInt32());
+ m_leaderGuid = ObjectGuid(HighGuid::Player, fields[2].GetUInt32());
m_emblemInfo.LoadFromDB(fields);
m_info = fields[8].GetString();
m_motd = fields[9].GetString();
@@ -1972,8 +1972,8 @@ void Guild::LoadRankFromDB(Field* fields)
bool Guild::LoadMemberFromDB(Field* fields)
{
- uint32 lowguid = fields[1].GetUInt32();
- Member *member = new Member(m_id, ObjectGuid(HIGHGUID_PLAYER, lowguid), fields[2].GetUInt8());
+ ObjectGuid::LowType lowguid = fields[1].GetUInt32();
+ Member *member = new Member(m_id, ObjectGuid(HighGuid::Player, lowguid), fields[2].GetUInt8());
if (!member->LoadFromDB(fields))
{
_DeleteMemberFromDB(lowguid);
@@ -2019,7 +2019,7 @@ bool Guild::LoadBankEventLogFromDB(Field* fields)
LogHolder* pLog = m_bankEventLog[tabId];
if (pLog->CanInsert())
{
- uint32 guid = fields[2].GetUInt32();
+ ObjectGuid::LowType guid = fields[2].GetUInt32();
GuildBankEventLogTypes eventType = GuildBankEventLogTypes(fields[3].GetUInt8());
if (BankEventLogEntry::IsMoneyEvent(eventType))
{
@@ -2152,7 +2152,7 @@ void Guild::BroadcastToGuild(WorldSession* session, bool officerOnly, std::strin
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
if (Player* player = itr->second->FindConnectedPlayer())
if (player->GetSession() && _HasRankRight(player, officerOnly ? GR_RIGHT_OFFCHATLISTEN : GR_RIGHT_GCHATLISTEN) &&
- !player->GetSocial()->HasIgnore(session->GetPlayer()->GetGUIDLow()))
+ !player->GetSocial()->HasIgnore(session->GetPlayer()->GetGUID().GetCounter()))
player->GetSession()->SendPacket(&data);
}
}
@@ -2222,7 +2222,7 @@ bool Guild::AddMember(ObjectGuid guid, uint8 rankId)
// This will be prevent attempt to join many guilds and corrupt guild data integrity
Player::RemovePetitionsAndSigns(guid, GUILD_CHARTER_TYPE);
- uint32 lowguid = guid.GetCounter();
+ ObjectGuid::LowType lowguid = guid.GetCounter();
// If rank was not passed, assign lowest possible rank
if (rankId == GUILD_RANK_NONE)
@@ -2284,7 +2284,7 @@ bool Guild::AddMember(ObjectGuid guid, uint8 rankId)
void Guild::DeleteMember(ObjectGuid guid, bool isDisbanding, bool isKicked, bool canDeleteGuild)
{
- uint32 lowguid = guid.GetCounter();
+ ObjectGuid::LowType lowguid = guid.GetCounter();
Player* player = ObjectAccessor::FindConnectedPlayer(guid);
// Guild master can be deleted when loading guild and guid doesn't exist in characters table
@@ -2635,7 +2635,7 @@ inline bool Guild::_MemberHasTabRights(ObjectGuid guid, uint8 tabId, uint32 righ
}
// Add new event log record
-inline void Guild::_LogEvent(GuildEventLogTypes eventType, uint32 playerGuid1, uint32 playerGuid2, uint8 newRank)
+inline void Guild::_LogEvent(GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank)
{
SQLTransaction trans = CharacterDatabase.BeginTransaction();
m_eventLog->AddEvent(trans, new EventLogEntry(m_id, m_eventLog->GetNextGUID(), eventType, playerGuid1, playerGuid2, newRank));
@@ -2645,7 +2645,7 @@ inline void Guild::_LogEvent(GuildEventLogTypes eventType, uint32 playerGuid1, u
}
// Add new bank event log record
-void Guild::_LogBankEvent(SQLTransaction& trans, GuildBankEventLogTypes eventType, uint8 tabId, uint32 lowguid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId)
+void Guild::_LogBankEvent(SQLTransaction& trans, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType lowguid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId)
{
if (tabId > GUILD_BANK_MAX_TABS)
return;
@@ -2692,7 +2692,7 @@ void Guild::_MoveItems(MoveItemData* pSrc, MoveItemData* pDest, uint32 splitedAm
if (pItemSrc->GetCount() == 0)
{
TC_LOG_FATAL("guild", "Guild::SwapItems: Player %s(GUIDLow: %u) tried to move item %u from tab %u slot %u to tab %u slot %u, but item %u has a stack of zero!",
- player->GetName(), player->GetGUIDLow(), pItemSrc->GetEntry(), tabId, slotId, destTabId, destSlotId, pItemSrc->GetEntry());
+ player->GetName(), player->GetGUID().GetCounter(), pItemSrc->GetEntry(), tabId, slotId, destTabId, destSlotId, pItemSrc->GetEntry());
//return; // Commented out for now, uncomment when it's verified that this causes a crash!!
}
// */
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index b0ea9e1f4e5..ca5ea95ee2c 100644
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -229,7 +229,7 @@ public:
EmblemInfo() : m_style(0), m_color(0), m_borderStyle(0), m_borderColor(0), m_backgroundColor(0) { }
void LoadFromDB(Field* fields);
- void SaveToDB(uint32 guildId) const;
+ void SaveToDB(ObjectGuid::LowType guildId) const;
void ReadPacket(WorldPacket& recv);
void WritePacket(WorldPacket& data) const;
@@ -286,7 +286,7 @@ private:
class Member
{
public:
- Member(uint32 guildId, ObjectGuid guid, uint8 rankId) :
+ Member(ObjectGuid::LowType guildId, ObjectGuid guid, uint8 rankId) :
m_guildId(guildId),
m_guid(guid),
m_zoneId(0),
@@ -345,7 +345,7 @@ private:
inline Player* FindConnectedPlayer() const { return ObjectAccessor::FindConnectedPlayer(m_guid); }
private:
- uint32 m_guildId;
+ ObjectGuid::LowType m_guildId;
// Fields from characters table
ObjectGuid m_guid;
std::string m_name;
@@ -367,8 +367,8 @@ private:
class LogEntry
{
public:
- LogEntry(uint32 guildId, uint32 guid) : m_guildId(guildId), m_guid(guid), m_timestamp(::time(NULL)) { }
- LogEntry(uint32 guildId, uint32 guid, time_t timestamp) : m_guildId(guildId), m_guid(guid), m_timestamp(timestamp) { }
+ LogEntry(ObjectGuid::LowType guildId, uint32 guid) : m_guildId(guildId), m_guid(guid), m_timestamp(::time(NULL)) { }
+ LogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp) : m_guildId(guildId), m_guid(guid), m_timestamp(timestamp) { }
virtual ~LogEntry() { }
uint32 GetGUID() const { return m_guid; }
@@ -378,7 +378,7 @@ private:
virtual void WritePacket(WorldPacket& data) const = 0;
protected:
- uint32 m_guildId;
+ ObjectGuid::LowType m_guildId;
uint32 m_guid;
uint64 m_timestamp;
};
@@ -387,10 +387,10 @@ private:
class EventLogEntry : public LogEntry
{
public:
- EventLogEntry(uint32 guildId, uint32 guid, GuildEventLogTypes eventType, uint32 playerGuid1, uint32 playerGuid2, uint8 newRank) :
+ EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank) :
LogEntry(guildId, guid), m_eventType(eventType), m_playerGuid1(playerGuid1), m_playerGuid2(playerGuid2), m_newRank(newRank) { }
- EventLogEntry(uint32 guildId, uint32 guid, time_t timestamp, GuildEventLogTypes eventType, uint32 playerGuid1, uint32 playerGuid2, uint8 newRank) :
+ EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank) :
LogEntry(guildId, guid, timestamp), m_eventType(eventType), m_playerGuid1(playerGuid1), m_playerGuid2(playerGuid2), m_newRank(newRank) { }
~EventLogEntry() { }
@@ -400,8 +400,8 @@ private:
private:
GuildEventLogTypes m_eventType;
- uint32 m_playerGuid1;
- uint32 m_playerGuid2;
+ ObjectGuid::LowType m_playerGuid1;
+ ObjectGuid::LowType m_playerGuid2;
uint8 m_newRank;
};
@@ -417,11 +417,11 @@ private:
eventType == GUILD_BANK_LOG_REPAIR_MONEY;
}
- BankEventLogEntry(uint32 guildId, uint32 guid, GuildBankEventLogTypes eventType, uint8 tabId, uint32 playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId) :
+ BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId) :
LogEntry(guildId, guid), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid),
m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { }
- BankEventLogEntry(uint32 guildId, uint32 guid, time_t timestamp, uint8 tabId, GuildBankEventLogTypes eventType, uint32 playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId) :
+ BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, uint8 tabId, GuildBankEventLogTypes eventType, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId) :
LogEntry(guildId, guid, timestamp), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid),
m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { }
@@ -433,7 +433,7 @@ private:
private:
GuildBankEventLogTypes m_eventType;
uint8 m_bankTabId;
- uint32 m_playerGuid;
+ ObjectGuid::LowType m_playerGuid;
uint32 m_itemOrMoney;
uint16 m_itemStackCount;
uint8 m_destTabId;
@@ -470,8 +470,8 @@ private:
{
public:
RankInfo(): m_guildId(0), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_EMPTY), m_bankMoneyPerDay(0) { }
- RankInfo(uint32 guildId) : m_guildId(guildId), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_EMPTY), m_bankMoneyPerDay(0) { }
- RankInfo(uint32 guildId, uint8 rankId, std::string const& name, uint32 rights, uint32 money) :
+ RankInfo(ObjectGuid::LowType guildId) : m_guildId(guildId), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_EMPTY), m_bankMoneyPerDay(0) { }
+ RankInfo(ObjectGuid::LowType guildId, uint8 rankId, std::string const& name, uint32 rights, uint32 money) :
m_guildId(guildId), m_rankId(rankId), m_name(name), m_rights(rights),
m_bankMoneyPerDay(rankId != GR_GUILDMASTER ? money : GUILD_WITHDRAW_MONEY_UNLIMITED) { }
@@ -505,7 +505,7 @@ private:
void CreateMissingTabsIfNeeded(uint8 ranks, SQLTransaction& trans, bool logOnCreate = false);
private:
- uint32 m_guildId;
+ ObjectGuid::LowType m_guildId;
uint8 m_rankId;
std::string m_name;
@@ -517,7 +517,7 @@ private:
class BankTab
{
public:
- BankTab(uint32 guildId, uint8 tabId) : m_guildId(guildId), m_tabId(tabId)
+ BankTab(ObjectGuid::LowType guildId, uint8 tabId) : m_guildId(guildId), m_tabId(tabId)
{
memset(m_items, 0, GUILD_BANK_MAX_SLOTS * sizeof(Item*));
}
@@ -542,7 +542,7 @@ private:
bool SetItem(SQLTransaction& trans, uint8 slotId, Item* pItem);
private:
- uint32 m_guildId;
+ ObjectGuid::LowType m_guildId;
uint8 m_tabId;
Item* m_items[GUILD_BANK_MAX_SLOTS];
@@ -653,7 +653,7 @@ public:
void Disband();
// Getters
- uint32 GetId() const { return m_id; }
+ ObjectGuid::LowType GetId() const { return m_id; }
ObjectGuid GetLeaderGUID() const { return m_leaderGuid; }
std::string const& GetName() const { return m_name; }
std::string const& GetMOTD() const { return m_motd; }
@@ -745,7 +745,7 @@ public:
void ResetTimes();
protected:
- uint32 m_id;
+ ObjectGuid::LowType m_id;
std::string m_name;
ObjectGuid m_leaderGuid;
std::string m_motd;
@@ -803,7 +803,7 @@ private:
return NULL;
}
- inline void _DeleteMemberFromDB(uint32 lowguid) const
+ inline void _DeleteMemberFromDB(ObjectGuid::LowType lowguid) const
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_MEMBER);
stmt->setUInt32(0, lowguid);
@@ -838,8 +838,8 @@ private:
void _UpdateMemberWithdrawSlots(SQLTransaction& trans, ObjectGuid guid, uint8 tabId);
bool _MemberHasTabRights(ObjectGuid guid, uint8 tabId, uint32 rights) const;
- void _LogEvent(GuildEventLogTypes eventType, uint32 playerGuid1, uint32 playerGuid2 = 0, uint8 newRank = 0);
- void _LogBankEvent(SQLTransaction& trans, GuildBankEventLogTypes eventType, uint8 tabId, uint32 playerGuid, uint32 itemOrMoney, uint16 itemStackCount = 0, uint8 destTabId = 0);
+ void _LogEvent(GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2 = 0, uint8 newRank = 0);
+ void _LogBankEvent(SQLTransaction& trans, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount = 0, uint8 destTabId = 0);
Item* _GetItem(uint8 tabId, uint8 slotId) const;
void _RemoveItem(SQLTransaction& trans, uint8 tabId, uint8 slotId);
diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp
index 2603a60ee0e..6a75761ded0 100644
--- a/src/server/game/Guilds/GuildMgr.cpp
+++ b/src/server/game/Guilds/GuildMgr.cpp
@@ -32,12 +32,12 @@ void GuildMgr::AddGuild(Guild* guild)
GuildStore[guild->GetId()] = guild;
}
-void GuildMgr::RemoveGuild(uint32 guildId)
+void GuildMgr::RemoveGuild(ObjectGuid::LowType guildId)
{
GuildStore.erase(guildId);
}
-uint32 GuildMgr::GenerateGuildId()
+ObjectGuid::LowType GuildMgr::GenerateGuildId()
{
if (NextGuildId >= 0xFFFFFFFE)
{
@@ -48,7 +48,7 @@ uint32 GuildMgr::GenerateGuildId()
}
// Guild collection
-Guild* GuildMgr::GetGuildById(uint32 guildId) const
+Guild* GuildMgr::GetGuildById(ObjectGuid::LowType guildId) const
{
GuildContainer::const_iterator itr = GuildStore.find(guildId);
if (itr != GuildStore.end())
@@ -71,7 +71,7 @@ Guild* GuildMgr::GetGuildByName(const std::string& guildName) const
return NULL;
}
-std::string GuildMgr::GetGuildNameById(uint32 guildId) const
+std::string GuildMgr::GetGuildNameById(ObjectGuid::LowType guildId) const
{
if (Guild* guild = GetGuildById(guildId))
return guild->GetName();
diff --git a/src/server/game/Guilds/GuildMgr.h b/src/server/game/Guilds/GuildMgr.h
index 2a73d53a740..1450769c578 100644
--- a/src/server/game/Guilds/GuildMgr.h
+++ b/src/server/game/Guilds/GuildMgr.h
@@ -34,21 +34,21 @@ public:
}
Guild* GetGuildByLeader(ObjectGuid guid) const;
- Guild* GetGuildById(uint32 guildId) const;
+ Guild* GetGuildById(ObjectGuid::LowType guildId) const;
Guild* GetGuildByName(std::string const& guildName) const;
- std::string GetGuildNameById(uint32 guildId) const;
+ std::string GetGuildNameById(ObjectGuid::LowType guildId) const;
void LoadGuilds();
void AddGuild(Guild* guild);
- void RemoveGuild(uint32 guildId);
+ void RemoveGuild(ObjectGuid::LowType guildId);
- uint32 GenerateGuildId();
- void SetNextGuildId(uint32 Id) { NextGuildId = Id; }
+ ObjectGuid::LowType GenerateGuildId();
+ void SetNextGuildId(ObjectGuid::LowType Id) { NextGuildId = Id; }
void ResetTimes();
protected:
- typedef std::unordered_map<uint32, Guild*> GuildContainer;
- uint32 NextGuildId;
+ typedef std::unordered_map<ObjectGuid::LowType, Guild*> GuildContainer;
+ ObjectGuid::LowType NextGuildId;
GuildContainer GuildStore;
};
diff --git a/src/server/game/Handlers/ArenaTeamHandler.cpp b/src/server/game/Handlers/ArenaTeamHandler.cpp
index ead05033a35..5616eb89b07 100644
--- a/src/server/game/Handlers/ArenaTeamHandler.cpp
+++ b/src/server/game/Handlers/ArenaTeamHandler.cpp
@@ -125,7 +125,7 @@ void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket& recvData)
}
// OK result but don't send invite
- if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow()))
+ if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUID().GetCounter()))
return;
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && player->GetTeam() != GetPlayer()->GetTeam())
diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp
index 8ee14d6baa9..8ecf86680ca 100644
--- a/src/server/game/Handlers/AuctionHouseHandler.cpp
+++ b/src/server/game/Handlers/AuctionHouseHandler.cpp
@@ -149,12 +149,11 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
if (bid > MAX_MONEY_AMOUNT || buyout > MAX_MONEY_AMOUNT)
{
- TC_LOG_DEBUG("network", "WORLD: HandleAuctionSellItem - Player %s (GUID %u) attempted to sell item with higher price than max gold amount.", _player->GetName().c_str(), _player->GetGUIDLow());
+ TC_LOG_DEBUG("network", "WORLD: HandleAuctionSellItem - Player %s (GUID %u) attempted to sell item with higher price than max gold amount.", _player->GetName().c_str(), _player->GetGUID().GetCounter());
SendAuctionCommandResult(0, AUCTION_SELL_ITEM, ERR_AUCTION_DATABASE_ERROR);
return;
}
-
Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(auctioneer, UNIT_NPC_FLAG_AUCTIONEER);
if (!creature)
{
@@ -202,7 +201,7 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
if (itemEntry == 0)
itemEntry = item->GetTemplate()->ItemId;
- if (sAuctionMgr->GetAItem(item->GetGUIDLow()) || !item->CanBeTraded() || item->IsNotEmptyBag() ||
+ if (sAuctionMgr->GetAItem(item->GetGUID().GetCounter()) || !item->CanBeTraded() || item->IsNotEmptyBag() ||
item->GetTemplate()->Flags & ITEM_PROTO_FLAG_CONJURED || item->GetUInt32Value(ITEM_FIELD_DURATION) ||
item->GetCount() < count[i] || itemEntry != item->GetTemplate()->ItemId)
{
@@ -259,9 +258,30 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
AuctionEntry* AH = new AuctionEntry();
if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION))
- AH->auctioneer = 23442; ///@TODO - HARDCODED DB GUID, BAD BAD BAD
+ AH->houseId = AUCTIONHOUSE_NEUTRAL;
else
- AH->auctioneer = auctioneer.GetCounter();
+ {
+ CreatureData const* auctioneerData = sObjectMgr->GetCreatureData(creature->GetSpawnId());
+ if (!auctioneerData)
+ {
+ TC_LOG_ERROR("misc", "Data for auctioneer not found (%s)", auctioneer.ToString().c_str());
+ SendAuctionCommandResult(0, AUCTION_SELL_ITEM, ERR_AUCTION_DATABASE_ERROR);
+ delete AH;
+ return;
+ }
+
+ CreatureTemplate const* auctioneerInfo = sObjectMgr->GetCreatureTemplate(auctioneerData->id);
+ if (!auctioneerInfo)
+ {
+ TC_LOG_ERROR("misc", "Non existing auctioneer (%s)", auctioneer.ToString().c_str());
+ SendAuctionCommandResult(0, AUCTION_SELL_ITEM, ERR_AUCTION_DATABASE_ERROR);
+ delete AH;
+ return;
+ }
+
+ const AuctionHouseEntry* AHEntry = sAuctionMgr->GetAuctionHouseEntry(auctioneerInfo->faction);
+ AH->houseId = AHEntry->houseId;
+ }
// Required stack size of auction matches to current item stack size, just move item to auctionhouse
if (itemsCount == 1 && item->GetCount() == count[0])
@@ -273,10 +293,10 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
}
AH->Id = sObjectMgr->GenerateAuctionID();
- AH->itemGUIDLow = item->GetGUIDLow();
+ AH->itemGUIDLow = item->GetGUID().GetCounter();
AH->itemEntry = item->GetEntry();
AH->itemCount = item->GetCount();
- AH->owner = _player->GetGUIDLow();
+ AH->owner = _player->GetGUID().GetCounter();
AH->startbid = bid;
AH->bidder = 0;
AH->bid = 0;
@@ -285,8 +305,8 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
AH->deposit = deposit;
AH->auctionHouseEntry = auctionHouseEntry;
- TC_LOG_INFO("network", "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) to auctioneer %u with count %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u",
- _player->GetName().c_str(), _player->GetGUIDLow(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetGUIDLow(), AH->auctioneer, item->GetCount(), bid, buyout, auctionTime, AH->GetHouseId());
+ TC_LOG_INFO("network", "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) with count %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u",
+ _player->GetName().c_str(), _player->GetGUID().GetCounter(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetGUID().GetCounter(), item->GetCount(), bid, buyout, auctionTime, AH->GetHouseId());
sAuctionMgr->AddAItem(item);
auctionHouse->AddAuction(AH);
@@ -321,10 +341,10 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
}
AH->Id = sObjectMgr->GenerateAuctionID();
- AH->itemGUIDLow = newItem->GetGUIDLow();
+ AH->itemGUIDLow = newItem->GetGUID().GetCounter();
AH->itemEntry = newItem->GetEntry();
AH->itemCount = newItem->GetCount();
- AH->owner = _player->GetGUIDLow();
+ AH->owner = _player->GetGUID().GetCounter();
AH->startbid = bid;
AH->bidder = 0;
AH->bid = 0;
@@ -333,8 +353,8 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
AH->deposit = deposit;
AH->auctionHouseEntry = auctionHouseEntry;
- TC_LOG_INFO("network", "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) to auctioneer %u with count %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u",
- _player->GetName().c_str(), _player->GetGUIDLow(), newItem->GetTemplate()->Name1.c_str(), newItem->GetEntry(), newItem->GetGUIDLow(), AH->auctioneer, newItem->GetCount(), bid, buyout, auctionTime, AH->GetHouseId());
+ TC_LOG_INFO("network", "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) with count %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u",
+ _player->GetName().c_str(), _player->GetGUID().GetCounter(), newItem->GetTemplate()->Name1.c_str(), newItem->GetEntry(), newItem->GetGUID().GetCounter(), newItem->GetCount(), bid, buyout, auctionTime, AH->GetHouseId());
sAuctionMgr->AddAItem(newItem);
auctionHouse->AddAuction(AH);
@@ -410,7 +430,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket& recvData)
AuctionEntry* auction = auctionHouse->GetAuction(auctionId);
Player* player = GetPlayer();
- if (!auction || auction->owner == player->GetGUIDLow())
+ if (!auction || auction->owner == player->GetGUID().GetCounter())
{
//you cannot bid your own auction:
SendAuctionCommandResult(0, AUCTION_PLACE_BID, ERR_AUCTION_BID_OWN);
@@ -418,7 +438,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket& recvData)
}
// impossible have online own another character (use this for speedup check in case online owner)
- ObjectGuid ownerGuid(HIGHGUID_PLAYER, auction->owner);
+ ObjectGuid ownerGuid(HighGuid::Player, auction->owner);
Player* auction_owner = ObjectAccessor::FindPlayer(ownerGuid);
if (!auction_owner && sObjectMgr->GetPlayerAccountIdByGUID(ownerGuid) == player->GetSession()->GetAccountId())
{
@@ -452,7 +472,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket& recvData)
{
if (auction->bidder > 0)
{
- if (auction->bidder == player->GetGUIDLow())
+ if (auction->bidder == player->GetGUID().GetCounter())
player->ModifyMoney(-int32(price - auction->bid));
else
{
@@ -464,7 +484,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket& recvData)
else
player->ModifyMoney(-int32(price));
- auction->bidder = player->GetGUIDLow();
+ auction->bidder = player->GetGUID().GetCounter();
auction->bid = price;
GetPlayer()->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_BID, price);
@@ -479,7 +499,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket& recvData)
else
{
//buyout:
- if (player->GetGUIDLow() == auction->bidder)
+ if (player->GetGUID().GetCounter() == auction->bidder)
player->ModifyMoney(-int32(auction->buyout - auction->bid));
else
{
@@ -487,7 +507,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket& recvData)
if (auction->bidder) //buyout for bidded auction ..
sAuctionMgr->SendAuctionOutbiddedMail(auction, auction->buyout, GetPlayer(), trans);
}
- auction->bidder = player->GetGUIDLow();
+ auction->bidder = player->GetGUID().GetCounter();
auction->bid = auction->buyout;
GetPlayer()->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_BID, auction->buyout);
@@ -535,7 +555,7 @@ void WorldSession::HandleAuctionRemoveItem(WorldPacket& recvData)
Player* player = GetPlayer();
SQLTransaction trans = CharacterDatabase.BeginTransaction();
- if (auction && auction->owner == player->GetGUIDLow())
+ if (auction && auction->owner == player->GetGUID().GetCounter())
{
Item* pItem = sAuctionMgr->GetAItem(auction->itemGUIDLow);
if (pItem)
@@ -566,7 +586,7 @@ void WorldSession::HandleAuctionRemoveItem(WorldPacket& recvData)
{
SendAuctionCommandResult(0, AUCTION_CANCEL, ERR_AUCTION_DATABASE_ERROR);
//this code isn't possible ... maybe there should be assert
- TC_LOG_ERROR("network", "CHEATER : %u, he tried to cancel auction (id: %u) of another player, or auction is NULL", player->GetGUIDLow(), auctionId);
+ TC_LOG_ERROR("network", "CHEATER : %u, he tried to cancel auction (id: %u) of another player, or auction is NULL", player->GetGUID().GetCounter(), auctionId);
return;
}
diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp
index 2ec89ac2a26..d4291e34df6 100644
--- a/src/server/game/Handlers/BattleGroundHandler.cpp
+++ b/src/server/game/Handlers/BattleGroundHandler.cpp
@@ -86,7 +86,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
if (!sBattlemasterListStore.LookupEntry(bgTypeId_))
{
- TC_LOG_ERROR("network", "Battleground: invalid bgtype (%u) received. possible cheater? player guid %u", bgTypeId_, _player->GetGUIDLow());
+ TC_LOG_ERROR("network", "Battleground: invalid bgtype (%u) received. possible cheater? player guid %u", bgTypeId_, _player->GetGUID().GetCounter());
return;
}
@@ -194,7 +194,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_QUEUE, avgTime, 0, ginfo->ArenaType, 0);
SendPacket(&data);
TC_LOG_DEBUG("bg.battleground", "Battleground: player joined queue for bg queue type %u bg type %u: GUID %u, NAME %s",
- bgQueueTypeId, bgTypeId, _player->GetGUIDLow(), _player->GetName().c_str());
+ bgQueueTypeId, bgTypeId, _player->GetGUID().GetCounter(), _player->GetName().c_str());
}
else
{
@@ -242,7 +242,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err);
member->GetSession()->SendPacket(&data);
TC_LOG_DEBUG("bg.battleground", "Battleground: player joined queue for bg queue type %u bg type %u: GUID %u, NAME %s",
- bgQueueTypeId, bgTypeId, member->GetGUIDLow(), member->GetName().c_str());
+ bgQueueTypeId, bgTypeId, member->GetGUID().GetCounter(), member->GetName().c_str());
}
TC_LOG_DEBUG("bg.battleground", "Battleground: group end");
}
@@ -335,7 +335,7 @@ void WorldSession::HandleBattlefieldListOpcode(WorldPacket &recvData)
BattlemasterListEntry const* bl = sBattlemasterListStore.LookupEntry(bgTypeId);
if (!bl)
{
- TC_LOG_DEBUG("bg.battleground", "BattlegroundHandler: invalid bgtype (%u) with player (Name: %s, GUID: %u) received.", bgTypeId, _player->GetName().c_str(), _player->GetGUIDLow());
+ TC_LOG_DEBUG("bg.battleground", "BattlegroundHandler: invalid bgtype (%u) with player (Name: %s, GUID: %u) received.", bgTypeId, _player->GetName().c_str(), _player->GetGUID().GetCounter());
return;
}
@@ -424,13 +424,13 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data2, ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS);
_player->GetSession()->SendPacket(&data2);
action = 0;
- TC_LOG_DEBUG("bg.battleground", "Player %s (%u) has a deserter debuff, do not port him to battleground!", _player->GetName().c_str(), _player->GetGUIDLow());
+ TC_LOG_DEBUG("bg.battleground", "Player %s (%u) has a deserter debuff, do not port him to battleground!", _player->GetName().c_str(), _player->GetGUID().GetCounter());
}
//if player don't match battleground max level, then do not allow him to enter! (this might happen when player leveled up during his waiting in queue
if (_player->getLevel() > bg->GetMaxLevel())
{
TC_LOG_ERROR("network", "Player %s (%u) has level (%u) higher than maxlevel (%u) of battleground (%u)! Do not port him to battleground!",
- _player->GetName().c_str(), _player->GetGUIDLow(), _player->getLevel(), bg->GetMaxLevel(), bg->GetTypeID());
+ _player->GetName().c_str(), _player->GetGUID().GetCounter(), _player->getLevel(), bg->GetMaxLevel(), bg->GetTypeID());
action = 0;
}
}
@@ -480,7 +480,7 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
sBattlegroundMgr->SendToBattleground(_player, ginfo.IsInvitedToBGInstanceGUID, bgTypeId);
// add only in HandleMoveWorldPortAck()
// bg->AddPlayer(_player, team);
- TC_LOG_DEBUG("bg.battleground", "Battleground: player %s (%u) joined battle for bg %u, bgtype %u, queue type %u.", _player->GetName().c_str(), _player->GetGUIDLow(), bg->GetInstanceID(), bg->GetTypeID(), bgQueueTypeId);
+ TC_LOG_DEBUG("bg.battleground", "Battleground: player %s (%u) joined battle for bg %u, bgtype %u, queue type %u.", _player->GetName().c_str(), _player->GetGUID().GetCounter(), bg->GetInstanceID(), bg->GetTypeID(), bgQueueTypeId);
}
else // leave queue
{
@@ -505,7 +505,17 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
if (!ginfo.ArenaType)
sBattlegroundMgr->ScheduleQueueUpdate(ginfo.ArenaMatchmakerRating, ginfo.ArenaType, bgQueueTypeId, bgTypeId, bracketEntry->GetBracketId());
SendPacket(&data);
- TC_LOG_DEBUG("bg.battleground", "Battleground: player %s (%u) left queue for bgtype %u, queue type %u.", _player->GetName().c_str(), _player->GetGUIDLow(), bg->GetTypeID(), bgQueueTypeId);
+ TC_LOG_DEBUG("bg.battleground", "Battleground: player %s (%u) left queue for bgtype %u, queue type %u.", _player->GetName().c_str(), _player->GetGUID().GetCounter(), bg->GetTypeID(), bgQueueTypeId);
+
+ // track if player refuses to join the BG after being invited
+ if (bg->isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS) &&
+ (bg->GetStatus() == STATUS_IN_PROGRESS || bg->GetStatus() == STATUS_WAIT_JOIN))
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK);
+ stmt->setUInt32(0, _player->GetGUID().GetCounter());
+ stmt->setUInt8(1, BG_DESERTION_TYPE_LEAVE_QUEUE);
+ CharacterDatabase.Execute(stmt);
+ }
}
}
@@ -741,7 +751,7 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData)
member->GetSession()->SendPacket(&data);
sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err);
member->GetSession()->SendPacket(&data);
- TC_LOG_DEBUG("bg.battleground", "Battleground: player joined queue for arena as group bg queue type %u bg type %u: GUID %u, NAME %s", bgQueueTypeId, bgTypeId, member->GetGUIDLow(), member->GetName().c_str());
+ TC_LOG_DEBUG("bg.battleground", "Battleground: player joined queue for arena as group bg queue type %u bg type %u: GUID %u, NAME %s", bgQueueTypeId, bgTypeId, member->GetGUID().GetCounter(), member->GetName().c_str());
}
}
else
@@ -754,7 +764,7 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData)
// send status packet (in queue)
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_QUEUE, avgTime, 0, arenatype, 0);
SendPacket(&data);
- TC_LOG_DEBUG("bg.battleground", "Battleground: player joined queue for arena, skirmish, bg queue type %u bg type %u: GUID %u, NAME %s", bgQueueTypeId, bgTypeId, _player->GetGUIDLow(), _player->GetName().c_str());
+ TC_LOG_DEBUG("bg.battleground", "Battleground: player joined queue for arena, skirmish, bg queue type %u bg type %u: GUID %u, NAME %s", bgQueueTypeId, bgTypeId, _player->GetGUID().GetCounter(), _player->GetName().c_str());
}
sBattlegroundMgr->ScheduleQueueUpdate(matchmakerRating, arenatype, bgQueueTypeId, bgTypeId, bracketEntry->GetBracketId());
}
diff --git a/src/server/game/Handlers/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp
index 0cd170dfba7..e9b3bea5991 100644
--- a/src/server/game/Handlers/CalendarHandler.cpp
+++ b/src/server/game/Handlers/CalendarHandler.cpp
@@ -447,7 +447,7 @@ void WorldSession::HandleCalendarEventInvite(WorldPacket& recvData)
if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
{
Field* fields = result->Fetch();
- inviteeGuid = ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32());
+ inviteeGuid = ObjectGuid(HighGuid::Player, fields[0].GetUInt32());
inviteeTeam = Player::TeamForRace(fields[1].GetUInt8());
inviteeGuildId = Player::GetGuildIdFromDB(inviteeGuid);
}
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 11b31d98cc8..60ec60443d6 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -65,7 +65,7 @@ bool LoginQueryHolder::Initialize()
SetSize(MAX_PLAYER_LOGIN_QUERY);
bool res = true;
- uint32 lowGuid = m_guid.GetCounter();
+ ObjectGuid::LowType lowGuid = m_guid.GetCounter();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER);
stmt->setUInt32(0, lowGuid);
@@ -203,6 +203,10 @@ bool LoginQueryHolder::Initialize()
stmt->setUInt32(0, m_accountId);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_INSTANCE_LOCK_TIMES, stmt);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CORPSE_LOCATION);
+ stmt->setUInt64(0, lowGuid);
+ res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_CORPSE_LOCATION, stmt);
+
return res;
}
@@ -219,7 +223,7 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result)
{
do
{
- ObjectGuid guid(HIGHGUID_PLAYER, (*result)[0].GetUInt32());
+ ObjectGuid guid(HighGuid::Player, (*result)[0].GetUInt32());
TC_LOG_INFO("network", "Loading %s from account %u.", guid.ToString().c_str(), GetAccountId());
if (Player::BuildEnumData(result, &data))
{
@@ -227,8 +231,8 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result)
if (!(*result)[20].GetUInt32())
_legitCharacters.insert(guid);
- if (!sWorld->HasCharacterNameData(guid)) // This can happen if characters are inserted into the database manually. Core hasn't loaded name data yet.
- sWorld->AddCharacterNameData(guid, (*result)[1].GetString(), (*result)[4].GetUInt8(), (*result)[2].GetUInt8(), (*result)[3].GetUInt8(), (*result)[7].GetUInt8());
+ if (!sWorld->HasCharacterInfo(guid)) // This can happen if characters are inserted into the database manually. Core hasn't loaded name data yet.
+ sWorld->AddCharacterInfo(guid, GetAccountId(), (*result)[1].GetString(), (*result)[4].GetUInt8(), (*result)[2].GetUInt8(), (*result)[3].GetUInt8(), (*result)[7].GetUInt8());
++num;
}
}
@@ -359,7 +363,7 @@ void WorldSession::HandleCharCreateOpcode(WorldPacket& recvData)
}
// check name limitations
- ResponseCodes res = ObjectMgr::CheckPlayerName(createInfo.Name, true);
+ ResponseCodes res = ObjectMgr::CheckPlayerName(createInfo.Name, GetSessionDbcLocale(), true);
if (res != CHAR_NAME_SUCCESS)
{
SendCharCreate(res);
@@ -429,14 +433,11 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
}
case 1:
{
- uint16 acctCharCount = 0;
+ uint64 acctCharCount = 0;
if (result)
{
Field* fields = result->Fetch();
- // SELECT SUM(x) is MYSQL_TYPE_NEWDECIMAL - needs to be read as string
- const char* ch = fields[0].GetCString();
- if (ch)
- acctCharCount = atoi(ch);
+ acctCharCount = uint64(fields[0].GetDouble());
}
if (acctCharCount >= sWorld->getIntConfig(CONFIG_CHARACTERS_PER_ACCOUNT))
@@ -601,7 +602,8 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
Player newChar(this);
newChar.GetMotionMaster()->Initialize();
- if (!newChar.Create(sObjectMgr->GenerateLowGuid(HIGHGUID_PLAYER), createInfo))
+ if (!newChar.Create(sObjectMgr->GetGenerator<HighGuid::Player>().Generate(), createInfo))
+
{
// Player not create (race/class/etc problem?)
newChar.CleanupsBeforeDelete();
@@ -638,9 +640,9 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
SendCharCreate(CHAR_CREATE_SUCCESS);
- TC_LOG_INFO("entities.player.character", "Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), GetRemoteAddress().c_str(), createInfo->Name.c_str(), newChar.GetGUIDLow());
+ TC_LOG_INFO("entities.player.character", "Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), GetRemoteAddress().c_str(), createInfo->Name.c_str(), newChar.GetGUID().GetCounter());
sScriptMgr->OnPlayerCreate(&newChar);
- sWorld->AddCharacterNameData(newChar.GetGUID(), newChar.GetName(), newChar.getGender(), newChar.getRace(), newChar.getClass(), newChar.getLevel());
+ sWorld->AddCharacterInfo(newChar.GetGUID(), GetAccountId(), newChar.GetName(), newChar.GetByteValue(PLAYER_BYTES_3, 0), newChar.getRace(), newChar.getClass(), newChar.getLevel());
newChar.CleanupsBeforeDelete();
delete createInfo;
@@ -832,7 +834,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
TC_LOG_DEBUG("network", "WORLD: Sent server info");
}
- //QueryResult* result = CharacterDatabase.PQuery("SELECT guildid, rank FROM guild_member WHERE guid = '%u'", pCurrChar->GetGUIDLow());
+ //QueryResult* result = CharacterDatabase.PQuery("SELECT guildid, rank FROM guild_member WHERE guid = '%u'", pCurrChar->GetGUID().GetCounter());
if (PreparedQueryResult resultGuild = holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_GUILD))
{
Field* fields = resultGuild->Fetch();
@@ -852,7 +854,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
else
{
// remove wrong guild data
- TC_LOG_ERROR("network", "Player %s (GUID: %u) marked as member of not existing guild (id: %u), removing guild membership for player.", pCurrChar->GetName().c_str(), pCurrChar->GetGUIDLow(), pCurrChar->GetGuildId());
+ TC_LOG_ERROR("network", "Player %s (GUID: %u) marked as member of not existing guild (id: %u), removing guild membership for player.", pCurrChar->GetName().c_str(), pCurrChar->GetGUID().GetCounter(), pCurrChar->GetGuildId());
pCurrChar->SetInGuild(0);
}
}
@@ -882,7 +884,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
}
}
- if (!pCurrChar->GetMap()->AddPlayerToMap(pCurrChar) || !pCurrChar->CheckInstanceLoginValid())
+ if (!pCurrChar->GetMap()->AddPlayerToMap(pCurrChar))
{
AreaTrigger const* at = sObjectMgr->GetGoBackTrigger(pCurrChar->GetMapId());
if (at)
@@ -891,14 +893,14 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
pCurrChar->TeleportTo(pCurrChar->m_homebindMapId, pCurrChar->m_homebindX, pCurrChar->m_homebindY, pCurrChar->m_homebindZ, pCurrChar->GetOrientation());
}
- sObjectAccessor->AddObject(pCurrChar);
+ ObjectAccessor::AddObject(pCurrChar);
//TC_LOG_DEBUG("Player %s added to Map.", pCurrChar->GetName().c_str());
pCurrChar->SendInitialPacketsAfterAddToMap();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ONLINE);
- stmt->setUInt32(0, pCurrChar->GetGUIDLow());
+ stmt->setUInt32(0, pCurrChar->GetGUID().GetCounter());
CharacterDatabase.Execute(stmt);
@@ -919,10 +921,10 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
}
// friend status
- sSocialMgr->SendFriendStatus(pCurrChar, FRIEND_ONLINE, pCurrChar->GetGUIDLow(), true);
+ sSocialMgr->SendFriendStatus(pCurrChar, FRIEND_ONLINE, pCurrChar->GetGUID().GetCounter(), true);
// Place character in world (and load zone) before some object loading
- pCurrChar->LoadCorpse();
+ pCurrChar->LoadCorpse(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_CORPSE_LOCATION));
// setting Ghost+speed if dead
if (pCurrChar->m_deathState != ALIVE)
@@ -981,7 +983,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
std::string IP_str = GetRemoteAddress();
TC_LOG_INFO("entities.player.character", "Account: %d (IP: %s) Login Character:[%s] (GUID: %u) Level: %d",
- GetAccountId(), IP_str.c_str(), pCurrChar->GetName().c_str(), pCurrChar->GetGUIDLow(), pCurrChar->getLevel());
+ GetAccountId(), IP_str.c_str(), pCurrChar->GetName().c_str(), pCurrChar->GetGUID().GetCounter(), pCurrChar->getLevel());
if (!pCurrChar->IsStandState() && !pCurrChar->HasUnitState(UNIT_STATE_STUNNED))
pCurrChar->SetStandState(UNIT_STAND_STATE_STAND);
@@ -1090,7 +1092,7 @@ void WorldSession::HandleCharRenameOpcode(WorldPacket& recvData)
return;
}
- ResponseCodes res = ObjectMgr::CheckPlayerName(renameInfo.Name, true);
+ ResponseCodes res = ObjectMgr::CheckPlayerName(renameInfo.Name, GetSessionDbcLocale(), true);
if (res != CHAR_NAME_SUCCESS)
{
SendCharRename(res, renameInfo);
@@ -1129,7 +1131,7 @@ void WorldSession::HandleChangePlayerNameOpcodeCallBack(PreparedQueryResult resu
Field* fields = result->Fetch();
- uint32 guidLow = fields[0].GetUInt32();
+ ObjectGuid::LowType guidLow = fields[0].GetUInt32();
std::string oldName = fields[1].GetString();
// Update name and at_login flag in the db
@@ -1152,7 +1154,7 @@ void WorldSession::HandleChangePlayerNameOpcodeCallBack(PreparedQueryResult resu
SendCharRename(RESPONSE_SUCCESS, *renameInfo);
- sWorld->UpdateCharacterNameData(renameInfo->Guid, renameInfo->Name);
+ sWorld->UpdateCharacterInfo(renameInfo->Guid, renameInfo->Name);
}
void WorldSession::HandleSetPlayerDeclinedNames(WorldPacket& recvData)
@@ -1240,20 +1242,20 @@ void WorldSession::HandleAlterAppearance(WorldPacket& recvData)
BarberShopStyleEntry const* bs_hair = sBarberShopStyleStore.LookupEntry(Hair);
- if (!bs_hair || bs_hair->type != 0 || bs_hair->race != _player->getRace() || bs_hair->gender != _player->getGender())
+ if (!bs_hair || bs_hair->type != 0 || bs_hair->race != _player->getRace() || bs_hair->gender != _player->GetByteValue(PLAYER_BYTES_3, 0))
return;
BarberShopStyleEntry const* bs_facialHair = sBarberShopStyleStore.LookupEntry(FacialHair);
- if (!bs_facialHair || bs_facialHair->type != 2 || bs_facialHair->race != _player->getRace() || bs_facialHair->gender != _player->getGender())
+ if (!bs_facialHair || bs_facialHair->type != 2 || bs_facialHair->race != _player->getRace() || bs_facialHair->gender != _player->GetByteValue(PLAYER_BYTES_3, 0))
return;
BarberShopStyleEntry const* bs_skinColor = sBarberShopStyleStore.LookupEntry(SkinColor);
- if (bs_skinColor && (bs_skinColor->type != 3 || bs_skinColor->race != _player->getRace() || bs_skinColor->gender != _player->getGender()))
+ if (bs_skinColor && (bs_skinColor->type != 3 || bs_skinColor->race != _player->getRace() || bs_skinColor->gender != _player->GetByteValue(PLAYER_BYTES_3, 0)))
return;
- if (!Player::ValidateAppearance(_player->getRace(), _player->getClass(), _player->getGender(), bs_hair->hair_id, Color, _player->GetByteValue(PLAYER_BYTES, 1), bs_facialHair->hair_id, bs_skinColor ? bs_skinColor->hair_id : _player->GetByteValue(PLAYER_BYTES, 0)))
+ if (!Player::ValidateAppearance(_player->getRace(), _player->getClass(), _player->GetByteValue(PLAYER_BYTES_3, 0), bs_hair->hair_id, Color, _player->GetByteValue(PLAYER_BYTES, 1), bs_facialHair->hair_id, bs_skinColor ? bs_skinColor->hair_id : _player->GetByteValue(PLAYER_BYTES, 0)))
return;
GameObject* go = _player->FindNearestGameObjectOfType(GAMEOBJECT_TYPE_BARBER_CHAIR, 5.0f);
@@ -1389,7 +1391,7 @@ void WorldSession::HandleCharCustomize(WorldPacket& recvData)
return;
}
- ResponseCodes res = ObjectMgr::CheckPlayerName(customizeInfo.Name, true);
+ ResponseCodes res = ObjectMgr::CheckPlayerName(customizeInfo.Name, GetSessionDbcLocale(), true);
if (res != CHAR_NAME_SUCCESS)
{
SendCharCustomize(res, customizeInfo);
@@ -1442,7 +1444,7 @@ void WorldSession::HandleCharCustomize(WorldPacket& recvData)
CharacterDatabase.CommitTransaction(trans);
- sWorld->UpdateCharacterNameData(customizeInfo.Guid, customizeInfo.Name, customizeInfo.Gender);
+ sWorld->UpdateCharacterInfo(customizeInfo.Guid, customizeInfo.Name, customizeInfo.Gender);
SendCharCustomize(RESPONSE_SUCCESS, customizeInfo);
}
@@ -1588,19 +1590,19 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData)
>> factionChangeInfo.Face
>> factionChangeInfo.Race;
- uint32 lowGuid = factionChangeInfo.Guid.GetCounter();
+ ObjectGuid::LowType lowGuid = factionChangeInfo.Guid.GetCounter();
// get the players old (at this moment current) race
- CharacterNameData const* nameData = sWorld->GetCharacterNameData(factionChangeInfo.Guid);
+ CharacterInfo const* nameData = sWorld->GetCharacterInfo(factionChangeInfo.Guid);
if (!nameData)
{
SendCharFactionChange(CHAR_CREATE_ERROR, factionChangeInfo);
return;
}
- uint8 oldRace = nameData->m_race;
- uint8 playerClass = nameData->m_class;
- uint8 level = nameData->m_level;
+ uint8 oldRace = nameData->Race;
+ uint8 playerClass = nameData->Class;
+ uint8 level = nameData->Level;
// TO Do: Make async
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_AT_LOGIN_TITLES);
@@ -1647,7 +1649,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData)
return;
}
- ResponseCodes res = ObjectMgr::CheckPlayerName(factionChangeInfo.Name, true);
+ ResponseCodes res = ObjectMgr::CheckPlayerName(factionChangeInfo.Name, GetSessionDbcLocale(), true);
if (res != CHAR_NAME_SUCCESS)
{
SendCharFactionChange(res, factionChangeInfo);
@@ -1671,11 +1673,11 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData)
}
}
- // resurrect the character in case he's dead
- sObjectAccessor->ConvertCorpseForPlayer(factionChangeInfo.Guid);
-
SQLTransaction trans = CharacterDatabase.BeginTransaction();
+ // resurrect the character in case he's dead
+ Player::OfflineResurrect(factionChangeInfo.Guid, trans);
+
CharacterDatabase.EscapeString(factionChangeInfo.Name);
Player::Customize(&factionChangeInfo, trans);
@@ -1690,7 +1692,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData)
stmt->setUInt32(0, lowGuid);
trans->Append(stmt);
- sWorld->UpdateCharacterNameData(factionChangeInfo.Guid, factionChangeInfo.Name, factionChangeInfo.Gender, factionChangeInfo.Race);
+ sWorld->UpdateCharacterInfo(factionChangeInfo.Guid, factionChangeInfo.Name, factionChangeInfo.Gender, factionChangeInfo.Race);
if (oldRace != factionChangeInfo.Race)
{
@@ -1819,6 +1821,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData)
trans->Append(stmt);
}
+ /// @todo: make this part async
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD))
{
// Reset guild
@@ -1942,7 +1945,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData)
{
Quest const* quest = iter->second;
uint32 newRaceMask = (team == TEAM_ALLIANCE) ? RACEMASK_ALLIANCE : RACEMASK_HORDE;
- if (!(quest->GetRequiredRaces() & newRaceMask))
+ if (!(quest->GetAllowableRaces() & newRaceMask))
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_QUESTSTATUS_REWARDED_ACTIVE_BY_QUEST);
stmt->setUInt32(0, lowGuid);
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
index 2acbaba1f67..e13b417215b 100644
--- a/src/server/game/Handlers/ChatHandler.cpp
+++ b/src/server/game/Handlers/ChatHandler.cpp
@@ -115,7 +115,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
break;
default:
TC_LOG_ERROR("network", "Player %s (GUID: %u) sent a chatmessage with an invalid language/message type combination",
- GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow());
+ GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter());
recvData.rfinish();
return;
@@ -226,7 +226,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
if (sWorld->getIntConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY) && !ChatHandler(this).isValidChatMessage(msg.c_str()))
{
TC_LOG_ERROR("network", "Player %s (GUID: %u) sent a chatmessage with an invalid link: %s", GetPlayer()->GetName().c_str(),
- GetPlayer()->GetGUIDLow(), msg.c_str());
+ GetPlayer()->GetGUID().GetCounter(), msg.c_str());
if (sWorld->getIntConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_KICK))
KickPlayer();
diff --git a/src/server/game/Handlers/CombatHandler.cpp b/src/server/game/Handlers/CombatHandler.cpp
index ac33880cb98..78aeaa1b41b 100644
--- a/src/server/game/Handlers/CombatHandler.cpp
+++ b/src/server/game/Handlers/CombatHandler.cpp
@@ -75,7 +75,7 @@ void WorldSession::HandleSetSheathedOpcode(WorldPacket& recvData)
uint32 sheathed;
recvData >> sheathed;
- //TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_SETSHEATHED Message guidlow:%u value1:%u", GetPlayer()->GetGUIDLow(), sheathed);
+ //TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_SETSHEATHED Message guidlow:%u value1:%u", GetPlayer()->GetGUID().GetCounter(), sheathed);
if (sheathed >= MAX_SHEATH_STATE)
{
diff --git a/src/server/game/Handlers/DuelHandler.cpp b/src/server/game/Handlers/DuelHandler.cpp
index 954fb66a9db..2f39a91afbe 100644
--- a/src/server/game/Handlers/DuelHandler.cpp
+++ b/src/server/game/Handlers/DuelHandler.cpp
@@ -40,8 +40,8 @@ void WorldSession::HandleDuelAcceptedOpcode(WorldPacket& recvPacket)
return;
//TC_LOG_DEBUG("network", "WORLD: Received CMSG_DUEL_ACCEPTED");
- TC_LOG_DEBUG("network", "Player 1 is: %u (%s)", player->GetGUIDLow(), player->GetName().c_str());
- TC_LOG_DEBUG("network", "Player 2 is: %u (%s)", plTarget->GetGUIDLow(), plTarget->GetName().c_str());
+ TC_LOG_DEBUG("network", "Player 1 is: %u (%s)", player->GetGUID().GetCounter(), player->GetName().c_str());
+ TC_LOG_DEBUG("network", "Player 2 is: %u (%s)", plTarget->GetGUID().GetCounter(), plTarget->GetName().c_str());
time_t now = time(NULL);
player->duel->startTimer = now;
diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp
index f8531adeb88..9f225df8427 100644
--- a/src/server/game/Handlers/GroupHandler.cpp
+++ b/src/server/game/Handlers/GroupHandler.cpp
@@ -107,7 +107,7 @@ void WorldSession::HandleGroupInviteOpcode(WorldPacket& recvData)
return;
}
- if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow()))
+ if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUID().GetCounter()))
{
SendPartyResult(PARTY_OP_INVITE, membername, ERR_IGNORING_YOU_S);
return;
@@ -210,7 +210,7 @@ void WorldSession::HandleGroupAcceptOpcode(WorldPacket& recvData)
if (group->GetLeaderGUID() == GetPlayer()->GetGUID())
{
- TC_LOG_ERROR("network", "HandleGroupAcceptOpcode: player %s(%d) tried to accept an invite to his own group", GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow());
+ TC_LOG_ERROR("network", "HandleGroupAcceptOpcode: player %s(%d) tried to accept an invite to his own group", GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter());
return;
}
@@ -283,7 +283,7 @@ void WorldSession::HandleGroupUninviteGuidOpcode(WorldPacket& recvData)
if (guid == GetPlayer()->GetGUID())
{
TC_LOG_ERROR("network", "WorldSession::HandleGroupUninviteGuidOpcode: leader %s(%d) tried to uninvite himself from the group.",
- GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow());
+ GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter());
return;
}
@@ -328,7 +328,7 @@ void WorldSession::HandleGroupUninviteOpcode(WorldPacket& recvData)
if (GetPlayer()->GetName() == membername)
{
TC_LOG_ERROR("network", "WorldSession::HandleGroupUninviteOpcode: leader %s(%d) tried to uninvite himself from the group.",
- GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow());
+ GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter());
return;
}
@@ -991,7 +991,7 @@ void WorldSession::HandleRequestPartyMemberStatsOpcode(WorldPacket &recvData)
data.put<uint64>(maskPos, auraMask); // GROUP_UPDATE_FLAG_AURAS
if (updateFlags & GROUP_UPDATE_FLAG_PET_GUID)
- data << uint64(pet->GetGUID());
+ data << uint64(ASSERT_NOTNULL(pet)->GetGUID());
data << std::string(pet ? pet->GetName() : ""); // GROUP_UPDATE_FLAG_PET_NAME
data << uint16(pet ? pet->GetDisplayId() : 0); // GROUP_UPDATE_FLAG_PET_MODEL_ID
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index 672e1c69920..b1f46c381bf 100644
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -786,8 +786,7 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid)
if (!_player->IsGameMaster() && !leftInStock)
continue;
- ConditionList conditions = sConditionMgr->GetConditionsForNpcVendorEvent(vendor->GetEntry(), item->item);
- if (!sConditionMgr->IsObjectMeetToConditions(_player, vendor, conditions))
+ if (!sConditionMgr->IsObjectMeetingVendorItemConditions(vendor->GetEntry(), item->item, _player, vendor))
{
TC_LOG_DEBUG("condition", "SendListInventory: conditions not met for creature entry %u item %u", vendor->GetEntry(), item->item);
continue;
@@ -1157,7 +1156,7 @@ void WorldSession::HandleWrapItemOpcode(WorldPacket& recvData)
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_GIFT);
stmt->setUInt32(0, item->GetOwnerGUID().GetCounter());
- stmt->setUInt32(1, item->GetGUIDLow());
+ stmt->setUInt32(1, item->GetGUID().GetCounter());
stmt->setUInt32(2, item->GetEntry());
stmt->setUInt32(3, item->GetUInt32Value(ITEM_FIELD_FLAGS));
trans->Append(stmt);
diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp
index 18ad2e828f0..9876e939395 100644
--- a/src/server/game/Handlers/LootHandler.cpp
+++ b/src/server/game/Handlers/LootHandler.cpp
@@ -110,7 +110,7 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/)
switch (guid.GetHigh())
{
- case HIGHGUID_GAMEOBJECT:
+ case HighGuid::GameObject:
{
GameObject* go = GetPlayer()->GetMap()->GetGameObject(guid);
@@ -120,7 +120,7 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/)
break;
}
- case HIGHGUID_CORPSE: // remove insignia ONLY in BG
+ case HighGuid::Corpse: // remove insignia ONLY in BG
{
Corpse* bones = ObjectAccessor::GetCorpse(*player, guid);
@@ -132,7 +132,7 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/)
break;
}
- case HIGHGUID_ITEM:
+ case HighGuid::Item:
{
if (Item* item = player->GetItemByGuid(guid))
{
@@ -141,8 +141,8 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/)
}
break;
}
- case HIGHGUID_UNIT:
- case HIGHGUID_VEHICLE:
+ case HighGuid::Unit:
+ case HighGuid::Vehicle:
{
Creature* creature = player->GetMap()->GetCreature(guid);
bool lootAllowed = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->loot.loot_type == LOOT_PICKPOCKETING);
diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp
index d55af4bac35..5f25f57addd 100644
--- a/src/server/game/Handlers/MailHandler.cpp
+++ b/src/server/game/Handlers/MailHandler.cpp
@@ -110,7 +110,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData)
{
TC_LOG_INFO("network", "Player %u is sending mail to %s (GUID: not existed!) with subject %s "
"and body %s includes %u items, %u copper and %u COD copper with unk1 = %u, unk2 = %u",
- player->GetGUIDLow(), receiverName.c_str(), subject.c_str(), body.c_str(),
+ player->GetGUID().GetCounter(), receiverName.c_str(), subject.c_str(), body.c_str(),
items_count, money, COD, stationery, package);
player->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_NOT_FOUND);
return;
@@ -118,7 +118,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData)
TC_LOG_INFO("network", "Player %u is sending mail to %s (%s) with subject %s and body %s "
"includes %u items, %u copper and %u COD copper with unk1 = %u, unk2 = %u",
- player->GetGUIDLow(), receiverName.c_str(), receiverGuid.ToString().c_str(), subject.c_str(),
+ player->GetGUID().GetCounter(), receiverName.c_str(), receiverGuid.ToString().c_str(), subject.c_str(),
body.c_str(), items_count, money, COD, stationery, package);
if (player->GetGUID() == receiverGuid)
@@ -293,7 +293,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData)
if (log)
{
sLog->outCommand(GetAccountId(), "GM %s (GUID: %u) (Account: %u) mail item: %s (Entry: %u Count: %u) "
- "to: %s (%s) (Account: %u)", GetPlayerName().c_str(), GetGuidLow(), GetAccountId(),
+ "to: %s (%s) (Account: %u)", GetPlayerName().c_str(), GetGUIDLow(), GetAccountId(),
item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetCount(),
receiverName.c_str(), receiverGuid.ToString().c_str(), receiverAccountId);
}
@@ -315,7 +315,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData)
if (log && money > 0)
{
sLog->outCommand(GetAccountId(), "GM %s (GUID: %u) (Account: %u) mail money: %u to: %s (%s) (Account: %u)",
- GetPlayerName().c_str(), GetGuidLow(), GetAccountId(), money, receiverName.c_str(), receiverGuid.ToString().c_str(), receiverAccountId);
+ GetPlayerName().c_str(), GetGUIDLow(), GetAccountId(), money, receiverName.c_str(), receiverGuid.ToString().c_str(), receiverAccountId);
}
}
@@ -499,7 +499,7 @@ void WorldSession::HandleMailTakeItem(WorldPacket& recvData)
if (m->COD > 0) //if there is COD, take COD money from player and send them to sender by mail
{
- ObjectGuid sender_guid(HIGHGUID_PLAYER, m->sender);
+ ObjectGuid sender_guid(HighGuid::Player, m->sender);
Player* receiver = ObjectAccessor::FindConnectedPlayer(sender_guid);
uint32 sender_accId = 0;
@@ -539,7 +539,7 @@ void WorldSession::HandleMailTakeItem(WorldPacket& recvData)
m->COD = 0;
m->state = MAIL_STATE_CHANGED;
player->m_mailsUpdated = true;
- player->RemoveMItem(it->GetGUIDLow());
+ player->RemoveMItem(it->GetGUID().GetCounter());
uint32 count = it->GetCount(); // save counts before store and possible merge with deleting
it->SetState(ITEM_UNCHANGED); // need to set this state, otherwise item cannot be removed later, if neccessary
@@ -649,7 +649,7 @@ void WorldSession::HandleGetMailList(WorldPacket& recvData)
switch ((*itr)->messageType)
{
case MAIL_NORMAL: // sender guid
- data << ObjectGuid(HIGHGUID_PLAYER, (*itr)->sender);
+ data << ObjectGuid(HighGuid::Player, (*itr)->sender);
break;
case MAIL_CREATURE:
case MAIL_GAMEOBJECT:
@@ -676,7 +676,7 @@ void WorldSession::HandleGetMailList(WorldPacket& recvData)
// item index (0-6?)
data << uint8(i);
// item guid low?
- data << uint32((item ? item->GetGUIDLow() : 0));
+ data << uint32((item ? item->GetGUID().GetCounter() : 0));
// entry
data << uint32((item ? item->GetEntry() : 0));
for (uint8 j = 0; j < MAX_INSPECTED_ENCHANTMENT_SLOT; ++j)
@@ -735,7 +735,7 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket& recvData)
}
Item* bodyItem = new Item; // This is not bag and then can be used new Item.
- if (!bodyItem->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_ITEM), MAIL_BODY_ITEM_TEMPLATE, player))
+ if (!bodyItem->Create(sObjectMgr->GetGenerator<HighGuid::Item>().Generate(), MAIL_BODY_ITEM_TEMPLATE, player))
{
delete bodyItem;
return;
@@ -757,7 +757,7 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket& recvData)
bodyItem->SetText(m->body);
if (m->messageType == MAIL_NORMAL)
- bodyItem->SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid(HIGHGUID_PLAYER, m->sender));
+ bodyItem->SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid(HighGuid::Player, m->sender));
bodyItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_MAIL_TEXT_MASK);
@@ -812,7 +812,7 @@ void WorldSession::HandleQueryNextMailTime(WorldPacket & /*recvData*/)
if (sentSenders.count(m->sender))
continue;
- data << uint64(m->messageType == MAIL_NORMAL ? ObjectGuid(HIGHGUID_PLAYER, m->sender) : ObjectGuid::Empty); // player guid
+ data << uint64(m->messageType == MAIL_NORMAL ? ObjectGuid(HighGuid::Player, m->sender) : ObjectGuid::Empty); // player guid
data << uint32(m->messageType != MAIL_NORMAL ? m->sender : 0); // non-player entries
data << uint32(m->messageType);
data << uint32(m->stationery);
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 7a9760ecf80..6dcd3242a6c 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -66,7 +66,7 @@ void WorldSession::HandleRepopRequestOpcode(WorldPacket& recvData)
if (GetPlayer()->getDeathState() == JUST_DIED)
{
TC_LOG_DEBUG("network", "HandleRepopRequestOpcode: got request after player %s(%d) was killed and before he was updated",
- GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow());
+ GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter());
GetPlayer()->KillPlayer();
}
@@ -283,7 +283,7 @@ void WorldSession::HandleWhoOpcode(WorldPacket& recvData)
continue;
uint32 pzoneid = target->GetZoneId();
- uint8 gender = target->getGender();
+ uint8 gender = target->GetByteValue(PLAYER_BYTES_3, 0);
bool z_show = true;
for (uint32 i = 0; i < zones_count; ++i)
@@ -564,7 +564,7 @@ void WorldSession::HandleAddFriendOpcodeCallBack(PreparedQueryResult result, std
{
Field* fields = result->Fetch();
- friendGuid = ObjectGuid(HIGHGUID_PLAYER, 0, fields[0].GetUInt32());
+ friendGuid = ObjectGuid(HighGuid::Player, 0, fields[0].GetUInt32());
team = Player::TeamForRace(fields[1].GetUInt8());
friendAccountId = fields[2].GetUInt32();
@@ -649,7 +649,7 @@ void WorldSession::HandleAddIgnoreOpcodeCallBack(PreparedQueryResult result)
if (result)
{
- IgnoreGuid = ObjectGuid(HIGHGUID_PLAYER, (*result)[0].GetUInt32());
+ IgnoreGuid = ObjectGuid(HighGuid::Player, (*result)[0].GetUInt32());
if (IgnoreGuid)
{
@@ -741,7 +741,6 @@ void WorldSession::HandleReclaimCorpseOpcode(WorldPacket& recvData)
return;
Corpse* corpse = _player->GetCorpse();
-
if (!corpse)
return;
@@ -811,7 +810,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recvData)
if (player->IsInFlight())
{
TC_LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player '%s' (GUID: %u) in flight, ignore Area Trigger ID:%u",
- player->GetName().c_str(), player->GetGUIDLow(), triggerId);
+ player->GetName().c_str(), player->GetGUID().GetCounter(), triggerId);
return;
}
@@ -819,14 +818,14 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recvData)
if (!atEntry)
{
TC_LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player '%s' (GUID: %u) send unknown (by DBC) Area Trigger ID:%u",
- player->GetName().c_str(), player->GetGUIDLow(), triggerId);
+ player->GetName().c_str(), player->GetGUID().GetCounter(), triggerId);
return;
}
if (!player->IsInAreaTriggerRadius(atEntry))
{
TC_LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player '%s' (GUID: %u) too far, ignore Area Trigger ID: %u",
- player->GetName().c_str(), player->GetGUIDLow(), triggerId);
+ player->GetName().c_str(), player->GetGUID().GetCounter(), triggerId);
return;
}
@@ -1191,7 +1190,7 @@ void WorldSession::HandleWorldTeleportOpcode(WorldPacket& recvData)
if (GetPlayer()->IsInFlight())
{
TC_LOG_DEBUG("network", "Player '%s' (GUID: %u) in flight, ignore worldport command.",
- GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow());
+ GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter());
return;
}
@@ -1335,7 +1334,7 @@ void WorldSession::HandleFarSightOpcode(WorldPacket& recvData)
if (apply)
{
- TC_LOG_DEBUG("network", "Added FarSight %s to player %u", _player->GetGuidValue(PLAYER_FARSIGHT).ToString().c_str(), _player->GetGUIDLow());
+ TC_LOG_DEBUG("network", "Added FarSight %s to player %u", _player->GetGuidValue(PLAYER_FARSIGHT).ToString().c_str(), _player->GetGUID().GetCounter());
if (WorldObject* target = _player->GetViewpoint())
_player->SetSeer(target);
else
@@ -1343,7 +1342,7 @@ void WorldSession::HandleFarSightOpcode(WorldPacket& recvData)
}
else
{
- TC_LOG_DEBUG("network", "Player %u set vision to self", _player->GetGUIDLow());
+ TC_LOG_DEBUG("network", "Player %u set vision to self", _player->GetGUID().GetCounter());
_player->SetSeer(_player);
}
@@ -1411,7 +1410,7 @@ void WorldSession::HandleSetDungeonDifficultyOpcode(WorldPacket& recvData)
if (mode >= MAX_DUNGEON_DIFFICULTY)
{
- TC_LOG_DEBUG("network", "WorldSession::HandleSetDungeonDifficultyOpcode: player %d sent an invalid instance mode %d!", _player->GetGUIDLow(), mode);
+ TC_LOG_DEBUG("network", "WorldSession::HandleSetDungeonDifficultyOpcode: player %d sent an invalid instance mode %d!", _player->GetGUID().GetCounter(), mode);
return;
}
@@ -1423,7 +1422,7 @@ void WorldSession::HandleSetDungeonDifficultyOpcode(WorldPacket& recvData)
if (map && map->IsDungeon())
{
TC_LOG_DEBUG("network", "WorldSession::HandleSetDungeonDifficultyOpcode: player (Name: %s, GUID: %u) tried to reset the instance while player is inside!",
- _player->GetName().c_str(), _player->GetGUIDLow());
+ _player->GetName().c_str(), _player->GetGUID().GetCounter());
return;
}
@@ -1444,7 +1443,7 @@ void WorldSession::HandleSetDungeonDifficultyOpcode(WorldPacket& recvData)
if (groupGuy->GetMap()->IsNonRaidDungeon())
{
TC_LOG_DEBUG("network", "WorldSession::HandleSetDungeonDifficultyOpcode: player %d tried to reset the instance while group member (Name: %s, GUID: %u) is inside!",
- _player->GetGUIDLow(), groupGuy->GetName().c_str(), groupGuy->GetGUIDLow());
+ _player->GetGUID().GetCounter(), groupGuy->GetName().c_str(), groupGuy->GetGUID().GetCounter());
return;
}
}
@@ -1470,7 +1469,7 @@ void WorldSession::HandleSetRaidDifficultyOpcode(WorldPacket& recvData)
if (mode >= MAX_RAID_DIFFICULTY)
{
- TC_LOG_ERROR("network", "WorldSession::HandleSetRaidDifficultyOpcode: player %d sent an invalid instance mode %d!", _player->GetGUIDLow(), mode);
+ TC_LOG_ERROR("network", "WorldSession::HandleSetRaidDifficultyOpcode: player %d sent an invalid instance mode %d!", _player->GetGUID().GetCounter(), mode);
return;
}
@@ -1478,7 +1477,7 @@ void WorldSession::HandleSetRaidDifficultyOpcode(WorldPacket& recvData)
Map* map = _player->FindMap();
if (map && map->IsDungeon())
{
- TC_LOG_DEBUG("network", "WorldSession::HandleSetRaidDifficultyOpcode: player %d tried to reset the instance while inside!", _player->GetGUIDLow());
+ TC_LOG_DEBUG("network", "WorldSession::HandleSetRaidDifficultyOpcode: player %d tried to reset the instance while inside!", _player->GetGUID().GetCounter());
return;
}
@@ -1501,7 +1500,7 @@ void WorldSession::HandleSetRaidDifficultyOpcode(WorldPacket& recvData)
if (groupGuy->GetMap()->IsRaid())
{
- TC_LOG_DEBUG("network", "WorldSession::HandleSetRaidDifficultyOpcode: player %d tried to reset the instance while inside!", _player->GetGUIDLow());
+ TC_LOG_DEBUG("network", "WorldSession::HandleSetRaidDifficultyOpcode: player %d tried to reset the instance while inside!", _player->GetGUID().GetCounter());
return;
}
}
@@ -1695,7 +1694,7 @@ void WorldSession::HandleInstanceLockResponse(WorldPacket& recvPacket)
if (!_player->HasPendingBind())
{
TC_LOG_INFO("network", "InstanceLockResponse: Player %s (guid %u) tried to bind himself/teleport to graveyard without a pending bind!",
- _player->GetName().c_str(), _player->GetGUIDLow());
+ _player->GetName().c_str(), _player->GetGUID().GetCounter());
return;
}
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp
index cedfed2e7c5..84816bf3f33 100644
--- a/src/server/game/Handlers/MovementHandler.cpp
+++ b/src/server/game/Handlers/MovementHandler.cpp
@@ -79,7 +79,7 @@ void WorldSession::HandleMoveWorldportAckOpcode()
// while the player is in transit, for example the map may get full
if (!newMap || !newMap->CanEnter(GetPlayer()))
{
- TC_LOG_ERROR("network", "Map %d (%s) could not be created for player %d (%s), porting player to homebind", loc.GetMapId(), newMap ? newMap->GetMapName() : "Unknown", GetPlayer()->GetGUIDLow(), GetPlayer()->GetName().c_str());
+ TC_LOG_ERROR("network", "Map %d (%s) could not be created for player %d (%s), porting player to homebind", loc.GetMapId(), newMap ? newMap->GetMapName() : "Unknown", GetPlayer()->GetGUID().GetCounter(), GetPlayer()->GetName().c_str());
GetPlayer()->TeleportTo(GetPlayer()->m_homebindMapId, GetPlayer()->m_homebindX, GetPlayer()->m_homebindY, GetPlayer()->m_homebindZ, GetPlayer()->GetOrientation());
return;
}
@@ -96,7 +96,7 @@ void WorldSession::HandleMoveWorldportAckOpcode()
if (!GetPlayer()->GetMap()->AddPlayerToMap(GetPlayer()))
{
TC_LOG_ERROR("network", "WORLD: failed to teleport player %s (%d) to map %d (%s) because of unknown reason!",
- GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow(), loc.GetMapId(), newMap ? newMap->GetMapName() : "Unknown");
+ GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter(), loc.GetMapId(), newMap ? newMap->GetMapName() : "Unknown");
GetPlayer()->ResetMap();
GetPlayer()->SetMap(oldMap);
GetPlayer()->TeleportTo(GetPlayer()->m_homebindMapId, GetPlayer()->m_homebindX, GetPlayer()->m_homebindY, GetPlayer()->m_homebindZ, GetPlayer()->GetOrientation());
@@ -142,8 +142,8 @@ void WorldSession::HandleMoveWorldportAckOpcode()
}
// resurrect character at enter into instance where his corpse exist after add to map
- Corpse* corpse = GetPlayer()->GetCorpse();
- if (corpse && corpse->GetType() != CORPSE_BONES && corpse->GetMapId() == GetPlayer()->GetMapId())
+ Corpse* corpse = GetPlayer()->GetMap()->GetCorpseByPlayer(GetPlayer()->GetGUID());
+ if (corpse && corpse->GetType() != CORPSE_BONES)
{
if (mEntry->IsDungeon())
{
diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp
index 3c4bbd87b3f..f8d7f73e077 100644
--- a/src/server/game/Handlers/NPCHandler.cpp
+++ b/src/server/game/Handlers/NPCHandler.cpp
@@ -403,10 +403,12 @@ void WorldSession::SendSpiritResurrect()
// get corpse nearest graveyard
WorldSafeLocsEntry const* corpseGrave = NULL;
- Corpse* corpse = _player->GetCorpse();
- if (corpse)
- corpseGrave = sObjectMgr->GetClosestGraveYard(
- corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetMapId(), _player->GetTeam());
+ WorldLocation corpseLocation = _player->GetCorpseLocation();
+ if (_player->HasCorpse())
+ {
+ corpseGrave = sObjectMgr->GetClosestGraveYard(corpseLocation.GetPositionX(), corpseLocation.GetPositionY(),
+ corpseLocation.GetPositionZ(), corpseLocation.GetMapId(), _player->GetTeam());
+ }
// now can spawn bones
_player->SpawnCorpseBones();
@@ -494,7 +496,7 @@ void WorldSession::SendStablePet(ObjectGuid guid)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_SLOTS_DETAIL);
- stmt->setUInt32(0, _player->GetGUIDLow());
+ stmt->setUInt32(0, _player->GetGUID().GetCounter());
stmt->setUInt8(1, PET_SAVE_FIRST_STABLE_SLOT);
stmt->setUInt8(2, PET_SAVE_LAST_STABLE_SLOT);
@@ -596,7 +598,7 @@ void WorldSession::HandleStablePet(WorldPacket& recvData)
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_SLOTS);
- stmt->setUInt32(0, _player->GetGUIDLow());
+ stmt->setUInt32(0, _player->GetGUID().GetCounter());
stmt->setUInt8(1, PET_SAVE_FIRST_STABLE_SLOT);
stmt->setUInt8(2, PET_SAVE_LAST_STABLE_SLOT);
@@ -657,7 +659,7 @@ void WorldSession::HandleUnstablePet(WorldPacket& recvData)
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_ENTRY);
- stmt->setUInt32(0, _player->GetGUIDLow());
+ stmt->setUInt32(0, _player->GetGUID().GetCounter());
stmt->setUInt32(1, petnumber);
stmt->setUInt8(2, PET_SAVE_FIRST_STABLE_SLOT);
stmt->setUInt8(3, PET_SAVE_LAST_STABLE_SLOT);
@@ -786,7 +788,7 @@ void WorldSession::HandleStableSwapPet(WorldPacket& recvData)
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_SLOT_BY_ID);
- stmt->setUInt32(0, _player->GetGUIDLow());
+ stmt->setUInt32(0, _player->GetGUID().GetCounter());
stmt->setUInt32(1, petId);
_stableSwapCallback.SetParam(petId);
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp
index 8ec887ea94d..8c3c3e9082b 100644
--- a/src/server/game/Handlers/PetHandler.cpp
+++ b/src/server/game/Handlers/PetHandler.cpp
@@ -46,7 +46,7 @@ void WorldSession::HandleDismissCritter(WorldPacket& recvData)
if (!pet)
{
TC_LOG_DEBUG("network", "Vanitypet (%s) does not exist - player '%s' (guid: %u / account: %u) attempted to dismiss it (possibly lagged out)",
- guid.ToString().c_str(), GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow(), GetAccountId());
+ guid.ToString().c_str(), GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter(), GetAccountId());
return;
}
@@ -146,7 +146,7 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe
if (!charmInfo)
{
TC_LOG_DEBUG("network", "WorldSession::HandlePetAction(petGuid: %s, tagGuid: %s, spellId: %u, flag: %u): object (GUID: %u Entry: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!",
- guid1.ToString().c_str(), guid2.ToString().c_str(), spellid, flag, pet->GetGUIDLow(), pet->GetEntry(), pet->GetTypeId());
+ guid1.ToString().c_str(), guid2.ToString().c_str(), spellid, flag, pet->GetGUID().GetCounter(), pet->GetEntry(), pet->GetTypeId());
return;
}
@@ -482,7 +482,7 @@ void WorldSession::HandlePetSetAction(WorldPacket& recvData)
CharmInfo* charmInfo = pet->GetCharmInfo();
if (!charmInfo)
{
- TC_LOG_ERROR("network", "WorldSession::HandlePetSetAction: object (GUID: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", pet->GetGUIDLow(), pet->GetTypeId());
+ TC_LOG_ERROR("network", "WorldSession::HandlePetSetAction: object (GUID: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", pet->GetGUID().GetCounter(), pet->GetTypeId());
return;
}
@@ -593,14 +593,14 @@ void WorldSession::HandlePetRename(WorldPacket& recvData)
recvData >> name;
recvData >> isdeclined;
- Pet* pet = ObjectAccessor::FindPet(petguid);
+ Pet* pet = ObjectAccessor::GetPet(*_player, petguid);
// check it!
if (!pet || !pet->IsPet() || ((Pet*)pet)->getPetType()!= HUNTER_PET ||
!pet->HasByteFlag(UNIT_FIELD_BYTES_2, 2, UNIT_CAN_BE_RENAMED) ||
pet->GetOwnerGUID() != _player->GetGUID() || !pet->GetCharmInfo())
return;
- PetNameInvalidReason res = ObjectMgr::CheckPetName(name);
+ PetNameInvalidReason res = ObjectMgr::CheckPetName(name, GetSessionDbcLocale());
if (res != PET_NAME_SUCCESS)
{
SendPetNameInvalid(res, name, NULL);
@@ -646,7 +646,7 @@ void WorldSession::HandlePetRename(WorldPacket& recvData)
trans->Append(stmt);
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_PET_DECLINEDNAME);
- stmt->setUInt32(0, _player->GetGUIDLow());
+ stmt->setUInt32(0, _player->GetGUID().GetCounter());
for (uint8 i = 0; i < 5; i++)
stmt->setString(i + 1, declinedname.name[i]);
@@ -656,7 +656,7 @@ void WorldSession::HandlePetRename(WorldPacket& recvData)
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_PET_NAME);
stmt->setString(0, name);
- stmt->setUInt32(1, _player->GetGUIDLow());
+ stmt->setUInt32(1, _player->GetGUID().GetCounter());
stmt->setUInt32(2, pet->GetCharmInfo()->GetPetNumber());
trans->Append(stmt);
@@ -729,7 +729,7 @@ void WorldSession::HandlePetSpellAutocastOpcode(WorldPacket& recvPacket)
CharmInfo* charmInfo = pet->GetCharmInfo();
if (!charmInfo)
{
- TC_LOG_ERROR("network", "WorldSession::HandlePetSpellAutocastOpcod: object (GUID: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", pet->GetGUIDLow(), pet->GetTypeId());
+ TC_LOG_ERROR("network", "WorldSession::HandlePetSpellAutocastOpcod: object (GUID: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", pet->GetGUID().GetCounter(), pet->GetTypeId());
return;
}
diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp
index 05e793455da..952659dcea5 100644
--- a/src/server/game/Handlers/PetitionsHandler.cpp
+++ b/src/server/game/Handlers/PetitionsHandler.cpp
@@ -191,7 +191,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData)
if (!charter)
return;
- charter->SetUInt32Value(ITEM_FIELD_ENCHANTMENT_1_1, charter->GetGUIDLow());
+ charter->SetUInt32Value(ITEM_FIELD_ENCHANTMENT_1_1, charter->GetGUID().GetCounter());
// ITEM_FIELD_ENCHANTMENT_1_1 is guild/arenateam id
// ITEM_FIELD_ENCHANTMENT_1_1+1 is current signatures count (showed on item)
charter->SetState(ITEM_CHANGED, _player);
@@ -201,7 +201,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData)
// we checked above, if this player is in an arenateam, so this must be
// datacorruption
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_BY_OWNER);
- stmt->setUInt32(0, _player->GetGUIDLow());
+ stmt->setUInt32(0, _player->GetGUID().GetCounter());
stmt->setUInt8(1, type);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
@@ -217,7 +217,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData)
}
// delete petitions with the same guid as this one
- ssInvalidPetitionGUIDs << '\'' << charter->GetGUIDLow() << '\'';
+ ssInvalidPetitionGUIDs << '\'' << charter->GetGUID().GetCounter() << '\'';
TC_LOG_DEBUG("network", "Invalid petition GUIDs: %s", ssInvalidPetitionGUIDs.str().c_str());
CharacterDatabase.EscapeString(name);
@@ -226,8 +226,8 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData)
trans->PAppend("DELETE FROM petition_sign WHERE petitionguid IN (%s)", ssInvalidPetitionGUIDs.str().c_str());
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PETITION);
- stmt->setUInt32(0, _player->GetGUIDLow());
- stmt->setUInt32(1, charter->GetGUIDLow());
+ stmt->setUInt32(0, _player->GetGUID().GetCounter());
+ stmt->setUInt32(1, charter->GetGUID().GetCounter());
stmt->setString(2, name);
stmt->setUInt8(3, uint8(type));
trans->Append(stmt);
@@ -243,7 +243,7 @@ void WorldSession::HandlePetitionShowSignOpcode(WorldPacket& recvData)
ObjectGuid petitionguid;
recvData >> petitionguid; // petition guid
- uint32 petitionGuidLow = petitionguid.GetCounter();
+ ObjectGuid::LowType petitionGuidLow = petitionguid.GetCounter();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_TYPE);
@@ -253,7 +253,7 @@ void WorldSession::HandlePetitionShowSignOpcode(WorldPacket& recvData)
if (!result)
{
- TC_LOG_DEBUG("entities.player.items", "Petition %s is not found for player %u %s", petitionguid.ToString().c_str(), GetPlayer()->GetGUIDLow(), GetPlayer()->GetName().c_str());
+ TC_LOG_DEBUG("entities.player.items", "Petition %s is not found for player %u %s", petitionguid.ToString().c_str(), GetPlayer()->GetGUID().GetCounter(), GetPlayer()->GetName().c_str());
return;
}
Field* fields = result->Fetch();
@@ -284,9 +284,9 @@ void WorldSession::HandlePetitionShowSignOpcode(WorldPacket& recvData)
for (uint8 i = 1; i <= signs; ++i)
{
Field* fields2 = result->Fetch();
- uint32 lowGuid = fields2[0].GetUInt32();
+ ObjectGuid::LowType lowGuid = fields2[0].GetUInt32();
- data << ObjectGuid(HIGHGUID_PLAYER, 0, lowGuid); // Player GUID
+ data << ObjectGuid(HighGuid::Player, 0, lowGuid); // Player GUID
data << uint32(0); // there 0 ...
result->NextRow();
@@ -298,7 +298,7 @@ void WorldSession::HandlePetitionQueryOpcode(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "Received opcode CMSG_PETITION_QUERY"); // ok
- uint32 guildguid;
+ ObjectGuid::LowType guildguid;
ObjectGuid petitionguid;
recvData >> guildguid; // in Trinity always same as GUID_LOPART(petitionguid)
recvData >> petitionguid; // petition guid
@@ -322,7 +322,7 @@ void WorldSession::SendPetitionQueryOpcode(ObjectGuid petitionguid)
if (result)
{
Field* fields = result->Fetch();
- ownerguid = ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32());
+ ownerguid = ObjectGuid(HighGuid::Player, fields[0].GetUInt32());
name = fields[1].GetString();
type = fields[2].GetUInt8();
}
@@ -461,16 +461,16 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData)
if (!result)
{
- TC_LOG_ERROR("network", "Petition %s is not found for player %u %s", petitionGuid.ToString().c_str(), GetPlayer()->GetGUIDLow(), GetPlayer()->GetName().c_str());
+ TC_LOG_ERROR("network", "Petition %s is not found for player %u %s", petitionGuid.ToString().c_str(), GetPlayer()->GetGUID().GetCounter(), GetPlayer()->GetName().c_str());
return;
}
fields = result->Fetch();
- ObjectGuid ownerGuid(HIGHGUID_PLAYER, fields[0].GetUInt32());
+ ObjectGuid ownerGuid(HighGuid::Player, fields[0].GetUInt32());
uint64 signs = fields[1].GetUInt64();
uint8 type = fields[2].GetUInt8();
- uint32 playerGuid = _player->GetGUIDLow();
+ ObjectGuid::LowType playerGuid = _player->GetGUID().GetCounter();
if (ownerGuid == _player->GetGUID())
return;
@@ -585,7 +585,7 @@ void WorldSession::HandlePetitionDeclineOpcode(WorldPacket& recvData)
ObjectGuid petitionguid;
recvData >> petitionguid; // petition guid
- TC_LOG_DEBUG("network", "Petition %s declined by %u", petitionguid.ToString().c_str(), _player->GetGUIDLow());
+ TC_LOG_DEBUG("network", "Petition %s declined by %u", petitionguid.ToString().c_str(), _player->GetGUID().GetCounter());
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_OWNER_BY_GUID);
@@ -597,7 +597,7 @@ void WorldSession::HandlePetitionDeclineOpcode(WorldPacket& recvData)
return;
Field* fields = result->Fetch();
- ObjectGuid ownerguid(HIGHGUID_PLAYER, 0, fields[0].GetUInt32());
+ ObjectGuid ownerguid(HighGuid::Player, 0, fields[0].GetUInt32());
Player* owner = ObjectAccessor::FindConnectedPlayer(ownerguid);
if (owner) // petition owner online
@@ -708,7 +708,7 @@ void WorldSession::HandleOfferPetitionOpcode(WorldPacket& recvData)
for (uint8 i = 1; i <= signs; ++i)
{
Field* fields2 = result->Fetch();
- data << uint64(ObjectGuid(HIGHGUID_PLAYER, fields2[0].GetUInt32())); // Player GUID
+ data << uint64(ObjectGuid(HighGuid::Player, fields2[0].GetUInt32())); // Player GUID
data << uint32(0); // there 0 ...
result->NextRow();
@@ -732,10 +732,10 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData)
if (!item)
return;
- TC_LOG_DEBUG("network", "Petition %s turned in by %u", petitionGuid.ToString().c_str(), _player->GetGUIDLow());
+ TC_LOG_DEBUG("network", "Petition %s turned in by %u", petitionGuid.ToString().c_str(), _player->GetGUID().GetCounter());
// Get petition data from db
- uint32 ownerguidlo;
+ ObjectGuid::LowType ownerguidlo;
uint32 type;
std::string name;
@@ -752,12 +752,12 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData)
}
else
{
- TC_LOG_ERROR("network", "Player %s (guid: %u) tried to turn in petition (%s) that is not present in the database", _player->GetName().c_str(), _player->GetGUIDLow(), petitionGuid.ToString().c_str());
+ TC_LOG_ERROR("network", "Player %s (guid: %u) tried to turn in petition (%s) that is not present in the database", _player->GetName().c_str(), _player->GetGUID().GetCounter(), petitionGuid.ToString().c_str());
return;
}
// Only the petition owner can turn in the petition
- if (_player->GetGUIDLow() != ownerguidlo)
+ if (_player->GetGUID().GetCounter() != ownerguidlo)
return;
// Petition type (guild/arena) specific checks
@@ -853,7 +853,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData)
for (uint8 i = 0; i < signatures; ++i)
{
Field* fields = result->Fetch();
- guild->AddMember(ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32()));
+ guild->AddMember(ObjectGuid(HighGuid::Player, fields[0].GetUInt32()));
result->NextRow();
}
}
@@ -880,7 +880,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData)
for (uint8 i = 0; i < signatures; ++i)
{
Field* fields = result->Fetch();
- ObjectGuid memberGUID(HIGHGUID_PLAYER, fields[0].GetUInt32());
+ ObjectGuid memberGUID(HighGuid::Player, fields[0].GetUInt32());
TC_LOG_DEBUG("network", "PetitionsHandler: Adding arena team (guid: %u) member %s", arenaTeam->GetId(), memberGUID.ToString().c_str());
arenaTeam->AddMember(memberGUID);
result->NextRow();
diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp
index 906c3017100..153ce736946 100644
--- a/src/server/game/Handlers/QueryHandler.cpp
+++ b/src/server/game/Handlers/QueryHandler.cpp
@@ -31,7 +31,7 @@
void WorldSession::SendNameQueryOpcode(ObjectGuid guid)
{
Player* player = ObjectAccessor::FindConnectedPlayer(guid);
- CharacterNameData const* nameData = sWorld->GetCharacterNameData(guid);
+ CharacterInfo const* nameData = sWorld->GetCharacterInfo(guid);
WorldPacket data(SMSG_NAME_QUERY_RESPONSE, (8+1+1+1+1+1+10));
data << guid.WriteAsPacked();
@@ -43,11 +43,11 @@ void WorldSession::SendNameQueryOpcode(ObjectGuid guid)
}
data << uint8(0); // name known
- data << nameData->m_name; // played name
+ data << nameData->Name; // played name
data << uint8(0); // realm name - only set for cross realm interaction (such as Battlegrounds)
- data << uint8(nameData->m_race);
- data << uint8(nameData->m_gender);
- data << uint8(nameData->m_class);
+ data << uint8(nameData->Race);
+ data << uint8(nameData->Sex);
+ data << uint8(nameData->Class);
if (DeclinedName const* names = (player ? player->GetDeclinedNames() : NULL))
{
@@ -96,9 +96,9 @@ void WorldSession::HandleCreatureQueryOpcode(WorldPacket& recvData)
CreatureTemplate const* ci = sObjectMgr->GetCreatureTemplate(entry);
if (ci)
{
- std::string Name, SubName;
+ std::string Name, Title;
Name = ci->Name;
- SubName = ci->SubName;
+ Title = ci->Title;
int loc_idx = GetSessionDbLocaleIndex();
if (loc_idx >= 0)
@@ -106,7 +106,7 @@ void WorldSession::HandleCreatureQueryOpcode(WorldPacket& recvData)
if (CreatureLocale const* cl = sObjectMgr->GetCreatureLocale(entry))
{
ObjectMgr::GetLocaleString(cl->Name, loc_idx, Name);
- ObjectMgr::GetLocaleString(cl->SubName, loc_idx, SubName);
+ ObjectMgr::GetLocaleString(cl->Title, loc_idx, Title);
}
}
TC_LOG_DEBUG("network", "WORLD: CMSG_CREATURE_QUERY '%s' - Entry: %u.", ci->Name.c_str(), entry);
@@ -115,7 +115,7 @@ void WorldSession::HandleCreatureQueryOpcode(WorldPacket& recvData)
data << uint32(entry); // creature entry
data << Name;
data << uint8(0) << uint8(0) << uint8(0); // name2, name3, name4, always empty
- data << SubName;
+ data << Title;
data << ci->IconName; // "Directions" for guard, string for Icons 2.3.0
data << uint32(ci->type_flags); // flags
data << uint32(ci->type); // CreatureType.dbc
@@ -218,11 +218,7 @@ void WorldSession::HandleGameObjectQueryOpcode(WorldPacket& recvData)
void WorldSession::HandleCorpseQueryOpcode(WorldPacket & /*recvData*/)
{
- TC_LOG_DEBUG("network", "WORLD: Received MSG_CORPSE_QUERY");
-
- Corpse* corpse = GetPlayer()->GetCorpse();
-
- if (!corpse)
+ if (!_player->HasCorpse())
{
WorldPacket data(MSG_CORPSE_QUERY, 1);
data << uint8(0); // corpse not found
@@ -230,24 +226,25 @@ void WorldSession::HandleCorpseQueryOpcode(WorldPacket & /*recvData*/)
return;
}
- uint32 mapid = corpse->GetMapId();
- float x = corpse->GetPositionX();
- float y = corpse->GetPositionY();
- float z = corpse->GetPositionZ();
- uint32 corpsemapid = mapid;
+ WorldLocation corpseLocation = _player->GetCorpseLocation();
+ uint32 corpseMapID = corpseLocation.GetMapId();
+ uint32 mapID = corpseLocation.GetMapId();
+ float x = corpseLocation.GetPositionX();
+ float y = corpseLocation.GetPositionY();
+ float z = corpseLocation.GetPositionZ();
// if corpse at different map
- if (mapid != _player->GetMapId())
+ if (mapID != _player->GetMapId())
{
// search entrance map for proper show entrance
- if (MapEntry const* corpseMapEntry = sMapStore.LookupEntry(mapid))
+ if (MapEntry const* corpseMapEntry = sMapStore.LookupEntry(mapID))
{
if (corpseMapEntry->IsDungeon() && corpseMapEntry->entrance_map >= 0)
{
// if corpse map have entrance
if (Map const* entranceMap = sMapMgr->CreateBaseMap(corpseMapEntry->entrance_map))
{
- mapid = corpseMapEntry->entrance_map;
+ mapID = corpseMapEntry->entrance_map;
x = corpseMapEntry->entrance_x;
y = corpseMapEntry->entrance_y;
z = entranceMap->GetHeight(GetPlayer()->GetPhaseMask(), x, y, MAX_HEIGHT);
@@ -258,11 +255,11 @@ void WorldSession::HandleCorpseQueryOpcode(WorldPacket & /*recvData*/)
WorldPacket data(MSG_CORPSE_QUERY, 1+(6*4));
data << uint8(1); // corpse found
- data << int32(mapid);
+ data << int32(mapID);
data << float(x);
data << float(y);
data << float(z);
- data << int32(corpsemapid);
+ data << int32(corpseMapID);
data << uint32(0); // unknown
SendPacket(&data);
}
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp
index b6297e1705a..fd7c4439c8f 100644
--- a/src/server/game/Handlers/QuestHandler.cpp
+++ b/src/server/game/Handlers/QuestHandler.cpp
@@ -48,14 +48,14 @@ void WorldSession::HandleQuestgiverStatusQueryOpcode(WorldPacket& recvData)
{
case TYPEID_UNIT:
{
- TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for npc, guid = %u", questGiver->GetGUIDLow());
+ TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for npc, guid = %u", questGiver->GetGUID().GetCounter());
if (!questGiver->ToCreature()->IsHostileTo(_player)) // do not show quest status to enemies
questStatus = _player->GetQuestDialogStatus(questGiver);
break;
}
case TYPEID_GAMEOBJECT:
{
- TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for GameObject guid = %u", questGiver->GetGUIDLow());
+ TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for GameObject guid = %u", questGiver->GetGUID().GetCounter());
questStatus = _player->GetQuestDialogStatus(questGiver);
break;
}
@@ -124,8 +124,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData)
if (Player* playerQuestObject = object->ToPlayer())
{
- if ((_player->GetDivider() && _player->GetDivider() != guid) ||
- ((object != _player && !playerQuestObject->CanShareQuest(questId))))
+ if ((_player->GetDivider() && _player->GetDivider() != guid) || !playerQuestObject->CanShareQuest(questId))
{
CLOSE_GOSSIP_CLEAR_DIVIDER();
return;
@@ -260,7 +259,7 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket& recvData)
if (reward >= QUEST_REWARD_CHOICES_COUNT)
{
- TC_LOG_ERROR("network", "Error in CMSG_QUESTGIVER_CHOOSE_REWARD: player %s (guid %d) tried to get invalid reward (%u) (possible packet-hacking detected)", _player->GetName().c_str(), _player->GetGUIDLow(), reward);
+ TC_LOG_ERROR("network", "Error in CMSG_QUESTGIVER_CHOOSE_REWARD: player %s (guid %d) tried to get invalid reward (%u) (possible packet-hacking detected)", _player->GetName().c_str(), _player->GetGUID().GetCounter(), reward);
return;
}
@@ -280,7 +279,7 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket& recvData)
(_player->GetQuestStatus(questId) != QUEST_STATUS_COMPLETE && !quest->IsAutoComplete()))
{
TC_LOG_ERROR("network", "Error in QUEST_STATUS_COMPLETE: player %s (guid %u) tried to complete quest %u, but is not allowed to do so (possible packet-hacking or high latency)",
- _player->GetName().c_str(), _player->GetGUIDLow(), questId);
+ _player->GetName().c_str(), _player->GetGUID().GetCounter(), questId);
return;
}
if (_player->CanRewardQuest(quest, reward, true))
@@ -418,14 +417,14 @@ void WorldSession::HandleQuestLogRemoveQuest(WorldPacket& recvData)
_player->RemoveActiveQuest(questId);
_player->RemoveTimedAchievement(ACHIEVEMENT_TIMED_TYPE_QUEST, questId);
- TC_LOG_INFO("network", "Player %u abandoned quest %u", _player->GetGUIDLow(), questId);
+ TC_LOG_INFO("network", "Player %u abandoned quest %u", _player->GetGUID().GetCounter(), questId);
if (sWorld->getBoolConfig(CONFIG_QUEST_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled
{
// prepare Quest Tracker datas
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_QUEST_TRACK_ABANDON_TIME);
stmt->setUInt32(0, questId);
- stmt->setUInt32(1, _player->GetGUIDLow());
+ stmt->setUInt32(1, _player->GetGUID().GetCounter());
// add to Quest Tracker
CharacterDatabase.Execute(stmt);
@@ -494,7 +493,7 @@ void WorldSession::HandleQuestgiverCompleteQuest(WorldPacket& recvData)
if (!_player->CanSeeStartQuest(quest) && _player->GetQuestStatus(questId) == QUEST_STATUS_NONE)
{
TC_LOG_ERROR("network", "Possible hacking attempt: Player %s [guid: %u] tried to complete quest [entry: %u] without being in possession of the quest!",
- _player->GetName().c_str(), _player->GetGUIDLow(), questId);
+ _player->GetName().c_str(), _player->GetGUID().GetCounter(), questId);
return;
}
diff --git a/src/server/game/Handlers/ReferAFriendHandler.cpp b/src/server/game/Handlers/ReferAFriendHandler.cpp
index f87198834b9..db5d0997eeb 100644
--- a/src/server/game/Handlers/ReferAFriendHandler.cpp
+++ b/src/server/game/Handlers/ReferAFriendHandler.cpp
@@ -27,7 +27,7 @@ void WorldSession::HandleGrantLevel(WorldPacket& recvData)
ObjectGuid guid;
recvData >> guid.ReadAsPacked();
- Player* target = ObjectAccessor::GetObjectInWorld(guid, _player);
+ Player* target = ObjectAccessor::GetPlayer(*_player, guid);
// check cheating
uint8 levels = _player->GetGrantableLevels();
@@ -70,7 +70,8 @@ void WorldSession::HandleAcceptGrantLevel(WorldPacket& recvData)
ObjectGuid guid;
recvData >> guid.ReadAsPacked();
- Player* other = ObjectAccessor::GetObjectInWorld(guid, _player);
+ Player* other = ObjectAccessor::GetPlayer(*_player, guid);
+
if (!(other && other->GetSession()))
return;
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp
index a6108b36c13..0f0640e3a2e 100644
--- a/src/server/game/Handlers/SpellHandler.cpp
+++ b/src/server/game/Handlers/SpellHandler.cpp
@@ -200,7 +200,7 @@ void WorldSession::HandleOpenItemOpcode(WorldPacket& recvPacket)
{
pUser->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW, item, NULL);
TC_LOG_ERROR("network", "Possible hacking attempt: Player %s [guid: %u] tried to open item [guid: %u, entry: %u] which is not openable!",
- pUser->GetName().c_str(), pUser->GetGUIDLow(), item->GetGUIDLow(), proto->ItemId);
+ pUser->GetName().c_str(), pUser->GetGUID().GetCounter(), item->GetGUID().GetCounter(), proto->ItemId);
return;
}
@@ -213,7 +213,7 @@ void WorldSession::HandleOpenItemOpcode(WorldPacket& recvPacket)
if (!lockInfo)
{
pUser->SendEquipError(EQUIP_ERR_ITEM_LOCKED, item, NULL);
- TC_LOG_ERROR("network", "WORLD::OpenItem: item [guid = %u] has an unknown lockId: %u!", item->GetGUIDLow(), lockId);
+ TC_LOG_ERROR("network", "WORLD::OpenItem: item [guid = %u] has an unknown lockId: %u!", item->GetGUID().GetCounter(), lockId);
return;
}
@@ -229,7 +229,7 @@ void WorldSession::HandleOpenItemOpcode(WorldPacket& recvPacket)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_GIFT_BY_ITEM);
- stmt->setUInt32(0, item->GetGUIDLow());
+ stmt->setUInt32(0, item->GetGUID().GetCounter());
PreparedQueryResult result = CharacterDatabase.Query(stmt);
@@ -246,14 +246,14 @@ void WorldSession::HandleOpenItemOpcode(WorldPacket& recvPacket)
}
else
{
- TC_LOG_ERROR("network", "Wrapped item %u don't have record in character_gifts table and will deleted", item->GetGUIDLow());
+ TC_LOG_ERROR("network", "Wrapped item %u don't have record in character_gifts table and will deleted", item->GetGUID().GetCounter());
pUser->DestroyItem(item->GetBagSlot(), item->GetSlot(), true);
return;
}
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT);
- stmt->setUInt32(0, item->GetGUIDLow());
+ stmt->setUInt32(0, item->GetGUID().GetCounter());
CharacterDatabase.Execute(stmt);
}
@@ -579,7 +579,7 @@ void WorldSession::HandleMirrorImageDataRequest(WorldPacket& recvData)
recvData >> guid;
// Get unit for which data is needed by client
- Unit* unit = ObjectAccessor::GetObjectInWorld(guid, (Unit*)NULL);
+ Unit* unit = ObjectAccessor::GetUnit(*_player, guid);
if (!unit)
return;
diff --git a/src/server/game/Handlers/TaxiHandler.cpp b/src/server/game/Handlers/TaxiHandler.cpp
index af0f5b0fc75..a671250c17d 100644
--- a/src/server/game/Handlers/TaxiHandler.cpp
+++ b/src/server/game/Handlers/TaxiHandler.cpp
@@ -24,7 +24,6 @@
#include "Log.h"
#include "ObjectMgr.h"
#include "Player.h"
-#include "Path.h"
#include "WaypointMovementGenerator.h"
void WorldSession::HandleTaxiNodeStatusQueryOpcode(WorldPacket& recvData)
@@ -212,7 +211,7 @@ void WorldSession::HandleMoveSplineDoneOpcode(WorldPacket& recvData)
MovementInfo movementInfo; // used only for proper packet read
ReadMovementInfo(recvData, &movementInfo);
- recvData.read_skip<uint32>(); // unk
+ recvData.read_skip<uint32>(); // spline id
// in taxi flight packet received in 2 case:
// 1) end taxi path in far (multi-node) flight
@@ -220,59 +219,32 @@ void WorldSession::HandleMoveSplineDoneOpcode(WorldPacket& recvData)
// we need process only (1)
uint32 curDest = GetPlayer()->m_taxi.GetTaxiDestination();
- if (!curDest)
- return;
-
- TaxiNodesEntry const* curDestNode = sTaxiNodesStore.LookupEntry(curDest);
-
- // far teleport case
- if (curDestNode && curDestNode->map_id != GetPlayer()->GetMapId())
+ if (curDest)
{
- if (GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE)
- {
- // short preparations to continue flight
- FlightPathMovementGenerator* flight = (FlightPathMovementGenerator*)(GetPlayer()->GetMotionMaster()->top());
-
- flight->SetCurrentNodeAfterTeleport();
- TaxiPathNodeEntry const& node = flight->GetPath()[flight->GetCurrentNode()];
- flight->SkipCurrentNode();
+ TaxiNodesEntry const* curDestNode = sTaxiNodesStore.LookupEntry(curDest);
- GetPlayer()->TeleportTo(curDestNode->map_id, node.LocX, node.LocY, node.LocZ, GetPlayer()->GetOrientation());
- }
- return;
- }
-
- uint32 destinationnode = GetPlayer()->m_taxi.NextTaxiDestination();
- if (destinationnode > 0) // if more destinations to go
- {
- // current source node for next destination
- uint32 sourcenode = GetPlayer()->m_taxi.GetTaxiSource();
-
- // Add to taximask middle hubs in taxicheat mode (to prevent having player with disabled taxicheat and not having back flight path)
- if (GetPlayer()->isTaxiCheater())
+ // far teleport case
+ if (curDestNode && curDestNode->map_id != GetPlayer()->GetMapId())
{
- if (GetPlayer()->m_taxi.SetTaximaskNode(sourcenode))
+ if (GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE)
{
- WorldPacket data(SMSG_NEW_TAXI_PATH, 0);
- _player->GetSession()->SendPacket(&data);
- }
- }
+ // short preparations to continue flight
+ FlightPathMovementGenerator* flight = (FlightPathMovementGenerator*)(GetPlayer()->GetMotionMaster()->top());
- TC_LOG_DEBUG("network", "WORLD: Taxi has to go from %u to %u", sourcenode, destinationnode);
+ flight->SetCurrentNodeAfterTeleport();
+ TaxiPathNodeEntry const* node = flight->GetPath()[flight->GetCurrentNode()];
+ flight->SkipCurrentNode();
- uint32 mountDisplayId = sObjectMgr->GetTaxiMountDisplayId(sourcenode, GetPlayer()->GetTeam());
-
- uint32 path, cost;
- sObjectMgr->GetTaxiPath(sourcenode, destinationnode, path, cost);
+ GetPlayer()->TeleportTo(curDestNode->map_id, node->LocX, node->LocY, node->LocZ, GetPlayer()->GetOrientation());
+ }
+ }
- if (path && mountDisplayId)
- SendDoFlight(mountDisplayId, path, 1); // skip start fly node
- else
- GetPlayer()->m_taxi.ClearTaxiDestinations(); // clear problematic path and next
return;
}
- else
- GetPlayer()->m_taxi.ClearTaxiDestinations(); // not destinations, clear source node
+
+ // at this point only 1 node is expected (final destination)
+ if (GetPlayer()->m_taxi.GetPath().size() != 1)
+ return;
GetPlayer()->CleanupAfterTaxiFlight();
GetPlayer()->SetFallInformation(0, GetPlayer()->GetPositionZ());
diff --git a/src/server/game/Handlers/TicketHandler.cpp b/src/server/game/Handlers/TicketHandler.cpp
index f3b421a4b93..cf6181f02b4 100644
--- a/src/server/game/Handlers/TicketHandler.cpp
+++ b/src/server/game/Handlers/TicketHandler.cpp
@@ -217,7 +217,7 @@ void WorldSession::HandleGMSurveySubmit(WorldPacket& recvData)
recvData >> comment;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GM_SURVEY);
- stmt->setUInt32(0, GetPlayer()->GetGUIDLow());
+ stmt->setUInt32(0, GetPlayer()->GetGUID().GetCounter());
stmt->setUInt32(1, nextSurveyID);
stmt->setUInt32(2, mainSurvey);
stmt->setString(3, comment);
@@ -240,7 +240,7 @@ void WorldSession::HandleReportLag(WorldPacket& recvData)
recvData >> z;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_LAG_REPORT);
- stmt->setUInt32(0, GetPlayer()->GetGUIDLow());
+ stmt->setUInt32(0, GetPlayer()->GetGUID().GetCounter());
stmt->setUInt8 (1, lagType);
stmt->setUInt16(2, mapId);
stmt->setFloat (3, x);
diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp
index c50888544de..1bb21971935 100644
--- a/src/server/game/Handlers/TradeHandler.cpp
+++ b/src/server/game/Handlers/TradeHandler.cpp
@@ -28,6 +28,7 @@
#include "SocialMgr.h"
#include "Language.h"
#include "AccountMgr.h"
+#include "TradeData.h"
void WorldSession::SendTradeStatus(TradeStatusInfo const& info)
{
@@ -60,13 +61,13 @@ void WorldSession::SendTradeStatus(TradeStatusInfo const& info)
void WorldSession::HandleIgnoreTradeOpcode(WorldPacket& /*recvPacket*/)
{
- TC_LOG_DEBUG("network", "WORLD: Ignore Trade %u", _player->GetGUIDLow());
+ TC_LOG_DEBUG("network", "WORLD: Ignore Trade %u", _player->GetGUID().GetCounter());
// recvPacket.print_storage();
}
void WorldSession::HandleBusyTradeOpcode(WorldPacket& /*recvPacket*/)
{
- TC_LOG_DEBUG("network", "WORLD: Busy Trade %u", _player->GetGUIDLow());
+ TC_LOG_DEBUG("network", "WORLD: Busy Trade %u", _player->GetGUID().GetCounter());
// recvPacket.print_storage();
}
@@ -141,7 +142,7 @@ void WorldSession::moveItems(Item* myItems[], Item* hisItems[])
if (myItems[i])
{
// logging
- TC_LOG_DEBUG("network", "partner storing: %u", myItems[i]->GetGUIDLow());
+ TC_LOG_DEBUG("network", "partner storing: %u", myItems[i]->GetGUID().GetCounter());
if (HasPermission(rbac::RBAC_PERM_LOG_GM_TRADE))
{
sLog->outCommand(_player->GetSession()->GetAccountId(), "GM %s (Account: %u) trade: %s (Entry: %d Count: %u) to player: %s (Account: %u)",
@@ -159,7 +160,7 @@ void WorldSession::moveItems(Item* myItems[], Item* hisItems[])
if (hisItems[i])
{
// logging
- TC_LOG_DEBUG("network", "player storing: %u", hisItems[i]->GetGUIDLow());
+ TC_LOG_DEBUG("network", "player storing: %u", hisItems[i]->GetGUID().GetCounter());
if (HasPermission(rbac::RBAC_PERM_LOG_GM_TRADE))
{
sLog->outCommand(trader->GetSession()->GetAccountId(), "GM %s (Account: %u) trade: %s (Entry: %d Count: %u) to player: %s (Account: %u)",
@@ -182,21 +183,21 @@ void WorldSession::moveItems(Item* myItems[], Item* hisItems[])
if (myItems[i])
{
if (!traderCanTrade)
- TC_LOG_ERROR("network", "trader can't store item: %u", myItems[i]->GetGUIDLow());
+ TC_LOG_ERROR("network", "trader can't store item: %u", myItems[i]->GetGUID().GetCounter());
if (_player->CanStoreItem(NULL_BAG, NULL_SLOT, playerDst, myItems[i], false) == EQUIP_ERR_OK)
_player->MoveItemToInventory(playerDst, myItems[i], true, true);
else
- TC_LOG_ERROR("network", "player can't take item back: %u", myItems[i]->GetGUIDLow());
+ TC_LOG_ERROR("network", "player can't take item back: %u", myItems[i]->GetGUID().GetCounter());
}
// return the already removed items to the original owner
if (hisItems[i])
{
if (!playerCanTrade)
- TC_LOG_ERROR("network", "player can't store item: %u", hisItems[i]->GetGUIDLow());
+ TC_LOG_ERROR("network", "player can't store item: %u", hisItems[i]->GetGUID().GetCounter());
if (trader->CanStoreItem(NULL_BAG, NULL_SLOT, traderDst, hisItems[i], false) == EQUIP_ERR_OK)
trader->MoveItemToInventory(traderDst, hisItems[i], true, true);
else
- TC_LOG_ERROR("network", "trader can't take item back: %u", hisItems[i]->GetGUIDLow());
+ TC_LOG_ERROR("network", "trader can't take item back: %u", hisItems[i]->GetGUID().GetCounter());
}
}
}
@@ -214,7 +215,7 @@ static void setAcceptTradeMode(TradeData* myTrade, TradeData* hisTrade, Item* *m
{
if (Item* item = myTrade->GetItem(TradeSlots(i)))
{
- TC_LOG_DEBUG("network", "player trade item %u bag: %u slot: %u", item->GetGUIDLow(), item->GetBagSlot(), item->GetSlot());
+ TC_LOG_DEBUG("network", "player trade item %u bag: %u slot: %u", item->GetGUID().GetCounter(), item->GetBagSlot(), item->GetSlot());
//Can return NULL
myItems[i] = item;
myItems[i]->SetInTrade();
@@ -222,7 +223,7 @@ static void setAcceptTradeMode(TradeData* myTrade, TradeData* hisTrade, Item* *m
if (Item* item = hisTrade->GetItem(TradeSlots(i)))
{
- TC_LOG_DEBUG("network", "partner trade item %u bag: %u slot: %u", item->GetGUIDLow(), item->GetBagSlot(), item->GetSlot());
+ TC_LOG_DEBUG("network", "partner trade item %u bag: %u slot: %u", item->GetGUID().GetCounter(), item->GetBagSlot(), item->GetSlot());
hisItems[i] = item;
hisItems[i]->SetInTrade();
}
@@ -454,6 +455,8 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/)
SendTradeStatus(myCanCompleteInfo);
my_trade->SetAccepted(false);
his_trade->SetAccepted(false);
+ delete my_spell;
+ delete his_spell;
return;
}
else if (hisCanCompleteInfo.Result != EQUIP_ERR_OK)
@@ -466,6 +469,8 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/)
trader->GetSession()->SendTradeStatus(hisCanCompleteInfo);
my_trade->SetAccepted(false);
his_trade->SetAccepted(false);
+ delete my_spell;
+ delete his_spell;
return;
}
@@ -668,7 +673,7 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket)
return;
}
- if (pOther->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow()))
+ if (pOther->GetSocial()->HasIgnore(GetPlayer()->GetGUID().GetCounter()))
{
info.Status = TRADE_STATUS_IGNORE_YOU;
SendTradeStatus(info);
diff --git a/src/server/game/Handlers/VehicleHandler.cpp b/src/server/game/Handlers/VehicleHandler.cpp
index 6328eb3e2fe..3bb2ca78931 100644
--- a/src/server/game/Handlers/VehicleHandler.cpp
+++ b/src/server/game/Handlers/VehicleHandler.cpp
@@ -63,7 +63,7 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket &recvData)
{
recvData.rfinish(); // prevent warnings spam
TC_LOG_ERROR("network", "HandleChangeSeatsOnControlledVehicle, Opcode: %u, Player %u tried to switch seats but current seatflags %u don't permit that.",
- recvData.GetOpcode(), GetPlayer()->GetGUIDLow(), seat->m_flags);
+ recvData.GetOpcode(), GetPlayer()->GetGUID().GetCounter(), seat->m_flags);
return;
}
@@ -176,7 +176,7 @@ void WorldSession::HandleEjectPassenger(WorldPacket &data)
if (seat->IsEjectable())
unit->ExitVehicle();
else
- TC_LOG_ERROR("network", "Player %u attempted to eject %s from non-ejectable seat.", GetPlayer()->GetGUIDLow(), guid.ToString().c_str());
+ TC_LOG_ERROR("network", "Player %u attempted to eject %s from non-ejectable seat.", GetPlayer()->GetGUID().GetCounter(), guid.ToString().c_str());
}
else
TC_LOG_ERROR("network", "HandleEjectPassenger: %s tried to eject invalid %s ", GetPlayer()->GetGUID().ToString().c_str(), guid.ToString().c_str());
@@ -194,7 +194,7 @@ void WorldSession::HandleRequestVehicleExit(WorldPacket& /*recvData*/)
GetPlayer()->ExitVehicle();
else
TC_LOG_ERROR("network", "Player %u tried to exit vehicle, but seatflags %u (ID: %u) don't permit that.",
- GetPlayer()->GetGUIDLow(), seat->m_ID, seat->m_flags);
+ GetPlayer()->GetGUID().GetCounter(), seat->m_ID, seat->m_flags);
}
}
}
diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp
index b8a2168b34e..b3dd3e9f01f 100644
--- a/src/server/game/Instances/InstanceSaveMgr.cpp
+++ b/src/server/game/Instances/InstanceSaveMgr.cpp
@@ -555,7 +555,10 @@ void InstanceSaveManager::_ResetInstance(uint32 mapid, uint32 instanceId)
((InstanceMap*)iMap)->Reset(INSTANCE_RESET_RESPAWN_DELAY);
if (iMap)
+ {
iMap->DeleteRespawnTimes();
+ iMap->DeleteCorpseData();
+ }
else
Map::DeleteRespawnTimesInDB(mapid, instanceId);
diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp
index 5d44f3ec696..a8cf42ea49e 100644
--- a/src/server/game/Instances/InstanceScript.cpp
+++ b/src/server/game/Instances/InstanceScript.cpp
@@ -652,3 +652,25 @@ void InstanceScript::UpdateEncounterState(EncounterCreditType type, uint32 credi
}
}
}
+
+std::string InstanceScript::GetBossStateName(uint8 state)
+{
+ // See enum EncounterState in InstanceScript.h
+ switch (state)
+ {
+ case NOT_STARTED:
+ return "NOT_STARTED";
+ case IN_PROGRESS:
+ return "IN_PROGRESS";
+ case FAIL:
+ return "FAIL";
+ case DONE:
+ return "DONE";
+ case SPECIAL:
+ return "SPECIAL";
+ case TO_BE_DECIDED:
+ return "TO_BE_DECIDED";
+ default:
+ return "INVALID";
+ }
+}
diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h
index 3e90e430590..93dafea0413 100644
--- a/src/server/game/Instances/InstanceScript.h
+++ b/src/server/game/Instances/InstanceScript.h
@@ -174,11 +174,11 @@ class InstanceScript : public ZoneScript
inline Creature* GetCreature(uint32 type)
{
- return ObjectAccessor::GetObjectInMap<Creature>(GetObjectGuid(type), instance, nullptr);
+ return instance->GetCreature(GetObjectGuid(type));
}
inline GameObject* GetGameObject(uint32 type)
{
- return ObjectAccessor::GetObjectInMap<GameObject>(GetObjectGuid(type), instance, nullptr);
+ return instance->GetGameObject(GetObjectGuid(type));
}
// Called when a player successfully enters the instance.
@@ -220,6 +220,7 @@ class InstanceScript : public ZoneScript
virtual bool SetBossState(uint32 id, EncounterState state);
EncounterState GetBossState(uint32 id) const { return id < bosses.size() ? bosses[id].state : TO_BE_DECIDED; }
+ static std::string GetBossStateName(uint8 state);
BossBoundaryMap const* GetBossBoundary(uint32 id) const { return id < bosses.size() ? &bosses[id].boundary : NULL; }
// Achievement criteria additional requirements check
diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp
index c825db1e1eb..b7a19a72bf5 100644
--- a/src/server/game/Loot/LootMgr.cpp
+++ b/src/server/game/Loot/LootMgr.cpp
@@ -95,7 +95,7 @@ class LootTemplate::LootGroup // A set of loot def
void CheckLootRefs(LootTemplateMap const& store, LootIdSet* ref_set) const;
LootStoreItemList* GetExplicitlyChancedItemList() { return &ExplicitlyChanced; }
LootStoreItemList* GetEqualChancedItemList() { return &EqualChanced; }
- void CopyConditions(ConditionList conditions);
+ void CopyConditions(ConditionContainer conditions);
private:
LootStoreItemList ExplicitlyChanced; // Entries with chances defined in DB
LootStoreItemList EqualChanced; // Zero chances - every entry takes the same chance
@@ -218,7 +218,7 @@ void LootStore::ResetConditions()
{
for (LootTemplateMap::iterator itr = m_LootTemplates.begin(); itr != m_LootTemplates.end(); ++itr)
{
- ConditionList empty;
+ ConditionContainer empty;
itr->second->CopyConditions(empty);
}
}
@@ -399,7 +399,7 @@ bool LootItem::AllowedForPlayer(Player const* player) const
void LootItem::AddAllowedLooter(const Player* player)
{
- allowedGUIDs.insert(player->GetGUIDLow());
+ allowedGUIDs.insert(player->GetGUID().GetCounter());
}
//
@@ -481,7 +481,7 @@ bool Loot::FillLoot(uint32 lootId, LootStore const& store, Player* lootOwner, bo
void Loot::FillNotNormalLootFor(Player* player, bool presentAtLooting)
{
- uint32 plguid = player->GetGUIDLow();
+ ObjectGuid::LowType plguid = player->GetGUID().GetCounter();
QuestItemMap::const_iterator qmapitr = PlayerQuestItems.find(plguid);
if (qmapitr == PlayerQuestItems.end())
@@ -536,7 +536,7 @@ QuestItemList* Loot::FillFFALoot(Player* player)
return NULL;
}
- PlayerFFAItems[player->GetGUIDLow()] = ql;
+ PlayerFFAItems[player->GetGUID().GetCounter()] = ql;
return ql;
}
@@ -574,7 +574,7 @@ QuestItemList* Loot::FillQuestLoot(Player* player)
return NULL;
}
- PlayerQuestItems[player->GetGUIDLow()] = ql;
+ PlayerQuestItems[player->GetGUID().GetCounter()] = ql;
return ql;
}
@@ -606,7 +606,7 @@ QuestItemList* Loot::FillNonQuestNonFFAConditionalLoot(Player* player, bool pres
return NULL;
}
- PlayerNonQuestNonFFAConditionalItems[player->GetGUIDLow()] = ql;
+ PlayerNonQuestNonFFAConditionalItems[player->GetGUID().GetCounter()] = ql;
return ql;
}
@@ -657,7 +657,7 @@ void Loot::NotifyQuestItemRemoved(uint8 questIndex)
++i_next;
if (Player* player = ObjectAccessor::FindPlayer(*i))
{
- QuestItemMap::const_iterator pq = PlayerQuestItems.find(player->GetGUIDLow());
+ QuestItemMap::const_iterator pq = PlayerQuestItems.find(player->GetGUID().GetCounter());
if (pq != PlayerQuestItems.end() && pq->second)
{
// find where/if the player has the given item in it's vector
@@ -724,7 +724,7 @@ LootItem* Loot::LootItemInSlot(uint32 lootSlot, Player* player, QuestItem* *qite
if (lootSlot >= items.size())
{
uint32 questSlot = lootSlot - items.size();
- QuestItemMap::const_iterator itr = PlayerQuestItems.find(player->GetGUIDLow());
+ QuestItemMap::const_iterator itr = PlayerQuestItems.find(player->GetGUID().GetCounter());
if (itr != PlayerQuestItems.end() && questSlot < itr->second->size())
{
QuestItem* qitem2 = &itr->second->at(questSlot);
@@ -740,7 +740,7 @@ LootItem* Loot::LootItemInSlot(uint32 lootSlot, Player* player, QuestItem* *qite
is_looted = item->is_looted;
if (item->freeforall)
{
- QuestItemMap::const_iterator itr = PlayerFFAItems.find(player->GetGUIDLow());
+ QuestItemMap::const_iterator itr = PlayerFFAItems.find(player->GetGUID().GetCounter());
if (itr != PlayerFFAItems.end())
{
for (QuestItemList::const_iterator iter=itr->second->begin(); iter!= itr->second->end(); ++iter)
@@ -756,7 +756,7 @@ LootItem* Loot::LootItemInSlot(uint32 lootSlot, Player* player, QuestItem* *qite
}
else if (!item->conditions.empty())
{
- QuestItemMap::const_iterator itr = PlayerNonQuestNonFFAConditionalItems.find(player->GetGUIDLow());
+ QuestItemMap::const_iterator itr = PlayerNonQuestNonFFAConditionalItems.find(player->GetGUID().GetCounter());
if (itr != PlayerNonQuestNonFFAConditionalItems.end())
{
for (QuestItemList::const_iterator iter=itr->second->begin(); iter!= itr->second->end(); ++iter)
@@ -782,7 +782,7 @@ LootItem* Loot::LootItemInSlot(uint32 lootSlot, Player* player, QuestItem* *qite
uint32 Loot::GetMaxSlotInLootFor(Player* player) const
{
- QuestItemMap::const_iterator itr = PlayerQuestItems.find(player->GetGUIDLow());
+ QuestItemMap::const_iterator itr = PlayerQuestItems.find(player->GetGUID().GetCounter());
return items.size() + (itr != PlayerQuestItems.end() ? itr->second->size() : 0);
}
@@ -790,7 +790,7 @@ uint32 Loot::GetMaxSlotInLootFor(Player* player) const
bool Loot::hasItemFor(Player* player) const
{
QuestItemMap const& lootPlayerQuestItems = GetPlayerQuestItems();
- QuestItemMap::const_iterator q_itr = lootPlayerQuestItems.find(player->GetGUIDLow());
+ QuestItemMap::const_iterator q_itr = lootPlayerQuestItems.find(player->GetGUID().GetCounter());
if (q_itr != lootPlayerQuestItems.end())
{
QuestItemList* q_list = q_itr->second;
@@ -803,7 +803,7 @@ bool Loot::hasItemFor(Player* player) const
}
QuestItemMap const& lootPlayerFFAItems = GetPlayerFFAItems();
- QuestItemMap::const_iterator ffa_itr = lootPlayerFFAItems.find(player->GetGUIDLow());
+ QuestItemMap::const_iterator ffa_itr = lootPlayerFFAItems.find(player->GetGUID().GetCounter());
if (ffa_itr != lootPlayerFFAItems.end())
{
QuestItemList* ffa_list = ffa_itr->second;
@@ -816,7 +816,7 @@ bool Loot::hasItemFor(Player* player) const
}
QuestItemMap const& lootPlayerNonQuestNonFFAConditionalItems = GetPlayerNonQuestNonFFAConditionalItems();
- QuestItemMap::const_iterator nn_itr = lootPlayerNonQuestNonFFAConditionalItems.find(player->GetGUIDLow());
+ QuestItemMap::const_iterator nn_itr = lootPlayerNonQuestNonFFAConditionalItems.find(player->GetGUID().GetCounter());
if (nn_itr != lootPlayerNonQuestNonFFAConditionalItems.end())
{
QuestItemList* conditional_list = nn_itr->second;
@@ -964,7 +964,7 @@ ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv)
LootSlotType slotType = lv.permission == OWNER_PERMISSION ? LOOT_SLOT_TYPE_OWNER : LOOT_SLOT_TYPE_ALLOW_LOOT;
QuestItemMap const& lootPlayerQuestItems = l.GetPlayerQuestItems();
- QuestItemMap::const_iterator q_itr = lootPlayerQuestItems.find(lv.viewer->GetGUIDLow());
+ QuestItemMap::const_iterator q_itr = lootPlayerQuestItems.find(lv.viewer->GetGUID().GetCounter());
if (q_itr != lootPlayerQuestItems.end())
{
QuestItemList* q_list = q_itr->second;
@@ -1005,7 +1005,7 @@ ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv)
}
QuestItemMap const& lootPlayerFFAItems = l.GetPlayerFFAItems();
- QuestItemMap::const_iterator ffa_itr = lootPlayerFFAItems.find(lv.viewer->GetGUIDLow());
+ QuestItemMap::const_iterator ffa_itr = lootPlayerFFAItems.find(lv.viewer->GetGUID().GetCounter());
if (ffa_itr != lootPlayerFFAItems.end())
{
QuestItemList* ffa_list = ffa_itr->second;
@@ -1023,7 +1023,7 @@ ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv)
}
QuestItemMap const& lootPlayerNonQuestNonFFAConditionalItems = l.GetPlayerNonQuestNonFFAConditionalItems();
- QuestItemMap::const_iterator nn_itr = lootPlayerNonQuestNonFFAConditionalItems.find(lv.viewer->GetGUIDLow());
+ QuestItemMap::const_iterator nn_itr = lootPlayerNonQuestNonFFAConditionalItems.find(lv.viewer->GetGUID().GetCounter());
if (nn_itr != lootPlayerNonQuestNonFFAConditionalItems.end())
{
QuestItemList* conditional_list = nn_itr->second;
@@ -1155,7 +1155,7 @@ bool LootTemplate::LootGroup::HasQuestDropForPlayer(Player const* player) const
return false;
}
-void LootTemplate::LootGroup::CopyConditions(ConditionList /*conditions*/)
+void LootTemplate::LootGroup::CopyConditions(ConditionContainer /*conditions*/)
{
for (LootStoreItemList::iterator i = ExplicitlyChanced.begin(); i != ExplicitlyChanced.end(); ++i)
(*i)->conditions.clear();
@@ -1260,7 +1260,7 @@ void LootTemplate::AddEntry(LootStoreItem* item)
Entries.push_back(item);
}
-void LootTemplate::CopyConditions(const ConditionList& conditions)
+void LootTemplate::CopyConditions(const ConditionContainer& conditions)
{
for (LootStoreItemList::iterator i = Entries.begin(); i != Entries.end(); ++i)
(*i)->conditions.clear();
diff --git a/src/server/game/Loot/LootMgr.h b/src/server/game/Loot/LootMgr.h
index 7d7580fd49f..08cd224cd0b 100644
--- a/src/server/game/Loot/LootMgr.h
+++ b/src/server/game/Loot/LootMgr.h
@@ -132,7 +132,7 @@ struct LootStoreItem
uint8 groupid : 7;
uint8 mincount; // mincount for drop items
uint8 maxcount; // max drop count for the item mincount or Ref multiplicator
- ConditionList conditions; // additional loot condition
+ ConditionContainer conditions; // additional loot condition
// Constructor
// displayid is filled in IsValid() which must be called after
@@ -146,14 +146,14 @@ struct LootStoreItem
// Checks correctness of values
};
-typedef std::set<uint32> AllowedLooterSet;
+typedef std::set<ObjectGuid::LowType> AllowedLooterSet;
struct LootItem
{
uint32 itemid;
uint32 randomSuffix;
int32 randomPropertyId;
- ConditionList conditions; // additional loot condition
+ ConditionContainer conditions; // additional loot condition
AllowedLooterSet allowedGUIDs;
uint8 count : 8;
bool is_looted : 1;
@@ -252,7 +252,7 @@ class LootTemplate
void AddEntry(LootStoreItem* item);
// Rolls for every item in the template and adds the rolled items the the loot
void Process(Loot& loot, bool rate, uint16 lootMode, uint8 groupId = 0) const;
- void CopyConditions(const ConditionList& conditions);
+ void CopyConditions(const ConditionContainer& conditions);
void CopyConditions(LootItem* li) const;
// True if template includes at least 1 quest drop entry
diff --git a/src/server/game/Mails/Mail.cpp b/src/server/game/Mails/Mail.cpp
index e8eec55ed12..78cd4d3692c 100644
--- a/src/server/game/Mails/Mail.cpp
+++ b/src/server/game/Mails/Mail.cpp
@@ -45,7 +45,7 @@ MailSender::MailSender(Object* sender, MailStationery stationery) : m_stationery
break;*/
case TYPEID_PLAYER:
m_messageType = MAIL_NORMAL;
- m_senderId = sender->GetGUIDLow();
+ m_senderId = sender->GetGUID().GetCounter();
break;
default:
m_messageType = MAIL_NORMAL;
@@ -67,19 +67,19 @@ MailSender::MailSender(Player* sender)
{
m_messageType = MAIL_NORMAL;
m_stationery = sender->IsGameMaster() ? MAIL_STATIONERY_GM : MAIL_STATIONERY_DEFAULT;
- m_senderId = sender->GetGUIDLow();
+ m_senderId = sender->GetGUID().GetCounter();
}
-MailReceiver::MailReceiver(Player* receiver) : m_receiver(receiver), m_receiver_lowguid(receiver->GetGUIDLow()) { }
+MailReceiver::MailReceiver(Player* receiver) : m_receiver(receiver), m_receiver_lowguid(receiver->GetGUID().GetCounter()) { }
-MailReceiver::MailReceiver(Player* receiver, uint32 receiver_lowguid) : m_receiver(receiver), m_receiver_lowguid(receiver_lowguid)
+MailReceiver::MailReceiver(Player* receiver, ObjectGuid::LowType receiver_lowguid) : m_receiver(receiver), m_receiver_lowguid(receiver_lowguid)
{
- ASSERT(!receiver || receiver->GetGUIDLow() == receiver_lowguid);
+ ASSERT(!receiver || receiver->GetGUID().GetCounter() == receiver_lowguid);
}
MailDraft& MailDraft::AddItem(Item* item)
{
- m_items[item->GetGUIDLow()] = item; return *this;
+ m_items[item->GetGUID().GetCounter()] = item; return *this;
}
void MailDraft::prepareItems(Player* receiver, SQLTransaction& trans)
@@ -117,7 +117,7 @@ void MailDraft::deleteIncludedItems(SQLTransaction& trans, bool inDB /*= false*/
if (inDB)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE);
- stmt->setUInt32(0, item->GetGUIDLow());
+ stmt->setUInt32(0, item->GetGUID().GetCounter());
trans->Append(stmt);
}
@@ -127,9 +127,9 @@ void MailDraft::deleteIncludedItems(SQLTransaction& trans, bool inDB /*= false*/
m_items.clear();
}
-void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32 receiver_guid, SQLTransaction& trans)
+void MailDraft::SendReturnToSender(uint32 sender_acc, ObjectGuid::LowType sender_guid, ObjectGuid::LowType receiver_guid, SQLTransaction& trans)
{
- ObjectGuid receiverGuid(HIGHGUID_PLAYER, receiver_guid);
+ ObjectGuid receiverGuid(HighGuid::Player, receiver_guid);
Player* receiver = ObjectAccessor::FindConnectedPlayer(receiverGuid);
uint32 rc_account = 0;
@@ -158,7 +158,7 @@ void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32
// owner in data will set at mail receive and item extracting
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_OWNER);
stmt->setUInt32(0, receiver_guid);
- stmt->setUInt32(1, item->GetGUIDLow());
+ stmt->setUInt32(1, item->GetGUID().GetCounter());
trans->Append(stmt);
}
}
@@ -226,7 +226,7 @@ void MailDraft::SendMailTo(SQLTransaction& trans, MailReceiver const& receiver,
Item* pItem = mailItemIter->second;
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_MAIL_ITEM);
stmt->setUInt32(0, mailId);
- stmt->setUInt32(1, pItem->GetGUIDLow());
+ stmt->setUInt32(1, pItem->GetGUID().GetCounter());
stmt->setUInt32(2, receiver.GetPlayerGUIDLow());
trans->Append(stmt);
}
@@ -249,7 +249,7 @@ void MailDraft::SendMailTo(SQLTransaction& trans, MailReceiver const& receiver,
for (MailItemMap::const_iterator mailItemIter = m_items.begin(); mailItemIter != m_items.end(); ++mailItemIter)
{
Item* item = mailItemIter->second;
- m->AddItem(item->GetGUIDLow(), item->GetEntry());
+ m->AddItem(item->GetGUID().GetCounter(), item->GetEntry());
}
m->messageType = sender.GetMailMessageType();
diff --git a/src/server/game/Mails/Mail.h b/src/server/game/Mails/Mail.h
index f4f155c5926..f044996bd0a 100644
--- a/src/server/game/Mails/Mail.h
+++ b/src/server/game/Mails/Mail.h
@@ -20,6 +20,7 @@
#define TRINITY_MAIL_H
#include "Common.h"
+#include "ObjectGuid.h"
#include <map>
struct AuctionEntry;
@@ -81,7 +82,7 @@ enum MailShowFlags
class MailSender
{
public: // Constructors
- MailSender(MailMessageType messageType, uint32 sender_guidlow_or_entry, MailStationery stationery = MAIL_STATIONERY_DEFAULT)
+ MailSender(MailMessageType messageType, ObjectGuid::LowType sender_guidlow_or_entry, MailStationery stationery = MAIL_STATIONERY_DEFAULT)
: m_messageType(messageType), m_senderId(sender_guidlow_or_entry), m_stationery(stationery)
{
}
@@ -91,31 +92,31 @@ class MailSender
MailSender(Player* sender);
public: // Accessors
MailMessageType GetMailMessageType() const { return m_messageType; }
- uint32 GetSenderId() const { return m_senderId; }
+ ObjectGuid::LowType GetSenderId() const { return m_senderId; }
MailStationery GetStationery() const { return m_stationery; }
private:
MailMessageType m_messageType;
- uint32 m_senderId; // player low guid or other object entry
+ ObjectGuid::LowType m_senderId; // player low guid or other object entry
MailStationery m_stationery;
};
class MailReceiver
{
public: // Constructors
- explicit MailReceiver(uint32 receiver_lowguid) : m_receiver(NULL), m_receiver_lowguid(receiver_lowguid) { }
+ explicit MailReceiver(ObjectGuid::LowType receiver_lowguid) : m_receiver(NULL), m_receiver_lowguid(receiver_lowguid) { }
MailReceiver(Player* receiver);
- MailReceiver(Player* receiver, uint32 receiver_lowguid);
+ MailReceiver(Player* receiver, ObjectGuid::LowType receiver_lowguid);
public: // Accessors
Player* GetPlayer() const { return m_receiver; }
- uint32 GetPlayerGUIDLow() const { return m_receiver_lowguid; }
+ ObjectGuid::LowType GetPlayerGUIDLow() const { return m_receiver_lowguid; }
private:
Player* m_receiver;
- uint32 m_receiver_lowguid;
+ ObjectGuid::LowType m_receiver_lowguid;
};
class MailDraft
{
- typedef std::map<uint32, Item*> MailItemMap;
+ typedef std::map<ObjectGuid::LowType, Item*> MailItemMap;
public: // Constructors
explicit MailDraft(uint16 mailTemplateId, bool need_items = true)
@@ -136,7 +137,7 @@ class MailDraft
MailDraft& AddCOD(uint32 COD) { m_COD = COD; return *this; }
public: // finishers
- void SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32 receiver_guid, SQLTransaction& trans);
+ void SendReturnToSender(uint32 sender_acc, ObjectGuid::LowType sender_guid, ObjectGuid::LowType receiver_guid, SQLTransaction& trans);
void SendMailTo(SQLTransaction& trans, MailReceiver const& receiver, MailSender const& sender, MailCheckMask checked = MAIL_CHECK_MASK_NONE, uint32 deliver_delay = 0);
private:
@@ -156,7 +157,7 @@ class MailDraft
struct MailItemInfo
{
- uint32 item_guid;
+ ObjectGuid::LowType item_guid;
uint32 item_template;
};
typedef std::vector<MailItemInfo> MailItemInfoVec;
@@ -167,12 +168,12 @@ struct Mail
uint8 messageType;
uint8 stationery;
uint16 mailTemplateId;
- uint32 sender;
- uint32 receiver;
+ ObjectGuid::LowType sender;
+ ObjectGuid::LowType receiver;
std::string subject;
std::string body;
std::vector<MailItemInfo> items;
- std::vector<uint32> removedItems;
+ std::vector<ObjectGuid::LowType> removedItems;
time_t expire_time;
time_t deliver_time;
uint32 money;
@@ -180,7 +181,7 @@ struct Mail
uint32 checked;
MailState state;
- void AddItem(uint32 itemGuidLow, uint32 item_template)
+ void AddItem(ObjectGuid::LowType itemGuidLow, uint32 item_template)
{
MailItemInfo mii;
mii.item_guid = itemGuidLow;
@@ -188,7 +189,7 @@ struct Mail
items.push_back(mii);
}
- bool RemoveItem(uint32 item_guid)
+ bool RemoveItem(ObjectGuid::LowType item_guid)
{
for (MailItemInfoVec::iterator itr = items.begin(); itr != items.end(); ++itr)
{
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 354bbe4e269..6fbef752228 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -50,9 +50,9 @@ GridState* si_GridStates[MAX_GRID_STATE];
Map::~Map()
{
- sScriptMgr->OnDestroyMap(this);
+ // UnloadAll must be called before deleting the map
- UnloadAll();
+ sScriptMgr->OnDestroyMap(this);
while (!i_worldObjects.empty())
{
@@ -299,6 +299,25 @@ void Map::AddToGrid(DynamicObject* obj, Cell const& cell)
obj->SetCurrentCell(cell);
}
+template<>
+void Map::AddToGrid(Corpse* obj, Cell const& cell)
+{
+ NGridType* grid = getNGrid(cell.GridX(), cell.GridY());
+ // Corpses are a special object type - they can be added to grid via a call to AddToMap
+ // or loaded through ObjectGridLoader.
+ // Both corpses loaded from database and these freshly generated by Player::CreateCoprse are added to _corpsesByCell
+ // ObjectGridLoader loads all corpses from _corpsesByCell even if they were already added to grid before it was loaded
+ // so we need to explicitly check it here (Map::AddToGrid is only called from Player::BuildPlayerRepop, not from ObjectGridLoader)
+ // to avoid failing an assertion in GridObject::AddToGrid
+ if (grid->isGridObjectDataLoaded())
+ {
+ if (obj->IsWorldObject())
+ grid->GetGridType(cell.CellX(), cell.CellY()).AddWorldObject(obj);
+ else
+ grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject(obj);
+ }
+}
+
template<class T>
void Map::SwitchGridContainers(T* /*obj*/, bool /*on*/) { }
@@ -400,11 +419,18 @@ void Map::DeleteFromWorld(T* obj)
template<>
void Map::DeleteFromWorld(Player* player)
{
- sObjectAccessor->RemoveObject(player);
- sObjectAccessor->RemoveUpdateObject(player); /// @todo I do not know why we need this, it should be removed in ~Object anyway
+ ObjectAccessor::RemoveObject(player);
+ RemoveUpdateObject(player); /// @todo I do not know why we need this, it should be removed in ~Object anyway
delete player;
}
+template<>
+void Map::DeleteFromWorld(Transport* transport)
+{
+ ObjectAccessor::RemoveObject(transport);
+ delete transport;
+}
+
void Map::EnsureGridCreated(const GridCoord &p)
{
std::lock_guard<std::mutex> lock(_gridLock);
@@ -468,8 +494,6 @@ bool Map::EnsureGridLoaded(const Cell &cell)
ObjectGridLoader loader(*grid, this, cell);
loader.LoadN();
- // Add resurrectable corpses to world object list in grid
- sObjectAccessor->AddCorpsesToGrid(GridCoord(cell.GridX(), cell.GridY()), grid->GetGridType(cell.CellX(), cell.CellY()), this);
Balance();
return true;
}
@@ -487,7 +511,7 @@ bool Map::AddPlayerToMap(Player* player)
CellCoord cellCoord = Trinity::ComputeCellCoord(player->GetPositionX(), player->GetPositionY());
if (!cellCoord.IsCoordValid())
{
- TC_LOG_ERROR("maps", "Map::Add: Player (GUID: %u) has invalid coordinates X:%f Y:%f grid cell [%u:%u]", player->GetGUIDLow(), player->GetPositionX(), player->GetPositionY(), cellCoord.x_coord, cellCoord.y_coord);
+ TC_LOG_ERROR("maps", "Map::Add: Player (GUID: %u) has invalid coordinates X:%f Y:%f grid cell [%u:%u]", player->GetGUID().GetCounter(), player->GetPositionX(), player->GetPositionY(), cellCoord.x_coord, cellCoord.y_coord);
return false;
}
@@ -507,6 +531,9 @@ bool Map::AddPlayerToMap(Player* player)
player->m_clientGUIDs.clear();
player->UpdateObjectVisibility(false);
+ if (player->IsAlive())
+ ConvertCorpseToBones(player->GetGUID());
+
sScriptMgr->OnPlayerEnterMap(this, player);
return true;
}
@@ -678,6 +705,26 @@ void Map::Update(const uint32 t_diff)
player->Update(t_diff);
VisitNearbyCellsOf(player, grid_object_update, world_object_update);
+
+ // Handle updates for creatures in combat with player and are more than 60 yards away
+ if (player->IsInCombat())
+ {
+ std::vector<Creature*> updateList;
+ HostileReference* ref = player->getHostileRefManager().getFirst();
+
+ while (ref)
+ {
+ if (Unit* unit = ref->GetSource()->GetOwner())
+ if (unit->ToCreature() && unit->GetMapId() == player->GetMapId() && !unit->IsWithinDistInMap(player, GetVisibilityRange(), false))
+ updateList.push_back(unit->ToCreature());
+
+ ref = ref->next();
+ }
+
+ // Process deferred update list for player
+ for (Creature* c : updateList)
+ VisitNearbyCellsOf(c, grid_object_update, world_object_update);
+ }
}
// non-player active objects, increasing iterator in the loop in case of object removal
@@ -703,6 +750,8 @@ void Map::Update(const uint32 t_diff)
obj->Update(t_diff);
}
+ SendObjectUpdates();
+
///- Process necessary scripts
if (!m_scriptSchedule.empty())
{
@@ -939,7 +988,7 @@ void Map::CreatureRelocation(Creature* creature, float x, float y, float z, floa
if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell))
{
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) added to moving list from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", creature->GetGUIDLow(), creature->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
+ TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) added to moving list from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", creature->GetGUID().GetCounter(), creature->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
#endif
AddCreatureToMoveList(creature, x, y, z, ang);
// in diffcell/diffgrid case notifiers called at finishing move creature in Map::MoveAllCreaturesInMoveList
@@ -971,7 +1020,7 @@ void Map::GameObjectRelocation(GameObject* go, float x, float y, float z, float
if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell))
{
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) added to moving list from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
+ TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) added to moving list from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
#endif
AddGameObjectToMoveList(go, x, y, z, orientation);
// in diffcell/diffgrid case notifiers called at finishing move go in Map::MoveAllGameObjectsInMoveList
@@ -1004,7 +1053,7 @@ void Map::DynamicObjectRelocation(DynamicObject* dynObj, float x, float y, float
if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell))
{
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "GameObject (GUID: %u) added to moving list from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", dynObj->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
+ TC_LOG_DEBUG("maps", "GameObject (GUID: %u) added to moving list from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", dynObj->GetGUID().GetCounter(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
#endif
AddDynamicObjectToMoveList(dynObj, x, y, z, orientation);
// in diffcell/diffgrid case notifiers called at finishing move dynObj in Map::MoveAllGameObjectsInMoveList
@@ -1115,7 +1164,7 @@ void Map::MoveAllCreaturesInMoveList()
{
// ... or unload (if respawn grid also not loaded)
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) cannot be move to unloaded respawn grid.", c->GetGUIDLow(), c->GetEntry());
+ TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) cannot be move to unloaded respawn grid.", c->GetGUID().GetCounter(), c->GetEntry());
#endif
//AddObjectToRemoveList(Pet*) should only be called in Pet::Remove
//This may happen when a player just logs in and a pet moves to a nearby unloaded cell
@@ -1169,7 +1218,7 @@ void Map::MoveAllGameObjectsInMoveList()
{
// ... or unload (if respawn grid also not loaded)
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) cannot be move to unloaded respawn grid.", go->GetGUIDLow(), go->GetEntry());
+ TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) cannot be move to unloaded respawn grid.", go->GetGUID().GetCounter(), go->GetEntry());
#endif
AddObjectToRemoveList(go);
}
@@ -1208,7 +1257,7 @@ void Map::MoveAllDynamicObjectsInMoveList()
else
{
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) cannot be moved to unloaded grid.", dynObj->GetGUIDLow());
+ TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) cannot be moved to unloaded grid.", dynObj->GetGUID().GetCounter());
#endif
}
}
@@ -1226,7 +1275,7 @@ bool Map::CreatureCellRelocation(Creature* c, Cell new_cell)
if (old_cell.DiffCell(new_cell))
{
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved in grid[%u, %u] from cell[%u, %u] to cell[%u, %u].", c->GetGUIDLow(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.CellX(), new_cell.CellY());
+ TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved in grid[%u, %u] from cell[%u, %u] to cell[%u, %u].", c->GetGUID().GetCounter(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.CellX(), new_cell.CellY());
#endif
c->RemoveFromGrid();
@@ -1235,7 +1284,7 @@ bool Map::CreatureCellRelocation(Creature* c, Cell new_cell)
else
{
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved in same grid[%u, %u]cell[%u, %u].", c->GetGUIDLow(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY());
+ TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved in same grid[%u, %u]cell[%u, %u].", c->GetGUID().GetCounter(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY());
#endif
}
@@ -1248,7 +1297,7 @@ bool Map::CreatureCellRelocation(Creature* c, Cell new_cell)
EnsureGridLoadedForActiveObject(new_cell, c);
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "Active creature (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", c->GetGUIDLow(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
+ TC_LOG_DEBUG("maps", "Active creature (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", c->GetGUID().GetCounter(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
#endif
c->RemoveFromGrid();
@@ -1261,7 +1310,7 @@ bool Map::CreatureCellRelocation(Creature* c, Cell new_cell)
if (IsGridLoaded(GridCoord(new_cell.GridX(), new_cell.GridY())))
{
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", c->GetGUIDLow(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
+ TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", c->GetGUID().GetCounter(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
#endif
c->RemoveFromGrid();
@@ -1273,7 +1322,7 @@ bool Map::CreatureCellRelocation(Creature* c, Cell new_cell)
// fail to move: normal creature attempt move to unloaded grid
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) attempted to move from grid[%u, %u]cell[%u, %u] to unloaded grid[%u, %u]cell[%u, %u].", c->GetGUIDLow(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
+ TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) attempted to move from grid[%u, %u]cell[%u, %u] to unloaded grid[%u, %u]cell[%u, %u].", c->GetGUID().GetCounter(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
#endif
return false;
}
@@ -1287,7 +1336,7 @@ bool Map::GameObjectCellRelocation(GameObject* go, Cell new_cell)
if (old_cell.DiffCell(new_cell))
{
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved in grid[%u, %u] from cell[%u, %u] to cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.CellX(), new_cell.CellY());
+ TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved in grid[%u, %u] from cell[%u, %u] to cell[%u, %u].", go->GetGUID().GetCounter(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.CellX(), new_cell.CellY());
#endif
go->RemoveFromGrid();
@@ -1296,7 +1345,7 @@ bool Map::GameObjectCellRelocation(GameObject* go, Cell new_cell)
else
{
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved in same grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY());
+ TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved in same grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY());
#endif
}
@@ -1309,7 +1358,7 @@ bool Map::GameObjectCellRelocation(GameObject* go, Cell new_cell)
EnsureGridLoadedForActiveObject(new_cell, go);
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "Active GameObject (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
+ TC_LOG_DEBUG("maps", "Active GameObject (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
#endif
go->RemoveFromGrid();
@@ -1322,7 +1371,7 @@ bool Map::GameObjectCellRelocation(GameObject* go, Cell new_cell)
if (IsGridLoaded(GridCoord(new_cell.GridX(), new_cell.GridY())))
{
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
+ TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
#endif
go->RemoveFromGrid();
@@ -1334,7 +1383,7 @@ bool Map::GameObjectCellRelocation(GameObject* go, Cell new_cell)
// fail to move: normal GameObject attempt move to unloaded grid
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) attempted to move from grid[%u, %u]cell[%u, %u] to unloaded grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
+ TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) attempted to move from grid[%u, %u]cell[%u, %u] to unloaded grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
#endif
return false;
}
@@ -1348,7 +1397,7 @@ bool Map::DynamicObjectCellRelocation(DynamicObject* go, Cell new_cell)
if (old_cell.DiffCell(new_cell))
{
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) moved in grid[%u, %u] from cell[%u, %u] to cell[%u, %u].", go->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.CellX(), new_cell.CellY());
+ TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) moved in grid[%u, %u] from cell[%u, %u] to cell[%u, %u].", go->GetGUID().GetCounter(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.CellX(), new_cell.CellY());
#endif
go->RemoveFromGrid();
@@ -1357,7 +1406,7 @@ bool Map::DynamicObjectCellRelocation(DynamicObject* go, Cell new_cell)
else
{
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) moved in same grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY());
+ TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) moved in same grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY());
#endif
}
@@ -1370,7 +1419,7 @@ bool Map::DynamicObjectCellRelocation(DynamicObject* go, Cell new_cell)
EnsureGridLoadedForActiveObject(new_cell, go);
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "Active DynamicObject (GUID: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
+ TC_LOG_DEBUG("maps", "Active DynamicObject (GUID: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
#endif
go->RemoveFromGrid();
@@ -1383,7 +1432,7 @@ bool Map::DynamicObjectCellRelocation(DynamicObject* go, Cell new_cell)
if (IsGridLoaded(GridCoord(new_cell.GridX(), new_cell.GridY())))
{
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
+ TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
#endif
go->RemoveFromGrid();
@@ -1395,7 +1444,7 @@ bool Map::DynamicObjectCellRelocation(DynamicObject* go, Cell new_cell)
// fail to move: normal GameObject attempt move to unloaded grid
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) attempted to move from grid[%u, %u]cell[%u, %u] to unloaded grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
+ TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) attempted to move from grid[%u, %u]cell[%u, %u] to unloaded grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
#endif
return false;
}
@@ -1414,7 +1463,7 @@ bool Map::CreatureRespawnRelocation(Creature* c, bool diffGridOnly)
c->GetMotionMaster()->Clear();
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to respawn grid[%u, %u]cell[%u, %u].", c->GetGUIDLow(), c->GetEntry(), c->GetCurrentCell().GridX(), c->GetCurrentCell().GridY(), c->GetCurrentCell().CellX(), c->GetCurrentCell().CellY(), resp_cell.GridX(), resp_cell.GridY(), resp_cell.CellX(), resp_cell.CellY());
+ TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to respawn grid[%u, %u]cell[%u, %u].", c->GetGUID().GetCounter(), c->GetEntry(), c->GetCurrentCell().GridX(), c->GetCurrentCell().GridY(), c->GetCurrentCell().CellX(), c->GetCurrentCell().CellY(), resp_cell.GridX(), resp_cell.GridY(), resp_cell.CellX(), resp_cell.CellY());
#endif
// teleport it to respawn point (like normal respawn if player see)
@@ -1441,7 +1490,7 @@ bool Map::GameObjectRespawnRelocation(GameObject* go, bool diffGridOnly)
return true;
#ifdef TRINITY_DEBUG
- TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to respawn grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), go->GetCurrentCell().GridX(), go->GetCurrentCell().GridY(), go->GetCurrentCell().CellX(), go->GetCurrentCell().CellY(), resp_cell.GridX(), resp_cell.GridY(), resp_cell.CellX(), resp_cell.CellY());
+ TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to respawn grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), go->GetEntry(), go->GetCurrentCell().GridX(), go->GetCurrentCell().GridY(), go->GetCurrentCell().CellX(), go->GetCurrentCell().CellY(), resp_cell.GridX(), resp_cell.GridY(), resp_cell.CellX(), resp_cell.CellY());
#endif
// teleport it to respawn point (like normal respawn if player see)
@@ -1571,6 +1620,20 @@ void Map::UnloadAll()
RemoveFromMap<Transport>(transport, true);
}
+
+ for (auto& cellCorpsePair : _corpsesByCell)
+ {
+ for (Corpse* corpse : cellCorpsePair.second)
+ {
+ corpse->RemoveFromWorld();
+ corpse->ResetMap();
+ delete corpse;
+ }
+ }
+
+ _corpsesByCell.clear();
+ _corpsesByPlayer.clear();
+ _corpseBones.clear();
}
// *****************************
@@ -2477,7 +2540,7 @@ bool Map::CheckGridIntegrity(Creature* c, bool moved) const
if (xy_cell != cur_cell)
{
TC_LOG_DEBUG("maps", "Creature (GUID: %u) X: %f Y: %f (%s) is in grid[%u, %u]cell[%u, %u] instead of grid[%u, %u]cell[%u, %u]",
- c->GetGUIDLow(),
+ c->GetGUID().GetCounter(),
c->GetPositionX(), c->GetPositionY(), (moved ? "final" : "original"),
cur_cell.GridX(), cur_cell.GridY(), cur_cell.CellX(), cur_cell.CellY(),
xy_cell.GridX(), xy_cell.GridY(), xy_cell.CellX(), xy_cell.CellY());
@@ -2516,7 +2579,7 @@ void Map::UpdateObjectsVisibilityFor(Player* player, Cell cell, CellCoord cellpa
void Map::SendInitSelf(Player* player)
{
- TC_LOG_DEBUG("maps", "Creating player data for himself %u", player->GetGUIDLow());
+ TC_LOG_DEBUG("maps", "Creating player data for himself %u", player->GetGUID().GetCounter());
UpdateData data;
@@ -2571,11 +2634,33 @@ inline void Map::setNGrid(NGridType *grid, uint32 x, uint32 y)
if (x >= MAX_NUMBER_OF_GRIDS || y >= MAX_NUMBER_OF_GRIDS)
{
TC_LOG_ERROR("maps", "map::setNGrid() Invalid grid coordinates found: %d, %d!", x, y);
- ASSERT(false);
+ ABORT();
}
i_grids[x][y] = grid;
}
+void Map::SendObjectUpdates()
+{
+ UpdateDataMapType update_players;
+
+ while (!_updateObjects.empty())
+ {
+ Object* obj = *_updateObjects.begin();
+ ASSERT(obj->IsInWorld());
+
+ _updateObjects.erase(_updateObjects.begin());
+ obj->BuildUpdate(update_players);
+ }
+
+ WorldPacket packet; // here we allocate a std::vector with a size of 0x10000
+ for (UpdateDataMapType::iterator iter = update_players.begin(); iter != update_players.end(); ++iter)
+ {
+ iter->second.BuildPacket(&packet);
+ iter->first->GetSession()->SendPacket(&packet);
+ packet.clear(); // clean the string
+ }
+}
+
void Map::DelayedUpdate(const uint32 t_diff)
{
for (_transportsUpdateIter = _transports.begin(); _transportsUpdateIter != _transports.end();)
@@ -2613,7 +2698,7 @@ void Map::AddObjectToRemoveList(WorldObject* obj)
obj->CleanupsBeforeDelete(false); // remove or simplify at least cross referenced links
i_objectsToRemove.insert(obj);
- //TC_LOG_DEBUG("maps", "Object (GUID: %u TypeId: %u) added to removing list.", obj->GetGUIDLow(), obj->GetTypeId());
+ //TC_LOG_DEBUG("maps", "Object (GUID: %u TypeId: %u) added to removing list.", obj->GetGUID().GetCounter(), obj->GetTypeId());
}
void Map::AddObjectToSwitchList(WorldObject* obj, bool on)
@@ -2630,7 +2715,7 @@ void Map::AddObjectToSwitchList(WorldObject* obj, bool on)
else if (itr->second != on)
i_objectsToSwitch.erase(itr);
else
- ASSERT(false);
+ ABORT();
}
void Map::RemoveAllObjectsInRemoveList()
@@ -2670,7 +2755,7 @@ void Map::RemoveAllObjectsInRemoveList()
{
Corpse* corpse = ObjectAccessor::GetCorpse(*obj, obj->GetGUID());
if (!corpse)
- TC_LOG_ERROR("maps", "Tried to delete corpse/bones %u that is not in map.", obj->GetGUIDLow());
+ TC_LOG_ERROR("maps", "Tried to delete corpse/bones %u that is not in map.", obj->GetGUID().GetCounter());
else
RemoveFromMap(corpse, true);
break;
@@ -2768,7 +2853,7 @@ void Map::AddToActive(Creature* c)
AddToActiveHelper(c);
// also not allow unloading spawn grid to prevent creating creature clone at load
- if (!c->IsPet() && c->GetDBTableGUIDLow())
+ if (!c->IsPet() && c->GetSpawnId())
{
float x, y, z;
c->GetRespawnPosition(x, y, z);
@@ -2779,7 +2864,7 @@ void Map::AddToActive(Creature* c)
{
GridCoord p2 = Trinity::ComputeGridCoord(c->GetPositionX(), c->GetPositionY());
TC_LOG_ERROR("maps", "Active creature (GUID: %u Entry: %u) added to grid[%u, %u] but spawn grid[%u, %u] was not loaded.",
- c->GetGUIDLow(), c->GetEntry(), p.x_coord, p.y_coord, p2.x_coord, p2.y_coord);
+ c->GetGUID().GetCounter(), c->GetEntry(), p.x_coord, p.y_coord, p2.x_coord, p2.y_coord);
}
}
}
@@ -2799,7 +2884,7 @@ void Map::RemoveFromActive(Creature* c)
RemoveFromActiveHelper(c);
// also allow unloading spawn grid
- if (!c->IsPet() && c->GetDBTableGUIDLow())
+ if (!c->IsPet() && c->GetSpawnId())
{
float x, y, z;
c->GetRespawnPosition(x, y, z);
@@ -2810,7 +2895,7 @@ void Map::RemoveFromActive(Creature* c)
{
GridCoord p2 = Trinity::ComputeGridCoord(c->GetPositionX(), c->GetPositionY());
TC_LOG_ERROR("maps", "Active creature (GUID: %u Entry: %u) removed from grid[%u, %u] but spawn grid[%u, %u] was not loaded.",
- c->GetGUIDLow(), c->GetEntry(), p.x_coord, p.y_coord, p2.x_coord, p2.y_coord);
+ c->GetGUID().GetCounter(), c->GetEntry(), p.x_coord, p.y_coord, p2.x_coord, p2.y_coord);
}
}
}
@@ -2866,8 +2951,8 @@ bool InstanceMap::CanEnter(Player* player)
{
if (player->GetMapRef().getTarget() == this)
{
- TC_LOG_ERROR("maps", "InstanceMap::CanEnter - player %s(%u) already in map %d, %d, %d!", player->GetName().c_str(), player->GetGUIDLow(), GetId(), GetInstanceId(), GetSpawnMode());
- ASSERT(false);
+ TC_LOG_ERROR("maps", "InstanceMap::CanEnter - player %s(%u) already in map %d, %d, %d!", player->GetName().c_str(), player->GetGUID().GetCounter(), GetId(), GetInstanceId(), GetSpawnMode());
+ ABORT();
return false;
}
@@ -2961,7 +3046,7 @@ bool InstanceMap::AddPlayerToMap(Player* player)
// cannot enter other instances if bound permanently
if (playerBind->save != mapSave)
{
- TC_LOG_ERROR("maps", "InstanceMap::Add: player %s(%d) is permanently bound to instance %s %d, %d, %d, %d, %d, %d but he is being put into instance %s %d, %d, %d, %d, %d, %d", player->GetName().c_str(), player->GetGUIDLow(), GetMapName(), playerBind->save->GetMapId(), playerBind->save->GetInstanceId(), playerBind->save->GetDifficulty(), playerBind->save->GetPlayerCount(), playerBind->save->GetGroupCount(), playerBind->save->CanReset(), GetMapName(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), mapSave->GetPlayerCount(), mapSave->GetGroupCount(), mapSave->CanReset());
+ TC_LOG_ERROR("maps", "InstanceMap::Add: player %s(%d) is permanently bound to instance %s %d, %d, %d, %d, %d, %d but he is being put into instance %s %d, %d, %d, %d, %d, %d", player->GetName().c_str(), player->GetGUID().GetCounter(), GetMapName(), playerBind->save->GetMapId(), playerBind->save->GetInstanceId(), playerBind->save->GetDifficulty(), playerBind->save->GetPlayerCount(), playerBind->save->GetGroupCount(), playerBind->save->CanReset(), GetMapName(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), mapSave->GetPlayerCount(), mapSave->GetGroupCount(), mapSave->CanReset());
return false;
}
}
@@ -2973,10 +3058,10 @@ bool InstanceMap::AddPlayerToMap(Player* player)
InstanceGroupBind* groupBind = group->GetBoundInstance(this);
if (playerBind && playerBind->save != mapSave)
{
- TC_LOG_ERROR("maps", "InstanceMap::Add: player %s(%d) is being put into instance %s %d, %d, %d, %d, %d, %d but he is in group %s and is bound to instance %d, %d, %d, %d, %d, %d!", player->GetName().c_str(), player->GetGUIDLow(), GetMapName(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), mapSave->GetPlayerCount(), mapSave->GetGroupCount(), mapSave->CanReset(), group->GetLeaderGUID().ToString().c_str(), playerBind->save->GetMapId(), playerBind->save->GetInstanceId(), playerBind->save->GetDifficulty(), playerBind->save->GetPlayerCount(), playerBind->save->GetGroupCount(), playerBind->save->CanReset());
+ TC_LOG_ERROR("maps", "InstanceMap::Add: player %s(%d) is being put into instance %s %d, %d, %d, %d, %d, %d but he is in group %s and is bound to instance %d, %d, %d, %d, %d, %d!", player->GetName().c_str(), player->GetGUID().GetCounter(), GetMapName(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), mapSave->GetPlayerCount(), mapSave->GetGroupCount(), mapSave->CanReset(), group->GetLeaderGUID().ToString().c_str(), playerBind->save->GetMapId(), playerBind->save->GetInstanceId(), playerBind->save->GetDifficulty(), playerBind->save->GetPlayerCount(), playerBind->save->GetGroupCount(), playerBind->save->CanReset());
if (groupBind)
TC_LOG_ERROR("maps", "InstanceMap::Add: the group is bound to the instance %s %d, %d, %d, %d, %d, %d", GetMapName(), groupBind->save->GetMapId(), groupBind->save->GetInstanceId(), groupBind->save->GetDifficulty(), groupBind->save->GetPlayerCount(), groupBind->save->GetGroupCount(), groupBind->save->CanReset());
- //ASSERT(false);
+ //ABORT();
return false;
}
// bind to the group or keep using the group save
@@ -2987,7 +3072,7 @@ bool InstanceMap::AddPlayerToMap(Player* player)
// cannot jump to a different instance without resetting it
if (groupBind->save != mapSave)
{
- TC_LOG_ERROR("maps", "InstanceMap::Add: player %s(%d) is being put into instance %d, %d, %d but he is in group %s which is bound to instance %d, %d, %d!", player->GetName().c_str(), player->GetGUIDLow(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), group->GetLeaderGUID().ToString().c_str(), groupBind->save->GetMapId(), groupBind->save->GetInstanceId(), groupBind->save->GetDifficulty());
+ TC_LOG_ERROR("maps", "InstanceMap::Add: player %s(%d) is being put into instance %d, %d, %d but he is in group %s which is bound to instance %d, %d, %d!", player->GetName().c_str(), player->GetGUID().GetCounter(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), group->GetLeaderGUID().ToString().c_str(), groupBind->save->GetMapId(), groupBind->save->GetInstanceId(), groupBind->save->GetDifficulty());
TC_LOG_ERROR("maps", "MapSave players: %d, group count: %d", mapSave->GetPlayerCount(), mapSave->GetGroupCount());
if (groupBind->save)
TC_LOG_ERROR("maps", "GroupBind save players: %d, group count: %d", groupBind->save->GetPlayerCount(), groupBind->save->GetGroupCount());
@@ -3092,7 +3177,7 @@ void InstanceMap::CreateInstanceData(bool load)
i_data->SetCompletedEncountersMask(fields[1].GetUInt32());
if (!data.empty())
{
- TC_LOG_DEBUG("maps", "Loading instance data for `%s` with id %u", sObjectMgr->GetScriptName(i_script_id), i_InstanceId);
+ TC_LOG_DEBUG("maps", "Loading instance data for `%s` with id %u", sObjectMgr->GetScriptName(i_script_id).c_str(), i_InstanceId);
i_data->Load(data.c_str());
}
}
@@ -3146,7 +3231,7 @@ void InstanceMap::PermBindAllPlayers(Player* source)
InstanceSave* save = sInstanceSaveMgr->GetInstanceSave(GetInstanceId());
if (!save)
{
- TC_LOG_ERROR("maps", "Cannot bind player (GUID: %u, Name: %s), because no instance save is available for instance map (Name: %s, Entry: %u, InstanceId: %u)!", source->GetGUIDLow(), source->GetName().c_str(), source->GetMap()->GetMapName(), source->GetMapId(), GetInstanceId());
+ TC_LOG_ERROR("maps", "Cannot bind player (GUID: %u, Name: %s), because no instance save is available for instance map (Name: %s, Entry: %u, InstanceId: %u)!", source->GetGUID().GetCounter(), source->GetName().c_str(), source->GetMap()->GetMapName(), source->GetMapId(), GetInstanceId());
return;
}
@@ -3164,8 +3249,8 @@ void InstanceMap::PermBindAllPlayers(Player* source)
WorldPacket data(SMSG_INSTANCE_SAVE_CREATED, 4);
data << uint32(0);
player->GetSession()->SendPacket(&data);
-
- player->GetSession()->SendCalendarRaidLockout(save, true);
+ if (!player->IsGameMaster())
+ player->GetSession()->SendCalendarRaidLockout(save, true);
}
// if the leader is not in the instance the group will not get a perm bind
@@ -3179,7 +3264,10 @@ void InstanceMap::UnloadAll()
ASSERT(!HavePlayers());
if (m_resetAfterUnload == true)
+ {
DeleteRespawnTimes();
+ DeleteCorpseData();
+ }
Map::UnloadAll();
}
@@ -3255,8 +3343,8 @@ bool BattlegroundMap::CanEnter(Player* player)
{
if (player->GetMapRef().getTarget() == this)
{
- TC_LOG_ERROR("maps", "BGMap::CanEnter - player %u is already in map!", player->GetGUIDLow());
- ASSERT(false);
+ TC_LOG_ERROR("maps", "BGMap::CanEnter - player %u is already in map!", player->GetGUID().GetCounter());
+ ABORT();
return false;
}
@@ -3301,17 +3389,27 @@ void BattlegroundMap::RemoveAllPlayers()
player->TeleportTo(player->GetBattlegroundEntryPoint());
}
-Creature* Map::GetCreature(ObjectGuid guid)
+Corpse* Map::GetCorpse(ObjectGuid const& guid)
{
- return ObjectAccessor::GetObjectInMap(guid, this, (Creature*)NULL);
+ return _objectsStore.Find<Corpse>(guid);
}
-GameObject* Map::GetGameObject(ObjectGuid guid)
+Creature* Map::GetCreature(ObjectGuid const& guid)
{
- return ObjectAccessor::GetObjectInMap(guid, this, (GameObject*)NULL);
+ return _objectsStore.Find<Creature>(guid);
}
-Transport* Map::GetTransport(ObjectGuid guid)
+GameObject* Map::GetGameObject(ObjectGuid const& guid)
+{
+ return _objectsStore.Find<GameObject>(guid);
+}
+
+Pet* Map::GetPet(ObjectGuid const& guid)
+{
+ return _objectsStore.Find<Pet>(guid);
+}
+
+Transport* Map::GetTransport(ObjectGuid const& guid)
{
if (!guid.IsMOTransport())
return NULL;
@@ -3320,9 +3418,9 @@ Transport* Map::GetTransport(ObjectGuid guid)
return go ? go->ToTransport() : NULL;
}
-DynamicObject* Map::GetDynamicObject(ObjectGuid guid)
+DynamicObject* Map::GetDynamicObject(ObjectGuid const& guid)
{
- return ObjectAccessor::GetObjectInMap(guid, this, (DynamicObject*)NULL);
+ return _objectsStore.Find<DynamicObject>(guid);
}
void Map::UpdateIteratorBack(Player* player)
@@ -3331,7 +3429,7 @@ void Map::UpdateIteratorBack(Player* player)
m_mapRefIter = m_mapRefIter->nocheck_prev();
}
-void Map::SaveCreatureRespawnTime(uint32 dbGuid, time_t respawnTime)
+void Map::SaveCreatureRespawnTime(ObjectGuid::LowType dbGuid, time_t respawnTime)
{
if (!respawnTime)
{
@@ -3350,7 +3448,7 @@ void Map::SaveCreatureRespawnTime(uint32 dbGuid, time_t respawnTime)
CharacterDatabase.Execute(stmt);
}
-void Map::RemoveCreatureRespawnTime(uint32 dbGuid)
+void Map::RemoveCreatureRespawnTime(ObjectGuid::LowType dbGuid)
{
_creatureRespawnTimes.erase(dbGuid);
@@ -3361,7 +3459,7 @@ void Map::RemoveCreatureRespawnTime(uint32 dbGuid)
CharacterDatabase.Execute(stmt);
}
-void Map::SaveGORespawnTime(uint32 dbGuid, time_t respawnTime)
+void Map::SaveGORespawnTime(ObjectGuid::LowType dbGuid, time_t respawnTime)
{
if (!respawnTime)
{
@@ -3380,7 +3478,7 @@ void Map::SaveGORespawnTime(uint32 dbGuid, time_t respawnTime)
CharacterDatabase.Execute(stmt);
}
-void Map::RemoveGORespawnTime(uint32 dbGuid)
+void Map::RemoveGORespawnTime(ObjectGuid::LowType dbGuid)
{
_goRespawnTimes.erase(dbGuid);
@@ -3401,7 +3499,7 @@ void Map::LoadRespawnTimes()
do
{
Field* fields = result->Fetch();
- uint32 loguid = fields[0].GetUInt32();
+ ObjectGuid::LowType loguid = fields[0].GetUInt32();
uint32 respawnTime = fields[1].GetUInt32();
_creatureRespawnTimes[loguid] = time_t(respawnTime);
@@ -3416,7 +3514,7 @@ void Map::LoadRespawnTimes()
do
{
Field* fields = result->Fetch();
- uint32 loguid = fields[0].GetUInt32();
+ ObjectGuid::LowType loguid = fields[0].GetUInt32();
uint32 respawnTime = fields[1].GetUInt32();
_goRespawnTimes[loguid] = time_t(respawnTime);
@@ -3450,9 +3548,9 @@ time_t Map::GetLinkedRespawnTime(ObjectGuid guid) const
ObjectGuid linkedGuid = sObjectMgr->GetLinkedRespawnGuid(guid);
switch (linkedGuid.GetHigh())
{
- case HIGHGUID_UNIT:
+ case HighGuid::Unit:
return GetCreatureRespawnTime(linkedGuid.GetCounter());
- case HIGHGUID_GAMEOBJECT:
+ case HighGuid::GameObject:
return GetGORespawnTime(linkedGuid.GetCounter());
default:
break;
@@ -3461,6 +3559,159 @@ time_t Map::GetLinkedRespawnTime(ObjectGuid guid) const
return time_t(0);
}
+void Map::LoadCorpseData()
+{
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CORPSES);
+ stmt->setUInt32(0, GetId());
+ stmt->setUInt32(1, GetInstanceId());
+
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, guid FROM corpse WHERE mapId = ? AND instanceId = ?
+ PreparedQueryResult result = CharacterDatabase.Query(stmt);
+ if (!result)
+ return;
+
+ do
+ {
+ Field* fields = result->Fetch();
+ CorpseType type = CorpseType(fields[13].GetUInt8());
+ ObjectGuid::LowType guid = fields[16].GetUInt32();
+ if (type >= MAX_CORPSE_TYPE || type == CORPSE_BONES)
+ {
+ TC_LOG_ERROR("misc", "Corpse (guid: %u) have wrong corpse type (%u), not loading.", guid, type);
+ continue;
+ }
+
+ Corpse* corpse = new Corpse(type);
+
+ if (!corpse->LoadCorpseFromDB(GenerateLowGuid<HighGuid::Corpse>(), fields))
+ {
+ delete corpse;
+ continue;
+ }
+
+ AddCorpse(corpse);
+
+ } while (result->NextRow());
+}
+
+void Map::DeleteCorpseData()
+{
+ // DELETE FROM corpse WHERE mapId = ? AND instanceId = ?
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CORPSES_FROM_MAP);
+ stmt->setUInt32(0, GetId());
+ stmt->setUInt32(1, GetInstanceId());
+ CharacterDatabase.Execute(stmt);
+}
+
+void Map::AddCorpse(Corpse* corpse)
+{
+ corpse->SetMap(this);
+
+ _corpsesByCell[corpse->GetCellCoord().GetId()].insert(corpse);
+ if (corpse->GetType() != CORPSE_BONES)
+ _corpsesByPlayer[corpse->GetOwnerGUID()] = corpse;
+ else
+ _corpseBones.insert(corpse);
+}
+
+void Map::RemoveCorpse(Corpse* corpse)
+{
+ ASSERT(corpse);
+
+ corpse->DestroyForNearbyPlayers();
+ if (corpse->IsInGrid())
+ RemoveFromMap(corpse, false);
+ else
+ {
+ corpse->RemoveFromWorld();
+ corpse->ResetMap();
+ }
+
+ _corpsesByCell[corpse->GetCellCoord().GetId()].erase(corpse);
+ if (corpse->GetType() != CORPSE_BONES)
+ _corpsesByPlayer.erase(corpse->GetOwnerGUID());
+ else
+ _corpseBones.erase(corpse);
+}
+
+Corpse* Map::ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia /*= false*/)
+{
+ Corpse* corpse = GetCorpseByPlayer(ownerGuid);
+ if (!corpse)
+ return nullptr;
+
+ RemoveCorpse(corpse);
+
+ // remove corpse from DB
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+ corpse->DeleteFromDB(trans);
+ CharacterDatabase.CommitTransaction(trans);
+
+ Corpse* bones = NULL;
+
+ // create the bones only if the map and the grid is loaded at the corpse's location
+ // ignore bones creating option in case insignia
+ if ((insignia ||
+ (IsBattlegroundOrArena() ? sWorld->getBoolConfig(CONFIG_DEATH_BONES_BG_OR_ARENA) : sWorld->getBoolConfig(CONFIG_DEATH_BONES_WORLD))) &&
+ !IsRemovalGrid(corpse->GetPositionX(), corpse->GetPositionY()))
+ {
+ // Create bones, don't change Corpse
+ bones = new Corpse();
+ bones->Create(corpse->GetGUID().GetCounter());
+
+ for (uint8 i = OBJECT_FIELD_TYPE + 1; i < CORPSE_END; ++i) // don't overwrite guid and object type
+ bones->SetUInt32Value(i, corpse->GetUInt32Value(i));
+
+ bones->SetCellCoord(corpse->GetCellCoord());
+ bones->Relocate(corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetOrientation());
+ bones->SetPhaseMask(corpse->GetPhaseMask(), false);
+
+ bones->SetUInt32Value(CORPSE_FIELD_FLAGS, CORPSE_FLAG_UNK2 | CORPSE_FLAG_BONES);
+ bones->SetGuidValue(CORPSE_FIELD_OWNER, ObjectGuid::Empty);
+
+ for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i)
+ if (corpse->GetUInt32Value(CORPSE_FIELD_ITEM + i))
+ bones->SetUInt32Value(CORPSE_FIELD_ITEM + i, 0);
+
+ AddCorpse(bones);
+
+ // add bones in grid store if grid loaded where corpse placed
+ AddToMap(bones);
+ }
+
+ // all references to the corpse should be removed at this point
+ delete corpse;
+
+ return bones;
+}
+
+void Map::RemoveOldCorpses()
+{
+ time_t now = time(nullptr);
+
+ std::vector<ObjectGuid> corpses;
+ corpses.reserve(_corpsesByPlayer.size());
+
+ for (auto const& p : _corpsesByPlayer)
+ if (p.second->IsExpired(now))
+ corpses.push_back(p.first);
+
+ for (ObjectGuid const& ownerGuid : corpses)
+ ConvertCorpseToBones(ownerGuid);
+
+ std::vector<Corpse*> expiredBones;
+ for (Corpse* bones : _corpseBones)
+ if (bones->IsExpired(now))
+ expiredBones.push_back(bones);
+
+ for (Corpse* bones : expiredBones)
+ {
+ RemoveCorpse(bones);
+ delete bones;
+ }
+}
+
void Map::SendZoneDynamicInfo(Player* player)
{
uint32 zoneId = GetZoneId(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ());
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index 15d2169fbbc..0962bcc9d6c 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -34,6 +34,7 @@
#include <bitset>
#include <list>
+#include <memory>
class Unit;
class WorldPacket;
@@ -443,10 +444,38 @@ class Map : public GridRefManager<NGridType>
TempSummon* SummonCreature(uint32 entry, Position const& pos, SummonPropertiesEntry const* properties = NULL, uint32 duration = 0, Unit* summoner = NULL, uint32 spellId = 0, uint32 vehId = 0);
void SummonCreatureGroup(uint8 group, std::list<TempSummon*>* list = NULL);
- Creature* GetCreature(ObjectGuid guid);
- GameObject* GetGameObject(ObjectGuid guid);
- Transport* GetTransport(ObjectGuid guid);
- DynamicObject* GetDynamicObject(ObjectGuid guid);
+ Corpse* GetCorpse(ObjectGuid const& guid);
+ Creature* GetCreature(ObjectGuid const& guid);
+ GameObject* GetGameObject(ObjectGuid const& guid);
+ Transport* GetTransport(ObjectGuid const& guid);
+ DynamicObject* GetDynamicObject(ObjectGuid const& guid);
+ Pet* GetPet(ObjectGuid const& guid);
+
+ MapStoredObjectTypesContainer& GetObjectsStore() { return _objectsStore; }
+
+ typedef std::unordered_multimap<ObjectGuid::LowType, Creature*> CreatureBySpawnIdContainer;
+ CreatureBySpawnIdContainer& GetCreatureBySpawnIdStore() { return _creatureBySpawnIdStore; }
+
+ typedef std::unordered_multimap<ObjectGuid::LowType, GameObject*> GameObjectBySpawnIdContainer;
+ GameObjectBySpawnIdContainer& GetGameObjectBySpawnIdStore() { return _gameobjectBySpawnIdStore; }
+
+ std::unordered_set<Corpse*> const* GetCorpsesInCell(uint32 cellId) const
+ {
+ auto itr = _corpsesByCell.find(cellId);
+ if (itr != _corpsesByCell.end())
+ return &itr->second;
+
+ return nullptr;
+ }
+
+ Corpse* GetCorpseByPlayer(ObjectGuid const& ownerGuid) const
+ {
+ auto itr = _corpsesByPlayer.find(ownerGuid);
+ if (itr != _corpsesByPlayer.end())
+ return itr->second;
+
+ return nullptr;
+ }
MapInstanced* ToMapInstanced() { if (Instanceable()) return reinterpret_cast<MapInstanced*>(this); return NULL; }
MapInstanced const* ToMapInstanced() const { if (Instanceable()) return reinterpret_cast<MapInstanced const*>(this); return NULL; }
@@ -470,31 +499,38 @@ class Map : public GridRefManager<NGridType>
RESPAWN TIMES
*/
time_t GetLinkedRespawnTime(ObjectGuid guid) const;
- time_t GetCreatureRespawnTime(uint32 dbGuid) const
+ time_t GetCreatureRespawnTime(ObjectGuid::LowType dbGuid) const
{
- std::unordered_map<uint32 /*dbGUID*/, time_t>::const_iterator itr = _creatureRespawnTimes.find(dbGuid);
+ std::unordered_map<ObjectGuid::LowType /*dbGUID*/, time_t>::const_iterator itr = _creatureRespawnTimes.find(dbGuid);
if (itr != _creatureRespawnTimes.end())
return itr->second;
return time_t(0);
}
- time_t GetGORespawnTime(uint32 dbGuid) const
+ time_t GetGORespawnTime(ObjectGuid::LowType dbGuid) const
{
- std::unordered_map<uint32 /*dbGUID*/, time_t>::const_iterator itr = _goRespawnTimes.find(dbGuid);
+ std::unordered_map<ObjectGuid::LowType /*dbGUID*/, time_t>::const_iterator itr = _goRespawnTimes.find(dbGuid);
if (itr != _goRespawnTimes.end())
return itr->second;
return time_t(0);
}
- void SaveCreatureRespawnTime(uint32 dbGuid, time_t respawnTime);
- void RemoveCreatureRespawnTime(uint32 dbGuid);
- void SaveGORespawnTime(uint32 dbGuid, time_t respawnTime);
- void RemoveGORespawnTime(uint32 dbGuid);
+ void SaveCreatureRespawnTime(ObjectGuid::LowType dbGuid, time_t respawnTime);
+ void RemoveCreatureRespawnTime(ObjectGuid::LowType dbGuid);
+ void SaveGORespawnTime(ObjectGuid::LowType dbGuid, time_t respawnTime);
+ void RemoveGORespawnTime(ObjectGuid::LowType dbGuid);
void LoadRespawnTimes();
void DeleteRespawnTimes();
+ void LoadCorpseData();
+ void DeleteCorpseData();
+ void AddCorpse(Corpse* corpse);
+ void RemoveCorpse(Corpse* corpse);
+ Corpse* ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia = false);
+ void RemoveOldCorpses();
+
static void DeleteRespawnTimesInDB(uint16 mapId, uint32 instanceId);
void SendInitTransports(Player* player);
@@ -507,7 +543,32 @@ class Map : public GridRefManager<NGridType>
void UpdateAreaDependentAuras();
+ template<HighGuid high>
+ inline ObjectGuid::LowType GenerateLowGuid()
+ {
+ static_assert(ObjectGuidTraits<high>::MapSpecific, "Only map specific guid can be generated in Map context");
+ return GetGuidSequenceGenerator<high>().Generate();
+ }
+
+ template<HighGuid high>
+ inline ObjectGuid::LowType GetMaxLowGuid()
+ {
+ static_assert(ObjectGuidTraits<high>::MapSpecific, "Only map specific guid can be retrieved in Map context");
+ return GetGuidSequenceGenerator<high>().GetNextAfterMaxUsed();
+ }
+
+ void AddUpdateObject(Object* obj)
+ {
+ _updateObjects.insert(obj);
+ }
+
+ void RemoveUpdateObject(Object* obj)
+ {
+ _updateObjects.erase(obj);
+ }
+
private:
+
void LoadMapAndVMap(int gx, int gy);
void LoadVMap(int gx, int gy);
void LoadMap(int gx, int gy, bool reload = false);
@@ -561,6 +622,8 @@ class Map : public GridRefManager<NGridType>
void UpdateActiveCells(const float &x, const float &y, const uint32 t_diff);
+ void SendObjectUpdates();
+
protected:
void SetUnloadReferenceLock(const GridCoord &p, bool on) { getNGrid(p.x_coord, p.y_coord)->setUnloadReferenceLock(on); }
@@ -596,7 +659,7 @@ class Map : public GridRefManager<NGridType>
Creature* _GetScriptCreature(Object* obj, bool isSource, const ScriptInfo* scriptInfo) const;
WorldObject* _GetScriptWorldObject(Object* obj, bool isSource, const ScriptInfo* scriptInfo) const;
void _ScriptProcessDoor(Object* source, Object* target, const ScriptInfo* scriptInfo) const;
- GameObject* _FindGameObject(WorldObject* pWorldObject, uint32 guid) const;
+ GameObject* _FindGameObject(WorldObject* pWorldObject, ObjectGuid::LowType guid) const;
time_t i_gridExpiry;
@@ -648,11 +711,31 @@ class Map : public GridRefManager<NGridType>
m_activeNonPlayers.erase(obj);
}
- std::unordered_map<uint32 /*dbGUID*/, time_t> _creatureRespawnTimes;
- std::unordered_map<uint32 /*dbGUID*/, time_t> _goRespawnTimes;
+ std::unordered_map<ObjectGuid::LowType /*dbGUID*/, time_t> _creatureRespawnTimes;
+ std::unordered_map<ObjectGuid::LowType /*dbGUID*/, time_t> _goRespawnTimes;
ZoneDynamicInfoMap _zoneDynamicInfo;
uint32 _defaultLight;
+
+ template<HighGuid high>
+ inline ObjectGuidGeneratorBase& GetGuidSequenceGenerator()
+ {
+ auto itr = _guidGenerators.find(high);
+ if (itr == _guidGenerators.end())
+ itr = _guidGenerators.insert(std::make_pair(high, std::unique_ptr<ObjectGuidGenerator<high>>(new ObjectGuidGenerator<high>()))).first;
+
+ return *itr->second;
+ }
+
+ std::map<HighGuid, std::unique_ptr<ObjectGuidGeneratorBase>> _guidGenerators;
+ MapStoredObjectTypesContainer _objectsStore;
+ CreatureBySpawnIdContainer _creatureBySpawnIdStore;
+ GameObjectBySpawnIdContainer _gameobjectBySpawnIdStore;
+ std::unordered_map<uint32/*cellId*/, std::unordered_set<Corpse*>> _corpsesByCell;
+ std::unordered_map<ObjectGuid, Corpse*> _corpsesByPlayer;
+ std::unordered_set<Corpse*> _corpseBones;
+
+ std::unordered_set<Object*> _updateObjects;
};
enum InstanceResetMethod
diff --git a/src/server/game/Maps/MapInstanced.cpp b/src/server/game/Maps/MapInstanced.cpp
index e4632bb7515..d1b8bd66209 100644
--- a/src/server/game/Maps/MapInstanced.cpp
+++ b/src/server/game/Maps/MapInstanced.cpp
@@ -194,13 +194,13 @@ InstanceMap* MapInstanced::CreateInstance(uint32 InstanceId, InstanceSave* save,
if (!entry)
{
TC_LOG_ERROR("maps", "CreateInstance: no entry for map %d", GetId());
- ASSERT(false);
+ ABORT();
}
const InstanceTemplate* iTemplate = sObjectMgr->GetInstanceTemplate(GetId());
if (!iTemplate)
{
TC_LOG_ERROR("maps", "CreateInstance: no instance template for map %d", GetId());
- ASSERT(false);
+ ABORT();
}
// some instances only have one difficulty
@@ -212,6 +212,7 @@ InstanceMap* MapInstanced::CreateInstance(uint32 InstanceId, InstanceSave* save,
ASSERT(map->IsDungeon());
map->LoadRespawnTimes();
+ map->LoadCorpseData();
bool load_data = save != NULL;
map->CreateInstanceData(load_data);
@@ -279,6 +280,6 @@ bool MapInstanced::DestroyInstance(InstancedMaps::iterator &itr)
bool MapInstanced::CanEnter(Player* /*player*/)
{
- //ASSERT(false);
+ //ABORT();
return true;
}
diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp
index 29f4b4ab7c2..0e7f9dbb611 100644
--- a/src/server/game/Maps/MapManager.cpp
+++ b/src/server/game/Maps/MapManager.cpp
@@ -79,6 +79,7 @@ Map* MapManager::CreateBaseMap(uint32 id)
{
map = new Map(id, i_gridCleanUpDelay, 0, REGULAR_DIFFICULTY);
map->LoadRespawnTimes();
+ map->LoadCorpseData();
}
i_maps[id] = map;
@@ -163,10 +164,10 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck)
if (!player->IsAlive())
{
- if (Corpse* corpse = player->GetCorpse())
+ if (player->HasCorpse())
{
// let enter in ghost mode in instance that connected to inner instance with corpse
- uint32 corpseMap = corpse->GetMapId();
+ uint32 corpseMap = player->GetCorpseLocation().GetMapId();
do
{
if (corpseMap == mapid)
@@ -183,9 +184,8 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck)
TC_LOG_DEBUG("maps", "MAP: Player '%s' does not have a corpse in instance '%s' and cannot enter.", player->GetName().c_str(), mapName);
return false;
}
+
TC_LOG_DEBUG("maps", "MAP: Player '%s' has corpse in instance '%s' and can enter.", player->GetName().c_str(), mapName);
- player->ResurrectPlayer(0.5f, false);
- player->SpawnCorpseBones();
}
else
TC_LOG_DEBUG("maps", "Map::CanPlayerEnter - player '%s' is dead but does not have a corpse!", player->GetName().c_str());
@@ -250,8 +250,6 @@ void MapManager::Update(uint32 diff)
for (iter = i_maps.begin(); iter != i_maps.end(); ++iter)
iter->second->DelayedUpdate(uint32(i_timer.GetCurrent()));
- sObjectAccessor->Update(uint32(i_timer.GetCurrent()));
-
i_timer.SetCurrent(0);
}
diff --git a/src/server/game/Maps/MapManager.h b/src/server/game/Maps/MapManager.h
index dc6c0bb642f..5b957e00281 100644
--- a/src/server/game/Maps/MapManager.h
+++ b/src/server/game/Maps/MapManager.h
@@ -21,6 +21,7 @@
#include "Object.h"
#include "Map.h"
+#include "MapInstanced.h"
#include "GridStates.h"
#include "MapUpdater.h"
@@ -125,6 +126,12 @@ class MapManager
MapUpdater * GetMapUpdater() { return &m_updater; }
+ template<typename Worker>
+ void DoForAllMaps(Worker&& worker);
+
+ template<typename Worker>
+ void DoForAllMapsWithMapId(uint32 mapId, Worker&& worker);
+
private:
typedef std::unordered_map<uint32, Map*> MapMapType;
typedef std::vector<bool> InstanceIds;
@@ -150,5 +157,45 @@ class MapManager
uint32 _nextInstanceId;
MapUpdater m_updater;
};
+
+template<typename Worker>
+void MapManager::DoForAllMaps(Worker&& worker)
+{
+ std::lock_guard<std::mutex> lock(_mapsLock);
+
+ for (auto& mapPair : i_maps)
+ {
+ Map* map = mapPair.second;
+ if (MapInstanced* mapInstanced = map->ToMapInstanced())
+ {
+ MapInstanced::InstancedMaps& instances = mapInstanced->GetInstancedMaps();
+ for (auto& instancePair : instances)
+ worker(instancePair.second);
+ }
+ else
+ worker(map);
+ }
+}
+
+template<typename Worker>
+inline void MapManager::DoForAllMapsWithMapId(uint32 mapId, Worker&& worker)
+{
+ std::lock_guard<std::mutex> lock(_mapsLock);
+
+ auto itr = i_maps.find(mapId);
+ if (itr != i_maps.end())
+ {
+ Map* map = itr->second;
+ if (MapInstanced* mapInstanced = map->ToMapInstanced())
+ {
+ MapInstanced::InstancedMaps& instances = mapInstanced->GetInstancedMaps();
+ for (auto& p : instances)
+ worker(p.second);
+ }
+ else
+ worker(map);
+ }
+}
+
#define sMapMgr MapManager::instance()
#endif
diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp
index dadc2eeeac3..84eba74c6dc 100644
--- a/src/server/game/Maps/TransportMgr.cpp
+++ b/src/server/game/Maps/TransportMgr.cpp
@@ -112,7 +112,7 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl
Movement::PointsArray splinePath, allPoints;
bool mapChange = false;
for (size_t i = 0; i < path.size(); ++i)
- allPoints.push_back(G3D::Vector3(path[i].LocX, path[i].LocY, path[i].LocZ));
+ allPoints.push_back(G3D::Vector3(path[i]->LocX, path[i]->LocY, path[i]->LocZ));
// Add extra points to allow derivative calculations for all path nodes
allPoints.insert(allPoints.begin(), allPoints.front().lerp(allPoints[1], -0.2f));
@@ -128,8 +128,8 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl
{
if (!mapChange)
{
- TaxiPathNodeEntry const& node_i = path[i];
- if (i != path.size() - 1 && (node_i.Flags & 1 || node_i.MapID != path[i + 1].MapID))
+ TaxiPathNodeEntry const* node_i = path[i];
+ if (i != path.size() - 1 && (node_i->Flags & 1 || node_i->MapID != path[i + 1]->MapID))
{
keyFrames.back().Teleport = true;
mapChange = true;
@@ -142,7 +142,7 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl
k.InitialOrientation = Position::NormalizeOrientation(std::atan2(h.y, h.x) + float(M_PI));
keyFrames.push_back(k);
- splinePath.push_back(G3D::Vector3(node_i.LocX, node_i.LocY, node_i.LocZ));
+ splinePath.push_back(G3D::Vector3(node_i->LocX, node_i->LocY, node_i->LocZ));
transport->mapsUsed.insert(k.Node->MapID);
}
}
@@ -348,7 +348,7 @@ void TransportMgr::AddPathNodeToTransport(uint32 transportEntry, uint32 timeSeg,
animNode.Path[timeSeg] = node;
}
-Transport* TransportMgr::CreateTransport(uint32 entry, uint32 guid /*= 0*/, Map* map /*= NULL*/)
+Transport* TransportMgr::CreateTransport(uint32 entry, ObjectGuid::LowType guid /*= 0*/, Map* map /*= NULL*/)
{
// instance case, execute GetGameObjectEntry hook
if (map)
@@ -381,7 +381,8 @@ Transport* TransportMgr::CreateTransport(uint32 entry, uint32 guid /*= 0*/, Map*
float o = tInfo->keyFrames.begin()->InitialOrientation;
// initialize the gameobject base
- uint32 guidLow = guid ? guid : sObjectMgr->GenerateLowGuid(HIGHGUID_MO_TRANSPORT);
+ ObjectGuid::LowType guidLow = guid ? guid : sObjectMgr->GetGenerator<HighGuid::Mo_Transport>().Generate();
+
if (!trans->Create(guidLow, entry, mapId, x, y, z, o, 255))
{
delete trans;
@@ -404,7 +405,7 @@ Transport* TransportMgr::CreateTransport(uint32 entry, uint32 guid /*= 0*/, Map*
trans->m_zoneScript = map->ToInstanceMap()->GetInstanceScript();
// Passengers will be loaded once a player is near
-
+ HashMapHolder<Transport>::Insert(trans);
trans->GetMap()->AddToMap<Transport>(trans);
return trans;
}
@@ -424,7 +425,7 @@ void TransportMgr::SpawnContinentTransports()
do
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
uint32 entry = fields[1].GetUInt32();
if (TransportTemplate const* tInfo = GetTransportTemplate(entry))
diff --git a/src/server/game/Maps/TransportMgr.h b/src/server/game/Maps/TransportMgr.h
index fff7b9d8afa..d100f60c604 100644
--- a/src/server/game/Maps/TransportMgr.h
+++ b/src/server/game/Maps/TransportMgr.h
@@ -21,6 +21,7 @@
#include <G3D/Quat.h>
#include "Spline.h"
#include "DBCStores.h"
+#include "ObjectGuid.h"
struct KeyFrame;
struct GameObjectTemplate;
@@ -37,7 +38,7 @@ typedef std::unordered_map<uint32, std::set<uint32> > TransportInstanceMap;
struct KeyFrame
{
- explicit KeyFrame(TaxiPathNodeEntry const& _node) : Index(0), Node(&_node), InitialOrientation(0.0f),
+ explicit KeyFrame(TaxiPathNodeEntry const* node) : Index(0), Node(node), InitialOrientation(0.0f),
DistSinceStop(-1.0f), DistUntilStop(-1.0f), DistFromPrev(-1.0f), TimeFrom(0.0f), TimeTo(0.0f),
Teleport(false), ArriveTime(0), DepartureTime(0), Spline(NULL), NextDistFromPrev(0.0f), NextArriveTime(0)
{
@@ -111,7 +112,7 @@ class TransportMgr
void LoadTransportTemplates();
// Creates a transport using given GameObject template entry
- Transport* CreateTransport(uint32 entry, uint32 guid = 0, Map* map = NULL);
+ Transport* CreateTransport(uint32 entry, ObjectGuid::LowType guid = 0, Map* map = NULL);
// Spawns all continent transports, used at core startup
void SpawnContinentTransports();
diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h
index ba39723b19d..6edc3d74a5d 100644
--- a/src/server/game/Miscellaneous/Formulas.h
+++ b/src/server/game/Miscellaneous/Formulas.h
@@ -158,7 +158,7 @@ namespace Trinity
return baseGain;
}
- inline uint32 Gain(Player* player, Unit* u)
+ inline uint32 Gain(Player* player, Unit* u, bool isBattleGround = false)
{
Creature* creature = u->ToCreature();
uint32 gain = 0;
@@ -175,7 +175,7 @@ namespace Trinity
if (creature->isElite())
{
// Elites in instances have a 2.75x XP bonus instead of the regular 2x world bonus.
- if (u->GetMap() && u->GetMap()->IsDungeon())
+ if (u->GetMap()->IsDungeon())
xpMod *= 2.75f;
else
xpMod *= 2.0f;
@@ -184,7 +184,7 @@ namespace Trinity
xpMod *= creature->GetCreatureTemplate()->ModExperience;
}
- xpMod *= sWorld->getRate(RATE_XP_KILL);
+ xpMod *= isBattleGround ? sWorld->getRate(RATE_XP_BG_KILL) : sWorld->getRate(RATE_XP_KILL);
gain = uint32(gain * xpMod);
}
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index a4ba9866064..85971396619 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -1202,6 +1202,8 @@ enum TrinityStrings
LANG_BAN_ACCOUNT_YOUPERMBANNEDMESSAGE_WORLD = 11007,
LANG_NPCINFO_INHABIT_TYPE = 11008,
- LANG_NPCINFO_FLAGS_EXTRA = 11009
+ LANG_NPCINFO_FLAGS_EXTRA = 11009,
+ LANG_INSTANCE_LOGIN_GAMEMASTER_EXCEPTION = 11010
+
};
#endif
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index b69322f5720..cb8cab1849d 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -193,7 +193,7 @@ void MotionMaster::MoveRandom(float spawndist)
{
if (_owner->GetTypeId() == TYPEID_UNIT)
{
- TC_LOG_DEBUG("misc", "Creature (GUID: %u) start moving random", _owner->GetGUIDLow());
+ TC_LOG_DEBUG("misc", "Creature (GUID: %u) start moving random", _owner->GetGUID().GetCounter());
Mutate(new RandomMovementGenerator<Creature>(spawndist), MOTION_SLOT_IDLE);
}
}
@@ -204,22 +204,22 @@ void MotionMaster::MoveTargetedHome()
if (_owner->GetTypeId() == TYPEID_UNIT && !_owner->ToCreature()->GetCharmerOrOwnerGUID())
{
- TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) targeted home", _owner->GetEntry(), _owner->GetGUIDLow());
+ TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) targeted home", _owner->GetEntry(), _owner->GetGUID().GetCounter());
Mutate(new HomeMovementGenerator<Creature>(), MOTION_SLOT_ACTIVE);
}
else if (_owner->GetTypeId() == TYPEID_UNIT && _owner->ToCreature()->GetCharmerOrOwnerGUID())
{
- TC_LOG_DEBUG("misc", "Pet or controlled creature (Entry: %u GUID: %u) targeting home", _owner->GetEntry(), _owner->GetGUIDLow());
+ TC_LOG_DEBUG("misc", "Pet or controlled creature (Entry: %u GUID: %u) targeting home", _owner->GetEntry(), _owner->GetGUID().GetCounter());
Unit* target = _owner->ToCreature()->GetCharmerOrOwner();
if (target)
{
- TC_LOG_DEBUG("misc", "Following %s (GUID: %u)", target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", target->GetTypeId() == TYPEID_PLAYER ? target->GetGUIDLow() : ((Creature*)target)->GetDBTableGUIDLow());
+ TC_LOG_DEBUG("misc", "Following %s (GUID: %u)", target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", target->GetTypeId() == TYPEID_PLAYER ? target->GetGUID().GetCounter() : ((Creature*)target)->GetSpawnId());
Mutate(new FollowMovementGenerator<Creature>(target, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE), MOTION_SLOT_ACTIVE);
}
}
else
{
- TC_LOG_ERROR("misc", "Player (GUID: %u) attempt targeted home", _owner->GetGUIDLow());
+ TC_LOG_ERROR("misc", "Player (GUID: %u) attempt targeted home", _owner->GetGUID().GetCounter());
}
}
@@ -227,13 +227,13 @@ void MotionMaster::MoveConfused()
{
if (_owner->GetTypeId() == TYPEID_PLAYER)
{
- TC_LOG_DEBUG("misc", "Player (GUID: %u) move confused", _owner->GetGUIDLow());
+ TC_LOG_DEBUG("misc", "Player (GUID: %u) move confused", _owner->GetGUID().GetCounter());
Mutate(new ConfusedMovementGenerator<Player>(), MOTION_SLOT_CONTROLLED);
}
else
{
TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) move confused",
- _owner->GetEntry(), _owner->GetGUIDLow());
+ _owner->GetEntry(), _owner->GetGUID().GetCounter());
Mutate(new ConfusedMovementGenerator<Creature>(), MOTION_SLOT_CONTROLLED);
}
}
@@ -248,17 +248,17 @@ void MotionMaster::MoveChase(Unit* target, float dist, float angle)
if (_owner->GetTypeId() == TYPEID_PLAYER)
{
TC_LOG_DEBUG("misc", "Player (GUID: %u) chase to %s (GUID: %u)",
- _owner->GetGUIDLow(),
+ _owner->GetGUID().GetCounter(),
target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature",
- target->GetTypeId() == TYPEID_PLAYER ? target->GetGUIDLow() : target->ToCreature()->GetDBTableGUIDLow());
+ target->GetTypeId() == TYPEID_PLAYER ? target->GetGUID().GetCounter() : target->ToCreature()->GetSpawnId());
Mutate(new ChaseMovementGenerator<Player>(target, dist, angle), MOTION_SLOT_ACTIVE);
}
else
{
TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) chase to %s (GUID: %u)",
- _owner->GetEntry(), _owner->GetGUIDLow(),
+ _owner->GetEntry(), _owner->GetGUID().GetCounter(),
target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature",
- target->GetTypeId() == TYPEID_PLAYER ? target->GetGUIDLow() : target->ToCreature()->GetDBTableGUIDLow());
+ target->GetTypeId() == TYPEID_PLAYER ? target->GetGUID().GetCounter() : target->ToCreature()->GetSpawnId());
Mutate(new ChaseMovementGenerator<Creature>(target, dist, angle), MOTION_SLOT_ACTIVE);
}
}
@@ -272,17 +272,17 @@ void MotionMaster::MoveFollow(Unit* target, float dist, float angle, MovementSlo
//_owner->AddUnitState(UNIT_STATE_FOLLOW);
if (_owner->GetTypeId() == TYPEID_PLAYER)
{
- TC_LOG_DEBUG("misc", "Player (GUID: %u) follow to %s (GUID: %u)", _owner->GetGUIDLow(),
+ TC_LOG_DEBUG("misc", "Player (GUID: %u) follow to %s (GUID: %u)", _owner->GetGUID().GetCounter(),
target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature",
- target->GetTypeId() == TYPEID_PLAYER ? target->GetGUIDLow() : target->ToCreature()->GetDBTableGUIDLow());
+ target->GetTypeId() == TYPEID_PLAYER ? target->GetGUID().GetCounter() : target->ToCreature()->GetSpawnId());
Mutate(new FollowMovementGenerator<Player>(target, dist, angle), slot);
}
else
{
TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) follow to %s (GUID: %u)",
- _owner->GetEntry(), _owner->GetGUIDLow(),
+ _owner->GetEntry(), _owner->GetGUID().GetCounter(),
target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature",
- target->GetTypeId() == TYPEID_PLAYER ? target->GetGUIDLow() : target->ToCreature()->GetDBTableGUIDLow());
+ target->GetTypeId() == TYPEID_PLAYER ? target->GetGUID().GetCounter() : target->ToCreature()->GetSpawnId());
Mutate(new FollowMovementGenerator<Creature>(target, dist, angle), slot);
}
}
@@ -291,13 +291,13 @@ void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generate
{
if (_owner->GetTypeId() == TYPEID_PLAYER)
{
- TC_LOG_DEBUG("misc", "Player (GUID: %u) targeted point (Id: %u X: %f Y: %f Z: %f)", _owner->GetGUIDLow(), id, x, y, z);
+ TC_LOG_DEBUG("misc", "Player (GUID: %u) targeted point (Id: %u X: %f Y: %f Z: %f)", _owner->GetGUID().GetCounter(), id, x, y, z);
Mutate(new PointMovementGenerator<Player>(id, x, y, z, generatePath), MOTION_SLOT_ACTIVE);
}
else
{
TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) targeted point (ID: %u X: %f Y: %f Z: %f)",
- _owner->GetEntry(), _owner->GetGUIDLow(), id, x, y, z);
+ _owner->GetEntry(), _owner->GetGUID().GetCounter(), id, x, y, z);
Mutate(new PointMovementGenerator<Creature>(id, x, y, z, generatePath), MOTION_SLOT_ACTIVE);
}
}
@@ -371,7 +371,7 @@ void MotionMaster::MoveJumpTo(float angle, float speedXY, float speedZ)
void MotionMaster::MoveJump(float x, float y, float z, float speedXY, float speedZ, uint32 id)
{
- TC_LOG_DEBUG("misc", "Unit (GUID: %u) jump to point (X: %f Y: %f Z: %f)", _owner->GetGUIDLow(), x, y, z);
+ TC_LOG_DEBUG("misc", "Unit (GUID: %u) jump to point (X: %f Y: %f Z: %f)", _owner->GetGUID().GetCounter(), x, y, z);
if (speedXY <= 0.1f)
return;
@@ -476,13 +476,13 @@ void MotionMaster::MoveCharge(float x, float y, float z, float speed /*= SPEED_C
if (_owner->GetTypeId() == TYPEID_PLAYER)
{
- TC_LOG_DEBUG("misc", "Player (GUID: %u) charge point (X: %f Y: %f Z: %f)", _owner->GetGUIDLow(), x, y, z);
+ TC_LOG_DEBUG("misc", "Player (GUID: %u) charge point (X: %f Y: %f Z: %f)", _owner->GetGUID().GetCounter(), x, y, z);
Mutate(new PointMovementGenerator<Player>(id, x, y, z, generatePath, speed), MOTION_SLOT_CONTROLLED);
}
else
{
TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) charge point (X: %f Y: %f Z: %f)",
- _owner->GetEntry(), _owner->GetGUIDLow(), x, y, z);
+ _owner->GetEntry(), _owner->GetGUID().GetCounter(), x, y, z);
Mutate(new PointMovementGenerator<Creature>(id, x, y, z, generatePath, speed), MOTION_SLOT_CONTROLLED);
}
}
@@ -504,12 +504,12 @@ void MotionMaster::MoveSeekAssistance(float x, float y, float z)
{
if (_owner->GetTypeId() == TYPEID_PLAYER)
{
- TC_LOG_ERROR("misc", "Player (GUID: %u) attempt to seek assistance", _owner->GetGUIDLow());
+ TC_LOG_ERROR("misc", "Player (GUID: %u) attempt to seek assistance", _owner->GetGUID().GetCounter());
}
else
{
TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) seek assistance (X: %f Y: %f Z: %f)",
- _owner->GetEntry(), _owner->GetGUIDLow(), x, y, z);
+ _owner->GetEntry(), _owner->GetGUID().GetCounter(), x, y, z);
_owner->AttackStop();
_owner->ToCreature()->SetReactState(REACT_PASSIVE);
Mutate(new AssistanceMovementGenerator(x, y, z), MOTION_SLOT_ACTIVE);
@@ -520,12 +520,12 @@ void MotionMaster::MoveSeekAssistanceDistract(uint32 time)
{
if (_owner->GetTypeId() == TYPEID_PLAYER)
{
- TC_LOG_ERROR("misc", "Player (GUID: %u) attempt to call distract after assistance", _owner->GetGUIDLow());
+ TC_LOG_ERROR("misc", "Player (GUID: %u) attempt to call distract after assistance", _owner->GetGUID().GetCounter());
}
else
{
TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) is distracted after assistance call (Time: %u)",
- _owner->GetEntry(), _owner->GetGUIDLow(), time);
+ _owner->GetEntry(), _owner->GetGUID().GetCounter(), time);
Mutate(new AssistanceDistractMovementGenerator(time), MOTION_SLOT_ACTIVE);
}
}
@@ -537,17 +537,17 @@ void MotionMaster::MoveFleeing(Unit* enemy, uint32 time)
if (_owner->GetTypeId() == TYPEID_PLAYER)
{
- TC_LOG_DEBUG("misc", "Player (GUID: %u) flee from %s (GUID: %u)", _owner->GetGUIDLow(),
+ TC_LOG_DEBUG("misc", "Player (GUID: %u) flee from %s (GUID: %u)", _owner->GetGUID().GetCounter(),
enemy->GetTypeId() == TYPEID_PLAYER ? "player" : "creature",
- enemy->GetTypeId() == TYPEID_PLAYER ? enemy->GetGUIDLow() : enemy->ToCreature()->GetDBTableGUIDLow());
+ enemy->GetTypeId() == TYPEID_PLAYER ? enemy->GetGUID().GetCounter() : enemy->ToCreature()->GetSpawnId());
Mutate(new FleeingMovementGenerator<Player>(enemy->GetGUID()), MOTION_SLOT_CONTROLLED);
}
else
{
TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) flee from %s (GUID: %u)%s",
- _owner->GetEntry(), _owner->GetGUIDLow(),
+ _owner->GetEntry(), _owner->GetGUID().GetCounter(),
enemy->GetTypeId() == TYPEID_PLAYER ? "player" : "creature",
- enemy->GetTypeId() == TYPEID_PLAYER ? enemy->GetGUIDLow() : enemy->ToCreature()->GetDBTableGUIDLow(),
+ enemy->GetTypeId() == TYPEID_PLAYER ? enemy->GetGUID().GetCounter() : enemy->ToCreature()->GetSpawnId(),
time ? " for a limited time" : "");
if (time)
Mutate(new TimedFleeingMovementGenerator(enemy->GetGUID(), time), MOTION_SLOT_CONTROLLED);
@@ -563,7 +563,8 @@ void MotionMaster::MoveTaxiFlight(uint32 path, uint32 pathnode)
if (path < sTaxiPathNodesByPath.size())
{
TC_LOG_DEBUG("misc", "%s taxi to (Path %u node %u)", _owner->GetName().c_str(), path, pathnode);
- FlightPathMovementGenerator* mgen = new FlightPathMovementGenerator(sTaxiPathNodesByPath[path], pathnode);
+ FlightPathMovementGenerator* mgen = new FlightPathMovementGenerator(pathnode);
+ mgen->LoadPath(_owner->ToPlayer());
Mutate(mgen, MOTION_SLOT_CONTROLLED);
}
else
@@ -575,7 +576,7 @@ void MotionMaster::MoveTaxiFlight(uint32 path, uint32 pathnode)
else
{
TC_LOG_ERROR("misc", "Creature (Entry: %u GUID: %u) attempt taxi to (Path %u node %u)",
- _owner->GetEntry(), _owner->GetGUIDLow(), path, pathnode);
+ _owner->GetEntry(), _owner->GetGUID().GetCounter(), path, pathnode);
}
}
@@ -586,12 +587,12 @@ void MotionMaster::MoveDistract(uint32 timer)
if (_owner->GetTypeId() == TYPEID_PLAYER)
{
- TC_LOG_DEBUG("misc", "Player (GUID: %u) distracted (timer: %u)", _owner->GetGUIDLow(), timer);
+ TC_LOG_DEBUG("misc", "Player (GUID: %u) distracted (timer: %u)", _owner->GetGUID().GetCounter(), timer);
}
else
{
TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) (timer: %u)",
- _owner->GetEntry(), _owner->GetGUIDLow(), timer);
+ _owner->GetEntry(), _owner->GetGUID().GetCounter(), timer);
}
DistractMovementGenerator* mgen = new DistractMovementGenerator(timer);
@@ -644,7 +645,7 @@ void MotionMaster::MovePath(uint32 path_id, bool repeatable)
TC_LOG_DEBUG("misc", "%s (GUID: %u) start moving over path(Id:%u, repeatable: %s)",
_owner->GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature",
- _owner->GetGUIDLow(), path_id, repeatable ? "YES" : "NO");
+ _owner->GetGUID().GetCounter(), path_id, repeatable ? "YES" : "NO");
}
void MotionMaster::MoveRotate(uint32 time, RotateDirection direction)
diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
index 4245bffb864..7ab7534199a 100644
--- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
@@ -33,7 +33,7 @@ void HomeMovementGenerator<Creature>::DoFinalize(Creature* owner)
{
owner->ClearUnitState(UNIT_STATE_EVADE);
owner->SetWalk(true);
- owner->LoadCreaturesAddon(true);
+ owner->LoadCreaturesAddon();
owner->AI()->JustReachedHome();
}
}
diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp
index 31859899ce8..40bf3af5194 100644
--- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp
@@ -232,7 +232,7 @@ void ChaseMovementGenerator<Creature>::MovementInform(Creature* unit)
{
// Pass back the GUIDLow of the target. If it is pet's owner then PetAI will handle
if (unit->AI())
- unit->AI()->MovementInform(CHASE_MOTION_TYPE, i_target.getTarget()->GetGUIDLow());
+ unit->AI()->MovementInform(CHASE_MOTION_TYPE, i_target.getTarget()->GetGUID().GetCounter());
}
//-----------------------------------------------//
@@ -304,7 +304,7 @@ void FollowMovementGenerator<Creature>::MovementInform(Creature* unit)
{
// Pass back the GUIDLow of the target. If it is pet's owner then PetAI will handle
if (unit->AI())
- unit->AI()->MovementInform(FOLLOW_MOTION_TYPE, i_target.getTarget()->GetGUIDLow());
+ unit->AI()->MovementInform(FOLLOW_MOTION_TYPE, i_target.getTarget()->GetGUID().GetCounter());
}
//-----------------------------------------------//
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
index f91fc1985d5..fe618e6ece7 100755
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
@@ -41,7 +41,7 @@ void WaypointMovementGenerator<Creature>::LoadPath(Creature* creature)
if (!i_path)
{
// No path id found for entry
- TC_LOG_ERROR("sql.sql", "WaypointMovementGenerator::LoadPath: creature %s (Entry: %u GUID: %u DB GUID: %u) doesn't have waypoint path id: %u", creature->GetName().c_str(), creature->GetEntry(), creature->GetGUIDLow(), creature->GetDBTableGUIDLow(), path_id);
+ TC_LOG_ERROR("sql.sql", "WaypointMovementGenerator::LoadPath: creature %s (Entry: %u GUID: %u DB GUID: %u) doesn't have waypoint path id: %u", creature->GetName().c_str(), creature->GetEntry(), creature->GetGUID().GetCounter(), creature->GetSpawnId(), path_id);
return;
}
@@ -245,17 +245,62 @@ bool WaypointMovementGenerator<Creature>::GetResetPos(Creature*, float& x, float
uint32 FlightPathMovementGenerator::GetPathAtMapEnd() const
{
- if (i_currentNode >= i_path->size())
- return i_path->size();
+ if (i_currentNode >= i_path.size())
+ return i_path.size();
- uint32 curMapId = (*i_path)[i_currentNode].MapID;
- for (uint32 i = i_currentNode; i < i_path->size(); ++i)
- {
- if ((*i_path)[i].MapID != curMapId)
+ uint32 curMapId = i_path[i_currentNode]->MapID;
+ for (uint32 i = i_currentNode; i < i_path.size(); ++i)
+ if (i_path[i]->MapID != curMapId)
return i;
- }
- return i_path->size();
+ return i_path.size();
+}
+
+#define SKIP_SPLINE_POINT_DISTANCE_SQ (40.0f * 40.0f)
+
+bool IsNodeIncludedInShortenedPath(TaxiPathNodeEntry const* p1, TaxiPathNodeEntry const* p2)
+{
+ return p1->MapID != p2->MapID || std::pow(p1->LocX - p2->LocX, 2) + std::pow(p1->LocY - p2->LocY, 2) > SKIP_SPLINE_POINT_DISTANCE_SQ;
+}
+
+void FlightPathMovementGenerator::LoadPath(Player* player)
+{
+ _pointsForPathSwitch.clear();
+ std::deque<uint32> const& taxi = player->m_taxi.GetPath();
+ for (uint32 src = 0, dst = 1; dst < taxi.size(); src = dst++)
+ {
+ uint32 path, cost;
+ sObjectMgr->GetTaxiPath(taxi[src], taxi[dst], path, cost);
+ if (path > sTaxiPathNodesByPath.size())
+ return;
+
+ TaxiPathNodeList const& nodes = sTaxiPathNodesByPath[path];
+ if (!nodes.empty())
+ {
+ TaxiPathNodeEntry const* start = nodes[0];
+ TaxiPathNodeEntry const* end = nodes[nodes.size() - 1];
+ bool passedPreviousSegmentProximityCheck = false;
+ for (uint32 i = 0; i < nodes.size(); ++i)
+ {
+ if (passedPreviousSegmentProximityCheck || !src || i_path.empty() || IsNodeIncludedInShortenedPath(i_path[i_path.size() - 1], nodes[i]))
+ {
+ if ((!src || (IsNodeIncludedInShortenedPath(start, nodes[i]) && i >= 2)) &&
+ (dst == taxi.size() - 1 || (IsNodeIncludedInShortenedPath(end, nodes[i]) && i < nodes.size() - 1)))
+ {
+ passedPreviousSegmentProximityCheck = true;
+ i_path.push_back(nodes[i]);
+ }
+ }
+ else
+ {
+ i_path.pop_back();
+ --_pointsForPathSwitch.back().PathIndex;
+ }
+ }
+ }
+
+ _pointsForPathSwitch.push_back({ uint32(i_path.size() - 1), int32(cost) });
+ }
}
void FlightPathMovementGenerator::DoInitialize(Player* player)
@@ -296,7 +341,7 @@ void FlightPathMovementGenerator::DoReset(Player* player)
uint32 end = GetPathAtMapEnd();
for (uint32 i = GetCurrentNode(); i != end; ++i)
{
- G3D::Vector3 vertice((*i_path)[i].LocX, (*i_path)[i].LocY, (*i_path)[i].LocZ);
+ G3D::Vector3 vertice(i_path[i]->LocX, i_path[i]->LocY, i_path[i]->LocZ);
init.Path().push_back(vertice);
}
init.SetFirstPointId(GetCurrentNode());
@@ -313,9 +358,21 @@ bool FlightPathMovementGenerator::DoUpdate(Player* player, uint32 /*diff*/)
bool departureEvent = true;
do
{
- DoEventIfAny(player, (*i_path)[i_currentNode], departureEvent);
+ DoEventIfAny(player, i_path[i_currentNode], departureEvent);
+ while (!_pointsForPathSwitch.empty() && _pointsForPathSwitch.front().PathIndex <= i_currentNode)
+ {
+ _pointsForPathSwitch.pop_front();
+ player->m_taxi.NextTaxiDestination();
+ if (!_pointsForPathSwitch.empty())
+ {
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING, _pointsForPathSwitch.front().Cost);
+ player->ModifyMoney(-_pointsForPathSwitch.front().Cost);
+ }
+ }
+
if (pointId == i_currentNode)
break;
+
if (i_currentNode == _preloadTargetNode)
PreloadEndGrid();
i_currentNode += (uint32)departureEvent;
@@ -324,18 +381,18 @@ bool FlightPathMovementGenerator::DoUpdate(Player* player, uint32 /*diff*/)
while (true);
}
- return i_currentNode < (i_path->size()-1);
+ return i_currentNode < (i_path.size() - 1);
}
void FlightPathMovementGenerator::SetCurrentNodeAfterTeleport()
{
- if (i_path->empty())
+ if (i_path.empty() || i_currentNode >= i_path.size())
return;
- uint32 map0 = (*i_path)[0].MapID;
- for (size_t i = 1; i < i_path->size(); ++i)
+ uint32 map0 = i_path[i_currentNode]->MapID;
+ for (size_t i = i_currentNode + 1; i < i_path.size(); ++i)
{
- if ((*i_path)[i].MapID != map0)
+ if (i_path[i]->MapID != map0)
{
i_currentNode = i;
return;
@@ -343,19 +400,21 @@ void FlightPathMovementGenerator::SetCurrentNodeAfterTeleport()
}
}
-void FlightPathMovementGenerator::DoEventIfAny(Player* player, TaxiPathNodeEntry const& node, bool departure)
+void FlightPathMovementGenerator::DoEventIfAny(Player* player, TaxiPathNodeEntry const* node, bool departure)
{
- if (uint32 eventid = departure ? node.DepartureEventID : node.ArrivalEventID)
+ if (uint32 eventid = departure ? node->DepartureEventID : node->ArrivalEventID)
{
- TC_LOG_DEBUG("maps.script", "Taxi %s event %u of node %u of path %u for player %s", departure ? "departure" : "arrival", eventid, node.NodeIndex, node.PathID, player->GetName().c_str());
+ TC_LOG_DEBUG("maps.script", "Taxi %s event %u of node %u of path %u for player %s", departure ? "departure" : "arrival", eventid, node->NodeIndex, node->PathID, player->GetName().c_str());
player->GetMap()->ScriptsStart(sEventScripts, eventid, player, player);
}
}
bool FlightPathMovementGenerator::GetResetPos(Player*, float& x, float& y, float& z)
{
- const TaxiPathNodeEntry& node = (*i_path)[i_currentNode];
- x = node.LocX; y = node.LocY; z = node.LocZ;
+ TaxiPathNodeEntry const* node = i_path[i_currentNode];
+ x = node->LocX;
+ y = node->LocY;
+ z = node->LocZ;
return true;
}
@@ -363,11 +422,11 @@ void FlightPathMovementGenerator::InitEndGridInfo()
{
/*! Storage to preload flightmaster grid at end of flight. For multi-stop flights, this will
be reinitialized for each flightmaster at the end of each spline (or stop) in the flight. */
- uint32 nodeCount = (*i_path).size(); //! Number of nodes in path.
- _endMapId = (*i_path)[nodeCount - 1].MapID; //! MapId of last node
+ uint32 nodeCount = i_path.size(); //! Number of nodes in path.
+ _endMapId = i_path[nodeCount - 1]->MapID; //! MapId of last node
_preloadTargetNode = nodeCount - 3;
- _endGridX = (*i_path)[nodeCount - 1].LocX;
- _endGridY = (*i_path)[nodeCount - 1].LocY;
+ _endGridX = i_path[nodeCount - 1]->LocX;
+ _endGridY = i_path[nodeCount - 1]->LocY;
}
void FlightPathMovementGenerator::PreloadEndGrid()
@@ -378,7 +437,7 @@ void FlightPathMovementGenerator::PreloadEndGrid()
// Load the grid
if (endMap)
{
- 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));
+ 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
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
index eb8533159a9..caf76b5ea19 100755
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
@@ -27,13 +27,8 @@
#include "MovementGenerator.h"
#include "WaypointManager.h"
-#include "Path.h"
-
#include "Player.h"
-#include <vector>
-#include <set>
-
#define FLIGHT_TRAVEL_UPDATE 100
#define STOP_TIME_FOR_PLAYER 3 * MINUTE * IN_MILLISECONDS // 3 Minutes
#define TIMEDIFF_NEXT_WP 250
@@ -42,11 +37,9 @@ template<class T, class P>
class PathMovementBase
{
public:
- PathMovementBase() : i_path(NULL), i_currentNode(0) { }
+ PathMovementBase() : i_path(), i_currentNode(0) { }
virtual ~PathMovementBase() { };
- // template pattern, not defined .. override required
- void LoadPath(T &);
uint32 GetCurrentNode() const { return i_currentNode; }
protected:
@@ -110,30 +103,30 @@ class WaypointMovementGenerator<Creature> : public MovementGeneratorMedium< Crea
* and hence generates ground and activities for the player.
*/
class FlightPathMovementGenerator : public MovementGeneratorMedium< Player, FlightPathMovementGenerator >,
- public PathMovementBase<Player, TaxiPathNodeList const*>
+ public PathMovementBase<Player, TaxiPathNodeList>
{
public:
- explicit FlightPathMovementGenerator(TaxiPathNodeList const& pathnodes, uint32 startNode = 0)
+ explicit FlightPathMovementGenerator(uint32 startNode = 0)
{
- i_path = &pathnodes;
i_currentNode = startNode;
_endGridX = 0.0f;
_endGridY = 0.0f;
_endMapId = 0;
_preloadTargetNode = 0;
}
+ void LoadPath(Player* player);
void DoInitialize(Player*);
void DoReset(Player*);
void DoFinalize(Player*);
bool DoUpdate(Player*, uint32);
MovementGeneratorType GetMovementGeneratorType() const override { return FLIGHT_MOTION_TYPE; }
- TaxiPathNodeList const& GetPath() { return *i_path; }
+ TaxiPathNodeList const& GetPath() { return i_path; }
uint32 GetPathAtMapEnd() const;
- bool HasArrived() const { return (i_currentNode >= i_path->size()); }
+ bool HasArrived() const { return (i_currentNode >= i_path.size()); }
void SetCurrentNodeAfterTeleport();
void SkipCurrentNode() { ++i_currentNode; }
- void DoEventIfAny(Player* player, TaxiPathNodeEntry const& node, bool departure);
+ void DoEventIfAny(Player* player, TaxiPathNodeEntry const* node, bool departure);
bool GetResetPos(Player*, float& x, float& y, float& z);
@@ -141,9 +134,18 @@ class FlightPathMovementGenerator : public MovementGeneratorMedium< Player, Flig
void PreloadEndGrid();
private:
- float _endGridX; //! X coord of last node location
- float _endGridY; //! Y coord of last node location
- uint32 _endMapId; //! map Id of last node location
- uint32 _preloadTargetNode; //! node index where preloading starts
+
+ float _endGridX; //! X coord of last node location
+ float _endGridY; //! Y coord of last node location
+ uint32 _endMapId; //! map Id of last node location
+ uint32 _preloadTargetNode; //! node index where preloading starts
+
+ struct TaxiNodeChangeInfo
+ {
+ uint32 PathIndex;
+ int32 Cost;
+ };
+
+ std::deque<TaxiNodeChangeInfo> _pointsForPathSwitch; //! node indexes and costs where TaxiPath changes
};
#endif
diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp
index 186b5d400b2..3b4f19adb0b 100644
--- a/src/server/game/Movement/PathGenerator.cpp
+++ b/src/server/game/Movement/PathGenerator.cpp
@@ -35,7 +35,7 @@ PathGenerator::PathGenerator(const Unit* owner) :
{
memset(_pathPolyRefs, 0, sizeof(_pathPolyRefs));
- TC_LOG_DEBUG("maps", "++ PathGenerator::PathGenerator for %u \n", _sourceUnit->GetGUIDLow());
+ TC_LOG_DEBUG("maps", "++ PathGenerator::PathGenerator for %u \n", _sourceUnit->GetGUID().GetCounter());
uint32 mapId = _sourceUnit->GetMapId();
if (DisableMgr::IsPathfindingEnabled(mapId))
@@ -50,7 +50,7 @@ PathGenerator::PathGenerator(const Unit* owner) :
PathGenerator::~PathGenerator()
{
- TC_LOG_DEBUG("maps", "++ PathGenerator::~PathGenerator() for %u \n", _sourceUnit->GetGUIDLow());
+ TC_LOG_DEBUG("maps", "++ PathGenerator::~PathGenerator() for %u \n", _sourceUnit->GetGUID().GetCounter());
}
bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool forceDest, bool straightLine)
@@ -70,7 +70,7 @@ bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool fo
_forceDestination = forceDest;
_straightLine = straightLine;
- TC_LOG_DEBUG("maps", "++ PathGenerator::CalculatePath() for %u \n", _sourceUnit->GetGUIDLow());
+ TC_LOG_DEBUG("maps", "++ PathGenerator::CalculatePath() for %u \n", _sourceUnit->GetGUID().GetCounter());
// make sure navMesh works - we can run on map w/o mmap
// check if the start and end point have a .mmtile loaded (can we pass via not loaded tile on the way?)
@@ -392,7 +392,7 @@ void PathGenerator::BuildPolyPath(G3D::Vector3 const& startPos, G3D::Vector3 con
// this is probably an error state, but we'll leave it
// and hopefully recover on the next Update
// we still need to copy our preffix
- TC_LOG_ERROR("maps", "%u's Path Build failed: 0 length path", _sourceUnit->GetGUIDLow());
+ TC_LOG_ERROR("maps", "%u's Path Build failed: 0 length path", _sourceUnit->GetGUID().GetCounter());
}
TC_LOG_DEBUG("maps", "++ m_polyLength=%u prefixPolyLength=%u suffixPolyLength=%u \n", _polyLength, prefixPolyLength, suffixPolyLength);
@@ -453,7 +453,7 @@ void PathGenerator::BuildPolyPath(G3D::Vector3 const& startPos, G3D::Vector3 con
if (!_polyLength || dtStatusFailed(dtResult))
{
// only happens if we passed bad data to findPath(), or navmesh is messed up
- TC_LOG_ERROR("maps", "%u's Path Build failed: 0 length path", _sourceUnit->GetGUIDLow());
+ TC_LOG_ERROR("maps", "%u's Path Build failed: 0 length path", _sourceUnit->GetGUID().GetCounter());
BuildShortcut();
_type = PATHFIND_NOPATH;
return;
diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp
index ccf8824051b..d8173aab331 100644
--- a/src/server/game/Movement/Spline/MoveSpline.cpp
+++ b/src/server/game/Movement/Spline/MoveSpline.cpp
@@ -202,7 +202,7 @@ bool MoveSplineInitArgs::Validate(Unit* unit) const
#define CHECK(exp) \
if (!(exp))\
{\
- TC_LOG_ERROR("misc", "MoveSplineInitArgs::Validate: expression '%s' failed for GUID: %u Entry: %u", #exp, unit->GetTypeId() == TYPEID_PLAYER ? unit->GetGUIDLow() : unit->ToCreature()->GetDBTableGUIDLow(), unit->GetEntry());\
+ TC_LOG_ERROR("misc", "MoveSplineInitArgs::Validate: expression '%s' failed for GUID: %u Entry: %u", #exp, unit->GetTypeId() == TYPEID_PLAYER ? unit->GetGUID().GetCounter() : unit->ToCreature()->GetSpawnId(), unit->GetEntry());\
return false;\
}
CHECK(path.size() > 1);
diff --git a/src/server/game/Movement/Spline/Spline.h b/src/server/game/Movement/Spline/Spline.h
index c8b7a19c943..59f514bed75 100644
--- a/src/server/game/Movement/Spline/Spline.h
+++ b/src/server/game/Movement/Spline/Spline.h
@@ -82,7 +82,7 @@ protected:
typedef void (SplineBase::*InitMethtod)(const Vector3*, index_type, index_type);
static InitMethtod initializers[ModesEnd];
- void UninitializedSpline() const { ASSERT(false);}
+ void UninitializedSpline() const { ABORT();}
public:
diff --git a/src/server/game/Movement/Waypoints/Path.h b/src/server/game/Movement/Waypoints/Path.h
deleted file mode 100644
index bb8abc37eb3..00000000000
--- a/src/server/game/Movement/Waypoints/Path.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * 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_PATH_H
-#define TRINITYCORE_PATH_H
-
-#include "Common.h"
-#include <deque>
-
-struct PathNode
-{
- PathNode(): x(0.0f), y(0.0f), z(0.0f) { }
- PathNode(float _x, float _y, float _z): x(_x), y(_y), z(_z) { }
- float x, y, z;
-};
-template<typename PathElem, typename PathNode = PathElem>
-
-class Path
-{
- public:
- size_t size() const { return i_nodes.size(); }
- bool empty() const { return i_nodes.empty(); }
- void resize(unsigned int sz) { i_nodes.resize(sz); }
- void clear() { i_nodes.clear(); }
- void erase(uint32 idx) { i_nodes.erase(i_nodes.begin()+idx); }
- void crop(unsigned int start, unsigned int end)
- {
- while (start && !i_nodes.empty())
- {
- i_nodes.pop_front();
- --start;
- }
-
- while (end && !i_nodes.empty())
- {
- i_nodes.pop_back();
- --end;
- }
- }
-
- float GetTotalLength(uint32 start, uint32 end) const
- {
- float len = 0.0f;
- for (uint32 idx=start+1; idx < end; ++idx)
- {
- PathNode const& node = i_nodes[idx];
- PathNode const& prev = i_nodes[idx-1];
- float xd = node.x - prev.x;
- float yd = node.y - prev.y;
- float zd = node.z - prev.z;
- len += std::sqrt(xd*xd + yd*yd + zd*zd);
- }
- return len;
- }
-
- float GetTotalLength() const { return GetTotalLength(0, size()); }
-
- float GetPassedLength(uint32 curnode, float x, float y, float z) const
- {
- float len = GetTotalLength(0, curnode);
-
- if (curnode > 0)
- {
- PathNode const& node = i_nodes[curnode-1];
- float xd = x - node.x;
- float yd = y - node.y;
- float zd = z - node.z;
- len += std::sqrt(xd*xd + yd*yd + zd*zd);
- }
-
- return len;
- }
-
- PathNode& operator[](size_t idx) { return i_nodes[idx]; }
- PathNode const& operator[](size_t idx) const { return i_nodes[idx]; }
-
- void set(size_t idx, PathElem elem) { i_nodes[idx] = elem; }
-
- protected:
- std::deque<PathElem> i_nodes;
-};
-
-typedef Path<PathNode> SimplePath;
-
-#endif
diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
index 3648fe5cde5..9046d9e6991 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp
+++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
@@ -25,6 +25,7 @@
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
#include "CellImpl.h"
+#include "MapManager.h"
class DefenseMessageBuilder
{
@@ -48,7 +49,7 @@ class DefenseMessageBuilder
};
OPvPCapturePoint::OPvPCapturePoint(OutdoorPvP* pvp):
- m_capturePointGUID(), m_capturePoint(NULL), m_maxValue(0.0f), m_minValue(0.0f), m_maxSpeed(0),
+ m_capturePointSpawnId(), m_capturePoint(NULL), m_maxValue(0.0f), m_minValue(0.0f), m_maxSpeed(0),
m_value(0), m_team(TEAM_NEUTRAL), m_OldState(OBJECTIVESTATE_NEUTRAL),
m_State(OBJECTIVESTATE_NEUTRAL), m_neutralValuePct(0), m_PvP(pvp)
{ }
@@ -84,7 +85,7 @@ void OPvPCapturePoint::SendChangePhase()
SendUpdateWorldState(m_capturePoint->GetGOInfo()->capturePoint.worldstate3, m_neutralValuePct);
}
-void OPvPCapturePoint::AddGO(uint32 type, uint32 guid, uint32 entry)
+void OPvPCapturePoint::AddGO(uint32 type, ObjectGuid::LowType guid, uint32 entry)
{
if (!entry)
{
@@ -94,11 +95,11 @@ void OPvPCapturePoint::AddGO(uint32 type, uint32 guid, uint32 entry)
entry = data->id;
}
- m_Objects[type] = ObjectGuid(HIGHGUID_GAMEOBJECT, entry, guid);
+ m_Objects[type] = ObjectGuid(HighGuid::GameObject, entry, guid);
m_ObjectTypes[m_Objects[type]] = type;
}
-void OPvPCapturePoint::AddCre(uint32 type, uint32 guid, uint32 entry)
+void OPvPCapturePoint::AddCre(uint32 type, ObjectGuid::LowType guid, uint32 entry)
{
if (!entry)
{
@@ -108,13 +109,13 @@ void OPvPCapturePoint::AddCre(uint32 type, uint32 guid, uint32 entry)
entry = data->id;
}
- m_Creatures[type] = ObjectGuid(HIGHGUID_UNIT, entry, guid);
+ m_Creatures[type] = ObjectGuid(HighGuid::Unit, entry, guid);
m_CreatureTypes[m_Creatures[type]] = type;
}
bool OPvPCapturePoint::AddObject(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3)
{
- if (uint32 guid = sObjectMgr->AddGOData(entry, map, x, y, z, o, 0, rotation0, rotation1, rotation2, rotation3))
+ if (ObjectGuid::LowType guid = sObjectMgr->AddGOData(entry, map, x, y, z, o, 0, rotation0, rotation1, rotation2, rotation3))
{
AddGO(type, guid, entry);
return true;
@@ -125,7 +126,7 @@ bool OPvPCapturePoint::AddObject(uint32 type, uint32 entry, uint32 map, float x,
bool OPvPCapturePoint::AddCreature(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o, TeamId /*teamId = TEAM_NEUTRAL*/, uint32 spawntimedelay /*= 0*/)
{
- if (uint32 guid = sObjectMgr->AddCreatureData(entry, map, x, y, z, o, spawntimedelay))
+ if (ObjectGuid::LowType guid = sObjectMgr->AddCreatureData(entry, map, x, y, z, o, spawntimedelay))
{
AddCre(type, guid, entry);
return true;
@@ -146,8 +147,9 @@ bool OPvPCapturePoint::SetCapturePointData(uint32 entry, uint32 map, float x, fl
return false;
}
- m_capturePointGUID = ObjectGuid(HIGHGUID_GAMEOBJECT, entry, sObjectMgr->AddGOData(entry, map, x, y, z, o, 0, rotation0, rotation1, rotation2, rotation3));
- if (!m_capturePointGUID)
+ m_capturePointSpawnId = sObjectMgr->AddGOData(entry, map, x, y, z, o, 0, rotation0, rotation1, rotation2, rotation3);
+
+ if (m_capturePointSpawnId == 0)
return false;
// get the needed values from goinfo
@@ -161,24 +163,25 @@ bool OPvPCapturePoint::SetCapturePointData(uint32 entry, uint32 map, float x, fl
bool OPvPCapturePoint::DelCreature(uint32 type)
{
- if (!m_Creatures[type])
+ uint32 spawnId = m_Creatures[type];
+ if (!spawnId)
{
TC_LOG_DEBUG("outdoorpvp", "opvp creature type %u was already deleted", type);
return false;
}
- Creature* cr = HashMapHolder<Creature>::Find(m_Creatures[type]);
- if (!cr)
+ auto bounds = m_PvP->GetMap()->GetCreatureBySpawnIdStore().equal_range(spawnId);
+ for (auto itr = bounds.first; itr != bounds.second;)
{
- // can happen when closing the core
- m_Creatures[type].Clear();
- return false;
+ Creature* c = itr->second;
+ ++itr;
+ // Don't save respawn time
+ c->SetRespawnTime(0);
+ c->RemoveCorpse();
+ c->AddObjectToRemoveList();
}
+
TC_LOG_DEBUG("outdoorpvp", "deleting opvp creature type %u", type);
- uint32 guid = cr->GetDBTableGUIDLow();
- // Don't save respawn time
- cr->SetRespawnTime(0);
- cr->RemoveCorpse();
// explicit removal from map
// beats me why this is needed, but with the recent removal "cleanup" some creatures stay in the map if "properly" deleted
// so this is a big fat workaround, if AddObjectToRemoveList and DoDelayedMovesAndRemoves worked correctly, this wouldn't be needed
@@ -186,15 +189,13 @@ bool OPvPCapturePoint::DelCreature(uint32 type)
// map->Remove(cr, false);
// delete respawn time for this creature
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CREATURE_RESPAWN);
- stmt->setUInt32(0, guid);
- stmt->setUInt16(1, cr->GetMapId());
- stmt->setUInt32(2, 0); // instance id, always 0 for world maps
+ stmt->setUInt32(0, spawnId);
+ stmt->setUInt16(1, m_PvP->GetMap()->GetId()); stmt->setUInt32(2, 0); // instance id, always 0 for world maps
CharacterDatabase.Execute(stmt);
- cr->AddObjectToRemoveList();
- sObjectMgr->DeleteCreatureData(guid);
+ sObjectMgr->DeleteCreatureData(spawnId);
m_CreatureTypes[m_Creatures[type]] = 0;
- m_Creatures[type].Clear();
+ m_Creatures[type] = 0;
return true;
}
@@ -203,25 +204,26 @@ bool OPvPCapturePoint::DelObject(uint32 type)
if (!m_Objects[type])
return false;
- GameObject* obj = HashMapHolder<GameObject>::Find(m_Objects[type]);
- if (!obj)
+ uint32 spawnId = m_Objects[type];
+ auto bounds = m_PvP->GetMap()->GetGameObjectBySpawnIdStore().equal_range(spawnId);
+ for (auto itr = bounds.first; itr != bounds.second;)
{
- m_Objects[type].Clear();
- return false;
+ GameObject* go = itr->second;
+ ++itr;
+ // Don't save respawn time
+ go->SetRespawnTime(0);
+ go->Delete();
}
- uint32 guid = obj->GetDBTableGUIDLow();
- obj->SetRespawnTime(0); // not save respawn time
- obj->Delete();
- sObjectMgr->DeleteGOData(guid);
+ sObjectMgr->DeleteGOData(spawnId);
m_ObjectTypes[m_Objects[type]] = 0;
- m_Objects[type].Clear();
+ m_Objects[type] = 0;
return true;
}
bool OPvPCapturePoint::DelCapturePoint()
{
- sObjectMgr->DeleteGOData(m_capturePointGUID.GetCounter());
- m_capturePointGUID.Clear();
+ sObjectMgr->DeleteGOData(m_capturePointSpawnId);
+ m_capturePointSpawnId = 0;
if (m_capturePoint)
{
@@ -234,15 +236,30 @@ bool OPvPCapturePoint::DelCapturePoint()
void OPvPCapturePoint::DeleteSpawns()
{
- for (std::map<uint32, ObjectGuid>::iterator i = m_Objects.begin(); i != m_Objects.end(); ++i)
+ for (std::map<uint32, uint32>::iterator i = m_Objects.begin(); i != m_Objects.end(); ++i)
DelObject(i->first);
- for (std::map<uint32, ObjectGuid>::iterator i = m_Creatures.begin(); i != m_Creatures.end(); ++i)
+ for (std::map<uint32, uint32>::iterator i = m_Creatures.begin(); i != m_Creatures.end(); ++i)
DelCreature(i->first);
DelCapturePoint();
}
void OutdoorPvP::DeleteSpawns()
{
+ // Remove script from any registered gameobjects/creatures
+ for (auto itr = m_GoScriptStore.begin(); itr != m_GoScriptStore.end(); ++itr)
+ {
+ if (GameObject* go = itr->second)
+ go->ClearZoneScript();
+ }
+ m_GoScriptStore.clear();
+
+ for (auto itr = m_CreatureScriptStore.begin(); itr != m_CreatureScriptStore.end(); ++itr)
+ {
+ if (Creature* creature = itr->second)
+ creature->ClearZoneScript();
+ }
+ m_CreatureScriptStore.clear();
+
for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
{
itr->second->DeleteSpawns();
@@ -251,7 +268,7 @@ void OutdoorPvP::DeleteSpawns()
m_capturePoints.clear();
}
-OutdoorPvP::OutdoorPvP() : m_TypeId(0), m_sendUpdate(true) { }
+OutdoorPvP::OutdoorPvP() : m_TypeId(0), m_sendUpdate(true), m_map(nullptr) { }
OutdoorPvP::~OutdoorPvP()
{
@@ -511,19 +528,19 @@ bool OPvPCapturePoint::HandleCustomSpell(Player* player, uint32 /*spellId*/, Gam
return true;
}
-bool OutdoorPvP::HandleOpenGo(Player* player, ObjectGuid guid)
+bool OutdoorPvP::HandleOpenGo(Player* player, GameObject* go)
{
for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
- if (itr->second->HandleOpenGo(player, guid) >= 0)
+ if (itr->second->HandleOpenGo(player, go) >= 0)
return true;
return false;
}
-bool OutdoorPvP::HandleGossipOption(Player* player, ObjectGuid guid, uint32 id)
+bool OutdoorPvP::HandleGossipOption(Player* player, Creature* creature, uint32 id)
{
for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
- if (itr->second->HandleGossipOption(player, guid, id))
+ if (itr->second->HandleGossipOption(player, creature, id))
return true;
return false;
@@ -547,7 +564,7 @@ bool OutdoorPvP::HandleDropFlag(Player* player, uint32 id)
return false;
}
-bool OPvPCapturePoint::HandleGossipOption(Player* /*player*/, ObjectGuid /*guid*/, uint32 /*id*/)
+bool OPvPCapturePoint::HandleGossipOption(Player* /*player*/, Creature* /*guid*/, uint32 /*id*/)
{
return false;
}
@@ -562,13 +579,12 @@ bool OPvPCapturePoint::HandleDropFlag(Player* /*player*/, uint32 /*id*/)
return false;
}
-int32 OPvPCapturePoint::HandleOpenGo(Player* /*player*/, ObjectGuid guid)
+int32 OPvPCapturePoint::HandleOpenGo(Player* /*player*/, GameObject* go)
{
- std::map<ObjectGuid, uint32>::iterator itr = m_ObjectTypes.find(guid);
+ std::map<uint32, uint32>::iterator itr = m_ObjectTypes.find(go->GetSpawnId());
if (itr != m_ObjectTypes.end())
- {
return itr->second;
- }
+
return -1;
}
@@ -621,22 +637,37 @@ void OutdoorPvP::TeamApplyBuff(TeamId team, uint32 spellId, uint32 spellId2)
void OutdoorPvP::OnGameObjectCreate(GameObject* go)
{
+ GoScriptPair sp(go->GetGUID().GetCounter(), go);
+ m_GoScriptStore.insert(sp);
if (go->GetGoType() != GAMEOBJECT_TYPE_CAPTURE_POINT)
return;
- if (OPvPCapturePoint *cp = GetCapturePoint(go->GetGUID()))
+ if (OPvPCapturePoint *cp = GetCapturePoint(go->GetSpawnId()))
cp->m_capturePoint = go;
}
void OutdoorPvP::OnGameObjectRemove(GameObject* go)
{
+ m_GoScriptStore.erase(go->GetGUID().GetCounter());
+
if (go->GetGoType() != GAMEOBJECT_TYPE_CAPTURE_POINT)
return;
- if (OPvPCapturePoint *cp = GetCapturePoint(go->GetGUID()))
+ if (OPvPCapturePoint *cp = GetCapturePoint(go->GetSpawnId()))
cp->m_capturePoint = NULL;
}
+void OutdoorPvP::OnCreatureCreate(Creature* creature)
+{
+ CreatureScriptPair sp(creature->GetGUID().GetCounter(), creature);
+ m_CreatureScriptStore.insert(sp);
+}
+
+void OutdoorPvP::OnCreatureRemove(Creature* creature)
+{
+ m_CreatureScriptStore.erase(creature->GetGUID().GetCounter());
+}
+
void OutdoorPvP::SendDefenseMessage(uint32 zoneId, uint32 id)
{
DefenseMessageBuilder builder(zoneId, id);
@@ -653,3 +684,12 @@ void OutdoorPvP::BroadcastWorker(Worker& _worker, uint32 zoneId)
if (player->GetZoneId() == zoneId)
_worker(player);
}
+
+void OutdoorPvP::SetMapFromZone(uint32 zone)
+{
+ AreaTableEntry const* areaTable = GetAreaEntryByAreaID(zone);
+ ASSERT(areaTable);
+ Map* map = sMapMgr->CreateBaseMap(areaTable->mapid);
+ ASSERT(!map->Instanceable());
+ m_map = map;
+}
diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.h b/src/server/game/OutdoorPvP/OutdoorPvP.h
index d5839956e32..4a423a8da5b 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvP.h
+++ b/src/server/game/OutdoorPvP/OutdoorPvP.h
@@ -109,7 +109,7 @@ class OPvPCapturePoint
virtual bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go);
- virtual int32 HandleOpenGo(Player* player, ObjectGuid guid);
+ virtual int32 HandleOpenGo(Player* player, GameObject* go);
// returns true if the state of the objective has changed, in this case, the OutdoorPvP must send a world state ui update.
virtual bool Update(uint32 diff);
@@ -120,7 +120,7 @@ class OPvPCapturePoint
virtual void SendChangePhase();
- virtual bool HandleGossipOption(Player* player, ObjectGuid guid, uint32 gossipid);
+ virtual bool HandleGossipOption(Player* player, Creature* guid, uint32 gossipid);
virtual bool CanTalkTo(Player* player, Creature* c, GossipMenuItems const& gso);
@@ -128,12 +128,12 @@ class OPvPCapturePoint
virtual void DeleteSpawns();
- ObjectGuid m_capturePointGUID;
+ ObjectGuid::LowType m_capturePointSpawnId;
GameObject* m_capturePoint;
- void AddGO(uint32 type, uint32 guid, uint32 entry = 0);
- void AddCre(uint32 type, uint32 guid, uint32 entry = 0);
+ void AddGO(uint32 type, ObjectGuid::LowType guid, uint32 entry = 0);
+ void AddCre(uint32 type, ObjectGuid::LowType guid, uint32 entry = 0);
bool SetCapturePointData(uint32 entry, uint32 map, float x, float y, float z, float o = 0,
float rotation0 = 0, float rotation1 = 0, float rotation2 = 0, float rotation3 = 0);
@@ -178,10 +178,10 @@ class OPvPCapturePoint
// map to store the various gameobjects and creatures spawned by the objective
// type, guid
- std::map<uint32, ObjectGuid> m_Objects;
- std::map<uint32, ObjectGuid> m_Creatures;
- std::map<ObjectGuid, uint32> m_ObjectTypes;
- std::map<ObjectGuid, uint32> m_CreatureTypes;
+ std::map<uint32, ObjectGuid::LowType> m_Objects;
+ std::map<uint32, ObjectGuid::LowType> m_Creatures;
+ std::map<ObjectGuid::LowType, uint32> m_ObjectTypes;
+ std::map<ObjectGuid::LowType, uint32> m_CreatureTypes;
};
// base class for specific outdoor pvp handlers
@@ -200,7 +200,9 @@ class OutdoorPvP : public ZoneScript
// deletes all gos/creatures spawned by the pvp
void DeleteSpawns();
- typedef std::map<ObjectGuid/*guid*/, OPvPCapturePoint*> OPvPCapturePointMap;
+ typedef std::map<ObjectGuid::LowType/*spawnId*/, OPvPCapturePoint*> OPvPCapturePointMap;
+ typedef std::pair<ObjectGuid::LowType, GameObject*> GoScriptPair;
+ typedef std::pair<ObjectGuid::LowType, Creature*> CreatureScriptPair;
virtual void FillInitialWorldStates(WorldPacket & /*data*/) { }
@@ -211,14 +213,15 @@ class OutdoorPvP : public ZoneScript
virtual bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go);
// called on go use
- virtual bool HandleOpenGo(Player* player, ObjectGuid guid);
+ virtual bool HandleOpenGo(Player* player, GameObject* go);
// setup stuff
virtual bool SetupOutdoorPvP() {return true;}
void OnGameObjectCreate(GameObject* go) override;
void OnGameObjectRemove(GameObject* go) override;
- void OnCreatureCreate(Creature*) override { }
+ void OnCreatureCreate(Creature*) override;
+ void OnCreatureRemove(Creature*) override;
// send world state update to all players present
void SendUpdateWorldState(uint32 field, uint32 value);
@@ -240,7 +243,7 @@ class OutdoorPvP : public ZoneScript
virtual bool HandleDropFlag(Player* player, uint32 spellId);
- virtual bool HandleGossipOption(Player* player, ObjectGuid guid, uint32 gossipid);
+ virtual bool HandleGossipOption(Player* player, Creature* creature, uint32 gossipid);
virtual bool CanTalkTo(Player* player, Creature* c, GossipMenuItems const& gso);
@@ -261,6 +264,8 @@ class OutdoorPvP : public ZoneScript
void SendDefenseMessage(uint32 zoneId, uint32 id);
+ Map* GetMap() const { return m_map; }
+
protected:
// the map of the objectives belonging to this outdoorpvp
@@ -284,10 +289,10 @@ class OutdoorPvP : public ZoneScript
void AddCapturePoint(OPvPCapturePoint* cp)
{
- m_capturePoints[cp->m_capturePointGUID] = cp;
+ m_capturePoints[cp->m_capturePointSpawnId] = cp;
}
- OPvPCapturePoint * GetCapturePoint(ObjectGuid guid) const
+ OPvPCapturePoint * GetCapturePoint(ObjectGuid::LowType guid) const
{
OutdoorPvP::OPvPCapturePointMap::const_iterator itr = m_capturePoints.find(guid);
if (itr != m_capturePoints.end())
@@ -303,6 +308,13 @@ class OutdoorPvP : public ZoneScript
template<class Worker>
void BroadcastWorker(Worker& _worker, uint32 zoneId);
+
+ // Hack to store map because this code is just shit
+ void SetMapFromZone(uint32 zone);
+ std::map<ObjectGuid::LowType, GameObject*> m_GoScriptStore;
+ std::map<ObjectGuid::LowType, Creature*> m_CreatureScriptStore;
+
+ Map* m_map;
};
#endif /*OUTDOOR_PVP_H_*/
diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
index 4d7b80da157..37a380bf576 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
+++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
@@ -71,7 +71,7 @@ void OutdoorPvPMgr::InitOutdoorPvP()
OutdoorPvPData* data = new OutdoorPvPData();
OutdoorPvPTypes realTypeId = OutdoorPvPTypes(typeId);
data->TypeId = realTypeId;
- data->ScriptId = sObjectMgr->GetScriptId(fields[1].GetCString());
+ data->ScriptId = sObjectMgr->GetScriptId(fields[1].GetString());
m_OutdoorPvPDatas[realTypeId] = data;
++count;
@@ -123,7 +123,7 @@ void OutdoorPvPMgr::HandlePlayerEnterZone(Player* player, uint32 zoneid)
return;
itr->second->HandlePlayerEnterZone(player, zoneid);
- TC_LOG_DEBUG("outdoorpvp", "Player %u entered outdoorpvp id %u", player->GetGUIDLow(), itr->second->GetTypeId());
+ TC_LOG_DEBUG("outdoorpvp", "Player %u entered outdoorpvp id %u", player->GetGUID().GetCounter(), itr->second->GetTypeId());
}
void OutdoorPvPMgr::HandlePlayerLeaveZone(Player* player, uint32 zoneid)
@@ -137,7 +137,7 @@ void OutdoorPvPMgr::HandlePlayerLeaveZone(Player* player, uint32 zoneid)
return;
itr->second->HandlePlayerLeaveZone(player, zoneid);
- TC_LOG_DEBUG("outdoorpvp", "Player %u left outdoorpvp id %u", player->GetGUIDLow(), itr->second->GetTypeId());
+ TC_LOG_DEBUG("outdoorpvp", "Player %u left outdoorpvp id %u", player->GetGUID().GetCounter(), itr->second->GetTypeId());
}
OutdoorPvP* OutdoorPvPMgr::GetOutdoorPvPToZoneId(uint32 zoneid)
@@ -181,21 +181,21 @@ ZoneScript* OutdoorPvPMgr::GetZoneScript(uint32 zoneId)
return NULL;
}
-bool OutdoorPvPMgr::HandleOpenGo(Player* player, ObjectGuid guid)
+bool OutdoorPvPMgr::HandleOpenGo(Player* player, GameObject* go)
{
for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
{
- if ((*itr)->HandleOpenGo(player, guid))
+ if ((*itr)->HandleOpenGo(player, go))
return true;
}
return false;
}
-void OutdoorPvPMgr::HandleGossipOption(Player* player, ObjectGuid guid, uint32 gossipid)
+void OutdoorPvPMgr::HandleGossipOption(Player* player, Creature* creature, uint32 gossipid)
{
for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
{
- if ((*itr)->HandleGossipOption(player, guid, gossipid))
+ if ((*itr)->HandleGossipOption(player, creature, gossipid))
return;
}
}
diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
index 4f03dd37fac..542aad0ef0d 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
+++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
@@ -70,7 +70,7 @@ class OutdoorPvPMgr
bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go);
// handle custom go if registered
- bool HandleOpenGo(Player* player, ObjectGuid guid);
+ bool HandleOpenGo(Player* player, GameObject* go);
ZoneScript* GetZoneScript(uint32 zoneId);
@@ -78,7 +78,7 @@ class OutdoorPvPMgr
void Update(uint32 diff);
- void HandleGossipOption(Player* player, ObjectGuid guid, uint32 gossipid);
+ void HandleGossipOption(Player* player, Creature* creature, uint32 gossipid);
bool CanTalkTo(Player* player, Creature* creature, GossipMenuItems const& gso);
diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp
index 3f561539917..1e7826f280b 100644
--- a/src/server/game/Pools/PoolMgr.cpp
+++ b/src/server/game/Pools/PoolMgr.cpp
@@ -184,7 +184,7 @@ PoolObject* PoolGroup<T>::RollOne(ActivePoolData& spawns, uint32 triggerFrom)
// If no guid is passed, the pool is just removed (event end case)
// If guid is filled, cache will be used and no removal will occur, it just fill the cache
template<class T>
-void PoolGroup<T>::DespawnObject(ActivePoolData& spawns, uint32 guid)
+void PoolGroup<T>::DespawnObject(ActivePoolData& spawns, ObjectGuid::LowType guid)
{
for (size_t i=0; i < EqualChanced.size(); ++i)
{
@@ -215,27 +215,45 @@ void PoolGroup<T>::DespawnObject(ActivePoolData& spawns, uint32 guid)
// Method that is actualy doing the removal job on one creature
template<>
-void PoolGroup<Creature>::Despawn1Object(uint32 guid)
+void PoolGroup<Creature>::Despawn1Object(ObjectGuid::LowType guid)
{
if (CreatureData const* data = sObjectMgr->GetCreatureData(guid))
{
sObjectMgr->RemoveCreatureFromGrid(guid, data);
- if (Creature* creature = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_UNIT, data->id, guid), (Creature*)NULL))
- creature->AddObjectToRemoveList();
+ Map* map = sMapMgr->CreateBaseMap(data->mapid);
+ if (!map->Instanceable())
+ {
+ auto creatureBounds = map->GetCreatureBySpawnIdStore().equal_range(guid);
+ for (auto itr = creatureBounds.first; itr != creatureBounds.second;)
+ {
+ Creature* creature = itr->second;
+ ++itr;
+ creature->AddObjectToRemoveList();
+ }
+ }
}
}
// Same on one gameobject
template<>
-void PoolGroup<GameObject>::Despawn1Object(uint32 guid)
+void PoolGroup<GameObject>::Despawn1Object(ObjectGuid::LowType guid)
{
if (GameObjectData const* data = sObjectMgr->GetGOData(guid))
{
sObjectMgr->RemoveGameobjectFromGrid(guid, data);
- if (GameObject* pGameobject = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_GAMEOBJECT, data->id, guid), (GameObject*)NULL))
- pGameobject->AddObjectToRemoveList();
+ Map* map = sMapMgr->CreateBaseMap(data->mapid);
+ if (!map->Instanceable())
+ {
+ auto gameobjectBounds = map->GetGameObjectBySpawnIdStore().equal_range(guid);
+ for (auto itr = gameobjectBounds.first; itr != gameobjectBounds.second;)
+ {
+ GameObject* go = itr->second;
+ ++itr;
+ go->AddObjectToRemoveList();
+ }
+ }
}
}
@@ -507,20 +525,16 @@ void PoolGroup<Quest>::SpawnObject(ActivePoolData& spawns, uint32 limit, uint32
// Method that does the respawn job on the specified creature
template <>
-void PoolGroup<Creature>::ReSpawn1Object(PoolObject* obj)
+void PoolGroup<Creature>::ReSpawn1Object(PoolObject* /*obj*/)
{
- if (CreatureData const* data = sObjectMgr->GetCreatureData(obj->guid))
- if (Creature* creature = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_UNIT, data->id, obj->guid), (Creature*)NULL))
- creature->GetMap()->AddToMap(creature);
+ // Creature is still on map, nothing to do
}
// Method that does the respawn job on the specified gameobject
template <>
-void PoolGroup<GameObject>::ReSpawn1Object(PoolObject* obj)
+void PoolGroup<GameObject>::ReSpawn1Object(PoolObject* /*obj*/)
{
- if (GameObjectData const* data = sObjectMgr->GetGOData(obj->guid))
- if (GameObject* pGameobject = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_GAMEOBJECT, data->id, obj->guid), (GameObject*)NULL))
- pGameobject->GetMap()->AddToMap(pGameobject);
+ // GameObject is still on map, nothing to do
}
// Nothing to do for a child Pool
@@ -607,7 +621,7 @@ void PoolMgr::LoadFromDB()
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
uint32 pool_id = fields[1].GetUInt32();
float chance = fields[2].GetFloat();
@@ -663,7 +677,7 @@ void PoolMgr::LoadFromDB()
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
uint32 pool_id = fields[1].GetUInt32();
float chance = fields[2].GetFloat();
diff --git a/src/server/game/Pools/PoolMgr.h b/src/server/game/Pools/PoolMgr.h
index 4ffcbe1faac..e165f9bd397 100644
--- a/src/server/game/Pools/PoolMgr.h
+++ b/src/server/game/Pools/PoolMgr.h
@@ -31,16 +31,16 @@ struct PoolTemplateData
struct PoolObject
{
- uint32 guid;
+ ObjectGuid::LowType guid;
float chance;
- PoolObject(uint32 _guid, float _chance) : guid(_guid), chance(std::fabs(_chance)) { }
+ PoolObject(ObjectGuid::LowType _guid, float _chance) : guid(_guid), chance(std::fabs(_chance)) { }
};
class Pool // for Pool of Pool case
{
};
-typedef std::set<uint32> ActivePoolObjects;
+typedef std::set<ObjectGuid::LowType> ActivePoolObjects;
typedef std::map<uint32, uint32> ActivePoolPools;
class ActivePoolData
@@ -77,8 +77,8 @@ class PoolGroup
void AddEntry(PoolObject& poolitem, uint32 maxentries);
bool CheckPool() const;
PoolObject* RollOne(ActivePoolData& spawns, uint32 triggerFrom);
- void DespawnObject(ActivePoolData& spawns, uint32 guid=0);
- void Despawn1Object(uint32 guid);
+ void DespawnObject(ActivePoolData& spawns, ObjectGuid::LowType guid=0);
+ void Despawn1Object(ObjectGuid::LowType guid);
void SpawnObject(ActivePoolData& spawns, uint32 limit, uint32 triggerFrom);
void Spawn1Object(PoolObject* obj);
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index d1dcfd0f693..a3f662f2ade 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -29,21 +29,21 @@ Quest::Quest(Field* questRecord)
ZoneOrSort = questRecord[4].GetInt16();
Type = questRecord[5].GetUInt16();
SuggestedPlayers = questRecord[6].GetUInt8();
- LimitTime = questRecord[7].GetUInt32();
- RequiredRaces = questRecord[8].GetUInt16();
+ TimeAllowed = questRecord[7].GetUInt32();
+ AllowableRaces = questRecord[8].GetUInt16();
RequiredFactionId1 = questRecord[9].GetUInt16();
RequiredFactionId2 = questRecord[10].GetUInt16();
RequiredFactionValue1 = questRecord[11].GetInt32();
RequiredFactionValue2 = questRecord[12].GetInt32();
- NextQuestIdChain = questRecord[13].GetUInt32();
- RewardXPId = questRecord[14].GetUInt8();
- RewardOrRequiredMoney = questRecord[15].GetInt32();
- RewardMoneyMaxLevel = questRecord[16].GetUInt32();
- RewardSpell = questRecord[17].GetUInt32();
- RewardSpellCast = questRecord[18].GetInt32();
+ RewardNextQuest = questRecord[13].GetUInt32();
+ RewardXPDifficulty = questRecord[14].GetUInt8();
+ RewardMoney = questRecord[15].GetInt32();
+ RewardBonusMoney = questRecord[16].GetUInt32();
+ RewardDisplaySpell = questRecord[17].GetUInt32();
+ RewardSpell = questRecord[18].GetInt32();
RewardHonor = questRecord[19].GetUInt32();
- RewardHonorMultiplier = questRecord[20].GetFloat();
- SourceItemId = questRecord[21].GetUInt32();
+ RewardKillHonor = questRecord[20].GetFloat();
+ StartItem = questRecord[21].GetUInt32();
Flags = questRecord[22].GetUInt32();
RewardTitleId = questRecord[23].GetUInt8();
RequiredPlayerKills = questRecord[24].GetUInt8();
@@ -51,77 +51,61 @@ Quest::Quest(Field* questRecord)
RewardArenaPoints = questRecord[26].GetUInt16();
for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
- RewardItemId[i] = questRecord[27+i].GetUInt32();
-
- for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
- RewardItemIdCount[i] = questRecord[31+i].GetUInt16();
-
- for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
- RewardChoiceItemId[i] = questRecord[35+i].GetUInt32();
+ {
+ RewardItemId[i] = questRecord[27+i*2].GetUInt32();
+ RewardItemIdCount[i] = questRecord[28+i*2].GetUInt16();
+ }
for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
- RewardChoiceItemCount[i] = questRecord[41+i].GetUInt16();
-
- for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
- RewardFactionId[i] = questRecord[47+i].GetUInt16();
-
- for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
- RewardFactionValueId[i] = questRecord[52+i].GetInt32();
+ {
+ RewardChoiceItemId[i] = questRecord[35+i*2].GetUInt32();
+ RewardChoiceItemCount[i] = questRecord[36+i*2].GetUInt16();
+ }
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
- RewardFactionValueIdOverride[i] = questRecord[57+i].GetInt32();
+ {
+ RewardFactionId[i] = questRecord[47+i*3].GetUInt16();
+ RewardFactionValueId[i] = questRecord[48+i*3].GetInt32();
+ RewardFactionValueIdOverride[i] = questRecord[49+i*3].GetInt32();
+ }
- PointMapId = questRecord[62].GetUInt16();
- PointX = questRecord[63].GetFloat();
- PointY = questRecord[64].GetFloat();
- PointOption = questRecord[65].GetUInt32();
+ POIContinent = questRecord[62].GetUInt16();
+ POIx = questRecord[63].GetFloat();
+ POIy = questRecord[64].GetFloat();
+ POIPriority = questRecord[65].GetUInt32();
Title = questRecord[66].GetString();
Objectives = questRecord[67].GetString();
Details = questRecord[68].GetString();
- EndText = questRecord[69].GetString();
- OfferRewardText = questRecord[70].GetString();
- RequestItemsText = questRecord[71].GetString();
- CompletedText = questRecord[72].GetString();
+ AreaDescription = questRecord[69].GetString();
+ CompletedText = questRecord[70].GetString();
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
- RequiredNpcOrGo[i] = questRecord[73+i].GetInt32();
+ RequiredNpcOrGo[i] = questRecord[71+i].GetInt32();
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
- RequiredNpcOrGoCount[i] = questRecord[77+i].GetUInt16();
+ RequiredNpcOrGoCount[i] = questRecord[75+i].GetUInt16();
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
- RequiredSourceItemId[i] = questRecord[81+i].GetUInt32();
+ ItemDrop[i] = questRecord[79+i].GetUInt32();
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
- RequiredSourceItemCount[i] = questRecord[85+i].GetUInt16();
+ ItemDropQuantity[i] = questRecord[83+i].GetUInt16();
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
- RequiredItemId[i] = questRecord[89+i].GetUInt32();
+ RequiredItemId[i] = questRecord[87+i].GetUInt32();
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
- RequiredItemCount[i] = questRecord[95+i].GetUInt16();
+ RequiredItemCount[i] = questRecord[93+i].GetUInt16();
- // int8 Unknown0 = questRecord[101].GetUInt8();
+ // int8 Unknown0 = questRecord[99].GetUInt8();
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
- ObjectiveText[i] = questRecord[102+i].GetString();
-
- for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
- DetailsEmote[i] = questRecord[106+i].GetUInt16();
+ ObjectiveText[i] = questRecord[100+i].GetString();
- for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
- DetailsEmoteDelay[i] = questRecord[110+i].GetUInt32();
+ EmoteOnIncomplete = 0;
+ EmoteOnComplete = 0;
- EmoteOnIncomplete = questRecord[114].GetUInt16();
- EmoteOnComplete = questRecord[115].GetUInt16();
-
- for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
- OfferRewardEmote[i] = questRecord[116+i].GetInt16();
-
- for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
- OfferRewardEmoteDelay[i] = questRecord[120+i].GetInt32();
-
- //int32 VerifiedBuild = questRecord[124].GetInt32();
+ //int32 VerifiedBuild = questRecord[104].GetInt32();
_reqItemsCount = 0;
_reqCreatureOrGOcount = 0;
@@ -143,6 +127,45 @@ Quest::Quest(Field* questRecord)
for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
if (RewardChoiceItemId[i])
++_rewChoiceItemsCount;
+
+ for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
+ DetailsEmote[i] = 0;
+
+ for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
+ DetailsEmoteDelay[i] = 0;
+
+ for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
+ OfferRewardEmote[i] = 0;
+
+ for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
+ OfferRewardEmoteDelay[i] = 0;
+}
+
+void Quest::LoadQuestDetails(Field* fields)
+{
+ for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
+ DetailsEmote[i] = fields[1+i].GetUInt16();
+
+ for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
+ DetailsEmoteDelay[i] = fields[5+i].GetUInt32();
+}
+
+void Quest::LoadQuestRequestItems(Field* fields)
+{
+ EmoteOnComplete = fields[1].GetUInt16();
+ EmoteOnIncomplete = fields[2].GetUInt16();
+ RequestItemsText = fields[3].GetString();
+}
+
+void Quest::LoadQuestOfferReward(Field* fields)
+{
+ for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
+ OfferRewardEmote[i] = fields[1+i].GetUInt16();
+
+ for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
+ OfferRewardEmoteDelay[i] = fields[5+i].GetUInt32();
+
+ OfferRewardText = fields[9].GetString();
}
void Quest::LoadQuestTemplateAddon(Field* fields)
@@ -161,7 +184,7 @@ void Quest::LoadQuestTemplateAddon(Field* fields)
RequiredMaxRepFaction = fields[12].GetUInt16();
RequiredMinRepValue = fields[13].GetInt32();
RequiredMaxRepValue = fields[14].GetInt32();
- SourceItemIdCount = fields[15].GetUInt8();
+ StartItemCount = fields[15].GetUInt8();
SpecialFlags = fields[16].GetUInt8();
if (SpecialFlags & QUEST_SPECIAL_FLAGS_AUTO_ACCEPT)
@@ -183,7 +206,7 @@ uint32 Quest::XPValue(Player* player) const
else if (diffFactor > 10)
diffFactor = 10;
- uint32 xp = diffFactor * xpentry->Exp[RewardXPId] / 10;
+ uint32 xp = diffFactor * xpentry->Exp[RewardXPDifficulty] / 10;
if (xp <= 100)
xp = 5 * ((xp + 2) / 5);
else if (xp <= 500)
@@ -202,11 +225,11 @@ uint32 Quest::XPValue(Player* player) const
int32 Quest::GetRewOrReqMoney() const
{
// RequiredMoney: the amount is the negative copper sum.
- if (RewardOrRequiredMoney <= 0)
- return RewardOrRequiredMoney;
+ if (RewardMoney <= 0)
+ return RewardMoney;
// RewardMoney: the positive amount
- return int32(RewardOrRequiredMoney * sWorld->getRate(RATE_MONEY_QUEST));
+ return int32(RewardMoney * sWorld->getRate(RATE_MONEY_QUEST));
}
uint32 Quest::GetRewMoneyMaxLevel() const
@@ -216,7 +239,7 @@ uint32 Quest::GetRewMoneyMaxLevel() const
return 0;
// Else, return the rewarded copper sum modified by the rate
- return uint32(RewardMoneyMaxLevel * sWorld->getRate(RATE_MONEY_MAX_LEVEL_QUEST));
+ return uint32(RewardBonusMoney * sWorld->getRate(RATE_MONEY_MAX_LEVEL_QUEST));
}
bool Quest::IsAutoAccept() const
diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h
index fdfb2a8e8b9..91b4a3181f5 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -182,7 +182,7 @@ struct QuestLocale
StringVector Objectives;
StringVector OfferRewardText;
StringVector RequestItemsText;
- StringVector EndText;
+ StringVector AreaDescription;
StringVector CompletedText;
std::vector< StringVector > ObjectiveText;
};
@@ -195,6 +195,9 @@ class Quest
friend class ObjectMgr;
public:
Quest(Field* questRecord);
+ void LoadQuestDetails(Field* fields);
+ void LoadQuestRequestItems(Field* fields);
+ void LoadQuestOfferReward(Field* fields);
void LoadQuestTemplateAddon(Field* fields);
uint32 XPValue(Player* player) const;
@@ -214,7 +217,7 @@ class Quest
int32 GetQuestLevel() const { return Level; }
uint32 GetType() const { return Type; }
uint32 GetRequiredClasses() const { return RequiredClasses; }
- uint32 GetRequiredRaces() const { return RequiredRaces; }
+ uint32 GetAllowableRaces() const { return AllowableRaces; }
uint32 GetRequiredSkill() const { return RequiredSkillId; }
uint32 GetRequiredSkillValue() const { return RequiredSkillPoints; }
uint32 GetRepObjectiveFaction() const { return RequiredFactionId1; }
@@ -226,38 +229,38 @@ class Quest
uint32 GetRequiredMaxRepFaction() const { return RequiredMaxRepFaction; }
int32 GetRequiredMaxRepValue() const { return RequiredMaxRepValue; }
uint32 GetSuggestedPlayers() const { return SuggestedPlayers; }
- uint32 GetLimitTime() const { return LimitTime; }
+ uint32 GetTimeAllowed() const { return TimeAllowed; }
int32 GetPrevQuestId() const { return PrevQuestId; }
int32 GetNextQuestId() const { return NextQuestId; }
int32 GetExclusiveGroup() const { return ExclusiveGroup; }
- uint32 GetNextQuestInChain() const { return NextQuestIdChain; }
+ uint32 GetNextQuestInChain() const { return RewardNextQuest; }
uint32 GetCharTitleId() const { return RewardTitleId; }
uint32 GetPlayersSlain() const { return RequiredPlayerKills; }
uint32 GetBonusTalents() const { return RewardTalents; }
int32 GetRewArenaPoints() const {return RewardArenaPoints; }
- uint32 GetXPId() const { return RewardXPId; }
- uint32 GetSrcItemId() const { return SourceItemId; }
- uint32 GetSrcItemCount() const { return SourceItemIdCount; }
+ uint32 GetXPId() const { return RewardXPDifficulty; }
+ uint32 GetSrcItemId() const { return StartItem; }
+ uint32 GetSrcItemCount() const { return StartItemCount; }
uint32 GetSrcSpell() const { return SourceSpellid; }
std::string const& GetTitle() const { return Title; }
std::string const& GetDetails() const { return Details; }
std::string const& GetObjectives() const { return Objectives; }
std::string const& GetOfferRewardText() const { return OfferRewardText; }
std::string const& GetRequestItemsText() const { return RequestItemsText; }
- std::string const& GetEndText() const { return EndText; }
+ std::string const& GetAreaDescription() const { return AreaDescription; }
std::string const& GetCompletedText() const { return CompletedText; }
int32 GetRewOrReqMoney() const;
uint32 GetRewHonorAddition() const { return RewardHonor; }
- float GetRewHonorMultiplier() const { return RewardHonorMultiplier; }
+ float GetRewHonorMultiplier() const { return RewardKillHonor; }
uint32 GetRewMoneyMaxLevel() const; // use in XP calculation at client
- uint32 GetRewSpell() const { return RewardSpell; }
- int32 GetRewSpellCast() const { return RewardSpellCast; }
+ uint32 GetRewSpell() const { return RewardDisplaySpell; }
+ int32 GetRewSpellCast() const { return RewardSpell; }
uint32 GetRewMailTemplateId() const { return RewardMailTemplateId; }
uint32 GetRewMailDelaySecs() const { return RewardMailDelay; }
- uint32 GetPointMapId() const { return PointMapId; }
- float GetPointX() const { return PointX; }
- float GetPointY() const { return PointY; }
- uint32 GetPointOpt() const { return PointOption; }
+ uint32 GetPOIContinent() const { return POIContinent; }
+ float GetPOIx() const { return POIx; }
+ float GetPOIy() const { return POIy; }
+ uint32 GetPointOpt() const { return POIPriority; }
uint32 GetIncompleteEmote() const { return EmoteOnIncomplete; }
uint32 GetCompleteEmote() const { return EmoteOnComplete; }
bool IsRepeatable() const { return SpecialFlags & QUEST_SPECIAL_FLAGS_REPEATABLE; }
@@ -278,8 +281,8 @@ class Quest
std::string ObjectiveText[QUEST_OBJECTIVES_COUNT];
uint32 RequiredItemId[QUEST_ITEM_OBJECTIVES_COUNT];
uint32 RequiredItemCount[QUEST_ITEM_OBJECTIVES_COUNT];
- uint32 RequiredSourceItemId[QUEST_SOURCE_ITEM_IDS_COUNT];
- uint32 RequiredSourceItemCount[QUEST_SOURCE_ITEM_IDS_COUNT];
+ uint32 ItemDrop[QUEST_SOURCE_ITEM_IDS_COUNT];
+ uint32 ItemDropQuantity[QUEST_SOURCE_ITEM_IDS_COUNT];
int32 RequiredNpcOrGo[QUEST_OBJECTIVES_COUNT]; // >0 Creature <0 Gameobject
uint32 RequiredNpcOrGoCount[QUEST_OBJECTIVES_COUNT];
uint32 RewardChoiceItemId[QUEST_REWARD_CHOICES_COUNT];
@@ -319,38 +322,38 @@ class Quest
uint32 MinLevel;
int32 Level;
uint32 Type;
- uint32 RequiredRaces;
+ uint32 AllowableRaces;
uint32 RequiredFactionId1;
int32 RequiredFactionValue1;
uint32 RequiredFactionId2;
int32 RequiredFactionValue2;
uint32 SuggestedPlayers;
- uint32 LimitTime;
+ uint32 TimeAllowed;
uint32 Flags;
uint32 RewardTitleId;
uint32 RequiredPlayerKills;
uint32 RewardTalents;
int32 RewardArenaPoints;
- uint32 NextQuestIdChain;
- uint32 RewardXPId;
- uint32 SourceItemId;
+ uint32 RewardNextQuest;
+ uint32 RewardXPDifficulty;
+ uint32 StartItem;
std::string Title;
std::string Details;
std::string Objectives;
std::string OfferRewardText;
std::string RequestItemsText;
- std::string EndText;
+ std::string AreaDescription;
std::string CompletedText;
uint32 RewardHonor;
- float RewardHonorMultiplier;
- int32 RewardOrRequiredMoney;
- uint32 RewardMoneyMaxLevel;
- uint32 RewardSpell;
- int32 RewardSpellCast;
- uint32 PointMapId;
- float PointX;
- float PointY;
- uint32 PointOption;
+ float RewardKillHonor;
+ int32 RewardMoney;
+ uint32 RewardBonusMoney;
+ uint32 RewardDisplaySpell;
+ int32 RewardSpell;
+ uint32 POIContinent;
+ float POIx;
+ float POIy;
+ uint32 POIPriority;
uint32 EmoteOnIncomplete;
uint32 EmoteOnComplete;
@@ -369,7 +372,7 @@ class Quest
int32 RequiredMinRepValue = 0;
uint32 RequiredMaxRepFaction = 0;
int32 RequiredMaxRepValue = 0;
- uint32 SourceItemIdCount = 0;
+ uint32 StartItemCount = 0;
uint32 SpecialFlags = 0; // custom flags, not sniffed/WDB
};
diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp
index a3e458503d6..a4065fa6f82 100644
--- a/src/server/game/Reputation/ReputationMgr.cpp
+++ b/src/server/game/Reputation/ReputationMgr.cpp
@@ -512,7 +512,7 @@ void ReputationMgr::LoadFromDB(PreparedQueryResult result)
// Set initial reputations (so everything is nifty before DB data load)
Initialize();
- //QueryResult* result = CharacterDatabase.PQuery("SELECT faction, standing, flags FROM character_reputation WHERE guid = '%u'", GetGUIDLow());
+ //QueryResult* result = CharacterDatabase.PQuery("SELECT faction, standing, flags FROM character_reputation WHERE guid = '%u'", GetGUID().GetCounter());
if (result)
{
@@ -574,12 +574,12 @@ void ReputationMgr::SaveToDB(SQLTransaction& trans)
if (itr->second.needSave)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_REPUTATION_BY_FACTION);
- stmt->setUInt32(0, _player->GetGUIDLow());
+ stmt->setUInt32(0, _player->GetGUID().GetCounter());
stmt->setUInt16(1, uint16(itr->second.ID));
trans->Append(stmt);
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_REPUTATION_BY_FACTION);
- stmt->setUInt32(0, _player->GetGUIDLow());
+ stmt->setUInt32(0, _player->GetGUID().GetCounter());
stmt->setUInt16(1, uint16(itr->second.ID));
stmt->setInt32(2, itr->second.Standing);
stmt->setUInt16(3, uint16(itr->second.Flags));
diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp
index f5c4375712c..63006bc6ed6 100644
--- a/src/server/game/Scripting/MapScripts.cpp
+++ b/src/server/game/Scripting/MapScripts.cpp
@@ -114,8 +114,8 @@ inline Player* Map::_GetScriptPlayerSourceOrTarget(Object* source, Object* targe
if (!player)
TC_LOG_ERROR("scripts", "%s neither source nor target object is player (source: TypeId: %u, Entry: %u, GUID: %u; target: TypeId: %u, Entry: %u, GUID: %u), skipping.",
scriptInfo->GetDebugInfo().c_str(),
- source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUIDLow() : 0,
- target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUIDLow() : 0);
+ source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUID().GetCounter() : 0,
+ target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUID().GetCounter() : 0);
}
return player;
}
@@ -147,8 +147,8 @@ inline Creature* Map::_GetScriptCreatureSourceOrTarget(Object* source, Object* t
if (!creature)
TC_LOG_ERROR("scripts", "%s neither source nor target are creatures (source: TypeId: %u, Entry: %u, GUID: %u; target: TypeId: %u, Entry: %u, GUID: %u), skipping.",
scriptInfo->GetDebugInfo().c_str(),
- source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUIDLow() : 0,
- target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUIDLow() : 0);
+ source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUID().GetCounter() : 0,
+ target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUID().GetCounter() : 0);
}
return creature;
}
@@ -160,7 +160,7 @@ inline Unit* Map::_GetScriptUnit(Object* obj, bool isSource, const ScriptInfo* s
TC_LOG_ERROR("scripts", "%s %s object is NULL.", scriptInfo->GetDebugInfo().c_str(), isSource ? "source" : "target");
else if (!obj->isType(TYPEMASK_UNIT))
TC_LOG_ERROR("scripts", "%s %s object is not unit (TypeId: %u, Entry: %u, GUID: %u), skipping.",
- scriptInfo->GetDebugInfo().c_str(), isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUIDLow());
+ scriptInfo->GetDebugInfo().c_str(), isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUID().GetCounter());
else
{
unit = obj->ToUnit();
@@ -181,7 +181,7 @@ inline Player* Map::_GetScriptPlayer(Object* obj, bool isSource, const ScriptInf
player = obj->ToPlayer();
if (!player)
TC_LOG_ERROR("scripts", "%s %s object is not a player (TypeId: %u, Entry: %u, GUID: %u).",
- scriptInfo->GetDebugInfo().c_str(), isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUIDLow());
+ scriptInfo->GetDebugInfo().c_str(), isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUID().GetCounter());
}
return player;
}
@@ -196,7 +196,7 @@ inline Creature* Map::_GetScriptCreature(Object* obj, bool isSource, const Scrip
creature = obj->ToCreature();
if (!creature)
TC_LOG_ERROR("scripts", "%s %s object is not a creature (TypeId: %u, Entry: %u, GUID: %u).", scriptInfo->GetDebugInfo().c_str(),
- isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUIDLow());
+ isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUID().GetCounter());
}
return creature;
}
@@ -212,7 +212,7 @@ inline WorldObject* Map::_GetScriptWorldObject(Object* obj, bool isSource, const
pWorldObject = dynamic_cast<WorldObject*>(obj);
if (!pWorldObject)
TC_LOG_ERROR("scripts", "%s %s object is not a world object (TypeId: %u, Entry: %u, GUID: %u).",
- scriptInfo->GetDebugInfo().c_str(), isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUIDLow());
+ scriptInfo->GetDebugInfo().c_str(), isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUID().GetCounter());
}
return pWorldObject;
}
@@ -220,7 +220,7 @@ inline WorldObject* Map::_GetScriptWorldObject(Object* obj, bool isSource, const
inline void Map::_ScriptProcessDoor(Object* source, Object* target, const ScriptInfo* scriptInfo) const
{
bool bOpen = false;
- uint32 guid = scriptInfo->ToggleDoor.GOGuid;
+ ObjectGuid::LowType guid = scriptInfo->ToggleDoor.GOGuid;
int32 nTimeToToggle = std::max(15, int32(scriptInfo->ToggleDoor.ResetDelay));
switch (scriptInfo->command)
{
@@ -236,13 +236,13 @@ inline void Map::_ScriptProcessDoor(Object* source, Object* target, const Script
TC_LOG_ERROR("scripts", "%s source object is NULL.", scriptInfo->GetDebugInfo().c_str());
else if (!source->isType(TYPEMASK_UNIT))
TC_LOG_ERROR("scripts", "%s source object is not unit (TypeId: %u, Entry: %u, GUID: %u), skipping.", scriptInfo->GetDebugInfo().c_str(),
- source->GetTypeId(), source->GetEntry(), source->GetGUIDLow());
+ source->GetTypeId(), source->GetEntry(), source->GetGUID().GetCounter());
else
{
WorldObject* wSource = dynamic_cast <WorldObject*> (source);
if (!wSource)
TC_LOG_ERROR("scripts", "%s source object could not be cast to world object (TypeId: %u, Entry: %u, GUID: %u), skipping.",
- scriptInfo->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUIDLow());
+ scriptInfo->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUID().GetCounter());
else
{
GameObject* pDoor = _FindGameObject(wSource, guid);
@@ -250,7 +250,7 @@ inline void Map::_ScriptProcessDoor(Object* source, Object* target, const Script
TC_LOG_ERROR("scripts", "%s gameobject was not found (guid: %u).", scriptInfo->GetDebugInfo().c_str(), guid);
else if (pDoor->GetGoType() != GAMEOBJECT_TYPE_DOOR)
TC_LOG_ERROR("scripts", "%s gameobject is not a door (GoType: %u, Entry: %u, GUID: %u).",
- scriptInfo->GetDebugInfo().c_str(), pDoor->GetGoType(), pDoor->GetEntry(), pDoor->GetGUIDLow());
+ scriptInfo->GetDebugInfo().c_str(), pDoor->GetGoType(), pDoor->GetEntry(), pDoor->GetGUID().GetCounter());
else if (bOpen == (pDoor->GetGoState() == GO_STATE_READY))
{
pDoor->UseDoorOrButton(nTimeToToggle);
@@ -266,20 +266,13 @@ inline void Map::_ScriptProcessDoor(Object* source, Object* target, const Script
}
}
-inline GameObject* Map::_FindGameObject(WorldObject* searchObject, uint32 guid) const
+inline GameObject* Map::_FindGameObject(WorldObject* searchObject, ObjectGuid::LowType guid) const
{
- GameObject* gameobject = NULL;
+ auto bounds = searchObject->GetMap()->GetGameObjectBySpawnIdStore().equal_range(guid);
+ if (bounds.first == bounds.second)
+ return nullptr;
- CellCoord p(Trinity::ComputeCellCoord(searchObject->GetPositionX(), searchObject->GetPositionY()));
- Cell cell(p);
-
- Trinity::GameObjectWithDbGUIDCheck goCheck(*searchObject, guid);
- Trinity::GameObjectSearcher<Trinity::GameObjectWithDbGUIDCheck> checker(searchObject, gameobject, goCheck);
-
- TypeContainerVisitor<Trinity::GameObjectSearcher<Trinity::GameObjectWithDbGUIDCheck>, GridTypeMapContainer > objectChecker(checker);
- cell.Visit(p, objectChecker, *searchObject->GetMap(), *searchObject, searchObject->GetGridActivationRange());
-
- return gameobject;
+ return bounds.first->second;
}
/// Process queued scripts
@@ -300,33 +293,30 @@ void Map::ScriptsProcess()
{
switch (step.sourceGUID.GetHigh())
{
- case HIGHGUID_ITEM: // as well as HIGHGUID_CONTAINER
+ case HighGuid::Item: // as well as HighGuid::Container
if (Player* player = HashMapHolder<Player>::Find(step.ownerGUID))
source = player->GetItemByGuid(step.sourceGUID);
break;
- case HIGHGUID_UNIT:
- case HIGHGUID_VEHICLE:
- source = HashMapHolder<Creature>::Find(step.sourceGUID);
+ case HighGuid::Unit:
+ case HighGuid::Vehicle:
+ source = GetCreature(step.sourceGUID);
break;
- case HIGHGUID_PET:
- source = HashMapHolder<Pet>::Find(step.sourceGUID);
+ case HighGuid::Pet:
+ source = GetPet(step.sourceGUID);
break;
- case HIGHGUID_PLAYER:
+ case HighGuid::Player:
source = HashMapHolder<Player>::Find(step.sourceGUID);
break;
- case HIGHGUID_TRANSPORT:
- case HIGHGUID_GAMEOBJECT:
- source = HashMapHolder<GameObject>::Find(step.sourceGUID);
+ case HighGuid::Transport:
+ case HighGuid::GameObject:
+ source = GetGameObject(step.sourceGUID);
break;
- case HIGHGUID_CORPSE:
- source = HashMapHolder<Corpse>::Find(step.sourceGUID);
+ case HighGuid::Corpse:
+ source = GetCorpse(step.sourceGUID);
break;
- case HIGHGUID_MO_TRANSPORT:
- {
- GameObject* go = HashMapHolder<GameObject>::Find(step.sourceGUID);
- source = go ? go->ToTransport() : NULL;
+ case HighGuid::Mo_Transport:
+ source = GetTransport(step.sourceGUID);
break;
- }
default:
TC_LOG_ERROR("scripts", "%s source with unsupported high guid %s.",
step.script->GetDebugInfo().c_str(), step.sourceGUID.ToString().c_str());
@@ -339,29 +329,26 @@ void Map::ScriptsProcess()
{
switch (step.targetGUID.GetHigh())
{
- case HIGHGUID_UNIT:
- case HIGHGUID_VEHICLE:
- target = HashMapHolder<Creature>::Find(step.targetGUID);
+ case HighGuid::Unit:
+ case HighGuid::Vehicle:
+ target = GetCreature(step.targetGUID);
break;
- case HIGHGUID_PET:
- target = HashMapHolder<Pet>::Find(step.targetGUID);
+ case HighGuid::Pet:
+ target = GetPet(step.targetGUID);
break;
- case HIGHGUID_PLAYER: // empty GUID case also
+ case HighGuid::Player: // empty GUID case also
target = HashMapHolder<Player>::Find(step.targetGUID);
break;
- case HIGHGUID_TRANSPORT:
- case HIGHGUID_GAMEOBJECT:
- target = HashMapHolder<GameObject>::Find(step.targetGUID);
+ case HighGuid::Transport:
+ case HighGuid::GameObject:
+ target = GetGameObject(step.targetGUID);
break;
- case HIGHGUID_CORPSE:
- target = HashMapHolder<Corpse>::Find(step.targetGUID);
+ case HighGuid::Corpse:
+ target = GetCorpse(step.targetGUID);
break;
- case HIGHGUID_MO_TRANSPORT:
- {
- GameObject* go = HashMapHolder<GameObject>::Find(step.targetGUID);
- target = go ? go->ToTransport() : NULL;
+ case HighGuid::Mo_Transport:
+ target = GetTransport(step.targetGUID);
break;
- }
default:
TC_LOG_ERROR("scripts", "%s target with unsupported high guid %s.",
step.script->GetDebugInfo().c_str(), step.targetGUID.ToString().c_str());
@@ -470,7 +457,7 @@ void Map::ScriptsProcess()
if (step.script->FlagToggle.FieldID <= OBJECT_FIELD_ENTRY || step.script->FlagToggle.FieldID >= cSource->GetValuesCount())
TC_LOG_ERROR("scripts", "%s wrong field %u (max count: %u) in object (TypeId: %u, Entry: %u, GUID: %u) specified, skipping.",
step.script->GetDebugInfo().c_str(), step.script->FlagToggle.FieldID,
- cSource->GetValuesCount(), cSource->GetTypeId(), cSource->GetEntry(), cSource->GetGUIDLow());
+ cSource->GetValuesCount(), cSource->GetTypeId(), cSource->GetEntry(), cSource->GetGUID().GetCounter());
else
cSource->SetFlag(step.script->FlagToggle.FieldID, step.script->FlagToggle.FieldValue);
}
@@ -484,7 +471,7 @@ void Map::ScriptsProcess()
if (step.script->FlagToggle.FieldID <= OBJECT_FIELD_ENTRY || step.script->FlagToggle.FieldID >= cSource->GetValuesCount())
TC_LOG_ERROR("scripts", "%s wrong field %u (max count: %u) in object (TypeId: %u, Entry: %u, GUID: %u) specified, skipping.",
step.script->GetDebugInfo().c_str(), step.script->FlagToggle.FieldID,
- cSource->GetValuesCount(), cSource->GetTypeId(), cSource->GetEntry(), cSource->GetGUIDLow());
+ cSource->GetValuesCount(), cSource->GetTypeId(), cSource->GetEntry(), cSource->GetGUID().GetCounter());
else
cSource->RemoveFlag(step.script->FlagToggle.FieldID, step.script->FlagToggle.FieldValue);
}
@@ -526,7 +513,7 @@ void Map::ScriptsProcess()
if (source->GetTypeId() != TYPEID_UNIT && source->GetTypeId() != TYPEID_GAMEOBJECT && source->GetTypeId() != TYPEID_PLAYER)
{
TC_LOG_ERROR("scripts", "%s source is not unit, gameobject or player (TypeId: %u, Entry: %u, GUID: %u), skipping.",
- step.script->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUIDLow());
+ step.script->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUID().GetCounter());
break;
}
worldObject = dynamic_cast<WorldObject*>(source);
@@ -539,7 +526,7 @@ void Map::ScriptsProcess()
if (target->GetTypeId() != TYPEID_UNIT && target->GetTypeId() != TYPEID_GAMEOBJECT && target->GetTypeId() != TYPEID_PLAYER)
{
TC_LOG_ERROR("scripts", "%s target is not unit, gameobject or player (TypeId: %u, Entry: %u, GUID: %u), skipping.",
- step.script->GetDebugInfo().c_str(), target->GetTypeId(), target->GetEntry(), target->GetGUIDLow());
+ step.script->GetDebugInfo().c_str(), target->GetTypeId(), target->GetEntry(), target->GetGUID().GetCounter());
break;
}
worldObject = dynamic_cast<WorldObject*>(target);
@@ -547,8 +534,8 @@ void Map::ScriptsProcess()
else
{
TC_LOG_ERROR("scripts", "%s neither source nor target is player (source: TypeId: %u, Entry: %u, GUID: %u; target: TypeId: %u, Entry: %u, GUID: %u), skipping.",
- step.script->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUIDLow(),
- target->GetTypeId(), target->GetEntry(), target->GetGUIDLow());
+ step.script->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUID().GetCounter(),
+ target->GetTypeId(), target->GetEntry(), target->GetGUID().GetCounter());
break;
}
}
@@ -653,7 +640,7 @@ void Map::ScriptsProcess()
if (target->GetTypeId() != TYPEID_GAMEOBJECT)
{
TC_LOG_ERROR("scripts", "%s target object is not gameobject (TypeId: %u, Entry: %u, GUID: %u), skipping.",
- step.script->GetDebugInfo().c_str(), target->GetTypeId(), target->GetEntry(), target->GetGUIDLow());
+ step.script->GetDebugInfo().c_str(), target->GetTypeId(), target->GetEntry(), target->GetGUID().GetCounter());
break;
}
@@ -795,22 +782,15 @@ void Map::ScriptsProcess()
}
Creature* cTarget = NULL;
- WorldObject* wSource = dynamic_cast <WorldObject*> (source);
- if (wSource) //using grid searcher
- {
- CellCoord p(Trinity::ComputeCellCoord(wSource->GetPositionX(), wSource->GetPositionY()));
- Cell cell(p);
-
- Trinity::CreatureWithDbGUIDCheck target_check(wSource, step.script->CallScript.CreatureEntry);
- Trinity::CreatureSearcher<Trinity::CreatureWithDbGUIDCheck> checker(wSource, cTarget, target_check);
-
- TypeContainerVisitor<Trinity::CreatureSearcher <Trinity::CreatureWithDbGUIDCheck>, GridTypeMapContainer > unit_checker(checker);
- cell.Visit(p, unit_checker, *wSource->GetMap(), *wSource, wSource->GetGridActivationRange());
- }
- else //check hashmap holders
+ auto creatureBounds = _creatureBySpawnIdStore.equal_range(step.script->CallScript.CreatureEntry);
+ if (creatureBounds.first != creatureBounds.second)
{
- if (CreatureData const* data = sObjectMgr->GetCreatureData(step.script->CallScript.CreatureEntry))
- cTarget = ObjectAccessor::GetObjectInWorld<Creature>(data->mapid, data->posX, data->posY, ObjectGuid(HIGHGUID_UNIT, data->id, step.script->CallScript.CreatureEntry), cTarget);
+ // Prefer alive (last respawned) creature
+ auto creatureItr = std::find_if(creatureBounds.first, creatureBounds.second, [](Map::CreatureBySpawnIdContainer::value_type const& pair)
+ {
+ return pair.second->IsAlive();
+ });
+ cTarget = creatureItr != creatureBounds.second ? creatureItr->second : creatureBounds.first->second;
}
if (!cTarget)
@@ -839,7 +819,7 @@ void Map::ScriptsProcess()
{
if (cSource->isDead())
TC_LOG_ERROR("scripts", "%s creature is already dead (Entry: %u, GUID: %u)",
- step.script->GetDebugInfo().c_str(), cSource->GetEntry(), cSource->GetGUIDLow());
+ step.script->GetDebugInfo().c_str(), cSource->GetEntry(), cSource->GetGUID().GetCounter());
else
{
cSource->setDeathState(JUST_DIED);
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index 7c4b11769b5..47a23dedf0c 100644
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -92,6 +92,7 @@ void AddSC_npcs_special();
void AddSC_npc_taxi();
void AddSC_achievement_scripts();
void AddSC_action_ip_logger();
+void AddSC_duel_reset();
//eastern kingdoms
void AddSC_alterac_valley(); //Alterac Valley
@@ -101,11 +102,8 @@ void AddSC_boss_galvangar();
void AddSC_boss_vanndar();
void AddSC_blackrock_depths(); //Blackrock Depths
void AddSC_boss_ambassador_flamelash();
-void AddSC_boss_anubshiah();
void AddSC_boss_draganthaurissan();
void AddSC_boss_general_angerforge();
-void AddSC_boss_gorosh_the_dervish();
-void AddSC_boss_grizzle();
void AddSC_boss_high_interrogator_gerstahn();
void AddSC_boss_magmus();
void AddSC_boss_moira_bronzebeard();
@@ -789,6 +787,7 @@ void AddWorldScripts()
// To avoid duplicate code, we check once /*ONLY*/ if logging is permitted or not.
if (sWorld->getBoolConfig(CONFIG_IP_BASED_ACTION_LOGGING))
AddSC_action_ip_logger(); // location: scripts\World\action_ip_logger.cpp
+ AddSC_duel_reset();
#endif
}
@@ -802,11 +801,8 @@ void AddEasternKingdomsScripts()
AddSC_boss_vanndar();
AddSC_blackrock_depths(); //Blackrock Depths
AddSC_boss_ambassador_flamelash();
- AddSC_boss_anubshiah();
AddSC_boss_draganthaurissan();
AddSC_boss_general_angerforge();
- AddSC_boss_gorosh_the_dervish();
- AddSC_boss_grizzle();
AddSC_boss_high_interrogator_gerstahn();
AddSC_boss_magmus();
AddSC_boss_moira_bronzebeard();
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp
index aed829a7b57..3cbdf93ca54 100644
--- a/src/server/game/Scripting/ScriptMgr.cpp
+++ b/src/server/game/Scripting/ScriptMgr.cpp
@@ -33,6 +33,7 @@
#include "Player.h"
#include "WorldPacket.h"
#include "WorldSession.h"
+#include "Chat.h"
// namespace
// {
@@ -40,6 +41,60 @@
UnusedScriptNamesContainer UnusedScriptNames;
// }
+// Trait which indicates whether this script type
+// must be assigned in the database.
+template<typename>
+struct is_script_database_bound
+ : std::false_type { };
+
+template<>
+struct is_script_database_bound<SpellScriptLoader>
+ : std::true_type { };
+
+template<>
+struct is_script_database_bound<InstanceMapScript>
+ : std::true_type { };
+
+template<>
+struct is_script_database_bound<ItemScript>
+ : std::true_type { };
+
+template<>
+struct is_script_database_bound<CreatureScript>
+ : std::true_type { };
+
+template<>
+struct is_script_database_bound<GameObjectScript>
+ : std::true_type { };
+
+template<>
+struct is_script_database_bound<AreaTriggerScript>
+ : std::true_type { };
+
+template<>
+struct is_script_database_bound<BattlegroundScript>
+ : std::true_type { };
+
+template<>
+struct is_script_database_bound<OutdoorPvPScript>
+ : std::true_type { };
+
+template<>
+struct is_script_database_bound<WeatherScript>
+ : std::true_type { };
+
+template<>
+struct is_script_database_bound<ConditionScript>
+ : std::true_type { };
+
+template<>
+struct is_script_database_bound<TransportScript>
+ : std::true_type { };
+
+template<>
+struct is_script_database_bound<AchievementCriteriaScript>
+ : std::true_type { };
+
// This is the global static registry of scripts.
template<class TScript>
class ScriptRegistry
@@ -70,78 +125,83 @@ class ScriptRegistry
}
}
- if (script->IsDatabaseBound())
+ AddScript(is_script_database_bound<TScript>{}, script);
+ }
+
+ // Gets a script by its ID (assigned by ObjectMgr).
+ static TScript* GetScriptById(uint32 id)
+ {
+ ScriptMapIterator it = ScriptPointerList.find(id);
+ if (it != ScriptPointerList.end())
+ return it->second;
+
+ return NULL;
+ }
+
+ private:
+
+ // Adds a database bound script
+ static void AddScript(std::true_type, TScript* const script)
+ {
+ // Get an ID for the script. An ID only exists if it's a script that is assigned in the database
+ // through a script name (or similar).
+ uint32 id = sObjectMgr->GetScriptId(script->GetName());
+ if (id)
{
- // Get an ID for the script. An ID only exists if it's a script that is assigned in the database
- // through a script name (or similar).
- uint32 id = sObjectMgr->GetScriptId(script->GetName().c_str());
- if (id)
+ // Try to find an existing script.
+ bool existing = false;
+ for (ScriptMapIterator it = ScriptPointerList.begin(); it != ScriptPointerList.end(); ++it)
{
- // Try to find an existing script.
- bool existing = false;
- for (ScriptMapIterator it = ScriptPointerList.begin(); it != ScriptPointerList.end(); ++it)
- {
- // If the script names match...
- if (it->second->GetName() == script->GetName())
- {
- // ... It exists.
- existing = true;
- break;
- }
- }
-
- // If the script isn't assigned -> assign it!
- if (!existing)
+ // If the script names match...
+ if (it->second->GetName() == script->GetName())
{
- ScriptPointerList[id] = script;
- sScriptMgr->IncrementScriptCount();
-
- #ifdef SCRIPTS
- UnusedScriptNamesContainer::iterator itr = std::lower_bound(UnusedScriptNames.begin(), UnusedScriptNames.end(), script->GetName());
- if (itr != UnusedScriptNames.end() && *itr == script->GetName())
- UnusedScriptNames.erase(itr);
- #endif
+ // ... It exists.
+ existing = true;
+ break;
}
- else
- {
- // If the script is already assigned -> delete it!
- TC_LOG_ERROR("scripts", "Script '%s' already assigned with the same script name, so the script can't work.",
- script->GetName().c_str());
+ }
- ASSERT(false); // Error that should be fixed ASAP.
- }
+ // If the script isn't assigned -> assign it!
+ if (!existing)
+ {
+ ScriptPointerList[id] = script;
+ sScriptMgr->IncrementScriptCount();
+
+ #ifdef SCRIPTS
+ UnusedScriptNamesContainer::iterator itr = std::lower_bound(UnusedScriptNames.begin(), UnusedScriptNames.end(), script->GetName());
+ if (itr != UnusedScriptNames.end() && *itr == script->GetName())
+ UnusedScriptNames.erase(itr);
+ #endif
}
else
{
- // The script uses a script name from database, but isn't assigned to anything.
- TC_LOG_ERROR("sql.sql", "Script named '%s' does not have a script name assigned in database.", script->GetName().c_str());
+ // If the script is already assigned -> delete it!
+ TC_LOG_ERROR("scripts", "Script '%s' already assigned with the same script name, so the script can't work.",
+ script->GetName().c_str());
- // Avoid calling "delete script;" because we are currently in the script constructor
- // In a valid scenario this will not happen because every script has a name assigned in the database
- UnusedScripts.push_back(script);
- return;
+ ABORT(); // Error that should be fixed ASAP.
}
}
else
{
- // We're dealing with a code-only script; just add it.
- ScriptPointerList[_scriptIdCounter++] = script;
- sScriptMgr->IncrementScriptCount();
+ // The script uses a script name from database, but isn't assigned to anything.
+ TC_LOG_ERROR("sql.sql", "Script named '%s' does not have a script name assigned in database.", script->GetName().c_str());
+
+ // Avoid calling "delete script;" because we are currently in the script constructor
+ // In a valid scenario this will not happen because every script has a name assigned in the database
+ UnusedScripts.push_back(script);
+ return;
}
}
- // Gets a script by its ID (assigned by ObjectMgr).
- static TScript* GetScriptById(uint32 id)
+ // Adds a non database bound script
+ static void AddScript(std::false_type, TScript* const script)
{
- ScriptMapIterator it = ScriptPointerList.find(id);
- if (it != ScriptPointerList.end())
- return it->second;
-
- return NULL;
+ // We're dealing with a code-only script; just add it.
+ ScriptPointerList[_scriptIdCounter++] = script;
+ sScriptMgr->IncrementScriptCount();
}
- private:
-
// Counter used for code-only scripts.
static uint32 _scriptIdCounter;
};
@@ -960,7 +1020,7 @@ bool ScriptMgr::OnAreaTrigger(Player* player, AreaTriggerEntry const* trigger)
Battleground* ScriptMgr::CreateBattleground(BattlegroundTypeId /*typeId*/)
{
/// @todo Implement script-side battlegrounds.
- ASSERT(false);
+ ABORT();
return NULL;
}
@@ -972,12 +1032,15 @@ OutdoorPvP* ScriptMgr::CreateOutdoorPvP(OutdoorPvPData const* data)
return tmpscript->GetOutdoorPvP();
}
-std::vector<ChatCommand*> ScriptMgr::GetChatCommands()
+std::vector<ChatCommand> ScriptMgr::GetChatCommands()
{
- std::vector<ChatCommand*> table;
+ std::vector<ChatCommand> table;
FOR_SCRIPTS_RET(CommandScript, itr, end, table)
- table.push_back(itr->second->GetCommands());
+ {
+ std::vector<ChatCommand> cmds = itr->second->GetCommands();
+ table.insert(table.end(), cmds.begin(), cmds.end());
+ }
return table;
}
@@ -1030,7 +1093,7 @@ void ScriptMgr::OnAuctionExpire(AuctionHouseObject* ah, AuctionEntry* entry)
FOREACH_SCRIPT(AuctionHouseScript)->OnAuctionExpire(ah, entry);
}
-bool ScriptMgr::OnConditionCheck(Condition* condition, ConditionSourceInfo& sourceInfo)
+bool ScriptMgr::OnConditionCheck(Condition const* condition, ConditionSourceInfo& sourceInfo)
{
ASSERT(condition);
@@ -1392,12 +1455,12 @@ void ScriptMgr::OnGuildItemMove(Guild* guild, Player* player, Item* pItem, bool
FOREACH_SCRIPT(GuildScript)->OnItemMove(guild, player, pItem, isSrcBank, srcContainer, srcSlotId, isDestBank, destContainer, destSlotId);
}
-void ScriptMgr::OnGuildEvent(Guild* guild, uint8 eventType, uint32 playerGuid1, uint32 playerGuid2, uint8 newRank)
+void ScriptMgr::OnGuildEvent(Guild* guild, uint8 eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank)
{
FOREACH_SCRIPT(GuildScript)->OnEvent(guild, eventType, playerGuid1, playerGuid2, newRank);
}
-void ScriptMgr::OnGuildBankEvent(Guild* guild, uint8 eventType, uint8 tabId, uint32 playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId)
+void ScriptMgr::OnGuildBankEvent(Guild* guild, uint8 eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId)
{
FOREACH_SCRIPT(GuildScript)->OnBankEvent(guild, eventType, tabId, playerGuid, itemOrMoney, itemStackCount, destTabId);
}
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h
index a226f1b7ed2..046c6c1a009 100644
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -153,10 +153,6 @@ class ScriptObject
public:
- // Do not override this in scripts; it should be overridden by the various script type classes. It indicates
- // whether or not this script type must be assigned in the database.
- virtual bool IsDatabaseBound() const { return false; }
-
const std::string& GetName() const { return _name; }
protected:
@@ -198,8 +194,6 @@ class SpellScriptLoader : public ScriptObject
public:
- bool IsDatabaseBound() const final override { return true; }
-
// Should return a fully valid SpellScript pointer.
virtual SpellScript* GetSpellScript() const { return NULL; }
@@ -356,8 +350,6 @@ class InstanceMapScript : public ScriptObject, public MapScript<InstanceMap>
public:
- bool IsDatabaseBound() const final override { return true; }
-
// Gets an InstanceScript object for this instance.
virtual InstanceScript* GetInstanceScript(InstanceMap* /*map*/) const { return NULL; }
};
@@ -377,8 +369,6 @@ class ItemScript : public ScriptObject
public:
- bool IsDatabaseBound() const final override { return true; }
-
// Called when a dummy spell effect is triggered on the item.
virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, Item* /*target*/) { return false; }
@@ -426,8 +416,6 @@ class CreatureScript : public UnitScript, public UpdatableScript<Creature>
public:
- bool IsDatabaseBound() const final override { return true; }
-
// Called when a dummy spell effect is triggered on the creature.
virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, Creature* /*target*/) { return false; }
@@ -464,8 +452,6 @@ class GameObjectScript : public ScriptObject, public UpdatableScript<GameObject>
public:
- bool IsDatabaseBound() const final override { return true; }
-
// Called when a dummy spell effect is triggered on the gameobject.
virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, GameObject* /*target*/) { return false; }
@@ -511,8 +497,6 @@ class AreaTriggerScript : public ScriptObject
public:
- bool IsDatabaseBound() const final override { return true; }
-
// Called when the area trigger is activated by a player.
virtual bool OnTrigger(Player* /*player*/, AreaTriggerEntry const* /*trigger*/) { return false; }
};
@@ -525,8 +509,6 @@ class BattlegroundScript : public ScriptObject
public:
- bool IsDatabaseBound() const final override { return true; }
-
// Should return a fully valid Battleground object for the type ID.
virtual Battleground* GetBattleground() const = 0;
};
@@ -539,8 +521,6 @@ class OutdoorPvPScript : public ScriptObject
public:
- bool IsDatabaseBound() const final override { return true; }
-
// Should return a fully valid OutdoorPvP object for the type ID.
virtual OutdoorPvP* GetOutdoorPvP() const = 0;
};
@@ -554,7 +534,7 @@ class CommandScript : public ScriptObject
public:
// Should return a pointer to a valid command table (ChatCommand array) to be used by ChatHandler.
- virtual ChatCommand* GetCommands() const = 0;
+ virtual std::vector<ChatCommand> GetCommands() const = 0;
};
class WeatherScript : public ScriptObject, public UpdatableScript<Weather>
@@ -565,8 +545,6 @@ class WeatherScript : public ScriptObject, public UpdatableScript<Weather>
public:
- bool IsDatabaseBound() const final override { return true; }
-
// Called when the weather changes in the zone this script is associated with.
virtual void OnChange(Weather* /*weather*/, WeatherState /*state*/, float /*grade*/) { }
};
@@ -600,10 +578,8 @@ class ConditionScript : public ScriptObject
public:
- bool IsDatabaseBound() const final override { return true; }
-
// Called when a single condition is checked for a player.
- virtual bool OnConditionCheck(Condition* /*condition*/, ConditionSourceInfo& /*sourceInfo*/) { return true; }
+ virtual bool OnConditionCheck(Condition const* /*condition*/, ConditionSourceInfo& /*sourceInfo*/) { return true; }
};
class VehicleScript : public ScriptObject
@@ -648,8 +624,6 @@ class TransportScript : public ScriptObject, public UpdatableScript<Transport>
public:
- bool IsDatabaseBound() const final override { return true; }
-
// Called when a player boards the transport.
virtual void OnAddPassenger(Transport* /*transport*/, Player* /*player*/) { }
@@ -671,8 +645,6 @@ class AchievementCriteriaScript : public ScriptObject
public:
- bool IsDatabaseBound() const final override { return true; }
-
// Called when an additional criteria is checked.
virtual bool OnCheck(Player* source, Unit* target) = 0;
};
@@ -809,8 +781,6 @@ class GuildScript : public ScriptObject
public:
- bool IsDatabaseBound() const final override { return false; }
-
// Called when a member is added to the guild.
virtual void OnAddMember(Guild* /*guild*/, Player* /*player*/, uint8& /*plRank*/) { }
@@ -839,9 +809,9 @@ class GuildScript : public ScriptObject
virtual void OnItemMove(Guild* /*guild*/, Player* /*player*/, Item* /*pItem*/, bool /*isSrcBank*/, uint8 /*srcContainer*/, uint8 /*srcSlotId*/,
bool /*isDestBank*/, uint8 /*destContainer*/, uint8 /*destSlotId*/) { }
- virtual void OnEvent(Guild* /*guild*/, uint8 /*eventType*/, uint32 /*playerGuid1*/, uint32 /*playerGuid2*/, uint8 /*newRank*/) { }
+ virtual void OnEvent(Guild* /*guild*/, uint8 /*eventType*/, ObjectGuid::LowType /*playerGuid1*/, ObjectGuid::LowType /*playerGuid2*/, uint8 /*newRank*/) { }
- virtual void OnBankEvent(Guild* /*guild*/, uint8 /*eventType*/, uint8 /*tabId*/, uint32 /*playerGuid*/, uint32 /*itemOrMoney*/, uint16 /*itemStackCount*/, uint8 /*destTabId*/) { }
+ virtual void OnBankEvent(Guild* /*guild*/, uint8 /*eventType*/, uint8 /*tabId*/, ObjectGuid::LowType /*playerGuid*/, uint32 /*itemOrMoney*/, uint16 /*itemStackCount*/, uint8 /*destTabId*/) { }
};
class GroupScript : public ScriptObject
@@ -852,8 +822,6 @@ class GroupScript : public ScriptObject
public:
- bool IsDatabaseBound() const final override { return false; }
-
// Called when a member is added to a group.
virtual void OnAddMember(Group* /*group*/, ObjectGuid /*guid*/) { }
@@ -1014,7 +982,7 @@ class ScriptMgr
public: /* CommandScript */
- std::vector<ChatCommand*> GetChatCommands();
+ std::vector<ChatCommand> GetChatCommands();
public: /* WeatherScript */
@@ -1030,7 +998,7 @@ class ScriptMgr
public: /* ConditionScript */
- bool OnConditionCheck(Condition* condition, ConditionSourceInfo& sourceInfo);
+ bool OnConditionCheck(Condition const* condition, ConditionSourceInfo& sourceInfo);
public: /* VehicleScript */
@@ -1111,8 +1079,8 @@ class ScriptMgr
void OnGuildMemberDepositMoney(Guild* guild, Player* player, uint32 &amount);
void OnGuildItemMove(Guild* guild, Player* player, Item* pItem, bool isSrcBank, uint8 srcContainer, uint8 srcSlotId,
bool isDestBank, uint8 destContainer, uint8 destSlotId);
- void OnGuildEvent(Guild* guild, uint8 eventType, uint32 playerGuid1, uint32 playerGuid2, uint8 newRank);
- void OnGuildBankEvent(Guild* guild, uint8 eventType, uint8 tabId, uint32 playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId);
+ void OnGuildEvent(Guild* guild, uint8 eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank);
+ void OnGuildBankEvent(Guild* guild, uint8 eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId);
public: /* GroupScript */
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index bb22d27221e..6ae63f2efa3 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -95,7 +95,7 @@ bool WorldSessionFilter::Process(WorldPacket* packet)
}
/// WorldSession constructor
-WorldSession::WorldSession(uint32 id, std::shared_ptr<WorldSocket> sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter):
+WorldSession::WorldSession(uint32 id, std::string&& name, std::shared_ptr<WorldSocket> sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter):
m_muteTime(mute_time),
m_timeOutTime(0),
AntiDOS(this),
@@ -104,6 +104,7 @@ WorldSession::WorldSession(uint32 id, std::shared_ptr<WorldSocket> sock, Account
m_Socket(sock),
_security(sec),
_accountId(id),
+ _accountName(std::move(name)),
m_expansion(expansion),
_warden(NULL),
_logoutTime(0),
@@ -170,19 +171,19 @@ std::string WorldSession::GetPlayerInfo() const
{
std::ostringstream ss;
- ss << "[Player: " << GetPlayerName() << " (";
- if (_player != NULL)
- ss << _player->GetGUID().ToString() << ", ";
+ ss << "[Player: ";
+ if (!m_playerLoading && _player)
+ ss << _player->GetName() << ' ' << _player->GetGUID().ToString() << ", ";
- ss << "Account: " << GetAccountId() << ")]";
+ ss << "Account: " << GetAccountId() << "]";
return ss.str();
}
/// Get player guid if available. Use for logging purposes only
-uint32 WorldSession::GetGuidLow() const
+ObjectGuid::LowType WorldSession::GetGUIDLow() const
{
- return GetPlayer() ? GetPlayer()->GetGUIDLow() : 0;
+ return GetPlayer() ? GetPlayer()->GetGUID().GetCounter() : 0;
}
/// Send a packet to the client
@@ -340,7 +341,7 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player has not logged in yet");
else if (_player->IsInWorld())
LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player is still in world");
- else if(AntiDOS.EvaluateOpcode(*packet, currentTime))
+ else if (AntiDOS.EvaluateOpcode(*packet, currentTime))
{
sScriptMgr->OnPacketReceive(this, *packet);
(this->*opHandle.handler)(*packet);
@@ -483,6 +484,15 @@ void WorldSession::LogoutPlayer(bool save)
{
if (BattlegroundQueueTypeId bgQueueTypeId = _player->GetBattlegroundQueueTypeId(i))
{
+ // track if player logs out after invited to join BG
+ if (_player->IsInvitedForBattlegroundQueueType(bgQueueTypeId) && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS))
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK);
+ stmt->setUInt32(0, _player->GetGUID().GetCounter());
+ stmt->setUInt8(1, BG_DESERTION_TYPE_INVITE_LOGOUT);
+ CharacterDatabase.Execute(stmt);
+ }
+
_player->RemoveBattlegroundQueueId(bgQueueTypeId);
BattlegroundQueue& queue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId);
queue.RemovePlayer(_player->GetGUID(), true);
@@ -538,8 +548,8 @@ void WorldSession::LogoutPlayer(bool save)
}
//! Broadcast a logout message to the player's friends
- sSocialMgr->SendFriendStatus(_player, FRIEND_OFFLINE, _player->GetGUIDLow(), true);
- sSocialMgr->RemovePlayerSocial(_player->GetGUIDLow());
+ sSocialMgr->SendFriendStatus(_player, FRIEND_OFFLINE, _player->GetGUID().GetCounter(), true);
+ sSocialMgr->RemovePlayerSocial(_player->GetGUID().GetCounter());
//! Call script hook before deletion
sScriptMgr->OnPlayerLogout(_player);
@@ -550,7 +560,7 @@ void WorldSession::LogoutPlayer(bool save)
// calls to GetMap in this case may cause crashes
_player->CleanupsBeforeDelete();
TC_LOG_INFO("entities.player.character", "Account: %d (IP: %s) Logout Character:[%s] (GUID: %u) Level: %d",
- GetAccountId(), GetRemoteAddress().c_str(), _player->GetName().c_str(), _player->GetGUIDLow(), _player->getLevel());
+ GetAccountId(), GetRemoteAddress().c_str(), _player->GetName().c_str(), _player->GetGUID().GetCounter(), _player->getLevel());
if (Map* _map = _player->FindMap())
_map->RemovePlayerFromMap(_player, true);
@@ -666,13 +676,6 @@ void WorldSession::SendAuthWaitQue(uint32 position)
}
}
-void WorldSession::LoadGlobalAccountData()
-{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ACCOUNT_DATA);
- stmt->setUInt32(0, GetAccountId());
- LoadAccountData(CharacterDatabase.Query(stmt), GLOBAL_CACHE_MASK);
-}
-
void WorldSession::LoadAccountData(PreparedQueryResult result, uint32 mask)
{
for (uint32 i = 0; i < NUM_ACCOUNT_DATA_TYPES; ++i)
@@ -709,7 +712,7 @@ void WorldSession::LoadAccountData(PreparedQueryResult result, uint32 mask)
void WorldSession::SetAccountData(AccountDataType type, time_t tm, std::string const& data)
{
uint32 id = 0;
- uint32 index = 0;
+ CharacterDatabaseStatements index;
if ((1 << type) & GLOBAL_CACHE_MASK)
{
id = GetAccountId();
@@ -748,13 +751,11 @@ void WorldSession::SendAccountDataTimes(uint32 mask)
SendPacket(&data);
}
-void WorldSession::LoadTutorialsData()
+void WorldSession::LoadTutorialsData(PreparedQueryResult result)
{
memset(m_Tutorials, 0, sizeof(uint32) * MAX_ACCOUNT_TUTORIAL_VALUES);
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_TUTORIALS);
- stmt->setUInt32(0, GetAccountId());
- if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
+ if (result)
for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i)
m_Tutorials[i] = (*result)[i].GetUInt32();
@@ -830,7 +831,7 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi)
{ \
TC_LOG_DEBUG("entities.unit", "WorldSession::ReadMovementInfo: Violation of MovementFlags found (%s). " \
"MovementFlags: %u, MovementFlags2: %u for player GUID: %u. Mask %u will be removed.", \
- STRINGIZE(check), mi->GetMovementFlags(), mi->GetExtraMovementFlags(), GetPlayer()->GetGUIDLow(), maskToRemove); \
+ STRINGIZE(check), mi->GetMovementFlags(), mi->GetExtraMovementFlags(), GetPlayer()->GetGUID().GetCounter(), maskToRemove); \
mi->RemoveMovementFlag((maskToRemove)); \
} \
}
@@ -840,13 +841,32 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi)
mi->RemoveMovementFlag((maskToRemove));
#endif
-
/*! This must be a packet spoofing attempt. MOVEMENTFLAG_ROOT sent from the client is not valid
in conjunction with any of the moving movement flags such as MOVEMENTFLAG_FORWARD.
It will freeze clients that receive this player's movement info.
*/
- REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_ROOT),
- MOVEMENTFLAG_ROOT);
+ // Only adjust movement flag removal for vehicles with the VEHICLE_FLAG_FIXED_POSITION flag, or the hard coded exceptions below:
+ // 30236 | Argent Cannon
+ // 39759 | Tankbuster Cannon
+ if (GetPlayer()->GetVehicleBase() && ((GetPlayer()->GetVehicle()->GetVehicleInfo()->m_flags & VEHICLE_FLAG_FIXED_POSITION) || GetPlayer()->GetVehicleBase()->GetEntry() == 30236 || GetPlayer()->GetVehicleBase()->GetEntry() == 39759))
+ {
+ // Actually players in rooted vehicles still send commands, don't clear root for these!
+ // Check specifically for the following conditions:
+ // MOVEMENTFLAG_ROOT + no other flags (0x800)
+ // MOVEMENTFLAG_ROOT + MOVEMENTFLAG_LEFT (0x810)
+ // MOVEMENTFLAG_ROOT + MOVEMENTFLAG_RIGHT (0x820)
+ // MOVEMENTFLAG_ROOT + MOVEMENTFLAG_PITCH_UP (0x840)
+ // MOVEMENTFLAG_ROOT + MOVEMENTFLAG_PITCH_DOWN (0x880)
+ // If none of these are true, clear the root
+ REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_ROOT) && mi->HasMovementFlag(MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT | MOVEMENTFLAG_PITCH_UP | MOVEMENTFLAG_PITCH_DOWN),
+ MOVEMENTFLAG_MASK_MOVING);
+ }
+ else
+ {
+ // Only remove here for non vehicles
+ REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_ROOT),
+ MOVEMENTFLAG_ROOT);
+ }
//! Cannot hover without SPELL_AURA_HOVER
REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_HOVER) && !GetPlayer()->HasAuraType(SPELL_AURA_HOVER),
@@ -937,7 +957,7 @@ void WorldSession::WriteMovementInfo(WorldPacket* data, MovementInfo* mi)
*data << mi->splineElevation;
}
-void WorldSession::ReadAddonsInfo(WorldPacket &data)
+void WorldSession::ReadAddonsInfo(ByteBuffer &data)
{
if (data.rpos() + 4 > data.size())
return;
@@ -1082,7 +1102,7 @@ void WorldSession::SetPlayer(Player* player)
// set m_GUID that can be used while player loggined and later until m_playerRecentlyLogout not reset
if (_player)
- m_GUIDLow = _player->GetGUIDLow();
+ m_GUIDLow = _player->GetGUID().GetCounter();
}
void WorldSession::InitializeQueryCallbackParameters()
@@ -1096,6 +1116,9 @@ void WorldSession::ProcessQueryCallbacks()
{
PreparedQueryResult result;
+ if (_realmAccountLoginCallback.valid() && _realmAccountLoginCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
+ InitializeSessionCallback(_realmAccountLoginCallback.get());
+
//! HandleCharEnumOpcode
if (_charEnumCallback.valid() && _charEnumCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
{
@@ -1195,15 +1218,84 @@ void WorldSession::InitWarden(BigNumber* k, std::string const& os)
void WorldSession::LoadPermissions()
{
uint32 id = GetAccountId();
- std::string name;
- AccountMgr::GetName(id, name);
uint8 secLevel = GetSecurity();
- _RBACData = new rbac::RBACData(id, name, realmID, secLevel);
+ _RBACData = new rbac::RBACData(id, _accountName, realmID, secLevel);
_RBACData->LoadFromDB();
+}
+
+PreparedQueryResultFuture WorldSession::LoadPermissionsAsync()
+{
+ uint32 id = GetAccountId();
+ uint8 secLevel = GetSecurity();
TC_LOG_DEBUG("rbac", "WorldSession::LoadPermissions [AccountId: %u, Name: %s, realmId: %d, secLevel: %u]",
- id, name.c_str(), realmID, secLevel);
+ id, _accountName.c_str(), realmID, secLevel);
+
+ _RBACData = new rbac::RBACData(id, _accountName, realmID, secLevel);
+ return _RBACData->LoadFromDBAsync();
+}
+
+class AccountInfoQueryHolderPerRealm : public SQLQueryHolder
+{
+public:
+ enum
+ {
+ GLOBAL_ACCOUNT_DATA = 0,
+ TUTORIALS,
+
+ MAX_QUERIES
+ };
+
+ AccountInfoQueryHolderPerRealm() { SetSize(MAX_QUERIES); }
+
+ bool Initialize(uint32 accountId)
+ {
+ bool ok = true;
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ACCOUNT_DATA);
+ stmt->setUInt32(0, accountId);
+ ok = SetPreparedQuery(GLOBAL_ACCOUNT_DATA, stmt) && ok;
+
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_TUTORIALS);
+ stmt->setUInt32(0, accountId);
+ ok = SetPreparedQuery(TUTORIALS, stmt) && ok;
+
+ return ok;
+ }
+};
+
+void WorldSession::InitializeSession()
+{
+ AccountInfoQueryHolderPerRealm* realmHolder = new AccountInfoQueryHolderPerRealm();
+ if (!realmHolder->Initialize(GetAccountId()))
+ {
+ delete realmHolder;
+ SendAuthResponse(AUTH_SYSTEM_ERROR, false);
+ return;
+ }
+
+ _realmAccountLoginCallback = CharacterDatabase.DelayQueryHolder(realmHolder);
+}
+
+void WorldSession::InitializeSessionCallback(SQLQueryHolder* realmHolder)
+{
+ LoadAccountData(realmHolder->GetPreparedResult(AccountInfoQueryHolderPerRealm::GLOBAL_ACCOUNT_DATA), GLOBAL_CACHE_MASK);
+ LoadTutorialsData(realmHolder->GetPreparedResult(AccountInfoQueryHolderPerRealm::TUTORIALS));
+
+ if (!m_inQueue)
+ SendAuthResponse(AUTH_OK, true);
+ else
+ SendAuthWaitQue(0);
+
+ SetInQueue(false);
+ ResetTimeOutTime();
+
+ SendAddonsInfo();
+ SendClientCacheVersion(sWorld->getIntConfig(CONFIG_CLIENTCACHE_VERSION));
+ SendTutorialsData();
+
+ delete realmHolder;
}
rbac::RBACData* WorldSession::GetRBACData()
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 87a40657e24..af2d2d22c57 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -249,15 +249,16 @@ struct PacketCounter
class WorldSession
{
public:
- WorldSession(uint32 id, std::shared_ptr<WorldSocket> sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter);
+ WorldSession(uint32 id, std::string&& name, std::shared_ptr<WorldSocket> sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter);
~WorldSession();
bool PlayerLoading() const { return m_playerLoading; }
bool PlayerLogout() const { return m_playerLogout; }
bool PlayerLogoutWithSave() const { return m_playerLogout && m_playerSave; }
bool PlayerRecentlyLoggedOut() const { return m_playerRecentlyLogout; }
+ bool PlayerDisconnected() const { return !m_Socket; }
- void ReadAddonsInfo(WorldPacket& data);
+ void ReadAddonsInfo(ByteBuffer& data);
void SendAddonsInfo();
void ReadMovementInfo(WorldPacket& data, MovementInfo* mi);
@@ -275,9 +276,13 @@ class WorldSession
void SendAuthResponse(uint8 code, bool shortForm, uint32 queuePos = 0);
void SendClientCacheVersion(uint32 version);
+ void InitializeSession();
+ void InitializeSessionCallback(SQLQueryHolder* realmHolder);
+
rbac::RBACData* GetRBACData();
bool HasPermission(uint32 permissionId);
void LoadPermissions();
+ PreparedQueryResultFuture LoadPermissionsAsync();
void InvalidateRBACData(); // Used to force LoadPermissions at next HasPermission check
AccountTypes GetSecurity() const { return _security; }
@@ -286,7 +291,7 @@ class WorldSession
std::string const& GetPlayerName() const;
std::string GetPlayerInfo() const;
- uint32 GetGuidLow() const;
+ ObjectGuid::LowType GetGUIDLow() const;
void SetSecurity(AccountTypes security) { _security = security; }
std::string const& GetRemoteAddress() const { return m_Address; }
void SetPlayer(Player* player);
@@ -357,10 +362,9 @@ class WorldSession
AccountData* GetAccountData(AccountDataType type) { return &m_accountData[type]; }
void SetAccountData(AccountDataType type, time_t tm, std::string const& data);
void SendAccountDataTimes(uint32 mask);
- void LoadGlobalAccountData();
void LoadAccountData(PreparedQueryResult result, uint32 mask);
- void LoadTutorialsData();
+ void LoadTutorialsData(PreparedQueryResult result);
void SendTutorialsData();
void SaveTutorialsData(SQLTransaction& trans);
uint32 GetTutorialInt(uint8 index) const { return m_Tutorials[index]; }
@@ -964,6 +968,7 @@ class WorldSession
void InitializeQueryCallbackParameters();
void ProcessQueryCallbacks();
+ QueryResultHolderFuture _realmAccountLoginCallback;
PreparedQueryResultFuture _charEnumCallback;
PreparedQueryResultFuture _addIgnoreCallback;
PreparedQueryResultFuture _stablePetCallback;
@@ -1025,7 +1030,7 @@ class WorldSession
// characters who failed on Player::BuildEnumData shouldn't login
GuidSet _legitCharacters;
- uint32 m_GUIDLow; // set logined or recently logout player (while m_playerRecentlyLogout set)
+ ObjectGuid::LowType m_GUIDLow; // set logined or recently logout player (while m_playerRecentlyLogout set)
Player* _player;
std::shared_ptr<WorldSocket> m_Socket;
std::string m_Address; // Current Remote Address
@@ -1033,6 +1038,7 @@ class WorldSession
AccountTypes _security;
uint32 _accountId;
+ std::string _accountName;
uint8 m_expansion;
typedef std::list<AddonInfo> AddonsList;
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 066a4e501be..1dc470744a1 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -35,10 +35,65 @@ WorldSocket::WorldSocket(tcp::socket&& socket)
void WorldSocket::Start()
{
+ std::string ip_address = GetRemoteIpAddress().to_string();
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP_INFO);
+ stmt->setString(0, ip_address);
+ stmt->setUInt32(1, inet_addr(ip_address.c_str()));
+
+ {
+ std::lock_guard<std::mutex> guard(_queryLock);
+ _queryCallback = io_service().wrap(std::bind(&WorldSocket::CheckIpCallback, this, std::placeholders::_1));
+ _queryFuture = LoginDatabase.AsyncQuery(stmt);
+ }
+}
+
+void WorldSocket::CheckIpCallback(PreparedQueryResult result)
+{
+ if (result)
+ {
+ bool banned = false;
+ do
+ {
+ Field* fields = result->Fetch();
+ if (fields[0].GetUInt64() != 0)
+ banned = true;
+
+ if (!fields[1].GetString().empty())
+ _ipCountry = fields[1].GetString();
+
+ } while (result->NextRow());
+
+ if (banned)
+ {
+ SendAuthResponseError(AUTH_REJECT);
+ TC_LOG_ERROR("network", "WorldSocket::CheckIpCallback: Sent Auth Response (IP %s banned).", GetRemoteIpAddress().to_string().c_str());
+ DelayedCloseSocket();
+ return;
+ }
+ }
+
AsyncRead();
HandleSendAuthSession();
}
+bool WorldSocket::Update()
+{
+ if (!BaseSocket::Update())
+ return false;
+
+ {
+ std::lock_guard<std::mutex> guard(_queryLock);
+ if (_queryFuture.valid() && _queryFuture.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
+ {
+ auto callback = std::move(_queryCallback);
+ _queryCallback = nullptr;
+ callback(_queryFuture.get());
+ }
+ }
+
+ return true;
+}
+
void WorldSocket::HandleSendAuthSession()
{
WorldPacket packet(SMSG_AUTH_CHALLENGE, 37);
@@ -111,13 +166,15 @@ void WorldSocket::ReadHandler()
}
// just received fresh new payload
- if (!ReadDataHandler())
+ ReadDataHandlerResult result = ReadDataHandler();
+ _headerBuffer.Reset();
+ if (result != ReadDataHandlerResult::Ok)
{
- CloseSocket();
+ if (result != ReadDataHandlerResult::WaitingForQuery)
+ CloseSocket();
+
return;
}
-
- _headerBuffer.Reset();
}
AsyncRead();
@@ -145,7 +202,72 @@ bool WorldSocket::ReadHeaderHandler()
return true;
}
-bool WorldSocket::ReadDataHandler()
+struct AuthSession
+{
+ uint32 BattlegroupID = 0;
+ uint32 LoginServerType = 0;
+ uint32 RealmID = 0;
+ uint32 Build = 0;
+ uint32 LocalChallenge = 0;
+ uint32 LoginServerID = 0;
+ uint32 RegionID = 0;
+ uint64 DosResponse = 0;
+ uint8 Digest[SHA_DIGEST_LENGTH] = {};
+ std::string Account;
+ ByteBuffer AddonInfo;
+};
+
+struct AccountInfo
+{
+ uint32 Id;
+ BigNumber SessionKey;
+ std::string LastIP;
+ bool IsLockedToIP;
+ std::string LockCountry;
+ uint8 Expansion;
+ int64 MuteTime;
+ LocaleConstant Locale;
+ uint32 Recruiter;
+ std::string OS;
+ bool IsRectuiter;
+ AccountTypes Security;
+ bool IsBanned;
+
+ explicit AccountInfo(Field* fields)
+ {
+ // 0 1 2 3 4 5 6 7 8 9 10
+ // SELECT a.id, a.sessionkey, a.last_ip, a.locked, a.lock_country, a.expansion, a.mutetime, a.locale, a.recruiter, a.os, aa.gmLevel,
+ // 11 12
+ // ab.unbandate > UNIX_TIMESTAMP() OR ab.unbandate = ab.bandate, r.id
+ // FROM account a
+ // LEFT JOIN account_access aa ON a.id = aa.id AND aa.RealmID IN (-1, ?)
+ // LEFT JOIN account_banned ab ON a.id = ab.id
+ // LEFT JOIN account r ON a.id = r.recruiter
+ // WHERE a.username = ? ORDER BY aa.RealmID DESC LIMIT 1
+ Id = fields[0].GetUInt32();
+ SessionKey.SetHexStr(fields[1].GetCString());
+ LastIP = fields[2].GetString();
+ IsLockedToIP = fields[3].GetBool();
+ LockCountry = fields[4].GetString();
+ Expansion = fields[5].GetUInt8();
+ MuteTime = fields[6].GetInt64();
+ Locale = LocaleConstant(fields[7].GetUInt8());
+ Recruiter = fields[8].GetUInt32();
+ OS = fields[9].GetString();
+ Security = AccountTypes(fields[10].GetUInt8());
+ IsBanned = fields[11].GetUInt64() != 0;
+ IsRectuiter = fields[12].GetUInt32() != 0;
+
+ uint32 world_expansion = sWorld->getIntConfig(CONFIG_EXPANSION);
+ if (Expansion > world_expansion)
+ Expansion = world_expansion;
+
+ if (Locale >= TOTAL_LOCALES)
+ Locale = LOCALE_enUS;
+ }
+};
+
+WorldSocket::ReadDataHandlerResult WorldSocket::ReadDataHandler()
{
ClientPktHeader* header = reinterpret_cast<ClientPktHeader*>(_headerBuffer.GetReadPointer());
@@ -162,7 +284,7 @@ bool WorldSocket::ReadDataHandler()
{
case CMSG_PING:
LogOpcodeText(opcode, sessionGuard);
- return HandlePing(packet);
+ return HandlePing(packet) ? ReadDataHandlerResult::Ok : ReadDataHandlerResult::Error;
case CMSG_AUTH_SESSION:
LogOpcodeText(opcode, sessionGuard);
if (_authed)
@@ -170,11 +292,11 @@ bool WorldSocket::ReadDataHandler()
// locking just to safely log offending user is probably overkill but we are disconnecting him anyway
if (sessionGuard.try_lock())
TC_LOG_ERROR("network", "WorldSocket::ProcessIncoming: received duplicate CMSG_AUTH_SESSION from %s", _worldSession->GetPlayerInfo().c_str());
- return false;
+ return ReadDataHandlerResult::Error;
}
HandleAuthSession(packet);
- break;
+ return ReadDataHandlerResult::WaitingForQuery;
case CMSG_KEEP_ALIVE:
LogOpcodeText(opcode, sessionGuard);
break;
@@ -186,7 +308,7 @@ bool WorldSocket::ReadDataHandler()
{
TC_LOG_ERROR("network.opcode", "ProcessIncoming: Client not authed opcode = %u", uint32(opcode));
CloseSocket();
- return false;
+ return ReadDataHandlerResult::Error;
}
// Our Idle timer will reset on any non PING opcodes.
@@ -199,7 +321,7 @@ bool WorldSocket::ReadDataHandler()
}
}
- return true;
+ return ReadDataHandlerResult::Ok;
}
void WorldSocket::LogOpcodeText(uint16 opcode, std::unique_lock<std::mutex> const& guard) const
@@ -256,48 +378,35 @@ void WorldSocket::SendPacket(WorldPacket const& packet)
void WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
{
- uint8 digest[SHA_DIGEST_LENGTH];
- uint32 clientSeed;
- uint8 security;
- uint32 id;
- LocaleConstant locale;
- std::string account;
- SHA1Hash sha;
- uint32 clientBuild;
- uint32 serverId, loginServerType, region, battlegroup, realmIndex;
- uint64 unk4;
- WorldPacket packet, SendAddonPacked;
- BigNumber k;
- bool wardenActive = sWorld->getBoolConfig(CONFIG_WARDEN_ENABLED);
+ std::shared_ptr<AuthSession> authSession = std::make_shared<AuthSession>();
// Read the content of the packet
- recvPacket >> clientBuild;
- recvPacket >> serverId; // Used for GRUNT only
- recvPacket >> account;
- recvPacket >> loginServerType; // 0 GRUNT, 1 Battle.net
- recvPacket >> clientSeed;
- recvPacket >> region >> battlegroup; // Used for Battle.net only
- recvPacket >> realmIndex; // realmId from auth_database.realmlist table
- recvPacket >> unk4;
- recvPacket.read(digest, 20);
-
- TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: client %u, serverId %u, account %s, loginServerType %u, clientseed %u, realmIndex %u",
- clientBuild,
- serverId,
- account.c_str(),
- loginServerType,
- clientSeed,
- realmIndex);
+ recvPacket >> authSession->Build;
+ recvPacket >> authSession->LoginServerID;
+ recvPacket >> authSession->Account;
+ recvPacket >> authSession->LoginServerType;
+ recvPacket >> authSession->LocalChallenge;
+ recvPacket >> authSession->RegionID;
+ recvPacket >> authSession->BattlegroupID;
+ recvPacket >> authSession->RealmID; // realmId from auth_database.realmlist table
+ recvPacket >> authSession->DosResponse;
+ recvPacket.read(authSession->Digest, 20);
+ authSession->AddonInfo.append(recvPacket.contents() + recvPacket.rpos(), recvPacket.size() - recvPacket.rpos());
// Get the account information from the auth database
- // 0 1 2 3 4 5 6 7 8
- // SELECT id, sessionkey, last_ip, locked, expansion, mutetime, locale, recruiter, os FROM account WHERE username = ?
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_INFO_BY_NAME);
+ stmt->setInt32(0, int32(realmID));
+ stmt->setString(1, authSession->Account);
- stmt->setString(0, account);
-
- PreparedQueryResult result = LoginDatabase.Query(stmt);
+ {
+ std::lock_guard<std::mutex> guard(_queryLock);
+ _queryCallback = io_service().wrap(std::bind(&WorldSocket::HandleAuthSessionCallback, this, authSession, std::placeholders::_1));
+ _queryFuture = LoginDatabase.AsyncQuery(stmt);
+ }
+}
+void WorldSocket::HandleAuthSessionCallback(std::shared_ptr<AuthSession> authSession, PreparedQueryResult result)
+{
// Stop if the account is not found
if (!result)
{
@@ -308,32 +417,20 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
return;
}
- Field* fields = result->Fetch();
-
- uint8 expansion = fields[4].GetUInt8();
- uint32 world_expansion = sWorld->getIntConfig(CONFIG_EXPANSION);
- if (expansion > world_expansion)
- expansion = world_expansion;
+ AccountInfo account(result->Fetch());
// For hook purposes, we get Remoteaddress at this point.
std::string address = GetRemoteIpAddress().to_string();
// As we don't know if attempted login process by ip works, we update last_attempt_ip right away
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LAST_ATTEMPT_IP);
-
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LAST_ATTEMPT_IP);
stmt->setString(0, address);
- stmt->setString(1, account);
-
+ stmt->setString(1, authSession->Account);
LoginDatabase.Execute(stmt);
// This also allows to check for possible "hack" attempts on account
- // id has to be fetched at this point, so that first actual account response that fails can be logged
- id = fields[0].GetUInt32();
-
- k.SetHexStr(fields[1].GetCString());
-
// even if auth credentials are bad, try using the session key we have - client cannot read auth response error without it
- _authCrypt.Init(&k);
+ _authCrypt.Init(&account.SessionKey);
// First reject the connection if packet contains invalid data or realm state doesn't allow logging in
if (sWorld->IsClosed())
@@ -344,7 +441,7 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
return;
}
- if (realmIndex != realmID)
+ if (authSession->RealmID != realmID)
{
SendAuthResponseError(REALM_LIST_REALM_NOT_FOUND);
TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Sent Auth Response (bad realm).");
@@ -352,13 +449,12 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
return;
}
- std::string os = fields[8].GetString();
-
// Must be done before WorldSession is created
- if (wardenActive && os != "Win" && os != "OSX")
+ bool wardenActive = sWorld->getBoolConfig(CONFIG_WARDEN_ENABLED);
+ if (wardenActive && account.OS != "Win" && account.OS != "OSX")
{
SendAuthResponseError(AUTH_REJECT);
- TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Client %s attempted to log in using invalid client OS (%s).", address.c_str(), os.c_str());
+ TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Client %s attempted to log in using invalid client OS (%s).", address.c_str(), account.OS.c_str());
DelayedCloseSocket();
return;
}
@@ -366,135 +462,112 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
// Check that Key and account name are the same on client and server
uint32 t = 0;
- sha.UpdateData(account);
+ SHA1Hash sha;
+ sha.UpdateData(authSession->Account);
sha.UpdateData((uint8*)&t, 4);
- sha.UpdateData((uint8*)&clientSeed, 4);
+ sha.UpdateData((uint8*)&authSession->LocalChallenge, 4);
sha.UpdateData((uint8*)&_authSeed, 4);
- sha.UpdateBigNumbers(&k, NULL);
+ sha.UpdateBigNumbers(&account.SessionKey, NULL);
sha.Finalize();
- if (memcmp(sha.GetDigest(), digest, SHA_DIGEST_LENGTH) != 0)
+ if (memcmp(sha.GetDigest(), authSession->Digest, SHA_DIGEST_LENGTH) != 0)
{
SendAuthResponseError(AUTH_FAILED);
- TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Authentication failed for account: %u ('%s') address: %s", id, account.c_str(), address.c_str());
+ TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Authentication failed for account: %u ('%s') address: %s", account.Id, authSession->Account.c_str(), address.c_str());
DelayedCloseSocket();
return;
}
///- Re-check ip locking (same check as in auth).
- if (fields[3].GetUInt8() == 1) // if ip is locked
+ if (account.IsLockedToIP)
{
- if (strcmp(fields[2].GetCString(), address.c_str()) != 0)
+ if (account.LastIP != address)
{
SendAuthResponseError(AUTH_FAILED);
- TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: Sent Auth Response (Account IP differs. Original IP: %s, new IP: %s).", fields[2].GetCString(), address.c_str());
+ TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: Sent Auth Response (Account IP differs. Original IP: %s, new IP: %s).", account.LastIP.c_str(), address.c_str());
// We could log on hook only instead of an additional db log, however action logger is config based. Better keep DB logging as well
- sScriptMgr->OnFailedAccountLogin(id);
+ sScriptMgr->OnFailedAccountLogin(account.Id);
+ DelayedCloseSocket();
+ return;
+ }
+ }
+ else if (!account.LockCountry.empty() && account.LockCountry != "00" && !_ipCountry.empty())
+ {
+ if (account.LockCountry != _ipCountry)
+ {
+ SendAuthResponseError(AUTH_FAILED);
+ TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: Sent Auth Response (Account country differs. Original country: %s, new country: %s).", account.LockCountry.c_str(), _ipCountry.c_str());
+ // We could log on hook only instead of an additional db log, however action logger is config based. Better keep DB logging as well
+ sScriptMgr->OnFailedAccountLogin(account.Id);
DelayedCloseSocket();
return;
}
}
- int64 mutetime = fields[5].GetInt64();
+ int64 mutetime = account.MuteTime;
//! Negative mutetime indicates amount of seconds to be muted effective on next login - which is now.
if (mutetime < 0)
{
mutetime = time(NULL) + llabs(mutetime);
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_MUTE_TIME_LOGIN);
-
stmt->setInt64(0, mutetime);
- stmt->setUInt32(1, id);
-
+ stmt->setUInt32(1, account.Id);
LoginDatabase.Execute(stmt);
}
- locale = LocaleConstant(fields[6].GetUInt8());
- if (locale >= TOTAL_LOCALES)
- locale = LOCALE_enUS;
-
- uint32 recruiter = fields[7].GetUInt32();
- // Checks gmlevel per Realm
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_GMLEVEL_BY_REALMID);
-
- stmt->setUInt32(0, id);
- stmt->setInt32(1, int32(realmID));
-
- result = LoginDatabase.Query(stmt);
-
- if (!result)
- security = 0;
- else
- {
- fields = result->Fetch();
- security = fields[0].GetUInt8();
- }
-
- // Re-check account ban (same check as in auth)
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_BANS);
-
- stmt->setUInt32(0, id);
- stmt->setString(1, address);
-
- PreparedQueryResult banresult = LoginDatabase.Query(stmt);
-
- if (banresult) // if account banned
+ if (account.IsBanned)
{
SendAuthResponseError(AUTH_BANNED);
TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Sent Auth Response (Account banned).");
- sScriptMgr->OnFailedAccountLogin(id);
+ sScriptMgr->OnFailedAccountLogin(account.Id);
DelayedCloseSocket();
return;
}
// Check locked state for server
AccountTypes allowedAccountType = sWorld->GetPlayerSecurityLimit();
- TC_LOG_DEBUG("network", "Allowed Level: %u Player Level %u", allowedAccountType, AccountTypes(security));
- if (allowedAccountType > SEC_PLAYER && AccountTypes(security) < allowedAccountType)
+ TC_LOG_DEBUG("network", "Allowed Level: %u Player Level %u", allowedAccountType, account.Security);
+ if (allowedAccountType > SEC_PLAYER && account.Security < allowedAccountType)
{
SendAuthResponseError(AUTH_UNAVAILABLE);
TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: User tries to login but his security level is not enough");
- sScriptMgr->OnFailedAccountLogin(id);
+ sScriptMgr->OnFailedAccountLogin(account.Id);
DelayedCloseSocket();
return;
}
- TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: Client '%s' authenticated successfully from %s.",
- account.c_str(),
- address.c_str());
-
- // Check if this user is by any chance a recruiter
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_RECRUITER);
-
- stmt->setUInt32(0, id);
-
- result = LoginDatabase.Query(stmt);
-
- bool isRecruiter = false;
- if (result)
- isRecruiter = true;
+ TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: Client '%s' authenticated successfully from %s.", authSession->Account.c_str(), address.c_str());
// Update the last_ip in the database as it was successful for login
stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LAST_IP);
stmt->setString(0, address);
- stmt->setString(1, account);
+ stmt->setString(1, authSession->Account);
LoginDatabase.Execute(stmt);
// At this point, we can safely hook a successful login
- sScriptMgr->OnAccountLogin(id);
+ sScriptMgr->OnAccountLogin(account.Id);
_authed = true;
- _worldSession = new WorldSession(id, shared_from_this(), AccountTypes(security), expansion, mutetime, locale, recruiter, isRecruiter);
- _worldSession->LoadGlobalAccountData();
- _worldSession->LoadTutorialsData();
- _worldSession->ReadAddonsInfo(recvPacket);
- _worldSession->LoadPermissions();
+ _worldSession = new WorldSession(account.Id, std::move(authSession->Account), shared_from_this(), account.Security,
+ account.Expansion, mutetime, account.Locale, account.Recruiter, account.IsRectuiter);
+ _worldSession->ReadAddonsInfo(authSession->AddonInfo);
// Initialize Warden system only if it is enabled by config
if (wardenActive)
- _worldSession->InitWarden(&k, os);
+ _worldSession->InitWarden(&account.SessionKey, account.OS);
+
+ _queryCallback = io_service().wrap(std::bind(&WorldSocket::LoadSessionPermissionsCallback, this, std::placeholders::_1));
+ _queryFuture = _worldSession->LoadPermissionsAsync();
+ AsyncRead();
+}
+
+void WorldSocket::LoadSessionPermissionsCallback(PreparedQueryResult result)
+{
+ // RBAC must be loaded before adding session to check for skip queue permission
+ _worldSession->GetRBACData()->LoadFromDBCallback(result);
sWorld->AddSession(_worldSession);
}
diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h
index 0f6acd0d72c..f0da520cf4c 100644
--- a/src/server/game/Server/WorldSocket.h
+++ b/src/server/game/Server/WorldSocket.h
@@ -45,8 +45,12 @@ struct ClientPktHeader
#pragma pack(pop)
+struct AuthSession;
+
class WorldSocket : public Socket<WorldSocket>
{
+ typedef Socket<WorldSocket> BaseSocket;
+
public:
WorldSocket(tcp::socket&& socket);
@@ -54,6 +58,7 @@ public:
WorldSocket& operator=(WorldSocket const& right) = delete;
void Start() override;
+ bool Update() override;
void SendPacket(WorldPacket const& packet);
@@ -61,9 +66,19 @@ protected:
void OnClose() override;
void ReadHandler() override;
bool ReadHeaderHandler();
- bool ReadDataHandler();
+
+ enum class ReadDataHandlerResult
+ {
+ Ok = 0,
+ Error = 1,
+ WaitingForQuery = 2
+ };
+
+ ReadDataHandlerResult ReadDataHandler();
private:
+ void CheckIpCallback(PreparedQueryResult result);
+
/// writes network.opcode log
/// accessing WorldSession is not threadsafe, only do it when holding _worldSessionLock
void LogOpcodeText(uint16 opcode, std::unique_lock<std::mutex> const& guard) const;
@@ -71,6 +86,8 @@ private:
void SendPacketAndLogOpcode(WorldPacket const& packet);
void HandleSendAuthSession();
void HandleAuthSession(WorldPacket& recvPacket);
+ void HandleAuthSessionCallback(std::shared_ptr<AuthSession> authSession, PreparedQueryResult result);
+ void LoadSessionPermissionsCallback(PreparedQueryResult result);
void SendAuthResponseError(uint8 code);
bool HandlePing(WorldPacket& recvPacket);
@@ -87,6 +104,11 @@ private:
MessageBuffer _headerBuffer;
MessageBuffer _packetBuffer;
+
+ std::mutex _queryLock;
+ PreparedQueryResultFuture _queryFuture;
+ std::function<void(PreparedQueryResult&&)> _queryCallback;
+ std::string _ipCountry;
};
#endif
diff --git a/src/server/game/Skills/SkillExtraItems.cpp b/src/server/game/Skills/SkillExtraItems.cpp
index 8df9ce86f9a..50e00b24133 100644
--- a/src/server/game/Skills/SkillExtraItems.cpp
+++ b/src/server/game/Skills/SkillExtraItems.cpp
@@ -20,11 +20,98 @@
#include "DatabaseEnv.h"
#include "Log.h"
#include "Player.h"
+#include "ObjectMgr.h"
#include <map>
// some type definitions
// no use putting them in the header file, they're only used in this .cpp
+// struct to store information about perfection procs
+// one entry per spell
+struct SkillPerfectItemEntry
+{
+ // the spell id of the spell required - it's named "specialization" to conform with SkillExtraItemEntry
+ uint32 requiredSpecialization;
+ // perfection proc chance
+ float perfectCreateChance;
+ // itemid of the resulting perfect item
+ uint32 perfectItemType;
+
+ SkillPerfectItemEntry()
+ : requiredSpecialization(0), perfectCreateChance(0.0f), perfectItemType(0) { }
+ SkillPerfectItemEntry(uint32 rS, float pCC, uint32 pIT)
+ : requiredSpecialization(rS), perfectCreateChance(pCC), perfectItemType(pIT) { }
+};
+
+// map to store perfection info. key = spellId of the creation spell, value is the perfectitementry as specified above
+typedef std::map<uint32, SkillPerfectItemEntry> SkillPerfectItemMap;
+
+SkillPerfectItemMap SkillPerfectItemStore;
+
+// loads the perfection proc info from DB
+void LoadSkillPerfectItemTable()
+{
+ uint32 oldMSTime = getMSTime();
+
+ SkillPerfectItemStore.clear(); // reload capability
+
+ // 0 1 2 3
+ QueryResult result = WorldDatabase.Query("SELECT spellId, requiredSpecialization, perfectCreateChance, perfectItemType FROM skill_perfect_item_template");
+
+ if (!result)
+ {
+ TC_LOG_ERROR("server.loading", ">> Loaded 0 spell perfection definitions. DB table `skill_perfect_item_template` is empty.");
+ return;
+ }
+
+ uint32 count = 0;
+
+ do /* fetch data and run sanity checks */
+ {
+ Field* fields = result->Fetch();
+
+ uint32 spellId = fields[0].GetUInt32();
+
+ if (!sSpellMgr->GetSpellInfo(spellId))
+ {
+ TC_LOG_ERROR("sql.sql", "Skill perfection data for spell %u has non-existent spell id in `skill_perfect_item_template`!", spellId);
+ continue;
+ }
+
+ uint32 requiredSpecialization = fields[1].GetUInt32();
+ if (!sSpellMgr->GetSpellInfo(requiredSpecialization))
+ {
+ TC_LOG_ERROR("sql.sql", "Skill perfection data for spell %u has non-existent required specialization spell id %u in `skill_perfect_item_template`!", spellId, requiredSpecialization);
+ continue;
+ }
+
+ float perfectCreateChance = fields[2].GetFloat();
+ if (perfectCreateChance <= 0.0f)
+ {
+ TC_LOG_ERROR("sql.sql", "Skill perfection data for spell %u has impossibly low proc chance in `skill_perfect_item_template`!", spellId);
+ continue;
+ }
+
+ uint32 perfectItemType = fields[3].GetUInt32();
+ if (!sObjectMgr->GetItemTemplate(perfectItemType))
+ {
+ TC_LOG_ERROR("sql.sql", "Skill perfection data for spell %u references non-existent perfect item id %u in `skill_perfect_item_template`!", spellId, perfectItemType);
+ continue;
+ }
+
+ SkillPerfectItemEntry& skillPerfectItemEntry = SkillPerfectItemStore[spellId];
+
+ skillPerfectItemEntry.requiredSpecialization = requiredSpecialization;
+ skillPerfectItemEntry.perfectCreateChance = perfectCreateChance;
+ skillPerfectItemEntry.perfectItemType = perfectItemType;
+
+ ++count;
+ }
+ while (result->NextRow());
+
+ TC_LOG_INFO("server.loading", ">> Loaded %u spell perfection definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
+}
+
// struct to store information about extra item creation
// one entry for every spell that is able to create an extra item
struct SkillExtraItemEntry
@@ -112,6 +199,30 @@ void LoadSkillExtraItemTable()
TC_LOG_INFO("server.loading", ">> Loaded %u spell specialization definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
}
+bool CanCreatePerfectItem(Player* player, uint32 spellId, float &perfectCreateChance, uint32 &perfectItemType)
+{
+ SkillPerfectItemMap::const_iterator ret = SkillPerfectItemStore.find(spellId);
+ // no entry in DB means no perfection proc possible
+ if (ret == SkillPerfectItemStore.end())
+ return false;
+
+ SkillPerfectItemEntry const* thisEntry = &ret->second;
+ // lack of entry means no perfection proc possible
+ if (!thisEntry)
+ return false;
+
+ // if you don't have the spell needed, then no procs for you
+ if (!player->HasSpell(thisEntry->requiredSpecialization))
+ return false;
+
+ // set values as appropriate
+ perfectCreateChance = thisEntry->perfectCreateChance;
+ perfectItemType = thisEntry->perfectItemType;
+
+ // and tell the caller to start rolling the dice
+ return true;
+}
+
bool CanCreateExtraItems(Player* player, uint32 spellId, float &additionalChance, uint8 &additionalMax)
{
// get the info for the specified spell
diff --git a/src/server/game/Skills/SkillExtraItems.h b/src/server/game/Skills/SkillExtraItems.h
index 0cdfff74ed2..118c49ed00f 100644
--- a/src/server/game/Skills/SkillExtraItems.h
+++ b/src/server/game/Skills/SkillExtraItems.h
@@ -23,6 +23,10 @@
// predef classes used in functions
class Player;
+// returns true and sets the appropriate info if the player can create a perfect item with the given spellId
+bool CanCreatePerfectItem(Player* player, uint32 spellId, float &perfectCreateChance, uint32 &perfectItemType);
+// load perfection proc info from DB
+void LoadSkillPerfectItemTable();
// returns true and sets the appropriate info if the player can create extra items with the given spellId
bool CanCreateExtraItems(Player* player, uint32 spellId, float &additionalChance, uint8 &additionalMax);
// function to load the extra item creation info from DB
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index f7491175a50..01f27a38e9c 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -541,10 +541,7 @@ void AuraEffect::CalculatePeriodic(Unit* caster, bool create, bool load)
{
// Haste modifies periodic time of channeled spells
if (m_spellInfo->IsChanneled())
- {
- if (m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION))
- caster->ModSpellCastTime(m_spellInfo, m_amplitude);
- }
+ caster->ModSpellDurationTime(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->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION))
m_amplitude = int32(m_amplitude * caster->GetFloatValue(UNIT_MOD_CAST_SPEED));
@@ -1134,7 +1131,7 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
if (!spellInfo || !(spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) || spellInfo->HasAttribute(SPELL_ATTR0_HIDDEN_CLIENTSIDE)))
continue;
- if (spellInfo->Stances & (1<<(GetMiscValue()-1)))
+ if (spellInfo->Stances & (UI64LIT(1) << (GetMiscValue() - 1)))
target->CastSpell(target, itr->first, true, NULL, this);
}
@@ -1148,7 +1145,8 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(glyph->SpellId);
if (!spellInfo || !(spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) || spellInfo->HasAttribute(SPELL_ATTR0_HIDDEN_CLIENTSIDE)))
continue;
- if (spellInfo->Stances & (1<<(GetMiscValue()-1)))
+
+ if (spellInfo->Stances & (UI64LIT(1) << (GetMiscValue() - 1)))
target->CastSpell(target, glyph->SpellId, true, NULL, this);
}
}
@@ -1158,7 +1156,7 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
if (target->ToPlayer()->HasSpell(17007))
{
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(24932);
- if (spellInfo && spellInfo->Stances & (1<<(GetMiscValue()-1)))
+ if (spellInfo && spellInfo->Stances & (UI64LIT(1) << (GetMiscValue() - 1)))
target->CastSpell(target, 24932, true, NULL, this);
}
// Improved Barkskin - apply/remove armor bonus due to shapeshift
@@ -1278,14 +1276,8 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
for (Unit::AuraApplicationMap::iterator itr = tAuras.begin(); itr != tAuras.end();)
{
// Use the new aura to see on what stance the target will be
- uint32 newStance = 0;
- if (newAura)
- {
- if (newAura->GetMiscValue() > 0 && newAura->GetMiscValue() <= 32) //Not null and GetMiscValue is not == FORM_NONE
- newStance = 1 << (newAura->GetMiscValue() - 1);
- else
- TC_LOG_ERROR("spell.aura", "newAura->GetMiscValue() returned value %i for SpellID: %u when it was expecting a value in range [0..31] for a bitshift", newAura->GetMiscValue(), newAura->GetId());
- }
+ uint64 newStance = newAura ? (UI64LIT(1) << (newAura->GetMiscValue() - 1)) : 0;
+
// If the stances are not compatible with the spell, remove it
if (itr->second->GetBase()->IsRemovedOnShapeLost(target) && !(itr->second->GetBase()->GetSpellInfo()->Stances & newStance))
target->RemoveAura(itr);
@@ -1556,7 +1548,7 @@ void AuraEffect::HandlePhase(AuraApplication const* aurApp, uint8 mode, bool app
{
newPhase = PHASEMASK_NORMAL;
if (Creature* creature = target->ToCreature())
- if (CreatureData const* data = sObjectMgr->GetCreatureData(creature->GetDBTableGUIDLow()))
+ if (CreatureData const* data = sObjectMgr->GetCreatureData(creature->GetSpawnId()))
newPhase = data->phaseMask;
}
@@ -1871,43 +1863,43 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode,
{
// Blood Elf
case RACE_BLOODELF:
- target->SetDisplayId(target->getGender() == GENDER_MALE ? 17829 : 17830);
+ target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 17830 : 17829);
break;
// Orc
case RACE_ORC:
- target->SetDisplayId(target->getGender() == GENDER_MALE ? 10139 : 10140);
+ target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10140 : 10139);
break;
// Troll
case RACE_TROLL:
- target->SetDisplayId(target->getGender() == GENDER_MALE ? 10135 : 10134);
+ target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10134 : 10135);
break;
// Tauren
case RACE_TAUREN:
- target->SetDisplayId(target->getGender() == GENDER_MALE ? 10136 : 10147);
+ target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10147 : 10136);
break;
// Undead
case RACE_UNDEAD_PLAYER:
- target->SetDisplayId(target->getGender() == GENDER_MALE ? 10146 : 10145);
+ target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10145 : 10146);
break;
// Draenei
case RACE_DRAENEI:
- target->SetDisplayId(target->getGender() == GENDER_MALE ? 17827 : 17828);
+ target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 17828 : 17827);
break;
// Dwarf
case RACE_DWARF:
- target->SetDisplayId(target->getGender() == GENDER_MALE ? 10141 : 10142);
+ target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10142 : 10141);
break;
// Gnome
case RACE_GNOME:
- target->SetDisplayId(target->getGender() == GENDER_MALE ? 10148 : 10149);
+ target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10149 : 10148);
break;
// Human
case RACE_HUMAN:
- target->SetDisplayId(target->getGender() == GENDER_MALE ? 10137 : 10138);
+ target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10138 : 10137);
break;
// Night Elf
case RACE_NIGHTELF:
- target->SetDisplayId(target->getGender() == GENDER_MALE ? 10143 : 10144);
+ target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10144 : 10143);
break;
default:
break;
@@ -4651,17 +4643,10 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
{
if (caster)
{
- switch (caster->getGender())
- {
- case GENDER_FEMALE:
- caster->CastSpell(target, 37095, true, NULL, this); // Blood Elf Disguise
- break;
- case GENDER_MALE:
- caster->CastSpell(target, 37093, true, NULL, this);
- break;
- default:
- break;
- }
+ if (caster->getGender() == GENDER_FEMALE)
+ caster->CastSpell(target, 37095, true, NULL, this); // Blood Elf Disguise
+ else
+ caster->CastSpell(target, 37093, true, NULL, this);
}
break;
}
@@ -4691,15 +4676,10 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
case 46354: // Blood Elf Illusion
if (caster)
{
- switch (caster->getGender())
- {
- case GENDER_FEMALE:
- caster->CastSpell(target, 46356, true, NULL, this);
- break;
- case GENDER_MALE:
- caster->CastSpell(target, 46355, true, NULL, this);
- break;
- }
+ if (caster->getGender() == GENDER_FEMALE)
+ caster->CastSpell(target, 46356, true, NULL, this);
+ else
+ caster->CastSpell(target, 46355, true, NULL, this);
}
break;
case 46361: // Reinforced Net
@@ -5582,7 +5562,7 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster)
case 31347:
{
target->CastSpell(target, 31350, true, NULL, this);
- target->Kill(target);
+ target->KillSelf();
return;
}
// Spellcloth
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index 4eea5eed03d..93b8c3eb368 100644
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -323,7 +323,7 @@ Aura* Aura::Create(SpellInfo const* spellproto, uint8 effMask, WorldObject* owne
aura = new DynObjAura(spellproto, effMask, owner, caster, baseAmount, castItem, casterGUID);
break;
default:
- ASSERT(false);
+ ABORT();
return NULL;
}
// aura can be removed in Unit::_AddAura call
@@ -436,8 +436,8 @@ void Aura::_UnapplyForTarget(Unit* target, Unit* caster, AuraApplication * auraA
if (itr == m_applications.end())
{
TC_LOG_ERROR("spells", "Aura::_UnapplyForTarget, target:%u, caster:%u, spell:%u was not found in owners application map!",
- target->GetGUIDLow(), caster ? caster->GetGUIDLow() : 0, auraApp->GetBase()->GetSpellInfo()->Id);
- ASSERT(false);
+ target->GetGUID().GetCounter(), caster ? caster->GetGUID().GetCounter() : 0, auraApp->GetBase()->GetSpellInfo()->Id);
+ ABORT();
}
// aura has to be already applied
@@ -528,7 +528,7 @@ void Aura::UpdateTargetMap(Unit* caster, bool apply)
else
{
// ok, we have one unit twice in target map (impossible, but...)
- ASSERT(false);
+ ABORT();
}
}
@@ -586,7 +586,7 @@ void Aura::UpdateTargetMap(Unit* caster, bool apply)
TC_LOG_FATAL("spells", "Aura %u: Owner %s (map %u) is not in the same map as target %s (map %u).", GetSpellInfo()->Id,
GetOwner()->GetName().c_str(), GetOwner()->IsInWorld() ? GetOwner()->GetMap()->GetId() : uint32(-1),
itr->first->GetName().c_str(), itr->first->IsInWorld() ? itr->first->GetMap()->GetId() : uint32(-1));
- ASSERT(false);
+ ABORT();
}
itr->first->_CreateAuraApplication(this, itr->second);
++itr;
@@ -1022,9 +1022,6 @@ void Aura::UnregisterSingleTarget()
{
ASSERT(m_isSingleTarget);
Unit* caster = GetCaster();
- /// @todo find a better way to do this.
- if (!caster)
- caster = ObjectAccessor::GetObjectInOrOutOfWorld(GetCasterGUID(), (Unit*)NULL);
ASSERT(caster);
caster->GetSingleCastAuras().remove(this);
SetIsSingleTarget(false);
@@ -1490,7 +1487,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
{
// This additional check is needed to add a minimal delay before cooldown in in effect
// to allow all bubbles broken by a single damage source proc mana return
- if (caster->GetSpellHistory()->GetRemainingCooldown(aura->GetId()) <= 11)
+ if (caster->GetSpellHistory()->GetRemainingCooldown(aura->GetSpellInfo()) <= 11)
break;
}
else // and add if needed
@@ -1923,9 +1920,7 @@ bool Aura::IsProcTriggeredOnEvent(AuraApplication* aurApp, ProcEventInfo& eventI
return false;
// do checks using conditions table
- ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_SPELL_PROC, GetId());
- ConditionSourceInfo condInfo = ConditionSourceInfo(eventInfo.GetActor(), eventInfo.GetActionTarget());
- if (!sConditionMgr->IsObjectMeetToConditions(condInfo, conditions))
+ if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_SPELL_PROC, GetId(), eventInfo.GetActor(), eventInfo.GetActionTarget()))
return false;
// AuraScript Hook
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 03f14d1cdc8..4f3b60d6f37 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -53,6 +53,7 @@
#include "SpellHistory.h"
#include "Battlefield.h"
#include "BattlefieldMgr.h"
+#include "TradeData.h"
extern pEffect SpellEffects[TOTAL_SPELL_EFFECTS];
@@ -210,10 +211,10 @@ ObjectGuid SpellCastTargets::GetOrigUnitTargetGUID() const
{
switch (m_origObjectTargetGUID.GetHigh())
{
- case HIGHGUID_PLAYER:
- case HIGHGUID_VEHICLE:
- case HIGHGUID_UNIT:
- case HIGHGUID_PET:
+ case HighGuid::Player:
+ case HighGuid::Vehicle:
+ case HighGuid::Unit:
+ case HighGuid::Pet:
return m_origObjectTargetGUID;
default:
return ObjectGuid();
@@ -1019,7 +1020,7 @@ void Spell::SelectImplicitNearbyTargets(SpellEffIndex effIndex, SpellImplicitTar
break;
}
- ConditionList* condList = m_spellInfo->Effects[effIndex].ImplicitTargetConditions;
+ ConditionContainer* condList = m_spellInfo->Effects[effIndex].ImplicitTargetConditions;
// handle emergency case - try to use other provided targets if no conditions provided
if (targetType.GetCheckType() == TARGET_CHECK_ENTRY && (!condList || condList->empty()))
@@ -1105,7 +1106,7 @@ void Spell::SelectImplicitConeTargets(SpellEffIndex effIndex, SpellImplicitTarge
std::list<WorldObject*> targets;
SpellTargetObjectTypes objectType = targetType.GetObjectType();
SpellTargetCheckTypes selectionType = targetType.GetCheckType();
- ConditionList* condList = m_spellInfo->Effects[effIndex].ImplicitTargetConditions;
+ ConditionContainer* condList = m_spellInfo->Effects[effIndex].ImplicitTargetConditions;
float coneAngle = float(M_PI) / 2;
float radius = m_spellInfo->Effects[effIndex].CalcRadius(m_caster) * m_spellValue->RadiusMod;
@@ -1725,7 +1726,7 @@ void Spell::SelectEffectTypeImplicitTargets(uint8 effIndex)
}
}
-uint32 Spell::GetSearcherTypeMask(SpellTargetObjectTypes objType, ConditionList* condList)
+uint32 Spell::GetSearcherTypeMask(SpellTargetObjectTypes objType, ConditionContainer* condList)
{
// this function selects which containers need to be searched for spell target
uint32 retMask = GRID_MAP_TYPE_MASK_ALL;
@@ -1793,7 +1794,7 @@ void Spell::SearchTargets(SEARCHER& searcher, uint32 containerMask, Unit* refere
}
}
-WorldObject* Spell::SearchNearbyTarget(float range, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionList* condList)
+WorldObject* Spell::SearchNearbyTarget(float range, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionContainer* condList)
{
WorldObject* target = NULL;
uint32 containerTypeMask = GetSearcherTypeMask(objectType, condList);
@@ -1805,7 +1806,7 @@ WorldObject* Spell::SearchNearbyTarget(float range, SpellTargetObjectTypes objec
return target;
}
-void Spell::SearchAreaTargets(std::list<WorldObject*>& targets, float range, Position const* position, Unit* referer, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionList* condList)
+void Spell::SearchAreaTargets(std::list<WorldObject*>& targets, float range, Position const* position, Unit* referer, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionContainer* condList)
{
uint32 containerTypeMask = GetSearcherTypeMask(objectType, condList);
if (!containerTypeMask)
@@ -1815,7 +1816,7 @@ void Spell::SearchAreaTargets(std::list<WorldObject*>& targets, float range, Pos
SearchTargets<Trinity::WorldObjectListSearcher<Trinity::WorldObjectSpellAreaTargetCheck> > (searcher, containerTypeMask, m_caster, position, range);
}
-void Spell::SearchChainTargets(std::list<WorldObject*>& targets, uint32 chainTargets, WorldObject* target, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectType, ConditionList* condList, bool isChainHeal)
+void Spell::SearchChainTargets(std::list<WorldObject*>& targets, uint32 chainTargets, WorldObject* target, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectType, ConditionContainer* condList, bool isChainHeal)
{
// max dist for jump target selection
float jumpRadius = 0.0f;
@@ -2218,6 +2219,9 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
uint8 mask = target->effectMask;
Unit* unit = m_caster->GetGUID() == target->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, target->targetGUID);
+ if (!unit && !target->targetGUID.IsPlayer()) // only players may be targeted across maps
+ return;
+
if (!unit)
{
uint8 farMask = 0;
@@ -2230,7 +2234,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
if (!farMask)
return;
// find unit in world
- unit = ObjectAccessor::FindUnit(target->targetGUID);
+ unit = ObjectAccessor::FindPlayer(target->targetGUID);
if (!unit)
return;
@@ -2425,9 +2429,8 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
{
m_caster->CombatStart(unit, !m_spellInfo->HasAttribute(SPELL_ATTR3_NO_INITIAL_AGGRO));
- if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_AURA_CC))
- if (!unit->IsStandState())
- unit->SetStandState(UNIT_STAND_STATE_STAND);
+ if (!unit->IsStandState())
+ unit->SetStandState(UNIT_STAND_STATE_STAND);
}
if (spellHitTarget)
@@ -2511,8 +2514,8 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
if (m_caster->_IsValidAttackTarget(unit, m_spellInfo))
{
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->HasAttribute(SPELL_ATTR0_CU_AURA_CC) && unit->IsControlledByPlayer())
+
+ if (!m_spellInfo->HasAttribute(SPELL_ATTR0_CU_DONT_BREAK_STEALTH))
unit->RemoveAurasByType(SPELL_AURA_MOD_STEALTH);
}
else if (m_caster->IsFriendlyTo(unit))
@@ -2621,7 +2624,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
// Haste modifies duration of channeled spells
if (m_spellInfo->IsChanneled())
- m_originalCaster->ModSpellCastTime(aurSpellInfo, duration, this);
+ m_originalCaster->ModSpellDurationTime(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->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION))
duration = int32(duration * m_originalCaster->GetFloatValue(UNIT_MOD_CAST_SPEED));
@@ -3255,7 +3258,7 @@ void Spell::handle_immediate()
modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_DURATION, duration);
// Apply haste mods
- m_caster->ModSpellCastTime(m_spellInfo, duration, this);
+ m_caster->ModSpellDurationTime(m_spellInfo, duration, this);
m_spellState = SPELL_STATE_CASTING;
m_caster->AddInterruptMask(m_spellInfo->ChannelInterruptFlags);
@@ -3428,7 +3431,7 @@ void Spell::_handle_finish_phase()
if (m_caster->m_extraAttacks && m_spellInfo->HasEffect(SPELL_EFFECT_ADD_EXTRA_ATTACKS))
{
- if (Unit* victim = ObjectAccessor::FindUnit(m_targets.GetOrigUnitTargetGUID()))
+ if (Unit* victim = ObjectAccessor::GetUnit(*m_caster, m_targets.GetOrigUnitTargetGUID()))
m_caster->HandleProcExtraAttackFor(victim);
else
m_caster->m_extraAttacks = 0;
@@ -3557,7 +3560,7 @@ void Spell::finish(bool ok)
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell);
if (spellInfo && spellInfo->SpellIconID == 2056)
{
- TC_LOG_DEBUG("spells", "Statue %d is unsummoned in spell %d finish", m_caster->GetGUIDLow(), m_spellInfo->Id);
+ TC_LOG_DEBUG("spells", "Statue %d is unsummoned in spell %d finish", m_caster->GetGUID().GetCounter(), m_spellInfo->Id);
m_caster->setDeathState(JUST_DIED);
return;
}
@@ -4241,7 +4244,7 @@ void Spell::TakeCastItem()
{
// This code is to avoid a crash
// I'm not sure, if this is really an error, but I guess every item needs a prototype
- TC_LOG_ERROR("spells", "Cast item has no item prototype highId=%d, lowId=%d", m_CastItem->GetGUIDHigh(), m_CastItem->GetGUIDLow());
+ TC_LOG_ERROR("spells", "Cast item has no item prototype %s", m_CastItem->GetGUID().ToString().c_str());
return;
}
@@ -4250,7 +4253,7 @@ void Spell::TakeCastItem()
for (int i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i)
{
- if (proto->Spells[i].SpellId)
+ if (proto->Spells[i].SpellId > 0)
{
// item has limited charges
if (proto->Spells[i].SpellCharges)
@@ -4665,7 +4668,7 @@ SpellCastResult Spell::CheckCast(bool strict)
return SPELL_FAILED_NOT_READY;
}
- if (!m_caster->GetSpellHistory()->IsReady(m_spellInfo))
+ if (!m_caster->GetSpellHistory()->IsReady(m_spellInfo, m_castItemEntry))
{
if (m_triggeredByAuraSpell)
return SPELL_FAILED_DONT_REPORT;
@@ -4786,10 +4789,8 @@ SpellCastResult Spell::CheckCast(bool strict)
// check spell cast conditions from database
{
- ConditionSourceInfo condInfo = ConditionSourceInfo(m_caster);
- condInfo.mConditionTargets[1] = m_targets.GetObjectTarget();
- ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_SPELL, m_spellInfo->Id);
- if (!conditions.empty() && !sConditionMgr->IsObjectMeetToConditions(condInfo, conditions))
+ ConditionSourceInfo condInfo = ConditionSourceInfo(m_caster, m_targets.GetObjectTarget());
+ if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_SPELL, m_spellInfo->Id, condInfo))
{
// mLastFailedCondition can be NULL if there was an error processing the condition in Condition::Meets (i.e. wrong data for ConditionTarget or others)
if (condInfo.mLastFailedCondition && condInfo.mLastFailedCondition->ErrorType)
@@ -6043,7 +6044,7 @@ SpellCastResult Spell::CheckItems()
for (uint8 e = 0; e < MAX_ITEM_PROTO_SPELLS; ++e)
{
ItemTemplate const* proto = targetItem->GetTemplate();
- if (proto->Spells[e].SpellId && (
+ if (proto->Spells[e].SpellId > 0 && (
proto->Spells[e].SpellTrigger == ITEM_SPELLTRIGGER_ON_USE ||
proto->Spells[e].SpellTrigger == ITEM_SPELLTRIGGER_ON_NO_DELAY_USE))
{
@@ -6585,8 +6586,8 @@ SpellEvent::~SpellEvent()
else
{
TC_LOG_ERROR("spells", "~SpellEvent: %s %u tried to delete non-deletable spell %u. Was not deleted, causes memory leak.",
- (m_Spell->GetCaster()->GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), m_Spell->GetCaster()->GetGUIDLow(), m_Spell->m_spellInfo->Id);
- ASSERT(false);
+ (m_Spell->GetCaster()->GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), m_Spell->GetCaster()->GetGUID().GetCounter(), m_Spell->m_spellInfo->Id);
+ ABORT();
}
}
@@ -7044,7 +7045,7 @@ bool Spell::CallScriptEffectHandlers(SpellEffIndex effIndex, SpellEffectHandleMo
hookType = SPELL_SCRIPT_HOOK_EFFECT_HIT_TARGET;
break;
default:
- ASSERT(false);
+ ABORT();
return false;
}
(*scritr)->_PrepareScriptCall(hookType);
@@ -7312,7 +7313,7 @@ namespace Trinity
{
WorldObjectSpellTargetCheck::WorldObjectSpellTargetCheck(Unit* caster, Unit* referer, SpellInfo const* spellInfo,
- SpellTargetCheckTypes selectionType, ConditionList* condList) : _caster(caster), _referer(referer), _spellInfo(spellInfo),
+ SpellTargetCheckTypes selectionType, ConditionContainer* condList) : _caster(caster), _referer(referer), _spellInfo(spellInfo),
_targetSelectionType(selectionType), _condList(condList)
{
if (condList)
@@ -7386,7 +7387,7 @@ bool WorldObjectSpellTargetCheck::operator()(WorldObject* target)
}
WorldObjectSpellNearbyTargetCheck::WorldObjectSpellNearbyTargetCheck(float range, Unit* caster, SpellInfo const* spellInfo,
- SpellTargetCheckTypes selectionType, ConditionList* condList)
+ SpellTargetCheckTypes selectionType, ConditionContainer* condList)
: WorldObjectSpellTargetCheck(caster, caster, spellInfo, selectionType, condList), _range(range), _position(caster) { }
bool WorldObjectSpellNearbyTargetCheck::operator()(WorldObject* target)
@@ -7401,7 +7402,7 @@ bool WorldObjectSpellNearbyTargetCheck::operator()(WorldObject* target)
}
WorldObjectSpellAreaTargetCheck::WorldObjectSpellAreaTargetCheck(float range, Position const* position, Unit* caster,
- Unit* referer, SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionList* condList)
+ Unit* referer, SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionContainer* condList)
: WorldObjectSpellTargetCheck(caster, referer, spellInfo, selectionType, condList), _range(range), _position(position) { }
bool WorldObjectSpellAreaTargetCheck::operator()(WorldObject* target)
@@ -7412,7 +7413,7 @@ bool WorldObjectSpellAreaTargetCheck::operator()(WorldObject* target)
}
WorldObjectSpellConeTargetCheck::WorldObjectSpellConeTargetCheck(float coneAngle, float range, Unit* caster,
- SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionList* condList)
+ SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionContainer* condList)
: WorldObjectSpellAreaTargetCheck(range, caster, caster, caster, spellInfo, selectionType, condList), _coneAngle(coneAngle) { }
bool WorldObjectSpellConeTargetCheck::operator()(WorldObject* target)
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index 1aac88ac602..6b96f56c538 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -374,12 +374,12 @@ class Spell
void SelectEffectTypeImplicitTargets(uint8 effIndex);
- uint32 GetSearcherTypeMask(SpellTargetObjectTypes objType, ConditionList* condList);
+ uint32 GetSearcherTypeMask(SpellTargetObjectTypes objType, ConditionContainer* condList);
template<class SEARCHER> void SearchTargets(SEARCHER& searcher, uint32 containerMask, Unit* referer, Position const* pos, float radius);
- WorldObject* SearchNearbyTarget(float range, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionList* condList = NULL);
- void SearchAreaTargets(std::list<WorldObject*>& targets, float range, Position const* position, Unit* referer, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionList* condList);
- void SearchChainTargets(std::list<WorldObject*>& targets, uint32 chainTargets, WorldObject* target, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectType, ConditionList* condList, bool isChainHeal);
+ WorldObject* SearchNearbyTarget(float range, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionContainer* condList = NULL);
+ void SearchAreaTargets(std::list<WorldObject*>& targets, float range, Position const* position, Unit* referer, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionContainer* condList);
+ void SearchChainTargets(std::list<WorldObject*>& targets, uint32 chainTargets, WorldObject* target, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectType, ConditionContainer* condList, bool isChainHeal);
GameObject* SearchSpellFocus();
@@ -583,6 +583,8 @@ class Spell
// Targets store structures and data
struct TargetInfo
{
+ // a bug in gcc-4.7 needs a destructor to call move operator instead of copy operator in std::vector remove
+ ~TargetInfo() { }
ObjectGuid targetGUID;
uint64 timeDelay;
SpellMissInfo missCondition:8;
@@ -712,10 +714,10 @@ namespace Trinity
SpellInfo const* _spellInfo;
SpellTargetCheckTypes _targetSelectionType;
ConditionSourceInfo* _condSrcInfo;
- ConditionList* _condList;
+ ConditionContainer* _condList;
WorldObjectSpellTargetCheck(Unit* caster, Unit* referer, SpellInfo const* spellInfo,
- SpellTargetCheckTypes selectionType, ConditionList* condList);
+ SpellTargetCheckTypes selectionType, ConditionContainer* condList);
~WorldObjectSpellTargetCheck();
bool operator()(WorldObject* target);
};
@@ -725,7 +727,7 @@ namespace Trinity
float _range;
Position const* _position;
WorldObjectSpellNearbyTargetCheck(float range, Unit* caster, SpellInfo const* spellInfo,
- SpellTargetCheckTypes selectionType, ConditionList* condList);
+ SpellTargetCheckTypes selectionType, ConditionContainer* condList);
bool operator()(WorldObject* target);
};
@@ -734,7 +736,7 @@ namespace Trinity
float _range;
Position const* _position;
WorldObjectSpellAreaTargetCheck(float range, Position const* position, Unit* caster,
- Unit* referer, SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionList* condList);
+ Unit* referer, SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionContainer* condList);
bool operator()(WorldObject* target);
};
@@ -742,7 +744,7 @@ namespace Trinity
{
float _coneAngle;
WorldObjectSpellConeTargetCheck(float coneAngle, float range, Unit* caster,
- SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionList* condList);
+ SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionContainer* condList);
bool operator()(WorldObject* target);
};
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 91eb7330dda..b3ab72dcbff 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -1232,7 +1232,7 @@ void Spell::EffectUnlearnSpecialization(SpellEffIndex effIndex)
player->RemoveSpell(spellToUnlearn);
- TC_LOG_DEBUG("spells", "Spell: Player %u has unlearned spell %u from NpcGUID: %u", player->GetGUIDLow(), spellToUnlearn, m_caster->GetGUIDLow());
+ TC_LOG_DEBUG("spells", "Spell: Player %u has unlearned spell %u from NpcGUID: %u", player->GetGUID().GetCounter(), spellToUnlearn, m_caster->GetGUID().GetCounter());
}
void Spell::EffectPowerDrain(SpellEffIndex effIndex)
@@ -1571,6 +1571,22 @@ void Spell::DoCreateItem(uint32 /*i*/, uint32 itemtype)
if (num_to_add > pProto->GetMaxStackSize())
num_to_add = pProto->GetMaxStackSize();
+ /* == gem perfection handling == */
+
+ // the chance of getting a perfect result
+ float perfectCreateChance = 0.0f;
+ // the resulting perfect item if successful
+ uint32 perfectItemType = itemtype;
+ // get perfection capability and chance
+ if (CanCreatePerfectItem(player, m_spellInfo->Id, perfectCreateChance, perfectItemType))
+ if (roll_chance_f(perfectCreateChance)) // if the roll succeeds...
+ newitemid = perfectItemType; // the perfect item replaces the regular one
+
+ /* == gem perfection handling over == */
+
+
+ /* == profession specialization handling == */
+
// init items_count to 1, since 1 item will be created regardless of specialization
int items_count=1;
// the chance to create additional items
@@ -1579,15 +1595,16 @@ void Spell::DoCreateItem(uint32 /*i*/, uint32 itemtype)
uint8 additionalMaxNum=0;
// get the chance and maximum number for creating extra items
if (CanCreateExtraItems(player, m_spellInfo->Id, additionalCreateChance, additionalMaxNum))
- {
// roll with this chance till we roll not to create or we create the max num
while (roll_chance_f(additionalCreateChance) && items_count <= additionalMaxNum)
++items_count;
- }
// really will be created more items
num_to_add *= items_count;
+ /* == profession specialization handling over == */
+
+
// can the player store the new item?
ItemPosCountVec dest;
uint32 no_space = 0;
@@ -1712,7 +1729,7 @@ void Spell::EffectPersistentAA(SpellEffIndex effIndex)
if (!caster->IsInWorld())
return;
DynamicObject* dynObj = new DynamicObject(false);
- if (!dynObj->CreateDynamicObject(sObjectMgr->GenerateLowGuid(HIGHGUID_DYNAMICOBJECT), caster, m_spellInfo->Id, *destTarget, radius, DYNAMIC_OBJECT_AREA_SPELL))
+ if (!dynObj->CreateDynamicObject(caster->GetMap()->GenerateLowGuid<HighGuid::DynamicObject>(), caster, m_spellInfo->Id, *destTarget, radius, DYNAMIC_OBJECT_AREA_SPELL))
{
delete dynObj;
return;
@@ -1884,7 +1901,7 @@ void Spell::SendLoot(ObjectGuid guid, LootType loottype)
if (!gameObjTarget->isSpawned() && !player->IsGameMaster())
{
TC_LOG_ERROR("spells", "Possible hacking attempt: Player %s [guid: %u] tried to loot a gameobject [entry: %u id: %u] which is on respawn time without being in GM mode!",
- player->GetName().c_str(), player->GetGUIDLow(), gameObjTarget->GetEntry(), gameObjTarget->GetGUIDLow());
+ player->GetName().c_str(), player->GetGUID().GetCounter(), gameObjTarget->GetEntry(), gameObjTarget->GetGUID().GetCounter());
return;
}
// special case, already has GossipHello inside so return and avoid calling twice
@@ -1922,7 +1939,7 @@ void Spell::SendLoot(ObjectGuid guid, LootType loottype)
/// @todo possible must be moved to loot release (in different from linked triggering)
if (gameObjTarget->GetGOInfo()->chest.eventId)
{
- TC_LOG_DEBUG("spells", "Chest ScriptStart id %u for GO %u", gameObjTarget->GetGOInfo()->chest.eventId, gameObjTarget->GetDBTableGUIDLow());
+ TC_LOG_DEBUG("spells", "Chest ScriptStart id %u for GO %u", gameObjTarget->GetGOInfo()->chest.eventId, gameObjTarget->GetSpawnId());
player->GetMap()->ScriptsStart(sEventScripts, gameObjTarget->GetGOInfo()->chest.eventId, player, gameObjTarget);
}
@@ -1991,7 +2008,7 @@ void Spell::EffectOpenLock(SpellEffIndex effIndex)
/// @todo Add script for spell 41920 - Filling, becouse server it freze when use this spell
// handle outdoor pvp object opening, return true if go was registered for handling
// these objects must have been spawned by outdoorpvp!
- else if (gameObjTarget->GetGOInfo()->type == GAMEOBJECT_TYPE_GOOBER && sOutdoorPvPMgr->HandleOpenGo(player, gameObjTarget->GetGUID()))
+ else if (gameObjTarget->GetGOInfo()->type == GAMEOBJECT_TYPE_GOOBER && sOutdoorPvPMgr->HandleOpenGo(player, gameObjTarget))
return;
lockId = goInfo->GetLockId();
guid = gameObjTarget->GetGUID();
@@ -2032,9 +2049,9 @@ void Spell::EffectOpenLock(SpellEffIndex effIndex)
if (gameObjTarget)
{
// Allow one skill-up until respawned
- if (!gameObjTarget->IsInSkillupList(player->GetGUIDLow()) &&
+ if (!gameObjTarget->IsInSkillupList(player->GetGUID().GetCounter()) &&
player->UpdateGatherSkill(skillId, pureSkillValue, reqSkillValue))
- gameObjTarget->AddToSkillupList(player->GetGUIDLow());
+ gameObjTarget->AddToSkillupList(player->GetGUID().GetCounter());
}
else if (itemTarget)
{
@@ -2376,7 +2393,7 @@ void Spell::EffectLearnSpell(SpellEffIndex effIndex)
uint32 spellToLearn = (m_spellInfo->Id == 483 || m_spellInfo->Id == 55884) ? damage : m_spellInfo->Effects[effIndex].TriggerSpell;
player->LearnSpell(spellToLearn, false);
- TC_LOG_DEBUG("spells", "Spell: Player %u has learned spell %u from NpcGUID=%u", player->GetGUIDLow(), spellToLearn, m_caster->GetGUIDLow());
+ TC_LOG_DEBUG("spells", "Spell: Player %u has learned spell %u from NpcGUID=%u", player->GetGUID().GetCounter(), spellToLearn, m_caster->GetGUID().GetCounter());
}
void Spell::EffectDispel(SpellEffIndex effIndex)
@@ -2550,7 +2567,7 @@ void Spell::EffectAddFarsight(SpellEffIndex effIndex)
return;
DynamicObject* dynObj = new DynamicObject(true);
- if (!dynObj->CreateDynamicObject(sObjectMgr->GenerateLowGuid(HIGHGUID_DYNAMICOBJECT), m_caster, m_spellInfo->Id, *destTarget, radius, DYNAMIC_OBJECT_FARSIGHT_FOCUS))
+ if (!dynObj->CreateDynamicObject(m_caster->GetMap()->GenerateLowGuid<HighGuid::DynamicObject>(), m_caster, m_spellInfo->Id, *destTarget, radius, DYNAMIC_OBJECT_FARSIGHT_FOCUS))
{
delete dynObj;
return;
@@ -2627,7 +2644,7 @@ void Spell::EffectAddHonor(SpellEffIndex /*effIndex*/)
if (m_CastItem)
{
unitTarget->ToPlayer()->RewardHonor(NULL, 1, damage/10);
- TC_LOG_DEBUG("spells", "SpellEffect::AddHonor (spell_id %u) rewards %d honor points (item %u) for player: %u", m_spellInfo->Id, damage/10, m_CastItem->GetEntry(), unitTarget->ToPlayer()->GetGUIDLow());
+ TC_LOG_DEBUG("spells", "SpellEffect::AddHonor (spell_id %u) rewards %d honor points (item %u) for player: %u", m_spellInfo->Id, damage/10, m_CastItem->GetEntry(), unitTarget->ToPlayer()->GetGUID().GetCounter());
return;
}
@@ -2636,13 +2653,13 @@ void Spell::EffectAddHonor(SpellEffIndex /*effIndex*/)
{
uint32 honor_reward = Trinity::Honor::hk_honor_at_level(unitTarget->getLevel(), float(damage));
unitTarget->ToPlayer()->RewardHonor(NULL, 1, honor_reward);
- TC_LOG_DEBUG("spells", "SpellEffect::AddHonor (spell_id %u) rewards %u honor points (scale) to player: %u", m_spellInfo->Id, honor_reward, unitTarget->ToPlayer()->GetGUIDLow());
+ TC_LOG_DEBUG("spells", "SpellEffect::AddHonor (spell_id %u) rewards %u honor points (scale) to player: %u", m_spellInfo->Id, honor_reward, unitTarget->ToPlayer()->GetGUID().GetCounter());
}
else
{
//maybe we have correct honor_gain in damage already
unitTarget->ToPlayer()->RewardHonor(NULL, 1, damage);
- TC_LOG_DEBUG("spells", "SpellEffect::AddHonor (spell_id %u) rewards %u honor points (non scale) for player: %u", m_spellInfo->Id, damage, unitTarget->ToPlayer()->GetGUIDLow());
+ TC_LOG_DEBUG("spells", "SpellEffect::AddHonor (spell_id %u) rewards %u honor points (non scale) for player: %u", m_spellInfo->Id, damage, unitTarget->ToPlayer()->GetGUID().GetCounter());
}
}
@@ -3502,7 +3519,7 @@ void Spell::EffectSummonObjectWild(SpellEffIndex effIndex)
Map* map = target->GetMap();
- if (!pGameObj->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), gameobject_id, map,
+ if (!pGameObj->Create(map->GenerateLowGuid<HighGuid::GameObject>(), gameobject_id, map,
m_caster->GetPhaseMask(), x, y, z, target->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY))
{
delete pGameObj;
@@ -3527,7 +3544,7 @@ void Spell::EffectSummonObjectWild(SpellEffIndex effIndex)
if (uint32 linkedEntry = pGameObj->GetGOInfo()->GetLinkedGameObjectEntry())
{
GameObject* linkedGO = new GameObject;
- if (linkedGO->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), linkedEntry, map,
+ if (linkedGO->Create(map->GenerateLowGuid<HighGuid::GameObject>(), linkedEntry, map,
m_caster->GetPhaseMask(), x, y, z, target->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY))
{
linkedGO->SetRespawnTime(duration > 0 ? duration/IN_MILLISECONDS : 0);
@@ -4126,7 +4143,7 @@ void Spell::EffectDuel(SpellEffIndex effIndex)
Player* target = unitTarget->ToPlayer();
// caster or target already have requested duel
- if (caster->duel || target->duel || !target->GetSocial() || target->GetSocial()->HasIgnore(caster->GetGUIDLow()))
+ if (caster->duel || target->duel || !target->GetSocial() || target->GetSocial()->HasIgnore(caster->GetGUID().GetCounter()))
return;
// Players can only fight a duel in zones with this flag
@@ -4150,7 +4167,7 @@ void Spell::EffectDuel(SpellEffIndex effIndex)
uint32 gameobject_id = m_spellInfo->Effects[effIndex].MiscValue;
Map* map = m_caster->GetMap();
- if (!pGameObj->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), gameobject_id,
+ if (!pGameObj->Create(map->GenerateLowGuid<HighGuid::GameObject>(), gameobject_id,
map, m_caster->GetPhaseMask(),
m_caster->GetPositionX()+(unitTarget->GetPositionX()-m_caster->GetPositionX())/2,
m_caster->GetPositionY()+(unitTarget->GetPositionY()-m_caster->GetPositionY())/2,
@@ -4216,7 +4233,7 @@ void Spell::EffectStuck(SpellEffIndex /*effIndex*/)
return;
TC_LOG_DEBUG("spells", "Spell Effect: Stuck");
- 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());
+ TC_LOG_DEBUG("spells", "Player %s (guid %u) used auto-unstuck future at map %u (%f, %f, %f)", player->GetName().c_str(), player->GetGUID().GetCounter(), player->GetMapId(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ());
if (player->IsInFlight())
return;
@@ -4356,11 +4373,14 @@ void Spell::EffectEnchantHeldItem(SpellEffIndex effIndex)
if (m_spellInfo->Effects[effIndex].MiscValue)
{
uint32 enchant_id = m_spellInfo->Effects[effIndex].MiscValue;
- int32 duration = m_spellInfo->GetDuration(); //Try duration index first ..
+ int32 duration = m_spellInfo->GetDuration(); // Try duration index first ..
if (!duration)
- duration = damage;//+1; //Base points after ..
+ duration = damage;//+1; // Base points after ..
if (!duration)
- duration = 10; //10 seconds for enchants which don't have listed duration
+ duration = 10 * IN_MILLISECONDS; // 10 seconds for enchants which don't have listed duration
+
+ if (m_spellInfo->Id == 14792) // Venomhide Poison
+ duration = 5 * MINUTE * IN_MILLISECONDS;
SpellItemEnchantmentEntry const* pEnchant = sSpellItemEnchantmentStore.LookupEntry(enchant_id);
if (!pEnchant)
@@ -4374,7 +4394,7 @@ void Spell::EffectEnchantHeldItem(SpellEffIndex effIndex)
return;
// Apply the temporary enchantment
- item->SetEnchantment(slot, enchant_id, duration*IN_MILLISECONDS, 0, m_caster->GetGUID());
+ item->SetEnchantment(slot, enchant_id, duration, 0, m_caster->GetGUID());
item_owner->ApplyEnchantment(item, slot, true);
}
}
@@ -4497,7 +4517,7 @@ void Spell::EffectSummonObject(SpellEffIndex effIndex)
m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE);
Map* map = m_caster->GetMap();
- if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), go_id, map,
+ if (!go->Create(map->GenerateLowGuid<HighGuid::GameObject>(), go_id, map,
m_caster->GetPhaseMask(), x, y, z, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY))
{
delete go;
@@ -5126,7 +5146,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex)
GameObject* pGameObj = new GameObject;
- if (!pGameObj->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), name_id, cMap,
+ if (!pGameObj->Create(cMap->GenerateLowGuid<HighGuid::GameObject>(), name_id, cMap,
m_caster->GetPhaseMask(), fx, fy, fz, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY))
{
delete pGameObj;
@@ -5192,7 +5212,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex)
if (uint32 linkedEntry = pGameObj->GetGOInfo()->GetLinkedGameObjectEntry())
{
GameObject* linkedGO = new GameObject;
- if (linkedGO->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), linkedEntry, cMap,
+ if (linkedGO->Create(cMap->GenerateLowGuid<HighGuid::GameObject>(), linkedEntry, cMap,
m_caster->GetPhaseMask(), fx, fy, fz, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY))
{
linkedGO->SetRespawnTime(duration > 0 ? duration/IN_MILLISECONDS : 0);
@@ -5618,7 +5638,7 @@ void Spell::EffectGameObjectDamage(SpellEffIndex /*effIndex*/)
FactionTemplateEntry const* casterFaction = caster->GetFactionTemplateEntry();
FactionTemplateEntry const* targetFaction = sFactionTemplateStore.LookupEntry(gameObjTarget->GetUInt32Value(GAMEOBJECT_FACTION));
// Do not allow to damage GO's of friendly factions (ie: Wintergrasp Walls/Ulduar Storm Beacons)
- if ((casterFaction && targetFaction && !casterFaction->IsFriendlyTo(*targetFaction)) || !targetFaction)
+ if (!targetFaction || (casterFaction && targetFaction && !casterFaction->IsFriendlyTo(*targetFaction)))
gameObjTarget->ModifyHealth(-damage, caster, GetSpellInfo()->Id);
}
diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp
index 09e3be690b1..faad54d0af7 100644
--- a/src/server/game/Spells/SpellHistory.cpp
+++ b/src/server/game/Spells/SpellHistory.cpp
@@ -41,8 +41,11 @@ struct SpellHistory::PersistenceHelper<Player>
if (!sSpellMgr->GetSpellInfo(*spellId))
return false;
+ cooldownEntry->SpellId = *spellId;
cooldownEntry->CooldownEnd = Clock::from_time_t(time_t(fields[2].GetUInt32()));
cooldownEntry->ItemId = fields[1].GetUInt32();
+ cooldownEntry->CategoryId = fields[3].GetUInt32();
+ cooldownEntry->CategoryEnd = Clock::from_time_t(time_t(fields[4].GetUInt32()));
return true;
}
@@ -51,6 +54,8 @@ struct SpellHistory::PersistenceHelper<Player>
stmt->setUInt32(index++, cooldown.first);
stmt->setUInt32(index++, cooldown.second.ItemId);
stmt->setUInt32(index++, uint32(Clock::to_time_t(cooldown.second.CooldownEnd)));
+ stmt->setUInt32(index++, cooldown.second.CategoryId);
+ stmt->setUInt32(index++, uint32(Clock::to_time_t(cooldown.second.CategoryEnd)));
}
};
@@ -68,8 +73,11 @@ struct SpellHistory::PersistenceHelper<Pet>
if (!sSpellMgr->GetSpellInfo(*spellId))
return false;
+ cooldownEntry->SpellId = *spellId;
cooldownEntry->CooldownEnd = Clock::from_time_t(time_t(fields[1].GetUInt32()));
cooldownEntry->ItemId = 0;
+ cooldownEntry->CategoryId = fields[2].GetUInt32();
+ cooldownEntry->CategoryEnd = Clock::from_time_t(time_t(fields[3].GetUInt32()));
return true;
}
@@ -77,6 +85,8 @@ struct SpellHistory::PersistenceHelper<Pet>
{
stmt->setUInt32(index++, cooldown.first);
stmt->setUInt32(index++, uint32(Clock::to_time_t(cooldown.second.CooldownEnd)));
+ stmt->setUInt32(index++, cooldown.second.CategoryId);
+ stmt->setUInt32(index++, uint32(Clock::to_time_t(cooldown.second.CategoryEnd)));
}
};
@@ -92,7 +102,11 @@ void SpellHistory::LoadFromDB(PreparedQueryResult cooldownsResult)
uint32 spellId;
CooldownEntry cooldown;
if (StatementInfo::ReadCooldown(cooldownsResult->Fetch(), &spellId, &cooldown))
+ {
_spellCooldowns[spellId] = cooldown;
+ if (cooldown.CategoryId)
+ _categoryCooldowns[cooldown.CategoryId] = &_spellCooldowns[spellId];
+ }
} while (cooldownsResult->NextRow());
}
@@ -125,10 +139,18 @@ void SpellHistory::Update()
{
SQLTransaction t;
Clock::time_point now = Clock::now();
+ for (auto itr = _categoryCooldowns.begin(); itr != _categoryCooldowns.end();)
+ {
+ if (itr->second->CategoryEnd < now)
+ itr = _categoryCooldowns.erase(itr);
+ else
+ ++itr;
+ }
+
for (auto itr = _spellCooldowns.begin(); itr != _spellCooldowns.end();)
{
if (itr->second.CooldownEnd < now)
- itr = _spellCooldowns.erase(itr);
+ itr = EraseCooldown(itr);
else
++itr;
}
@@ -136,29 +158,37 @@ void SpellHistory::Update()
void SpellHistory::HandleCooldowns(SpellInfo const* spellInfo, Item const* item, Spell* spell /*= nullptr*/)
{
+ HandleCooldowns(spellInfo, item ? item->GetEntry() : 0, spell);
+}
+
+void SpellHistory::HandleCooldowns(SpellInfo const* spellInfo, uint32 itemID, Spell* spell /*= nullptr*/)
+{
if (Player* player = _owner->ToPlayer())
{
// potions start cooldown until exiting combat
- if (item && (item->IsPotion() || spellInfo->IsCooldownStartedOnEvent()))
+ if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(itemID))
{
- player->SetLastPotionId(item->GetEntry());
- return;
+ if (itemTemplate->IsPotion() || spellInfo->IsCooldownStartedOnEvent())
+ {
+ player->SetLastPotionId(itemID);
+ return;
+ }
}
}
if (spellInfo->IsCooldownStartedOnEvent() || spellInfo->IsPassive() || (spell && spell->IsIgnoringCooldowns()))
return;
- StartCooldown(spellInfo, item ? item->GetEntry() : 0, spell);
+ StartCooldown(spellInfo, itemID, spell);
}
-bool SpellHistory::IsReady(SpellInfo const* spellInfo) const
+bool SpellHistory::IsReady(SpellInfo const* spellInfo, uint32 itemId /*= 0*/) const
{
if (spellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE)
if (IsSchoolLocked(spellInfo->GetSchoolMask()))
return false;
- if (HasCooldown(spellInfo->Id))
+ if (HasCooldown(spellInfo->Id, itemId))
return false;
return true;
@@ -168,42 +198,33 @@ template<>
void SpellHistory::WritePacket<Pet>(WorldPacket& packet) const
{
Clock::time_point now = Clock::now();
-
+
uint8 cooldownsCount = _spellCooldowns.size();
packet << uint8(cooldownsCount);
for (auto const& spellCooldown : _spellCooldowns)
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellCooldown.first);
- if (!spellInfo)
- {
- packet << uint32(0);
- packet << uint16(0);
- packet << uint32(0);
- packet << uint32(0);
- continue;
- }
-
- packet << uint32(spellCooldown.first); // spell ID
- packet << uint16(spellInfo->GetCategory()); // spell category
+ packet << uint32(spellCooldown.first); // spell ID
+ packet << uint16(spellCooldown.second.CategoryId); // spell category
if (!spellCooldown.second.OnHold)
{
- uint32 cooldownDuration = spellCooldown.second.CooldownEnd > now ? std::chrono::duration_cast<std::chrono::milliseconds>(spellCooldown.second.CooldownEnd - now).count() : 0;
- if (cooldownDuration <= 0)
+ std::chrono::milliseconds cooldownDuration = std::chrono::duration_cast<std::chrono::milliseconds>(spellCooldown.second.CooldownEnd - now);
+ if (cooldownDuration.count() <= 0)
{
packet << uint32(0);
packet << uint32(0);
continue;
}
- if (spellInfo->GetCategory())
+ std::chrono::milliseconds categoryDuration = std::chrono::duration_cast<std::chrono::milliseconds>(spellCooldown.second.CategoryEnd - now);
+ if (categoryDuration.count() > 0)
{
packet << uint32(0);
- packet << uint32(cooldownDuration);
+ packet << uint32(categoryDuration.count());
}
else
{
- packet << uint32(cooldownDuration);
+ packet << uint32(cooldownDuration.count());
packet << uint32(0);
}
}
@@ -216,23 +237,13 @@ void SpellHistory::WritePacket<Player>(WorldPacket& packet) const
Clock::time_point now = Clock::now();
Clock::time_point infTime = now + InfinityCooldownDelayCheck;
- uint16 cooldownsCount = _spellCooldowns.size();
- size_t dataPos = packet.wpos();
- packet << uint16(cooldownsCount);
+ packet << uint16(_spellCooldowns.size());
for (auto const& spellCooldown : _spellCooldowns)
{
- SpellInfo const* sEntry = sSpellMgr->GetSpellInfo(spellCooldown.first);
- if (!sEntry)
- {
- --cooldownsCount;
- continue;
- }
-
packet << uint32(spellCooldown.first);
-
packet << uint16(spellCooldown.second.ItemId); // cast item id
- packet << uint16(sEntry->GetCategory()); // spell category
+ packet << uint16(spellCooldown.second.CategoryId); // spell category
// send infinity cooldown in special format
if (spellCooldown.second.CooldownEnd >= infTime)
@@ -242,21 +253,26 @@ void SpellHistory::WritePacket<Player>(WorldPacket& packet) const
continue;
}
- uint32 cooldownDuration = spellCooldown.second.CooldownEnd > now ? std::chrono::duration_cast<std::chrono::milliseconds>(spellCooldown.second.CooldownEnd - now).count() : 0;
+ std::chrono::milliseconds cooldownDuration = std::chrono::duration_cast<std::chrono::milliseconds>(spellCooldown.second.CooldownEnd - now);
+ if (cooldownDuration.count() <= 0)
+ {
+ packet << uint32(0);
+ packet << uint32(0);
+ continue;
+ }
- if (sEntry->GetCategory()) // may be wrong, but anyway better than nothing...
+ std::chrono::milliseconds categoryDuration = std::chrono::duration_cast<std::chrono::milliseconds>(spellCooldown.second.CategoryEnd - now);
+ if (categoryDuration.count() >= 0)
{
packet << uint32(0); // cooldown
- packet << uint32(cooldownDuration); // category cooldown
+ packet << uint32(categoryDuration.count()); // category cooldown
}
else
{
- packet << uint32(cooldownDuration); // cooldown
+ packet << uint32(cooldownDuration.count()); // cooldown
packet << uint32(0); // category cooldown
}
}
-
- packet.put<uint16>(dataPos, cooldownsCount);
}
void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spell* spell /*= nullptr*/, bool onHold /*= false*/)
@@ -266,32 +282,7 @@ void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spel
int32 cooldown = -1;
int32 categoryCooldown = -1;
- // some special item spells without correct cooldown in SpellInfo
- // cooldown information stored in item prototype
- if (itemId)
- {
- if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemId))
- {
- for (uint8 idx = 0; idx < MAX_ITEM_PROTO_SPELLS; ++idx)
- {
- if (uint32(proto->Spells[idx].SpellId) == spellInfo->Id)
- {
- categoryId = proto->Spells[idx].SpellCategory;
- cooldown = proto->Spells[idx].SpellCooldown;
- categoryCooldown = proto->Spells[idx].SpellCategoryCooldown;
- break;
- }
- }
- }
- }
-
- // if no cooldown found above then base at DBC data
- if (cooldown < 0 && categoryCooldown < 0)
- {
- categoryId = spellInfo->GetCategory();
- cooldown = spellInfo->RecoveryTime;
- categoryCooldown = spellInfo->CategoryRecoveryTime;
- }
+ GetCooldownDurations(spellInfo, itemId, &cooldown, &categoryId, &categoryCooldown);
Clock::time_point curTime = Clock::now();
Clock::time_point catrecTime;
@@ -351,7 +342,7 @@ void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spel
// self spell cooldown
if (recTime != curTime)
{
- AddCooldown(spellInfo->Id, itemId, recTime, onHold);
+ AddCooldown(spellInfo->Id, itemId, recTime, categoryId, catrecTime, onHold);
if (needsCooldownPacket)
{
@@ -363,73 +354,51 @@ void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spel
}
}
}
-
- // category spells
- if (categoryId && catrecTime != curTime)
- {
- SpellCategoryStore::const_iterator i_scstore = sSpellsByCategoryStore.find(categoryId);
- if (i_scstore != sSpellsByCategoryStore.end())
- {
- for (SpellCategorySet::const_iterator i_scset = i_scstore->second.begin(); i_scset != i_scstore->second.end(); ++i_scset)
- {
- if (*i_scset == spellInfo->Id) // skip main spell, already handled above
- continue;
-
- AddCooldown(*i_scset, itemId, catrecTime, onHold);
- }
- }
- }
}
void SpellHistory::SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId /*= 0*/, Spell* spell /*= nullptr*/, bool startCooldown /*= true*/)
{
- // start cooldowns at server side, if any
- if (startCooldown)
- StartCooldown(spellInfo, itemId, spell);
-
+ // Send activate cooldown timer (possible 0) at client side
if (Player* player = GetPlayerOwner())
{
- // Send activate cooldown timer (possible 0) at client side
- WorldPacket data(SMSG_COOLDOWN_EVENT, 4 + 8);
- data << uint32(spellInfo->Id);
- data << uint64(_owner->GetGUID());
- player->SendDirectMessage(&data);
-
uint32 category = spellInfo->GetCategory();
- if (category && spellInfo->CategoryRecoveryTime)
- {
- SpellCategoryStore::const_iterator ct = sSpellsByCategoryStore.find(category);
- if (ct != sSpellsByCategoryStore.end())
- {
- for (auto const& cooldownPair : _spellCooldowns)
- {
- uint32 categorySpell = cooldownPair.first;
- if (!ct->second.count(categorySpell))
- continue;
+ GetCooldownDurations(spellInfo, itemId, nullptr, &category, nullptr);
- if (categorySpell == spellInfo->Id) // skip main spell, already handled above
- continue;
-
- SpellInfo const* spellInfo2 = sSpellMgr->EnsureSpellInfo(categorySpell);
- if (!spellInfo2->IsCooldownStartedOnEvent())
- continue;
+ auto categoryItr = _categoryCooldowns.find(category);
+ if (categoryItr != _categoryCooldowns.end() && categoryItr->second->SpellId != spellInfo->Id)
+ {
+ WorldPacket data(SMSG_COOLDOWN_EVENT, 4 + 8);
+ data << uint32(categoryItr->second->SpellId);
+ data << uint64(_owner->GetGUID());
+ player->SendDirectMessage(&data);
- data.Initialize(SMSG_COOLDOWN_EVENT, 4 + 8);
- data << uint32(categorySpell);
- data << uint64(_owner->GetGUID());
- player->SendDirectMessage(&data);
- }
- }
+ if (startCooldown)
+ StartCooldown(sSpellMgr->EnsureSpellInfo(categoryItr->second->SpellId), itemId, spell);
}
+
+ WorldPacket data(SMSG_COOLDOWN_EVENT, 4 + 8);
+ data << uint32(spellInfo->Id);
+ data << uint64(_owner->GetGUID());
+ player->SendDirectMessage(&data);
}
+
+ // start cooldowns at server side, if any
+ if (startCooldown)
+ StartCooldown(spellInfo, itemId, spell);
}
-void SpellHistory::AddCooldown(uint32 spellId, uint32 itemId, Clock::time_point cooldownEnd, bool onHold /*= false*/)
+void SpellHistory::AddCooldown(uint32 spellId, uint32 itemId, Clock::time_point cooldownEnd, uint32 categoryId, Clock::time_point categoryEnd, bool onHold /*= false*/)
{
CooldownEntry& cooldownEntry = _spellCooldowns[spellId];
+ cooldownEntry.SpellId = spellId;
cooldownEntry.CooldownEnd = cooldownEnd;
cooldownEntry.ItemId = itemId;
+ cooldownEntry.CategoryId = categoryId;
+ cooldownEntry.CategoryEnd = categoryEnd;
cooldownEntry.OnHold = onHold;
+
+ if (categoryId)
+ _categoryCooldowns[categoryId] = &cooldownEntry;
}
void SpellHistory::ModifyCooldown(uint32 spellId, int32 cooldownModMs)
@@ -443,7 +412,7 @@ void SpellHistory::ModifyCooldown(uint32 spellId, int32 cooldownModMs)
if (itr->second.CooldownEnd + offset > now)
itr->second.CooldownEnd += offset;
else
- _spellCooldowns.erase(itr);
+ EraseCooldown(itr);
if (Player* playerOwner = GetPlayerOwner())
{
@@ -477,7 +446,7 @@ void SpellHistory::ResetCooldown(CooldownStorageType::iterator& itr, bool update
}
}
- itr = _spellCooldowns.erase(itr);
+ itr = EraseCooldown(itr);
}
void SpellHistory::ResetAllCooldowns()
@@ -492,31 +461,55 @@ void SpellHistory::ResetAllCooldowns()
SendClearCooldowns(cooldowns);
}
+ _categoryCooldowns.clear();
_spellCooldowns.clear();
}
-bool SpellHistory::HasCooldown(uint32 spellId) const
+bool SpellHistory::HasCooldown(SpellInfo const* spellInfo, uint32 itemId /*= 0*/) const
{
- return _spellCooldowns.count(spellId) != 0;
+ if (_spellCooldowns.count(spellInfo->Id) != 0)
+ return true;
+
+ uint32 category = 0;
+ GetCooldownDurations(spellInfo, itemId, nullptr, &category, nullptr);
+ if (!category)
+ return false;
+
+ return _categoryCooldowns.count(category) != 0;
}
-uint32 SpellHistory::GetRemainingCooldown(uint32 spellId) const
+bool SpellHistory::HasCooldown(uint32 spellId, uint32 itemId /*= 0*/) const
{
- auto itr = _spellCooldowns.find(spellId);
- if (itr == _spellCooldowns.end())
- return 0;
+ return HasCooldown(sSpellMgr->EnsureSpellInfo(spellId), itemId);
+}
+
+uint32 SpellHistory::GetRemainingCooldown(SpellInfo const* spellInfo) const
+{
+ Clock::time_point end;
+ auto itr = _spellCooldowns.find(spellInfo->Id);
+ if (itr != _spellCooldowns.end())
+ end = itr->second.CooldownEnd;
+ else
+ {
+ auto catItr = _categoryCooldowns.find(spellInfo->GetCategory());
+ if (catItr == _categoryCooldowns.end())
+ return 0;
+
+ end = catItr->second->CategoryEnd;
+ }
Clock::time_point now = Clock::now();
- if (itr->second.CooldownEnd < now)
+ if (end < now)
return 0;
- Clock::duration remaining = itr->second.CooldownEnd - now;
+ Clock::duration remaining = end - now;
return uint32(std::chrono::duration_cast<std::chrono::milliseconds>(remaining).count());
}
void SpellHistory::LockSpellSchool(SpellSchoolMask schoolMask, uint32 lockoutTime)
{
- Clock::time_point lockoutEnd = Clock::now() + std::chrono::duration_cast<Clock::duration>(std::chrono::milliseconds(lockoutTime));
+ Clock::time_point now = Clock::now();
+ Clock::time_point lockoutEnd = now + std::chrono::duration_cast<Clock::duration>(std::chrono::milliseconds(lockoutTime));
for (uint32 i = 0; i < MAX_SPELL_SCHOOL; ++i)
if (SpellSchoolMask(1 << i) & schoolMask)
_schoolLockouts[i] = lockoutEnd;
@@ -553,10 +546,10 @@ void SpellHistory::LockSpellSchool(SpellSchoolMask schoolMask, uint32 lockoutTim
if (spellInfo->PreventionType != SPELL_PREVENTION_TYPE_SILENCE)
continue;
- if ((schoolMask & spellInfo->GetSchoolMask()) && GetRemainingCooldown(spellId) < lockoutTime)
+ if ((schoolMask & spellInfo->GetSchoolMask()) && GetRemainingCooldown(spellInfo) < lockoutTime)
{
cooldowns[spellId] = lockoutTime;
- AddCooldown(spellId, 0, lockoutEnd);
+ AddCooldown(spellId, 0, lockoutEnd, 0, now);
}
}
@@ -637,6 +630,96 @@ void SpellHistory::BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCoo
}
}
+void SpellHistory::GetCooldownDurations(SpellInfo const* spellInfo, uint32 itemId, int32* cooldown, uint32* categoryId, int32* categoryCooldown)
+{
+ ASSERT(cooldown || categoryId || categoryCooldown);
+ int32 tmpCooldown = -1;
+ uint32 tmpCategoryId = 0;
+ int32 tmpCategoryCooldown = -1;
+
+ // some special item spells without correct cooldown in SpellInfo
+ // cooldown information stored in item prototype
+ if (itemId)
+ {
+ if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemId))
+ {
+ for (uint8 idx = 0; idx < MAX_ITEM_PROTO_SPELLS; ++idx)
+ {
+ if (uint32(proto->Spells[idx].SpellId) == spellInfo->Id)
+ {
+ tmpCooldown = proto->Spells[idx].SpellCooldown;
+ tmpCategoryId = proto->Spells[idx].SpellCategory;
+ tmpCategoryCooldown = proto->Spells[idx].SpellCategoryCooldown;
+ break;
+ }
+ }
+ }
+ }
+
+ // if no cooldown found above then base at DBC data
+ if (tmpCooldown < 0 && tmpCategoryCooldown < 0)
+ {
+ tmpCooldown = spellInfo->RecoveryTime;
+ tmpCategoryId = spellInfo->GetCategory();
+ tmpCategoryCooldown = spellInfo->CategoryRecoveryTime;
+ }
+
+ if (cooldown)
+ *cooldown = tmpCooldown;
+ if (categoryId)
+ *categoryId = tmpCategoryId;
+ if (categoryCooldown)
+ *categoryCooldown = tmpCategoryCooldown;
+}
+
+void SpellHistory::SaveCooldownStateBeforeDuel()
+{
+ _spellCooldownsBeforeDuel = _spellCooldowns;
+}
+
+void SpellHistory::RestoreCooldownStateAfterDuel()
+{
+ // category cooldows are not preserved.
+ if (Player* player = _owner->ToPlayer())
+ {
+ // add all profession CDs created while in duel (if any)
+ for (auto itr = _spellCooldowns.begin(); itr != _spellCooldowns.end(); ++itr)
+ {
+ SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first);
+
+ if (spellInfo->RecoveryTime > 10 * MINUTE * IN_MILLISECONDS ||
+ spellInfo->CategoryRecoveryTime > 10 * MINUTE * IN_MILLISECONDS)
+ _spellCooldownsBeforeDuel[itr->first] = _spellCooldowns[itr->first];
+ }
+
+ // check for spell with onHold active before and during the duel
+ for (auto itr = _spellCooldownsBeforeDuel.begin(); itr != _spellCooldownsBeforeDuel.end(); ++itr)
+ {
+ if (!itr->second.OnHold && !_spellCooldowns[itr->first].OnHold)
+ _spellCooldowns[itr->first] = _spellCooldownsBeforeDuel[itr->first];
+ }
+
+ // update the client: restore old cooldowns
+ PacketCooldowns cooldowns;
+
+ for (auto itr = _spellCooldowns.begin(); itr != _spellCooldowns.end(); ++itr)
+ {
+ Clock::time_point now = Clock::now();
+ uint32 cooldownDuration = itr->second.CooldownEnd > now ? std::chrono::duration_cast<std::chrono::milliseconds>(itr->second.CooldownEnd - now).count() : 0;
+
+ // cooldownDuration must be between 0 and 10 minutes in order to avoid any visual bugs
+ if (cooldownDuration <= 0 || cooldownDuration > 10 * MINUTE * IN_MILLISECONDS || itr->second.OnHold)
+ continue;
+
+ cooldowns[itr->first] = cooldownDuration;
+ }
+
+ WorldPacket data;
+ BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_INCLUDE_EVENT_COOLDOWNS, cooldowns);
+ player->SendDirectMessage(&data);
+ }
+}
+
template void SpellHistory::LoadFromDB<Player>(PreparedQueryResult cooldownsResult);
template void SpellHistory::LoadFromDB<Pet>(PreparedQueryResult cooldownsResult);
template void SpellHistory::SaveToDB<Player>(SQLTransaction& trans);
diff --git a/src/server/game/Spells/SpellHistory.h b/src/server/game/Spells/SpellHistory.h
index f1533d57aef..db65cd50c3e 100644
--- a/src/server/game/Spells/SpellHistory.h
+++ b/src/server/game/Spells/SpellHistory.h
@@ -38,15 +38,16 @@ public:
struct CooldownEntry
{
- CooldownEntry() : ItemId(0), OnHold(false) { }
- CooldownEntry(Clock::time_point endTime, uint32 itemId) : CooldownEnd(endTime), ItemId(itemId), OnHold(false) { }
-
+ uint32 SpellId = 0;
Clock::time_point CooldownEnd;
- uint32 ItemId;
- bool OnHold;
+ uint32 ItemId = 0;
+ uint32 CategoryId = 0;
+ Clock::time_point CategoryEnd;
+ bool OnHold = false;
};
typedef std::unordered_map<uint32 /*spellId*/, CooldownEntry> CooldownStorageType;
+ typedef std::unordered_map<uint32 /*categoryId*/, CooldownEntry*> CategoryCooldownStorageType;
typedef std::unordered_map<uint32 /*categoryId*/, Clock::time_point> GlobalCooldownStorageType;
explicit SpellHistory(Unit* owner) : _owner(owner), _schoolLockouts() { }
@@ -60,7 +61,8 @@ public:
void Update();
void HandleCooldowns(SpellInfo const* spellInfo, Item const* item, Spell* spell = nullptr);
- bool IsReady(SpellInfo const* spellInfo) const;
+ void HandleCooldowns(SpellInfo const* spellInfo, uint32 itemID, Spell* spell = nullptr);
+ bool IsReady(SpellInfo const* spellInfo, uint32 itemId = 0) const;
template<class OwnerType>
void WritePacket(WorldPacket& packet) const;
@@ -74,10 +76,11 @@ public:
template<class Type, class Period>
void AddCooldown(uint32 spellId, uint32 itemId, std::chrono::duration<Type, Period> cooldownDuration)
{
- AddCooldown(spellId, itemId, Clock::now() + std::chrono::duration_cast<Clock::duration>(cooldownDuration));
+ Clock::time_point now = Clock::now();
+ AddCooldown(spellId, itemId, now + std::chrono::duration_cast<Clock::duration>(cooldownDuration), 0, now);
}
- void AddCooldown(uint32 spellId, uint32 itemId, Clock::time_point cooldownEnd, bool onHold = false);
+ void AddCooldown(uint32 spellId, uint32 itemId, Clock::time_point cooldownEnd, uint32 categoryId, Clock::time_point categoryEnd, bool onHold = false);
void ModifyCooldown(uint32 spellId, int32 cooldownModMs);
void ResetCooldown(uint32 spellId, bool update = false);
void ResetCooldown(CooldownStorageType::iterator& itr, bool update = false);
@@ -102,8 +105,9 @@ public:
}
void ResetAllCooldowns();
- bool HasCooldown(uint32 spellId) const;
- uint32 GetRemainingCooldown(uint32 spellId) const;
+ bool HasCooldown(SpellInfo const* spellInfo, uint32 itemId = 0) const;
+ bool HasCooldown(uint32 spellId, uint32 itemId = 0) const;
+ uint32 GetRemainingCooldown(SpellInfo const* spellInfo) const;
// School lockouts
void LockSpellSchool(SpellSchoolMask schoolMask, uint32 lockoutTime);
@@ -117,16 +121,27 @@ public:
void BuildCooldownPacket(WorldPacket& data, uint8 flags, uint32 spellId, uint32 cooldown) const;
CooldownStorageType::size_type GetCooldownsSizeForPacket() const { return _spellCooldowns.size(); }
-
+ void SaveCooldownStateBeforeDuel();
+ void RestoreCooldownStateAfterDuel();
+
private:
Player* GetPlayerOwner() const;
void SendClearCooldowns(std::vector<int32> const& cooldowns) const;
+ CooldownStorageType::iterator EraseCooldown(CooldownStorageType::iterator itr)
+ {
+ _categoryCooldowns.erase(itr->second.CategoryId);
+ return _spellCooldowns.erase(itr);
+ }
typedef std::unordered_map<uint32, uint32> PacketCooldowns;
void BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCooldowns const& cooldowns) const;
+ static void GetCooldownDurations(SpellInfo const* spellInfo, uint32 itemId, int32* cooldown, uint32* categoryId, int32* categoryCooldown);
+
Unit* _owner;
CooldownStorageType _spellCooldowns;
+ CooldownStorageType _spellCooldownsBeforeDuel;
+ CategoryCooldownStorageType _categoryCooldowns;
Clock::time_point _schoolLockouts[MAX_SPELL_SCHOOL];
GlobalCooldownStorageType _globalCooldowns;
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index ea5e4c8df0b..6486a7eada7 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -776,8 +776,8 @@ SpellInfo::SpellInfo(SpellEntry const* spellEntry)
AttributesEx6 = spellEntry->AttributesEx6;
AttributesEx7 = spellEntry->AttributesEx7;
AttributesCu = 0;
- Stances = spellEntry->Stances;
- StancesNot = spellEntry->StancesNot;
+ Stances = MAKE_PAIR64(spellEntry->Stances[0], spellEntry->Stances[1]);
+ StancesNot = MAKE_PAIR64(spellEntry->StancesNot[0], spellEntry->StancesNot[1]);
Targets = spellEntry->Targets;
TargetCreatureType = spellEntry->TargetCreatureType;
RequiresSpellFocus = spellEntry->RequiresSpellFocus;
@@ -1309,7 +1309,7 @@ SpellCastResult SpellInfo::CheckShapeshift(uint32 form) const
(Effects[0].Effect == SPELL_EFFECT_LEARN_SPELL || Effects[1].Effect == SPELL_EFFECT_LEARN_SPELL || Effects[2].Effect == SPELL_EFFECT_LEARN_SPELL))
return SPELL_CAST_OK;
- uint32 stanceMask = (form ? 1 << (form - 1) : 0);
+ uint64 stanceMask = (form ? UI64LIT(1) << (form - 1) : 0);
if (stanceMask & StancesNot) // can explicitly not be cast in this stance
return SPELL_FAILED_NOT_SHAPESHIFT;
@@ -2658,7 +2658,7 @@ void SpellInfo::_UnloadImplicitTargetConditionLists()
// find the same instances of ConditionList and delete them.
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
{
- ConditionList* cur = Effects[i].ImplicitTargetConditions;
+ ConditionContainer* cur = Effects[i].ImplicitTargetConditions;
if (!cur)
continue;
for (uint8 j = i; j < MAX_SPELL_EFFECTS; ++j)
diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h
index cfa9877405d..d042f926d02 100644
--- a/src/server/game/Spells/SpellInfo.h
+++ b/src/server/game/Spells/SpellInfo.h
@@ -176,7 +176,7 @@ enum SpellCustomAttributes
SPELL_ATTR0_CU_CONE_LINE = 0x00000004,
SPELL_ATTR0_CU_SHARE_DAMAGE = 0x00000008,
SPELL_ATTR0_CU_NO_INITIAL_THREAT = 0x00000010,
- SPELL_ATTR0_CU_AURA_CC = 0x00000040,
+ SPELL_ATTR0_CU_DONT_BREAK_STEALTH = 0x00000040,
SPELL_ATTR0_CU_DIRECT_DAMAGE = 0x00000100,
SPELL_ATTR0_CU_CHARGE = 0x00000200,
SPELL_ATTR0_CU_PICKPOCKET = 0x00000400,
@@ -249,7 +249,7 @@ public:
uint32 ItemType;
uint32 TriggerSpell;
flag96 SpellClassMask;
- std::list<Condition*>* ImplicitTargetConditions;
+ std::vector<Condition*>* ImplicitTargetConditions;
SpellEffectInfo() : _spellInfo(NULL), _effIndex(0), Effect(0), ApplyAuraName(0), Amplitude(0), DieSides(0),
RealPointsPerLevel(0), BasePoints(0), PointsPerComboPoint(0), ValueMultiplier(0), DamageMultiplier(0),
@@ -306,8 +306,8 @@ public:
uint32 AttributesEx6;
uint32 AttributesEx7;
uint32 AttributesCu;
- uint32 Stances;
- uint32 StancesNot;
+ uint64 Stances;
+ uint64 StancesNot;
uint32 Targets;
uint32 TargetCreatureType;
uint32 RequiresSpellFocus;
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index f27f9220aaa..2d990ad3ed2 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -969,10 +969,10 @@ bool SpellMgr::CanSpellTriggerProcOnEvent(SpellProcEntry const& procEntry, ProcE
// check spell family name/flags (if set) for spells
if (eventInfo.GetTypeMask() & (PERIODIC_PROC_FLAG_MASK | SPELL_PROC_FLAG_MASK | PROC_FLAG_DONE_TRAP_ACTIVATION))
{
- if (procEntry.spellFamilyName && eventInfo.GetSpellInfo() && (procEntry.spellFamilyName != eventInfo.GetSpellInfo()->SpellFamilyName))
+ if (procEntry.spellFamilyName && eventInfo.GetSpellInfo() && (procEntry.spellFamilyName != eventInfo.EnsureSpellInfo()->SpellFamilyName))
return false;
- if (procEntry.spellFamilyMask && eventInfo.GetSpellInfo() && !(procEntry.spellFamilyMask & eventInfo.GetSpellInfo()->SpellFamilyFlags))
+ if (procEntry.spellFamilyMask && eventInfo.GetSpellInfo() && !(procEntry.spellFamilyMask & eventInfo.EnsureSpellInfo()->SpellFamilyFlags))
return false;
}
@@ -2801,14 +2801,6 @@ void SpellMgr::LoadSpellInfoCustomAttributes()
{
switch (spellInfo->Effects[j].ApplyAuraName)
{
- case SPELL_AURA_MOD_POSSESS:
- case SPELL_AURA_MOD_CONFUSE:
- case SPELL_AURA_MOD_CHARM:
- case SPELL_AURA_AOE_CHARM:
- case SPELL_AURA_MOD_FEAR:
- case SPELL_AURA_MOD_STUN:
- spellInfo->AttributesCu |= SPELL_ATTR0_CU_AURA_CC;
- break;
case SPELL_AURA_PERIODIC_HEAL:
case SPELL_AURA_PERIODIC_DAMAGE:
case SPELL_AURA_PERIODIC_DAMAGE_PERCENT:
@@ -2901,22 +2893,6 @@ void SpellMgr::LoadSpellInfoCustomAttributes()
if (spellInfo->SpellVisual[0] == 3879)
spellInfo->AttributesCu |= SPELL_ATTR0_CU_CONE_BACK;
- switch (spellInfo->SpellFamilyName)
- {
- case SPELLFAMILY_WARRIOR:
- // Shout
- if (spellInfo->SpellFamilyFlags[0] & 0x20000 || spellInfo->SpellFamilyFlags[1] & 0x20)
- spellInfo->AttributesCu |= SPELL_ATTR0_CU_AURA_CC;
- break;
- case SPELLFAMILY_DRUID:
- // Roar
- if (spellInfo->SpellFamilyFlags[0] & 0x8)
- spellInfo->AttributesCu |= SPELL_ATTR0_CU_AURA_CC;
- break;
- default:
- break;
- }
-
spellInfo->_InitializeExplicitTargetMask();
}
@@ -2947,6 +2923,11 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->Speed = SPEED_CHARGE;
break;
}
+
+ // Passive talent auras cannot target pets
+ if (spellInfo->IsPassive() && GetTalentSpellCost(i))
+ if (spellInfo->Effects[j].TargetA.GetTarget() == TARGET_UNIT_PET)
+ spellInfo->Effects[j].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
}
if (spellInfo->ActiveIconID == 2158) // flight
@@ -3105,11 +3086,13 @@ void SpellMgr::LoadSpellInfoCorrections()
case 28796: // Poison Bolt Volly - Faerlina
spellInfo->MaxAffectedTargets = 5;
break;
+ case 54835: // Curse of the Plaguebringer - Noth (H)
+ spellInfo->MaxAffectedTargets = 8;
+ break;
case 40827: // Sinful Beam
case 40859: // Sinister Beam
case 40860: // Vile Beam
case 40861: // Wicked Beam
- case 54835: // Curse of the Plaguebringer - Noth (H)
case 54098: // Poison Bolt Volly - Faerlina (H)
spellInfo->MaxAffectedTargets = 10;
break;
@@ -3180,13 +3163,13 @@ void SpellMgr::LoadSpellInfoCorrections()
// Master Shapeshifter: missing stance data for forms other than bear - bear version has correct data
// To prevent aura staying on target after talent unlearned
case 48420:
- spellInfo->Stances = 1 << (FORM_CAT - 1);
+ spellInfo->Stances = UI64LIT(1) << (FORM_CAT - 1);
break;
case 48421:
- spellInfo->Stances = 1 << (FORM_MOONKIN - 1);
+ spellInfo->Stances = UI64LIT(1) << (FORM_MOONKIN - 1);
break;
case 48422:
- spellInfo->Stances = 1 << (FORM_TREE - 1);
+ spellInfo->Stances = UI64LIT(1) << (FORM_TREE - 1);
break;
case 51466: // Elemental Oath (Rank 1)
case 51470: // Elemental Oath (Rank 2)
diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp
index f9ccd2efd16..034fe96306e 100644
--- a/src/server/game/Texts/CreatureTextMgr.cpp
+++ b/src/server/game/Texts/CreatureTextMgr.cpp
@@ -202,7 +202,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject
CreatureTextMap::const_iterator sList = mTextMap.find(source->GetEntry());
if (sList == mTextMap.end())
{
- TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Could not find Text for Creature %s (Entry %u, GUID %u) in 'creature_text' table. Ignoring.", source->GetName().c_str(), source->GetEntry(), source->GetGUIDLow());
+ TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Could not find Text for Creature %s (Entry %u, GUID %u) in 'creature_text' table. Ignoring.", source->GetName().c_str(), source->GetEntry(), source->GetGUID().GetCounter());
return 0;
}
@@ -210,7 +210,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject
CreatureTextHolder::const_iterator itr = textHolder.find(textGroup);
if (itr == textHolder.end())
{
- TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Could not find TextGroup %u for Creature %s (Entry %u, GUID %u) in 'creature_text' table. Ignoring.", uint32(textGroup), source->GetName().c_str(), source->GetEntry(), source->GetGUIDLow());
+ TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Could not find TextGroup %u for Creature %s (Entry %u, GUID %u) in 'creature_text' table. Ignoring.", uint32(textGroup), source->GetName().c_str(), source->GetEntry(), source->GetGUID().GetCounter());
return 0;
}
@@ -293,7 +293,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject
SendChatPacket(finalSource, builder, finalType, whisperTarget, range, team, gmOnly);
}
- if (isEqualChanced || (!isEqualChanced && totalChance == 100.0f))
+ if (isEqualChanced || totalChance == 100.0f)
SetRepeatId(source, textGroup, iter->id);
return iter->duration;
diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp
index 3d26f349ca5..b4b3b8267c6 100644
--- a/src/server/game/Tickets/TicketMgr.cpp
+++ b/src/server/game/Tickets/TicketMgr.cpp
@@ -32,11 +32,11 @@ inline float GetAge(uint64 t) { return float(time(NULL) - t) / DAY; }
///////////////////////////////////////////////////////////////////////////////////////////////////
// GM ticket
-GmTicket::GmTicket() : _id(0), _posX(0), _posY(0), _posZ(0), _mapId(0), _createTime(0), _lastModifiedTime(0),
+GmTicket::GmTicket() : _id(0), _type(TICKET_TYPE_OPEN), _posX(0), _posY(0), _posZ(0), _mapId(0), _createTime(0), _lastModifiedTime(0),
_completed(false), _escalatedStatus(TICKET_UNASSIGNED), _viewed(false),
_needResponse(false), _needMoreHelp(false) { }
-GmTicket::GmTicket(Player* player) : _posX(0), _posY(0), _posZ(0), _mapId(0), _createTime(time(NULL)), _lastModifiedTime(time(NULL)),
+GmTicket::GmTicket(Player* player) : _type(TICKET_TYPE_OPEN), _posX(0), _posY(0), _posZ(0), _mapId(0), _createTime(time(NULL)), _lastModifiedTime(time(NULL)),
_completed(false), _escalatedStatus(TICKET_UNASSIGNED), _viewed(false),
_needResponse(false), _needMoreHelp(false)
{
@@ -49,11 +49,12 @@ GmTicket::~GmTicket() { }
bool GmTicket::LoadFromDB(Field* fields)
{
- // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
- // ticketId, guid, name, message, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, haveTicket
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
+ // id, type, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp
uint8 index = 0;
_id = fields[ index].GetUInt32();
- _playerGuid = ObjectGuid(HIGHGUID_PLAYER, fields[++index].GetUInt32());
+ _type = TicketType(fields[++index].GetUInt8());
+ _playerGuid = ObjectGuid(HighGuid::Player, fields[++index].GetUInt32());
_playerName = fields[++index].GetString();
_message = fields[++index].GetString();
_createTime = fields[++index].GetUInt32();
@@ -63,7 +64,7 @@ bool GmTicket::LoadFromDB(Field* fields)
_posZ = fields[++index].GetFloat();
_lastModifiedTime = fields[++index].GetUInt32();
_closedBy = ObjectGuid(uint64(fields[++index].GetInt32()));
- _assignedTo = ObjectGuid(HIGHGUID_PLAYER, fields[++index].GetUInt32());
+ _assignedTo = ObjectGuid(HighGuid::Player, fields[++index].GetUInt32());
_comment = fields[++index].GetString();
_response = fields[++index].GetString();
_completed = fields[++index].GetBool();
@@ -75,11 +76,12 @@ bool GmTicket::LoadFromDB(Field* fields)
void GmTicket::SaveToDB(SQLTransaction& trans) const
{
- // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
- // ticketId, guid, name, message, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, completed, escalated, viewed
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+ // id, type, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp, resolvedBy
uint8 index = 0;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_GM_TICKET);
stmt->setUInt32( index, _id);
+ stmt->setUInt8 (++index, uint8(_type));
stmt->setUInt32(++index, _playerGuid.GetCounter());
stmt->setString(++index, _playerName);
stmt->setString(++index, _message);
@@ -97,6 +99,7 @@ void GmTicket::SaveToDB(SQLTransaction& trans) const
stmt->setUInt8 (++index, uint8(_escalatedStatus));
stmt->setBool (++index, _viewed);
stmt->setBool (++index, _needMoreHelp);
+ stmt->setInt32 (++index, int32(_resolvedBy.GetCounter()));
CharacterDatabase.ExecuteOrAppend(trans, stmt);
}
@@ -361,6 +364,19 @@ void TicketMgr::CloseTicket(uint32 ticketId, ObjectGuid source)
}
}
+void TicketMgr::ResolveAndCloseTicket(uint32 ticketId, ObjectGuid source)
+{
+ if (GmTicket* ticket = GetTicket(ticketId))
+ {
+ SQLTransaction trans = SQLTransaction(nullptr);
+ ticket->SetClosedBy(source);
+ ticket->SetResolvedBy(source);
+ if (source)
+ --_openTicketCount;
+ ticket->SaveToDB(trans);
+ }
+}
+
void TicketMgr::RemoveTicket(uint32 ticketId)
{
if (GmTicket* ticket = GetTicket(ticketId))
diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h
index e9892c22edc..a90a1ec0206 100644
--- a/src/server/game/Tickets/TicketMgr.h
+++ b/src/server/game/Tickets/TicketMgr.h
@@ -77,6 +77,13 @@ enum LagReportType
LAG_REPORT_TYPE_SPELL = 6
};
+enum TicketType
+{
+ TICKET_TYPE_OPEN = 0,
+ TICKET_TYPE_CLOSED = 1,
+ TICKET_TYPE_CHARACTER_DELETED = 2,
+};
+
class GmTicket
{
public:
@@ -84,7 +91,7 @@ public:
GmTicket(Player* player);
~GmTicket();
- bool IsClosed() const { return !_closedBy.IsEmpty(); }
+ bool IsClosed() const { return _type != TICKET_TYPE_OPEN; }
bool IsCompleted() const { return _completed; }
bool IsFromPlayer(ObjectGuid guid) const { return guid == _playerGuid; }
bool IsAssigned() const { return !_assignedTo.IsEmpty(); }
@@ -118,7 +125,8 @@ public:
else if (_escalatedStatus == TICKET_UNASSIGNED)
_escalatedStatus = TICKET_ASSIGNED;
}
- void SetClosedBy(ObjectGuid value) { _closedBy = value; }
+ void SetClosedBy(ObjectGuid value) { _closedBy = value; _type = TICKET_TYPE_CLOSED; }
+ void SetResolvedBy(ObjectGuid value) { _resolvedBy = value; }
void SetCompleted() { _completed = true; }
void SetMessage(std::string const& message)
{
@@ -149,6 +157,7 @@ public:
private:
uint32 _id;
+ TicketType _type; // 0 = Open, 1 = Closed, 2 = Character deleted
ObjectGuid _playerGuid;
std::string _playerName;
float _posX;
@@ -158,7 +167,8 @@ private:
std::string _message;
uint64 _createTime;
uint64 _lastModifiedTime;
- ObjectGuid _closedBy; // 0 = Open, -1 = Console, playerGuid = player abandoned ticket, other = GM who closed it.
+ ObjectGuid _closedBy; // 0 = Open or Closed by Console (if type = 1), playerGuid = GM who closed it or player abandoned ticket or read the GM response message.
+ ObjectGuid _resolvedBy; // 0 = Open or Resolved by Console (if type = 1), playerGuid = GM who resolved it by closing or completing the ticket.
ObjectGuid _assignedTo;
std::string _comment;
bool _completed;
@@ -216,6 +226,7 @@ public:
void AddTicket(GmTicket* ticket);
void CloseTicket(uint32 ticketId, ObjectGuid source);
+ void ResolveAndCloseTicket(uint32 ticketId, ObjectGuid source); // used when GM resolves a ticket by simply closing it
void RemoveTicket(uint32 ticketId);
bool GetStatus() const { return _status; }
diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp
index 83100d3fbec..0a47da1c788 100644
--- a/src/server/game/Tools/PlayerDump.cpp
+++ b/src/server/game/Tools/PlayerDump.cpp
@@ -21,6 +21,7 @@
#include "DatabaseEnv.h"
#include "UpdateFields.h"
#include "ObjectMgr.h"
+#include "Player.h"
#include "AccountMgr.h"
#include "World.h"
@@ -63,11 +64,15 @@ static DumpTable dumpTables[DUMP_TABLE_COUNT] =
};
// Low level functions
-static bool findtoknth(std::string &str, int n, std::string::size_type &s, std::string::size_type &e)
+static bool FindTokNth(std::string const& str, uint32 n, std::string::size_type& s, std::string::size_type& e)
{
- int i; s = e = 0;
- std::string::size_type size = str.size();
- for (i = 1; s < size && i < n; s++) if (str[s] == ' ') ++i;
+ s = e = 0;
+
+ uint32 i = 1;
+ for (; s < str.size() && i < n; ++s)
+ if (str[s] == ' ')
+ ++i;
+
if (i < n)
return false;
@@ -76,80 +81,86 @@ static bool findtoknth(std::string &str, int n, std::string::size_type &s, std::
return e != std::string::npos;
}
-std::string gettoknth(std::string &str, int n)
+std::string GetTokNth(std::string const& str, uint32 n)
{
std::string::size_type s = 0, e = 0;
- if (!findtoknth(str, n, s, e))
+ if (!FindTokNth(str, n, s, e))
return "";
- return str.substr(s, e-s);
+ return str.substr(s, e - s);
}
-bool findnth(std::string &str, int n, std::string::size_type &s, std::string::size_type &e)
+bool FindNth(std::string const& str, uint32 n, std::string::size_type& s, std::string::size_type& e)
{
- s = str.find("VALUES ('")+9;
- if (s == std::string::npos) return false;
+ s = str.find("VALUES ('") + 9;
+ if (s == std::string::npos)
+ return false;
do
{
e = str.find('\'', s);
- if (e == std::string::npos) return false;
- } while (str[e-1] == '\\');
+ if (e == std::string::npos)
+ return false;
+ } while (str[e - 1] == '\\');
- for (int i = 1; i < n; ++i)
+ for (uint32 i = 1; i < n; ++i)
{
do
{
- s = e+4;
+ s = e + 4;
e = str.find('\'', s);
- if (e == std::string::npos) return false;
- } while (str[e-1] == '\\');
+ if (e == std::string::npos)
+ return false;
+ } while (str[e - 1] == '\\');
}
return true;
}
-std::string gettablename(std::string &str)
+std::string GetTableName(std::string const& str)
{
- std::string::size_type s = 13;
+ static std::string::size_type const s = 13;
std::string::size_type e = str.find(_TABLE_SIM_, s);
if (e == std::string::npos)
return "";
- return str.substr(s, e-s);
+ return str.substr(s, e - s);
}
-bool changenth(std::string &str, int n, char const* with, bool insert = false, bool nonzero = false)
+bool ChangeNth(std::string& str, uint32 n, char const* with, bool insert = false, bool allowZero = false)
{
std::string::size_type s, e;
- if (!findnth(str, n, s, e))
+ if (!FindNth(str, n, s, e))
return false;
- if (nonzero && str.substr(s, e-s) == "0")
+ if (allowZero && str.substr(s, e - s) == "0")
return true; // not an error
+
if (!insert)
- str.replace(s, e-s, with);
+ str.replace(s, e - s, with);
else
str.insert(s, with);
return true;
}
-std::string getnth(std::string &str, int n)
+std::string GetNth(std::string& str, uint32 n)
{
std::string::size_type s, e;
- if (!findnth(str, n, s, e))
+ if (!FindNth(str, n, s, e))
return "";
return str.substr(s, e-s);
}
-bool changetoknth(std::string &str, int n, char const* with, bool insert = false, bool nonzero = false)
+bool ChangeTokNth(std::string& str, uint32 n, char const* with, bool insert = false, bool allowZero = false)
{
std::string::size_type s = 0, e = 0;
- if (!findtoknth(str, n, s, e))
+ if (!FindTokNth(str, n, s, e))
return false;
- if (nonzero && str.substr(s, e-s) == "0")
+
+ if (allowZero && str.substr(s, e - s) == "0")
return true; // not an error
+
if (!insert)
str.replace(s, e-s, with);
else
@@ -158,41 +169,28 @@ bool changetoknth(std::string &str, int n, char const* with, bool insert = false
return true;
}
-uint32 registerNewGuid(uint32 oldGuid, std::map<uint32, uint32> &guidMap, uint32 hiGuid)
+ObjectGuid::LowType RegisterNewGuid(ObjectGuid::LowType oldGuid, PlayerDump::DumpGuidMap& guidMap, ObjectGuid::LowType guidOffset)
{
- std::map<uint32, uint32>::const_iterator itr = guidMap.find(oldGuid);
+ PlayerDumpWriter::DumpGuidMap::const_iterator itr = guidMap.find(oldGuid);
if (itr != guidMap.end())
return itr->second;
- uint32 newguid = hiGuid + guidMap.size();
+ ObjectGuid::LowType newguid = guidOffset + guidMap.size();
guidMap[oldGuid] = newguid;
return newguid;
}
-bool changeGuid(std::string &str, int n, std::map<uint32, uint32> &guidMap, uint32 hiGuid, bool nonzero = false)
+bool ChangeGuid(std::string& str, uint32 n, PlayerDump::DumpGuidMap& guidMap, ObjectGuid::LowType guidOffset, bool allowZero = false)
{
- char chritem[20];
- uint32 oldGuid = atoi(getnth(str, n).c_str());
- if (nonzero && oldGuid == 0)
+ ObjectGuid::LowType oldGuid = strtoull(GetNth(str, n).c_str(), nullptr, 10);
+ if (allowZero && !oldGuid)
return true; // not an error
- uint32 newGuid = registerNewGuid(oldGuid, guidMap, hiGuid);
- snprintf(chritem, 20, "%u", newGuid);
-
- return changenth(str, n, chritem, false, nonzero);
-}
-
-bool changetokGuid(std::string &str, int n, std::map<uint32, uint32> &guidMap, uint32 hiGuid, bool nonzero = false)
-{
char chritem[20];
- uint32 oldGuid = atoi(gettoknth(str, n).c_str());
- if (nonzero && oldGuid == 0)
- return true; // not an error
-
- uint32 newGuid = registerNewGuid(oldGuid, guidMap, hiGuid);
+ ObjectGuid::LowType newGuid = RegisterNewGuid(oldGuid, guidMap, guidOffset);
snprintf(chritem, 20, "%u", newGuid);
- return changetoknth(str, n, chritem, false, nonzero);
+ return ChangeNth(str, n, chritem, false, allowZero);
}
std::string CreateDumpString(char const* tableName, QueryResult result)
@@ -216,57 +214,54 @@ std::string CreateDumpString(char const* tableName, QueryResult result)
return ss.str();
}
-std::string PlayerDumpWriter::GenerateWhereStr(char const* field, uint32 guid)
+std::string PlayerDumpWriter::GenerateWhereStr(char const* field, ObjectGuid::LowType guid)
{
std::ostringstream wherestr;
wherestr << field << " = '" << guid << '\'';
return wherestr.str();
}
-std::string PlayerDumpWriter::GenerateWhereStr(char const* field, GUIDs const& guids, GUIDs::const_iterator& itr)
+std::string PlayerDumpWriter::GenerateWhereStr(char const* field, DumpGuidSet const& guids, DumpGuidSet::const_iterator& itr)
{
std::ostringstream wherestr;
wherestr << field << " IN ('";
- for (; itr != guids.end(); ++itr)
+ for (; itr != guids.end();)
{
wherestr << *itr;
+ ++itr;
if (wherestr.str().size() > MAX_QUERY_LEN - 50) // near to max query
- {
- ++itr;
break;
- }
- GUIDs::const_iterator itr2 = itr;
- if (++itr2 != guids.end())
+ if (itr != guids.end())
wherestr << "', '";
}
wherestr << "')";
return wherestr.str();
}
-void StoreGUID(QueryResult result, uint32 field, std::set<uint32>& guids)
+void StoreGUID(QueryResult result, uint32 field, PlayerDump::DumpGuidSet &guids)
{
Field* fields = result->Fetch();
- uint32 guid = fields[field].GetUInt32();
+ ObjectGuid::LowType guid = fields[field].GetUInt32();
if (guid)
guids.insert(guid);
}
-void StoreGUID(QueryResult result, uint32 data, uint32 field, std::set<uint32>& guids)
+void StoreGUID(QueryResult result, uint32 data, uint32 field, PlayerDump::DumpGuidSet& guids)
{
Field* fields = result->Fetch();
std::string dataStr = fields[data].GetString();
- uint32 guid = atoi(gettoknth(dataStr, field).c_str());
+ ObjectGuid::LowType guid = strtoull(GetTokNth(dataStr, field).c_str(), nullptr, 10);
if (guid)
guids.insert(guid);
}
// Writing - High-level functions
-bool PlayerDumpWriter::DumpTable(std::string& dump, uint32 guid, char const*tableFrom, char const*tableTo, DumpTableType type)
+bool PlayerDumpWriter::DumpTable(std::string& dump, ObjectGuid::LowType guid, char const* tableFrom, char const* tableTo, DumpTableType type)
{
- GUIDs const* guids = NULL;
- char const* fieldname = NULL;
+ DumpGuidSet const* guids = nullptr;
+ char const* fieldname = nullptr;
switch (type)
{
@@ -281,20 +276,20 @@ bool PlayerDumpWriter::DumpTable(std::string& dump, uint32 guid, char const*tabl
// for guid set stop if set is empty
if (guids && guids->empty())
- return true; // nothing to do
+ return true; // nothing to do
// setup for guids case start position
- GUIDs::const_iterator guids_itr;
+ DumpGuidSet::const_iterator guidsItr;
if (guids)
- guids_itr = guids->begin();
+ guidsItr = guids->begin();
do
{
std::string wherestr;
- if (guids) // set case, get next guids string
- wherestr = GenerateWhereStr(fieldname, *guids, guids_itr);
- else // not set case, get single guid string
+ if (guids) // set case, get next guids string
+ wherestr = GenerateWhereStr(fieldname, *guids, guidsItr);
+ else // not set case, get single guid string
wherestr = GenerateWhereStr(fieldname, guid);
QueryResult result = CharacterDatabase.PQuery("SELECT * FROM %s WHERE %s", tableFrom, wherestr.c_str());
@@ -336,16 +331,16 @@ bool PlayerDumpWriter::DumpTable(std::string& dump, uint32 guid, char const*tabl
}
while (result->NextRow());
}
- while (guids && guids_itr != guids->end()); // not set case iterate single time, set case iterate for all guids
+ while (guids && guidsItr != guids->end()); // not set case iterate single time, set case iterate for all guids
return true;
}
-bool PlayerDumpWriter::GetDump(uint32 guid, std::string &dump)
+bool PlayerDumpWriter::GetDump(ObjectGuid::LowType guid, std::string &dump)
{
dump = "IMPORTANT NOTE: THIS DUMPFILE IS MADE FOR USE WITH THE 'PDUMP' COMMAND ONLY - EITHER THROUGH INGAME CHAT OR ON CONSOLE!\n";
dump += "IMPORTANT NOTE: DO NOT apply it directly - it will irreversibly DAMAGE and CORRUPT your database! You have been warned!\n\n";
- for (int i = 0; i < DUMP_TABLE_COUNT; ++i)
+ for (uint8 i = 0; i < DUMP_TABLE_COUNT; ++i)
if (!DumpTable(dump, guid, dumpTables[i].name, dumpTables[i].name, dumpTables[i].type))
return false;
@@ -355,17 +350,19 @@ bool PlayerDumpWriter::GetDump(uint32 guid, std::string &dump)
return true;
}
-DumpReturn PlayerDumpWriter::WriteDump(const std::string& file, uint32 guid)
+DumpReturn PlayerDumpWriter::WriteDump(const std::string& file, ObjectGuid::LowType guid)
{
if (sWorld->getBoolConfig(CONFIG_PDUMP_NO_PATHS))
if (strstr(file.c_str(), "\\") || strstr(file.c_str(), "/"))
return DUMP_FILE_OPEN_ERROR;
+
if (sWorld->getBoolConfig(CONFIG_PDUMP_NO_OVERWRITE))
if (FILE* f = fopen(file.c_str(), "r"))
{
fclose(f);
return DUMP_FILE_OPEN_ERROR;
}
+
FILE* fout = fopen(file.c_str(), "w");
if (!fout)
return DUMP_FILE_OPEN_ERROR;
@@ -383,9 +380,9 @@ DumpReturn PlayerDumpWriter::WriteDump(const std::string& file, uint32 guid)
// Reading - High-level functions
#define ROLLBACK(DR) {fclose(fin); return (DR);}
-void fixNULLfields(std::string &line)
+void fixNULLfields(std::string& line)
{
- std::string nullString("'NULL'");
+ static std::string const nullString("'NULL'");
size_t pos = line.find(nullString);
while (pos != std::string::npos)
{
@@ -394,7 +391,7 @@ void fixNULLfields(std::string &line)
}
}
-DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, std::string name, uint32 guid)
+DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, std::string name, ObjectGuid::LowType guid)
{
uint32 charcount = AccountMgr::GetCharactersCount(account);
if (charcount >= 10)
@@ -404,28 +401,32 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s
if (!fin)
return DUMP_FILE_OPEN_ERROR;
- char newguid[20], chraccount[20], newpetid[20], currpetid[20], lastpetid[20];
+ char newguid[20], chraccount[20];
// make sure the same guid doesn't already exist and is safe to use
bool incHighest = true;
- if (guid != 0 && guid < sObjectMgr->_hiCharGuid)
+ if (guid && guid < sObjectMgr->GetGenerator<HighGuid::Player>().GetNextAfterMaxUsed())
+
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHECK_GUID);
stmt->setUInt32(0, guid);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (result)
- guid = sObjectMgr->_hiCharGuid; // use first free if exists
- else incHighest = false;
+ guid = sObjectMgr->GetGenerator<HighGuid::Player>().GetNextAfterMaxUsed(); // use first free if exists
+
+ else
+ incHighest = false;
}
else
- guid = sObjectMgr->_hiCharGuid;
+ guid = sObjectMgr->GetGenerator<HighGuid::Player>().GetNextAfterMaxUsed();
+
// normalize the name if specified and check if it exists
if (!normalizePlayerName(name))
name.clear();
- if (ObjectMgr::CheckPlayerName(name, true) == CHAR_NAME_SUCCESS)
+ if (ObjectMgr::CheckPlayerName(name, sWorld->GetDefaultDbcLocale(), true) == CHAR_NAME_SUCCESS)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHECK_NAME);
stmt->setString(0, name);
@@ -441,22 +442,22 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s
snprintf(newguid, 20, "%u", guid);
snprintf(chraccount, 20, "%u", account);
- snprintf(newpetid, 20, "%u", sObjectMgr->GeneratePetNumber());
- snprintf(lastpetid, 20, "%s", "");
- std::map<uint32, uint32> items;
- std::map<uint32, uint32> mails;
- char buf[32000] = "";
+ DumpGuidMap items;
+ DumpGuidMap mails;
+ char buf[32000];
+ memset(buf, 0, sizeof(buf));
- typedef std::map<uint32, uint32> PetIds; // old->new petid relation
- typedef PetIds::value_type PetIdsPair;
- PetIds petids;
+ typedef std::map<uint32 /*old*/, uint32 /*new*/> PetIds;
+ PetIds petIds;
uint8 gender = GENDER_NONE;
uint8 race = RACE_NONE;
uint8 playerClass = 0;
uint8 level = 1;
+ ObjectGuid::LowType itemLowGuidOffset = sObjectMgr->GetGenerator<HighGuid::Item>().GetNextAfterMaxUsed();
+
SQLTransaction trans = CharacterDatabase.BeginTransaction();
while (!feof(fin))
{
@@ -492,7 +493,7 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s
*/
// determine table name and load type
- std::string tn = gettablename(line);
+ std::string tn = GetTableName(line);
if (tn.empty())
{
TC_LOG_ERROR("misc", "LoadPlayerDump: Can't extract table name from line: '%s'!", line.c_str());
@@ -521,142 +522,139 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s
{
case DTT_CHARACTER:
{
- if (!changenth(line, 1, newguid)) // characters.guid update
+ if (!ChangeNth(line, 1, newguid)) // characters.guid update
ROLLBACK(DUMP_FILE_BROKEN);
- if (!changenth(line, 2, chraccount)) // characters.account update
+ if (!ChangeNth(line, 2, chraccount)) // characters.account update
ROLLBACK(DUMP_FILE_BROKEN);
- race = uint8(atoul(getnth(line, 4).c_str()));
- playerClass = uint8(atoul(getnth(line, 5).c_str()));
- gender = uint8(atoul(getnth(line, 6).c_str()));
- level = uint8(atoul(getnth(line, 7).c_str()));
+ race = uint8(atoul(GetNth(line, 4).c_str()));
+ playerClass = uint8(atoul(GetNth(line, 5).c_str()));
+ gender = uint8(atoul(GetNth(line, 6).c_str()));
+ level = uint8(atoul(GetNth(line, 7).c_str()));
if (name.empty())
{
// check if the original name already exists
- name = getnth(line, 3);
+ name = GetNth(line, 3);
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHECK_NAME);
stmt->setString(0, name);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (result)
- if (!changenth(line, 37, "1")) // characters.at_login set to "rename on login"
+ if (!ChangeNth(line, 37, "1")) // characters.at_login set to "rename on login"
ROLLBACK(DUMP_FILE_BROKEN);
}
- else if (!changenth(line, 3, name.c_str())) // characters.name
+ else if (!ChangeNth(line, 3, name.c_str())) // characters.name
ROLLBACK(DUMP_FILE_BROKEN);
const char null[5] = "NULL";
- if (!changenth(line, 69, null)) // characters.deleteInfos_Account
+ if (!ChangeNth(line, 69, null)) // characters.deleteInfos_Account
ROLLBACK(DUMP_FILE_BROKEN);
- if (!changenth(line, 70, null)) // characters.deleteInfos_Name
+ if (!ChangeNth(line, 70, null)) // characters.deleteInfos_Name
ROLLBACK(DUMP_FILE_BROKEN);
- if (!changenth(line, 71, null)) // characters.deleteDate
+ if (!ChangeNth(line, 71, null)) // characters.deleteDate
ROLLBACK(DUMP_FILE_BROKEN);
break;
}
case DTT_CHAR_TABLE:
{
- if (!changenth(line, 1, newguid)) // character_*.guid update
+ if (!ChangeNth(line, 1, newguid)) // character_*.guid update
ROLLBACK(DUMP_FILE_BROKEN);
break;
}
case DTT_EQSET_TABLE:
{
- if (!changenth(line, 1, newguid))
+ if (!ChangeNth(line, 1, newguid))
ROLLBACK(DUMP_FILE_BROKEN); // character_equipmentsets.guid
char newSetGuid[24];
snprintf(newSetGuid, 24, UI64FMTD, sObjectMgr->GenerateEquipmentSetGuid());
- if (!changenth(line, 2, newSetGuid))
+ if (!ChangeNth(line, 2, newSetGuid))
ROLLBACK(DUMP_FILE_BROKEN); // character_equipmentsets.setguid
+
+ for (uint8 slot = 0; slot < EQUIPMENT_SLOT_END; ++slot)
+ if (!ChangeGuid(line, 7 + slot, items, itemLowGuidOffset, true))
+ ROLLBACK(DUMP_FILE_BROKEN); // character_equipmentsets.item
break;
}
case DTT_INVENTORY:
{
- if (!changenth(line, 1, newguid)) // character_inventory.guid update
+ if (!ChangeNth(line, 1, newguid)) // character_inventory.guid update
ROLLBACK(DUMP_FILE_BROKEN);
- if (!changeGuid(line, 2, items, sObjectMgr->_hiItemGuid, true))
+ if (!ChangeGuid(line, 2, items, itemLowGuidOffset, true))
ROLLBACK(DUMP_FILE_BROKEN); // character_inventory.bag update
- if (!changeGuid(line, 4, items, sObjectMgr->_hiItemGuid))
+ if (!ChangeGuid(line, 4, items, itemLowGuidOffset))
ROLLBACK(DUMP_FILE_BROKEN); // character_inventory.item update
break;
}
case DTT_MAIL: // mail
{
- if (!changeGuid(line, 1, mails, sObjectMgr->_mailId))
+ if (!ChangeGuid(line, 1, mails, sObjectMgr->_mailId))
ROLLBACK(DUMP_FILE_BROKEN); // mail.id update
- if (!changenth(line, 6, newguid)) // mail.receiver update
+ if (!ChangeNth(line, 6, newguid)) // mail.receiver update
ROLLBACK(DUMP_FILE_BROKEN);
break;
}
case DTT_MAIL_ITEM: // mail_items
{
- if (!changeGuid(line, 1, mails, sObjectMgr->_mailId))
+ if (!ChangeGuid(line, 1, mails, sObjectMgr->_mailId))
ROLLBACK(DUMP_FILE_BROKEN); // mail_items.id
- if (!changeGuid(line, 2, items, sObjectMgr->_hiItemGuid))
+ if (!ChangeGuid(line, 2, items, itemLowGuidOffset))
ROLLBACK(DUMP_FILE_BROKEN); // mail_items.item_guid
- if (!changenth(line, 3, newguid)) // mail_items.receiver
+ if (!ChangeNth(line, 3, newguid)) // mail_items.receiver
ROLLBACK(DUMP_FILE_BROKEN);
break;
}
case DTT_ITEM:
{
// item, owner, data field:item, owner guid
- if (!changeGuid(line, 1, items, sObjectMgr->_hiItemGuid))
+ if (!ChangeGuid(line, 1, items, itemLowGuidOffset))
ROLLBACK(DUMP_FILE_BROKEN); // item_instance.guid update
- if (!changenth(line, 3, newguid)) // item_instance.owner_guid update
+ if (!ChangeNth(line, 3, newguid)) // item_instance.owner_guid update
ROLLBACK(DUMP_FILE_BROKEN);
break;
}
case DTT_ITEM_GIFT:
{
- if (!changenth(line, 1, newguid)) // character_gifts.guid update
+ if (!ChangeNth(line, 1, newguid)) // character_gifts.guid update
ROLLBACK(DUMP_FILE_BROKEN);
- if (!changeGuid(line, 2, items, sObjectMgr->_hiItemGuid))
+ if (!ChangeGuid(line, 2, items, itemLowGuidOffset))
ROLLBACK(DUMP_FILE_BROKEN); // character_gifts.item_guid update
break;
}
case DTT_PET:
{
- //store a map of old pet id to new inserted pet id for use by type 5 tables
- snprintf(currpetid, 20, "%s", getnth(line, 1).c_str());
- if (*lastpetid == '\0')
- snprintf(lastpetid, 20, "%s", currpetid);
- if (strcmp(lastpetid, currpetid) != 0)
- {
- snprintf(newpetid, 20, "%u", sObjectMgr->GeneratePetNumber());
- snprintf(lastpetid, 20, "%s", currpetid);
- }
+ // store a map of old pet id to new inserted pet id for use by DTT_PET_TABLE tables
+ std::string petIdStr = GetNth(line, 1);
- std::map<uint32, uint32> :: const_iterator petids_iter = petids.find(atoi(currpetid));
+ uint32 currentPetId = atoul(petIdStr.c_str());
- if (petids_iter == petids.end())
- {
- petids.insert(PetIdsPair(atoi(currpetid), atoi(newpetid)));
- }
+ PetIds::const_iterator petIdsItr = petIds.find(currentPetId);
+ if (petIdsItr != petIds.end()) // duplicate pets
+ ROLLBACK(DUMP_FILE_BROKEN);
- if (!changenth(line, 1, newpetid)) // character_pet.id update
+ uint32 newPetId = sObjectMgr->GeneratePetNumber();
+ petIds[currentPetId] = newPetId;
+
+ if (!ChangeNth(line, 1, std::to_string(newPetId).c_str())) // character_pet.id update
ROLLBACK(DUMP_FILE_BROKEN);
- if (!changenth(line, 3, newguid)) // character_pet.owner update
+ if (!ChangeNth(line, 3, newguid)) // character_pet.owner update
ROLLBACK(DUMP_FILE_BROKEN);
break;
}
case DTT_PET_TABLE: // pet_aura, pet_spell, pet_spell_cooldown
{
- snprintf(currpetid, 20, "%s", getnth(line, 1).c_str());
+ std::string petIdStr = GetNth(line, 1);
// lookup currpetid and match to new inserted pet id
- std::map<uint32, uint32> :: const_iterator petids_iter = petids.find(atoi(currpetid));
- if (petids_iter == petids.end()) // couldn't find new inserted id
+ PetIds::const_iterator petIdsItr = petIds.find(atoul(petIdStr.c_str()));
+ if (petIdsItr == petIds.end()) // couldn't find new inserted id
ROLLBACK(DUMP_FILE_BROKEN);
- snprintf(newpetid, 20, "%d", petids_iter->second);
-
- if (!changenth(line, 1, newpetid))
+ if (!ChangeNth(line, 1, std::to_string(petIdsItr->second).c_str()))
ROLLBACK(DUMP_FILE_BROKEN);
break;
@@ -674,13 +672,15 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s
CharacterDatabase.CommitTransaction(trans);
// in case of name conflict player has to rename at login anyway
- sWorld->AddCharacterNameData(ObjectGuid(HIGHGUID_PLAYER, guid), name, gender, race, playerClass, level);
+ sWorld->AddCharacterInfo(ObjectGuid(HighGuid::Player, guid), account, name, gender, race, playerClass, level);
+
+ sObjectMgr->GetGenerator<HighGuid::Item>().Set(sObjectMgr->GetGenerator<HighGuid::Item>().GetNextAfterMaxUsed() + items.size());
- sObjectMgr->_hiItemGuid += items.size();
sObjectMgr->_mailId += mails.size();
if (incHighest)
- ++sObjectMgr->_hiCharGuid;
+ sObjectMgr->GetGenerator<HighGuid::Player>().Generate();
+
fclose(fin);
diff --git a/src/server/game/Tools/PlayerDump.h b/src/server/game/Tools/PlayerDump.h
index 5a26c10b7d8..5cdcc4b6bb8 100644
--- a/src/server/game/Tools/PlayerDump.h
+++ b/src/server/game/Tools/PlayerDump.h
@@ -22,6 +22,7 @@
#include <string>
#include <map>
#include <set>
+#include "ObjectGuid.h"
enum DumpTableType
{
@@ -63,6 +64,10 @@ enum DumpReturn
class PlayerDump
{
+ public:
+ typedef std::set<ObjectGuid::LowType> DumpGuidSet;
+ typedef std::map<ObjectGuid::LowType, ObjectGuid::LowType> DumpGuidMap;
+
protected:
PlayerDump() { }
};
@@ -72,18 +77,17 @@ class PlayerDumpWriter : public PlayerDump
public:
PlayerDumpWriter() { }
- bool GetDump(uint32 guid, std::string& dump);
- DumpReturn WriteDump(std::string const& file, uint32 guid);
- private:
- typedef std::set<uint32> GUIDs;
+ bool GetDump(ObjectGuid::LowType guid, std::string& dump);
+ DumpReturn WriteDump(std::string const& file, ObjectGuid::LowType guid);
- bool DumpTable(std::string& dump, uint32 guid, char const*tableFrom, char const*tableTo, DumpTableType type);
- std::string GenerateWhereStr(char const* field, GUIDs const& guids, GUIDs::const_iterator& itr);
- std::string GenerateWhereStr(char const* field, uint32 guid);
+ private:
+ bool DumpTable(std::string& dump, ObjectGuid::LowType guid, char const* tableFrom, char const* tableTo, DumpTableType type);
+ std::string GenerateWhereStr(char const* field, DumpGuidSet const& guids, DumpGuidSet::const_iterator& itr);
+ std::string GenerateWhereStr(char const* field, ObjectGuid::LowType guid);
- GUIDs pets;
- GUIDs mails;
- GUIDs items;
+ DumpGuidSet pets;
+ DumpGuidSet mails;
+ DumpGuidSet items;
};
class PlayerDumpReader : public PlayerDump
@@ -91,7 +95,7 @@ class PlayerDumpReader : public PlayerDump
public:
PlayerDumpReader() { }
- DumpReturn LoadDump(std::string const& file, uint32 account, std::string name, uint32 guid);
+ DumpReturn LoadDump(std::string const& file, uint32 account, std::string name, ObjectGuid::LowType guid);
};
#endif
diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp
index 64775a05faa..ff55d2d9a27 100644
--- a/src/server/game/Weather/WeatherMgr.cpp
+++ b/src/server/game/Weather/WeatherMgr.cpp
@@ -131,7 +131,7 @@ void LoadWeatherData()
}
}
- wzc.ScriptId = sObjectMgr->GetScriptId(fields[13].GetCString());
+ wzc.ScriptId = sObjectMgr->GetScriptId(fields[13].GetString());
++count;
}
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index b29f39809c6..c41caa8f955 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -269,10 +269,7 @@ void World::AddSession_(WorldSession* s)
return;
}
- s->SendAuthResponse(AUTH_OK, true);
- s->SendAddonsInfo();
- s->SendClientCacheVersion(sWorld->getIntConfig(CONFIG_CLIENTCACHE_VERSION));
- s->SendTutorialsData();
+ s->InitializeSession();
UpdateMaxSessionCounters();
@@ -362,15 +359,7 @@ bool World::RemoveQueuedPlayer(WorldSession* sess)
if ((!m_playerLimit || sessions < m_playerLimit) && !m_QueuedPlayer.empty())
{
WorldSession* pop_sess = m_QueuedPlayer.front();
- pop_sess->SetInQueue(false);
- pop_sess->ResetTimeOutTime();
- pop_sess->SendAuthWaitQue(0);
- pop_sess->SendAddonsInfo();
-
- pop_sess->SendClientCacheVersion(sWorld->getIntConfig(CONFIG_CLIENTCACHE_VERSION));
- pop_sess->SendAccountDataTimes(GLOBAL_CACHE_MASK);
- pop_sess->SendTutorialsData();
-
+ pop_sess->InitializeSession();
m_QueuedPlayer.pop_front();
// update iter to point first queued socket or end() if queue is empty now
@@ -406,6 +395,7 @@ void World::LoadConfigSettings(bool reload)
///- Read ticket system setting from the config file
m_bool_configs[CONFIG_ALLOW_TICKETS] = sConfigMgr->GetBoolDefault("AllowTickets", true);
+ m_bool_configs[CONFIG_DELETE_CHARACTER_TICKET_TRACE] = sConfigMgr->GetBoolDefault("DeletedCharacterTicketTrace", false);
///- Get string for new logins (newly created characters)
SetNewCharString(sConfigMgr->GetStringDefault("PlayerStart.String", ""));
@@ -456,6 +446,7 @@ void World::LoadConfigSettings(bool reload)
rate_values[RATE_DROP_ITEM_REFERENCED_AMOUNT] = sConfigMgr->GetFloatDefault("Rate.Drop.Item.ReferencedAmount", 1.0f);
rate_values[RATE_DROP_MONEY] = sConfigMgr->GetFloatDefault("Rate.Drop.Money", 1.0f);
rate_values[RATE_XP_KILL] = sConfigMgr->GetFloatDefault("Rate.XP.Kill", 1.0f);
+ rate_values[RATE_XP_BG_KILL] = sConfigMgr->GetFloatDefault("Rate.XP.BattlegroundKill", 1.0f);
rate_values[RATE_XP_QUEST] = sConfigMgr->GetFloatDefault("Rate.XP.Quest", 1.0f);
rate_values[RATE_XP_EXPLORE] = sConfigMgr->GetFloatDefault("Rate.XP.Explore", 1.0f);
rate_values[RATE_REPAIRCOST] = sConfigMgr->GetFloatDefault("Rate.RepairCost", 1.0f);
@@ -1037,6 +1028,7 @@ void World::LoadConfigSettings(bool reload)
m_bool_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE] = sConfigMgr->GetBoolDefault("Battleground.QueueAnnouncer.Enable", false);
m_bool_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY] = sConfigMgr->GetBoolDefault("Battleground.QueueAnnouncer.PlayerOnly", false);
m_bool_configs[CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE] = sConfigMgr->GetBoolDefault("Battleground.StoreStatistics.Enable", false);
+ m_bool_configs[CONFIG_BATTLEGROUND_TRACK_DESERTERS] = sConfigMgr->GetBoolDefault("Battleground.TrackDeserters.Enable", false);
m_int_configs[CONFIG_BATTLEGROUND_INVITATION_TYPE] = sConfigMgr->GetIntDefault ("Battleground.InvitationType", 0);
m_int_configs[CONFIG_BATTLEGROUND_PREMATURE_FINISH_TIMER] = sConfigMgr->GetIntDefault ("Battleground.PrematureFinishTimer", 5 * MINUTE * IN_MILLISECONDS);
m_int_configs[CONFIG_BATTLEGROUND_PREMADE_GROUP_WAIT_FOR_MATCH] = sConfigMgr->GetIntDefault ("Battleground.PremadeGroupWaitForMatch", 30 * MINUTE * IN_MILLISECONDS);
@@ -1190,6 +1182,8 @@ void World::LoadConfigSettings(bool reload)
m_int_configs[CONFIG_MAX_WHO] = sConfigMgr->GetIntDefault("MaxWhoListReturns", 49);
m_bool_configs[CONFIG_START_ALL_SPELLS] = sConfigMgr->GetBoolDefault("PlayerStart.AllSpells", false);
m_int_configs[CONFIG_HONOR_AFTER_DUEL] = sConfigMgr->GetIntDefault("HonorPointsAfterDuel", 0);
+ m_bool_configs[CONFIG_RESET_DUEL_COOLDOWNS] = sConfigMgr->GetBoolDefault("ResetDuelCooldowns", false);
+ m_bool_configs[CONFIG_RESET_DUEL_HEALTH_MANA] = sConfigMgr->GetBoolDefault("ResetDuelHealthMana", false);
m_bool_configs[CONFIG_START_ALL_EXPLORED] = sConfigMgr->GetBoolDefault("PlayerStart.MapsExplored", false);
m_bool_configs[CONFIG_START_ALL_REP] = sConfigMgr->GetBoolDefault("PlayerStart.AllReputation", false);
m_bool_configs[CONFIG_ALWAYS_MAXSKILL] = sConfigMgr->GetBoolDefault("AlwaysMaxWeaponSkill", false);
@@ -1365,11 +1359,6 @@ void World::SetInitialWorldSettings()
LoginDatabase.PExecute("UPDATE realmlist SET icon = %u, timezone = %u WHERE id = '%d'", server_type, realm_zone, realmID); // One-time query
- ///- Remove the bones (they should not exist in DB though) and old corpses after a restart
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_OLD_CORPSES);
- stmt->setUInt32(0, 3 * DAY);
- CharacterDatabase.Execute(stmt);
-
///- Load the DBC files
TC_LOG_INFO("server.loading", "Initialize data stores...");
LoadDBCStores(m_dataPath);
@@ -1636,9 +1625,6 @@ void World::SetInitialWorldSettings()
TC_LOG_INFO("server.loading", "Loading pet level stats...");
sObjectMgr->LoadPetLevelInfo();
- TC_LOG_INFO("server.loading", "Loading Player Corpses...");
- sObjectMgr->LoadCorpses();
-
TC_LOG_INFO("server.loading", "Loading Player level dependent mail rewards...");
sObjectMgr->LoadMailLevelRewards();
@@ -1651,6 +1637,9 @@ void World::SetInitialWorldSettings()
TC_LOG_INFO("server.loading", "Loading Skill Extra Item Table...");
LoadSkillExtraItemTable();
+ TC_LOG_INFO("server.loading", "Loading Skill Perfection Data Table...");
+ LoadSkillPerfectItemTable();
+
TC_LOG_INFO("server.loading", "Loading Skill Fishing base level requirements...");
sObjectMgr->LoadFishingBaseSkillLevel();
@@ -1884,7 +1873,7 @@ void World::SetInitialWorldSettings()
TC_LOG_INFO("server.loading", "Calculate guild limitation(s) reset time...");
InitGuildResetTime();
- LoadCharacterNameData();
+ LoadCharacterInfoStore();
uint32 startupDuration = GetMSTimeDiffToNow(startupBegin);
@@ -2158,7 +2147,10 @@ void World::Update(uint32 diff)
if (m_timers[WUPDATE_CORPSES].Passed())
{
m_timers[WUPDATE_CORPSES].Reset();
- sObjectAccessor->RemoveOldCorpses();
+ sMapMgr->DoForAllMaps([](Map* map)
+ {
+ map->RemoveOldCorpses();
+ });
}
///- Process Game events when necessary
@@ -2509,7 +2501,7 @@ bool World::RemoveBanAccount(BanMode mode, std::string const& nameOrIP)
BanReturn World::BanCharacter(std::string const& name, std::string const& duration, std::string const& reason, std::string const& author)
{
Player* pBanned = ObjectAccessor::FindConnectedPlayerByName(name);
- uint32 guid = 0;
+ ObjectGuid::LowType guid = 0;
uint32 duration_secs = TimeStringToSecs(duration);
@@ -2526,7 +2518,7 @@ BanReturn World::BanCharacter(std::string const& name, std::string const& durati
guid = (*resultCharacter)[0].GetUInt32();
}
else
- guid = pBanned->GetGUIDLow();
+ guid = pBanned->GetGUID().GetCounter();
// make sure there is only one active ban
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHARACTER_BAN);
@@ -2550,7 +2542,7 @@ BanReturn World::BanCharacter(std::string const& name, std::string const& durati
bool World::RemoveBanCharacter(std::string const& name)
{
Player* pBanned = ObjectAccessor::FindConnectedPlayerByName(name);
- uint32 guid = 0;
+ ObjectGuid::LowType guid = 0;
/// Pick a player to ban if not online
if (!pBanned)
@@ -2565,7 +2557,7 @@ bool World::RemoveBanCharacter(std::string const& name)
guid = (*resultCharacter)[0].GetUInt32();
}
else
- guid = pBanned->GetGUIDLow();
+ guid = pBanned->GetGUID().GetCounter();
if (!guid)
return false;
@@ -3172,6 +3164,15 @@ void World::ProcessQueryCallbacks()
}
}
+CharacterInfo const* World::GetCharacterInfo(ObjectGuid const& guid) const
+{
+ CharacterInfoContainer::const_iterator itr = _characterInfoStore.find(guid);
+ if (itr != _characterInfoStore.end())
+ return &itr->second;
+
+ return nullptr;
+}
+
/**
* @brief Loads several pieces of information on server startup with the GUID
* There is no further database query necessary.
@@ -3181,87 +3182,78 @@ void World::ProcessQueryCallbacks()
* @return Name, Gender, Race, Class and Level of player character
* Example Usage:
* @code
-* CharacterNameData const* nameData = sWorld->GetCharacterNameData(GUID);
-* if (!nameData)
+* CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(GUID);
+* if (!characterInfo)
* return;
*
-* std::string playerName = nameData->m_name;
-* uint8 playerGender = nameData->m_gender;
-* uint8 playerRace = nameData->m_race;
-* uint8 playerClass = nameData->m_class;
-* uint8 playerLevel = nameData->m_level;
+* std::string playerName = characterInfo->Name;
+* uint8 playerGender = characterInfo->Sex;
+* uint8 playerRace = characterInfo->Race;
+* uint8 playerClass = characterInfo->Class;
+* uint8 playerLevel = characterInfo->Level;
* @endcode
**/
-void World::LoadCharacterNameData()
+void World::LoadCharacterInfoStore()
{
- TC_LOG_INFO("server.loading", "Loading character name data");
+ TC_LOG_INFO("server.loading", "Loading character info store");
+
+ _characterInfoStore.clear();
- QueryResult result = CharacterDatabase.Query("SELECT guid, name, race, gender, class, level FROM characters WHERE deleteDate IS NULL");
+ QueryResult result = CharacterDatabase.Query("SELECT guid, name, account, race, gender, class, level FROM characters");
if (!result)
{
TC_LOG_INFO("server.loading", "No character name data loaded, empty query");
return;
}
- uint32 count = 0;
-
do
{
Field* fields = result->Fetch();
- AddCharacterNameData(ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32()), fields[1].GetString(),
- fields[3].GetUInt8() /*gender*/, fields[2].GetUInt8() /*race*/, fields[4].GetUInt8() /*class*/, fields[5].GetUInt8() /*level*/);
- ++count;
+ AddCharacterInfo(ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt32()), fields[2].GetUInt32(), fields[1].GetString(),
+ fields[4].GetUInt8() /*gender*/, fields[3].GetUInt8() /*race*/, fields[5].GetUInt8() /*class*/, fields[6].GetUInt8() /*level*/);
} while (result->NextRow());
- TC_LOG_INFO("server.loading", "Loaded name data for %u characters", count);
+ TC_LOG_INFO("server.loading", "Loaded character infos for " SZFMTD " characters", _characterInfoStore.size());
}
-void World::AddCharacterNameData(ObjectGuid guid, std::string const& name, uint8 gender, uint8 race, uint8 playerClass, uint8 level)
+void World::AddCharacterInfo(ObjectGuid const& guid, uint32 accountId, std::string const& name, uint8 gender, uint8 race, uint8 playerClass, uint8 level)
{
- CharacterNameData& data = _characterNameDataMap[guid];
- data.m_name = name;
- data.m_race = race;
- data.m_gender = gender;
- data.m_class = playerClass;
- data.m_level = level;
+ CharacterInfo& data = _characterInfoStore[guid];
+ data.Name = name;
+ data.AccountId = accountId;
+ data.Race = race;
+ data.Sex = gender;
+ data.Class = playerClass;
+ data.Level = level;
}
-void World::UpdateCharacterNameData(ObjectGuid guid, std::string const& name, uint8 gender /*= GENDER_NONE*/, uint8 race /*= RACE_NONE*/)
+void World::UpdateCharacterInfo(ObjectGuid const& guid, std::string const& name, uint8 gender /*= GENDER_NONE*/, uint8 race /*= RACE_NONE*/)
{
- std::map<ObjectGuid, CharacterNameData>::iterator itr = _characterNameDataMap.find(guid);
- if (itr == _characterNameDataMap.end())
+ CharacterInfoContainer::iterator itr = _characterInfoStore.find(guid);
+ if (itr == _characterInfoStore.end())
return;
- itr->second.m_name = name;
+ itr->second.Name = name;
if (gender != GENDER_NONE)
- itr->second.m_gender = gender;
+ itr->second.Sex = gender;
if (race != RACE_NONE)
- itr->second.m_race = race;
+ itr->second.Race = race;
WorldPacket data(SMSG_INVALIDATE_PLAYER, 8);
data << guid;
SendGlobalMessage(&data);
}
-void World::UpdateCharacterNameDataLevel(ObjectGuid guid, uint8 level)
+void World::UpdateCharacterInfoLevel(ObjectGuid const& guid, uint8 level)
{
- std::map<ObjectGuid, CharacterNameData>::iterator itr = _characterNameDataMap.find(guid);
- if (itr == _characterNameDataMap.end())
+ CharacterInfoContainer::iterator itr = _characterInfoStore.find(guid);
+ if (itr == _characterInfoStore.end())
return;
- itr->second.m_level = level;
-}
-
-CharacterNameData const* World::GetCharacterNameData(ObjectGuid guid) const
-{
- std::map<ObjectGuid, CharacterNameData>::const_iterator itr = _characterNameDataMap.find(guid);
- if (itr != _characterNameDataMap.end())
- return &itr->second;
- else
- return NULL;
+ itr->second.Level = level;
}
void World::ReloadRBAC()
@@ -3272,3 +3264,9 @@ void World::ReloadRBAC()
if (WorldSession* session = itr->second)
session->InvalidateRBACData();
}
+
+void World::RemoveOldCorpses()
+{
+ m_timers[WUPDATE_CORPSES].SetCurrent(m_timers[WUPDATE_CORPSES].GetInterval());
+}
+
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index af89adcb04e..133ac3f2386 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -124,6 +124,7 @@ enum WorldBoolConfigs
CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE,
CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY,
CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE,
+ CONFIG_BATTLEGROUND_TRACK_DESERTERS,
CONFIG_BG_XP_FOR_KILL,
CONFIG_ARENA_AUTO_DISTRIBUTE_POINTS,
CONFIG_ARENA_QUEUE_ANNOUNCER_ENABLE,
@@ -143,6 +144,7 @@ enum WorldBoolConfigs
CONFIG_SHOW_BAN_IN_WORLD,
CONFIG_AUTOBROADCAST,
CONFIG_ALLOW_TICKETS,
+ CONFIG_DELETE_CHARACTER_TICKET_TRACE,
CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES,
CONFIG_PRESERVE_CUSTOM_CHANNELS,
CONFIG_PDUMP_NO_PATHS,
@@ -161,6 +163,8 @@ enum WorldBoolConfigs
CONFIG_ALLOW_TRACK_BOTH_RESOURCES,
CONFIG_CALCULATE_CREATURE_ZONE_AREA_DATA,
CONFIG_CALCULATE_GAMEOBJECT_ZONE_AREA_DATA,
+ CONFIG_RESET_DUEL_COOLDOWNS,
+ CONFIG_RESET_DUEL_HEALTH_MANA,
BOOL_CONFIG_VALUE_COUNT
};
@@ -373,6 +377,7 @@ enum Rates
RATE_DROP_ITEM_REFERENCED_AMOUNT,
RATE_DROP_MONEY,
RATE_XP_KILL,
+ RATE_XP_BG_KILL,
RATE_XP_QUEST,
RATE_XP_EXPLORE,
RATE_REPAIRCOST,
@@ -522,13 +527,14 @@ private:
typedef std::unordered_map<uint32, WorldSession*> SessionMap;
-struct CharacterNameData
+struct CharacterInfo
{
- std::string m_name;
- uint8 m_class;
- uint8 m_race;
- uint8 m_gender;
- uint8 m_level;
+ std::string Name;
+ uint32 AccountId;
+ uint8 Class;
+ uint8 Race;
+ uint8 Sex;
+ uint8 Level;
};
/// The World
@@ -748,12 +754,12 @@ class World
void UpdateAreaDependentAuras();
- CharacterNameData const* GetCharacterNameData(ObjectGuid guid) const;
- void AddCharacterNameData(ObjectGuid guid, std::string const& name, uint8 gender, uint8 race, uint8 playerClass, uint8 level);
- void UpdateCharacterNameData(ObjectGuid guid, std::string const& name, uint8 gender = GENDER_NONE, uint8 race = RACE_NONE);
- void UpdateCharacterNameDataLevel(ObjectGuid guid, uint8 level);
- void DeleteCharacterNameData(ObjectGuid guid) { _characterNameDataMap.erase(guid); }
- bool HasCharacterNameData(ObjectGuid guid) { return _characterNameDataMap.find(guid) != _characterNameDataMap.end(); }
+ CharacterInfo const* GetCharacterInfo(ObjectGuid const& guid) const;
+ void AddCharacterInfo(ObjectGuid const& guid, uint32 accountId, std::string const& name, uint8 gender, uint8 race, uint8 playerClass, uint8 level);
+ void DeleteCharacterInfo(ObjectGuid const& guid) { _characterInfoStore.erase(guid); }
+ bool HasCharacterInfo(ObjectGuid const& guid) { return _characterInfoStore.find(guid) != _characterInfoStore.end(); }
+ void UpdateCharacterInfo(ObjectGuid const& guid, std::string const& name, uint8 gender = GENDER_NONE, uint8 race = RACE_NONE);
+ void UpdateCharacterInfoLevel(ObjectGuid const& guid, uint8 level);
uint32 GetCleaningFlags() const { return m_CleaningFlags; }
void SetCleaningFlags(uint32 flags) { m_CleaningFlags = flags; }
@@ -761,6 +767,8 @@ class World
void ReloadRBAC();
+ void RemoveOldCorpses();
+
protected:
void _UpdateGameTime();
// callback for UpdateRealmCharacters
@@ -858,8 +866,9 @@ class World
typedef std::map<uint8, uint8> AutobroadcastsWeightMap;
AutobroadcastsWeightMap m_AutobroadcastsWeights;
- std::map<ObjectGuid, CharacterNameData> _characterNameDataMap;
- void LoadCharacterNameData();
+ typedef std::unordered_map<ObjectGuid, CharacterInfo> CharacterInfoContainer;
+ CharacterInfoContainer _characterInfoStore;
+ void LoadCharacterInfoStore();
void ProcessQueryCallbacks();
std::deque<std::future<PreparedQueryResult>> m_realmCharCallbacks;
diff --git a/src/server/scripts/Commands/cs_account.cpp b/src/server/scripts/Commands/cs_account.cpp
index 5668c20d6b0..8d9a40d9d1f 100644
--- a/src/server/scripts/Commands/cs_account.cpp
+++ b/src/server/scripts/Commands/cs_account.cpp
@@ -33,45 +33,40 @@ class account_commandscript : public CommandScript
public:
account_commandscript() : CommandScript("account_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand accountSetSecTable[] =
+ static std::vector<ChatCommand> accountSetSecTable =
{
- { "regmail", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_REGMAIL, true, &HandleAccountSetRegEmailCommand, "", NULL },
- { "email", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_EMAIL, true, &HandleAccountSetEmailCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "regmail", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_REGMAIL, true, &HandleAccountSetRegEmailCommand, "" },
+ { "email", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_EMAIL, true, &HandleAccountSetEmailCommand, "" },
};
- static ChatCommand accountSetCommandTable[] =
+ static std::vector<ChatCommand> accountSetCommandTable =
{
- { "addon", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_ADDON, true, &HandleAccountSetAddonCommand, "", NULL },
+ { "addon", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_ADDON, true, &HandleAccountSetAddonCommand, "" },
{ "sec", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_SEC, true, NULL, "", accountSetSecTable },
- { "gmlevel", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_GMLEVEL, true, &HandleAccountSetGmLevelCommand, "", NULL },
- { "password", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_PASSWORD, true, &HandleAccountSetPasswordCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "gmlevel", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_GMLEVEL, true, &HandleAccountSetGmLevelCommand, "" },
+ { "password", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_PASSWORD, true, &HandleAccountSetPasswordCommand, "" },
};
- static ChatCommand accountLockCommandTable[] =
+ static std::vector<ChatCommand> accountLockCommandTable =
{
- { "country", rbac::RBAC_PERM_COMMAND_ACCOUNT_LOCK_COUNTRY, false, &HandleAccountLockCountryCommand, "", NULL },
- { "ip", rbac::RBAC_PERM_COMMAND_ACCOUNT_LOCK_IP, false, &HandleAccountLockIpCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "country", rbac::RBAC_PERM_COMMAND_ACCOUNT_LOCK_COUNTRY, false, &HandleAccountLockCountryCommand, "" },
+ { "ip", rbac::RBAC_PERM_COMMAND_ACCOUNT_LOCK_IP, false, &HandleAccountLockIpCommand, "" },
};
- static ChatCommand accountCommandTable[] =
+ static std::vector<ChatCommand> accountCommandTable =
{
- { "addon", rbac::RBAC_PERM_COMMAND_ACCOUNT_ADDON, false, &HandleAccountAddonCommand, "", NULL },
- { "create", rbac::RBAC_PERM_COMMAND_ACCOUNT_CREATE, true, &HandleAccountCreateCommand, "", NULL },
- { "delete", rbac::RBAC_PERM_COMMAND_ACCOUNT_DELETE, true, &HandleAccountDeleteCommand, "", NULL },
- { "email", rbac::RBAC_PERM_COMMAND_ACCOUNT_EMAIL, false, &HandleAccountEmailCommand, "", NULL },
- { "onlinelist", rbac::RBAC_PERM_COMMAND_ACCOUNT_ONLINE_LIST, true, &HandleAccountOnlineListCommand, "", NULL },
+ { "addon", rbac::RBAC_PERM_COMMAND_ACCOUNT_ADDON, false, &HandleAccountAddonCommand, "" },
+ { "create", rbac::RBAC_PERM_COMMAND_ACCOUNT_CREATE, true, &HandleAccountCreateCommand, "" },
+ { "delete", rbac::RBAC_PERM_COMMAND_ACCOUNT_DELETE, true, &HandleAccountDeleteCommand, "" },
+ { "email", rbac::RBAC_PERM_COMMAND_ACCOUNT_EMAIL, false, &HandleAccountEmailCommand, "" },
+ { "onlinelist", rbac::RBAC_PERM_COMMAND_ACCOUNT_ONLINE_LIST, true, &HandleAccountOnlineListCommand, "" },
{ "lock", rbac::RBAC_PERM_COMMAND_ACCOUNT_LOCK, false, NULL, "", accountLockCommandTable },
{ "set", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET, true, NULL, "", accountSetCommandTable },
- { "password", rbac::RBAC_PERM_COMMAND_ACCOUNT_PASSWORD, false, &HandleAccountPasswordCommand, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_ACCOUNT, false, &HandleAccountCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "password", rbac::RBAC_PERM_COMMAND_ACCOUNT_PASSWORD, false, &HandleAccountPasswordCommand, "" },
+ { "", rbac::RBAC_PERM_COMMAND_ACCOUNT, false, &HandleAccountCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "account", rbac::RBAC_PERM_COMMAND_ACCOUNT, true, NULL, "", accountCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -135,7 +130,7 @@ public:
{
TC_LOG_INFO("entities.player.character", "Account: %d (IP: %s) Character:[%s] (GUID: %u) created Account %s (Email: '%s')",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
- handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(),
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter(),
accountName, email.c_str());
}
break;
@@ -381,7 +376,7 @@ public:
handler->SetSentErrorMessage(true);
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change email, but the provided email [%s] is not equal to registration email [%s].",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
- handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(),
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter(),
email, oldEmail);
return false;
}
@@ -393,7 +388,7 @@ public:
handler->SetSentErrorMessage(true);
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change email, but the provided password is wrong.",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
- handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow());
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter());
return false;
}
@@ -412,7 +407,7 @@ public:
handler->SetSentErrorMessage(true);
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change email, but the provided password is wrong.",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
- handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow());
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter());
return false;
}
@@ -425,7 +420,7 @@ public:
sScriptMgr->OnEmailChange(handler->GetSession()->GetAccountId());
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Changed Email from [%s] to [%s].",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
- handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(),
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter(),
oldEmail, email);
break;
case AOR_EMAIL_TOO_LONG:
@@ -479,7 +474,7 @@ public:
handler->SetSentErrorMessage(true);
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change password, but the provided old password is wrong.",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
- handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow());
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter());
return false;
}
@@ -492,7 +487,7 @@ public:
handler->SetSentErrorMessage(true);
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change password, but the entered email [%s] is wrong.",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
- handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(),
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter(),
emailConfirmation);
return false;
}
@@ -515,7 +510,7 @@ public:
sScriptMgr->OnPasswordChange(handler->GetSession()->GetAccountId());
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Changed Password.",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
- handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow());
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter());
break;
case AOR_PASS_TOO_LONG:
handler->SendSysMessage(LANG_PASSWORD_TOO_LONG);
diff --git a/src/server/scripts/Commands/cs_achievement.cpp b/src/server/scripts/Commands/cs_achievement.cpp
index 8a038844ec1..ea77bc1f189 100644
--- a/src/server/scripts/Commands/cs_achievement.cpp
+++ b/src/server/scripts/Commands/cs_achievement.cpp
@@ -33,17 +33,15 @@ class achievement_commandscript : public CommandScript
public:
achievement_commandscript() : CommandScript("achievement_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand achievementCommandTable[] =
+ static std::vector<ChatCommand> achievementCommandTable =
{
- { "add", rbac::RBAC_PERM_COMMAND_ACHIEVEMENT_ADD, false, &HandleAchievementAddCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "add", rbac::RBAC_PERM_COMMAND_ACHIEVEMENT_ADD, false, &HandleAchievementAddCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "achievement", rbac::RBAC_PERM_COMMAND_ACHIEVEMENT, false, NULL, "", achievementCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_ahbot.cpp b/src/server/scripts/Commands/cs_ahbot.cpp
index 559a775da31..44889fccd37 100644
--- a/src/server/scripts/Commands/cs_ahbot.cpp
+++ b/src/server/scripts/Commands/cs_ahbot.cpp
@@ -33,44 +33,40 @@ class ahbot_commandscript : public CommandScript
public:
ahbot_commandscript(): CommandScript("ahbot_commandscript") {}
- ChatCommand* GetCommands() const
+ std::vector<ChatCommand> GetCommands() const
{
- static ChatCommand ahbotItemsAmountCommandTable[] =
+ static std::vector<ChatCommand> ahbotItemsAmountCommandTable =
{
- { "gray", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_GRAY, true, &HandleAHBotItemsAmountQualityCommand<AUCTION_QUALITY_GRAY>, "", NULL },
- { "white", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_WHITE, true, &HandleAHBotItemsAmountQualityCommand<AUCTION_QUALITY_WHITE>, "", NULL },
- { "green", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_GREEN, true, &HandleAHBotItemsAmountQualityCommand<AUCTION_QUALITY_GREEN>, "", NULL },
- { "blue", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_BLUE, true, &HandleAHBotItemsAmountQualityCommand<AUCTION_QUALITY_BLUE>, "", NULL },
- { "purple", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_PURPLE, true, &HandleAHBotItemsAmountQualityCommand<AUCTION_QUALITY_PURPLE>, "", NULL },
- { "orange", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_ORANGE, true, &HandleAHBotItemsAmountQualityCommand<AUCTION_QUALITY_ORANGE>, "", NULL },
- { "yellow", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_YELLOW, true, &HandleAHBotItemsAmountQualityCommand<AUCTION_QUALITY_YELLOW>, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS, true, &HandleAHBotItemsAmountCommand, "", NULL },
- { NULL, 0, true, NULL, "", NULL }
+ { "gray", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_GRAY, true, &HandleAHBotItemsAmountQualityCommand<AUCTION_QUALITY_GRAY>, "" },
+ { "white", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_WHITE, true, &HandleAHBotItemsAmountQualityCommand<AUCTION_QUALITY_WHITE>, "" },
+ { "green", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_GREEN, true, &HandleAHBotItemsAmountQualityCommand<AUCTION_QUALITY_GREEN>, "" },
+ { "blue", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_BLUE, true, &HandleAHBotItemsAmountQualityCommand<AUCTION_QUALITY_BLUE>, "" },
+ { "purple", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_PURPLE, true, &HandleAHBotItemsAmountQualityCommand<AUCTION_QUALITY_PURPLE>, "" },
+ { "orange", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_ORANGE, true, &HandleAHBotItemsAmountQualityCommand<AUCTION_QUALITY_ORANGE>, "" },
+ { "yellow", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_YELLOW, true, &HandleAHBotItemsAmountQualityCommand<AUCTION_QUALITY_YELLOW>, "" },
+ { "", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS, true, &HandleAHBotItemsAmountCommand, "" },
};
- static ChatCommand ahbotItemsRatioCommandTable[] =
+ static std::vector<ChatCommand> ahbotItemsRatioCommandTable =
{
- { "alliance", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO_ALLIANCE, true, &HandleAHBotItemsRatioHouseCommand<AUCTION_HOUSE_ALLIANCE>, "", NULL },
- { "horde", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO_HORDE, true, &HandleAHBotItemsRatioHouseCommand<AUCTION_HOUSE_HORDE>, "", NULL },
- { "neutral", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO_NEUTRAL, true, &HandleAHBotItemsRatioHouseCommand<AUCTION_HOUSE_NEUTRAL>, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO, true, &HandleAHBotItemsRatioCommand, "", NULL },
- { NULL, 0, true, NULL, "", NULL }
+ { "alliance", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO_ALLIANCE, true, &HandleAHBotItemsRatioHouseCommand<AUCTION_HOUSE_ALLIANCE>, "" },
+ { "horde", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO_HORDE, true, &HandleAHBotItemsRatioHouseCommand<AUCTION_HOUSE_HORDE>, "" },
+ { "neutral", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO_NEUTRAL, true, &HandleAHBotItemsRatioHouseCommand<AUCTION_HOUSE_NEUTRAL>, "" },
+ { "", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO, true, &HandleAHBotItemsRatioCommand, "" },
};
- static ChatCommand ahbotCommandTable[] =
+ static std::vector<ChatCommand> ahbotCommandTable =
{
{ "items", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS, true, NULL, "", ahbotItemsAmountCommandTable },
{ "ratio", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO, true, NULL, "", ahbotItemsRatioCommandTable },
- { "rebuild", rbac::RBAC_PERM_COMMAND_AHBOT_REBUILD, true, &HandleAHBotRebuildCommand, "", NULL },
- { "reload", rbac::RBAC_PERM_COMMAND_AHBOT_RELOAD, true, &HandleAHBotReloadCommand, "", NULL },
- { "status", rbac::RBAC_PERM_COMMAND_AHBOT_STATUS, true, &HandleAHBotStatusCommand, "", NULL },
- { NULL, 0, true, NULL, "", NULL }
+ { "rebuild", rbac::RBAC_PERM_COMMAND_AHBOT_REBUILD, true, &HandleAHBotRebuildCommand, "" },
+ { "reload", rbac::RBAC_PERM_COMMAND_AHBOT_RELOAD, true, &HandleAHBotReloadCommand, "" },
+ { "status", rbac::RBAC_PERM_COMMAND_AHBOT_STATUS, true, &HandleAHBotStatusCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "ahbot", rbac::RBAC_PERM_COMMAND_AHBOT, false, NULL, "", ahbotCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
diff --git a/src/server/scripts/Commands/cs_arena.cpp b/src/server/scripts/Commands/cs_arena.cpp
index 4993a7484dd..71657d51e7b 100644
--- a/src/server/scripts/Commands/cs_arena.cpp
+++ b/src/server/scripts/Commands/cs_arena.cpp
@@ -34,22 +34,20 @@ class arena_commandscript : public CommandScript
public:
arena_commandscript() : CommandScript("arena_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand arenaCommandTable[] =
+ static std::vector<ChatCommand> arenaCommandTable =
{
- { "create", rbac::RBAC_PERM_COMMAND_ARENA_CREATE, true, &HandleArenaCreateCommand, "", NULL },
- { "disband", rbac::RBAC_PERM_COMMAND_ARENA_DISBAND, true, &HandleArenaDisbandCommand, "", NULL },
- { "rename", rbac::RBAC_PERM_COMMAND_ARENA_RENAME, true, &HandleArenaRenameCommand, "", NULL },
- { "captain", rbac::RBAC_PERM_COMMAND_ARENA_CAPTAIN, false, &HandleArenaCaptainCommand, "", NULL },
- { "info", rbac::RBAC_PERM_COMMAND_ARENA_INFO, true, &HandleArenaInfoCommand, "", NULL },
- { "lookup", rbac::RBAC_PERM_COMMAND_ARENA_LOOKUP, false, &HandleArenaLookupCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "create", rbac::RBAC_PERM_COMMAND_ARENA_CREATE, true, &HandleArenaCreateCommand, "" },
+ { "disband", rbac::RBAC_PERM_COMMAND_ARENA_DISBAND, true, &HandleArenaDisbandCommand, "" },
+ { "rename", rbac::RBAC_PERM_COMMAND_ARENA_RENAME, true, &HandleArenaRenameCommand, "" },
+ { "captain", rbac::RBAC_PERM_COMMAND_ARENA_CAPTAIN, false, &HandleArenaCaptainCommand, "" },
+ { "info", rbac::RBAC_PERM_COMMAND_ARENA_INFO, true, &HandleArenaInfoCommand, "" },
+ { "lookup", rbac::RBAC_PERM_COMMAND_ARENA_LOOKUP, false, &HandleArenaLookupCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "arena", rbac::RBAC_PERM_COMMAND_ARENA, false, NULL, "", arenaCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -144,7 +142,7 @@ public:
arena->Disband();
if (handler->GetSession())
TC_LOG_DEBUG("bg.arena", "GameMaster: %s [GUID: %u] disbanded arena team type: %u [Id: %u].",
- handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), arena->GetType(), teamId);
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter(), arena->GetType(), teamId);
else
TC_LOG_DEBUG("bg.arena", "Console: disbanded arena team type: %u [Id: %u].", arena->GetType(), teamId);
@@ -209,7 +207,7 @@ public:
handler->PSendSysMessage(LANG_ARENA_RENAME, arena->GetId(), oldArenaStr, newArenaStr);
if (handler->GetSession())
TC_LOG_DEBUG("bg.arena", "GameMaster: %s [GUID: %u] rename arena team \"%s\"[Id: %u] to \"%s\"",
- handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), oldArenaStr, arena->GetId(), newArenaStr);
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter(), oldArenaStr, arena->GetId(), newArenaStr);
else
TC_LOG_DEBUG("bg.arena", "Console: rename arena team \"%s\"[Id: %u] to \"%s\"", oldArenaStr, arena->GetId(), newArenaStr);
@@ -275,20 +273,20 @@ public:
arena->SetCaptain(targetGuid);
- CharacterNameData const* oldCaptainNameData = sWorld->GetCharacterNameData(arena->GetCaptain());
+ CharacterInfo const* oldCaptainNameData = sWorld->GetCharacterInfo(arena->GetCaptain());
if (!oldCaptainNameData)
{
handler->SetSentErrorMessage(true);
return false;
}
- handler->PSendSysMessage(LANG_ARENA_CAPTAIN, arena->GetName().c_str(), arena->GetId(), oldCaptainNameData->m_name.c_str(), target->GetName().c_str());
+ handler->PSendSysMessage(LANG_ARENA_CAPTAIN, arena->GetName().c_str(), arena->GetId(), oldCaptainNameData->Name.c_str(), target->GetName().c_str());
if (handler->GetSession())
TC_LOG_DEBUG("bg.arena", "GameMaster: %s [GUID: %u] promoted player: %s [GUID: %u] to leader of arena team \"%s\"[Id: %u]",
- handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), target->GetName().c_str(), target->GetGUIDLow(), arena->GetName().c_str(), arena->GetId());
+ handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter(), target->GetName().c_str(), target->GetGUID().GetCounter(), arena->GetName().c_str(), arena->GetId());
else
TC_LOG_DEBUG("bg.arena", "Console: promoted player: %s [GUID: %u] to leader of arena team \"%s\"[Id: %u]",
- target->GetName().c_str(), target->GetGUIDLow(), arena->GetName().c_str(), arena->GetId());
+ target->GetName().c_str(), target->GetGUID().GetCounter(), arena->GetName().c_str(), arena->GetId());
return true;
}
diff --git a/src/server/scripts/Commands/cs_ban.cpp b/src/server/scripts/Commands/cs_ban.cpp
index 4b90a672c82..67015cd7d9c 100644
--- a/src/server/scripts/Commands/cs_ban.cpp
+++ b/src/server/scripts/Commands/cs_ban.cpp
@@ -35,45 +35,40 @@ class ban_commandscript : public CommandScript
public:
ban_commandscript() : CommandScript("ban_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand unbanCommandTable[] =
+ static std::vector<ChatCommand> unbanCommandTable =
{
- { "account", rbac::RBAC_PERM_COMMAND_UNBAN_ACCOUNT, true, &HandleUnBanAccountCommand, "", NULL },
- { "character", rbac::RBAC_PERM_COMMAND_UNBAN_CHARACTER, true, &HandleUnBanCharacterCommand, "", NULL },
- { "playeraccount", rbac::RBAC_PERM_COMMAND_UNBAN_PLAYERACCOUNT, true, &HandleUnBanAccountByCharCommand, "", NULL },
- { "ip", rbac::RBAC_PERM_COMMAND_UNBAN_IP, true, &HandleUnBanIPCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "account", rbac::RBAC_PERM_COMMAND_UNBAN_ACCOUNT, true, &HandleUnBanAccountCommand, "" },
+ { "character", rbac::RBAC_PERM_COMMAND_UNBAN_CHARACTER, true, &HandleUnBanCharacterCommand, "" },
+ { "playeraccount", rbac::RBAC_PERM_COMMAND_UNBAN_PLAYERACCOUNT, true, &HandleUnBanAccountByCharCommand, "" },
+ { "ip", rbac::RBAC_PERM_COMMAND_UNBAN_IP, true, &HandleUnBanIPCommand, "" },
};
- static ChatCommand banlistCommandTable[] =
+ static std::vector<ChatCommand> banlistCommandTable =
{
- { "account", rbac::RBAC_PERM_COMMAND_BANLIST_ACCOUNT, true, &HandleBanListAccountCommand, "", NULL },
- { "character", rbac::RBAC_PERM_COMMAND_BANLIST_CHARACTER, true, &HandleBanListCharacterCommand, "", NULL },
- { "ip", rbac::RBAC_PERM_COMMAND_BANLIST_IP, true, &HandleBanListIPCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "account", rbac::RBAC_PERM_COMMAND_BANLIST_ACCOUNT, true, &HandleBanListAccountCommand, "" },
+ { "character", rbac::RBAC_PERM_COMMAND_BANLIST_CHARACTER, true, &HandleBanListCharacterCommand, "" },
+ { "ip", rbac::RBAC_PERM_COMMAND_BANLIST_IP, true, &HandleBanListIPCommand, "" },
};
- static ChatCommand baninfoCommandTable[] =
+ static std::vector<ChatCommand> baninfoCommandTable =
{
- { "account", rbac::RBAC_PERM_COMMAND_BANINFO_ACCOUNT, true, &HandleBanInfoAccountCommand, "", NULL },
- { "character", rbac::RBAC_PERM_COMMAND_BANINFO_CHARACTER, true, &HandleBanInfoCharacterCommand, "", NULL },
- { "ip", rbac::RBAC_PERM_COMMAND_BANINFO_IP, true, &HandleBanInfoIPCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "account", rbac::RBAC_PERM_COMMAND_BANINFO_ACCOUNT, true, &HandleBanInfoAccountCommand, "" },
+ { "character", rbac::RBAC_PERM_COMMAND_BANINFO_CHARACTER, true, &HandleBanInfoCharacterCommand, "" },
+ { "ip", rbac::RBAC_PERM_COMMAND_BANINFO_IP, true, &HandleBanInfoIPCommand, "" },
};
- static ChatCommand banCommandTable[] =
+ static std::vector<ChatCommand> banCommandTable =
{
- { "account", rbac::RBAC_PERM_COMMAND_BAN_ACCOUNT, true, &HandleBanAccountCommand, "", NULL },
- { "character", rbac::RBAC_PERM_COMMAND_BAN_CHARACTER, true, &HandleBanCharacterCommand, "", NULL },
- { "playeraccount", rbac::RBAC_PERM_COMMAND_BAN_PLAYERACCOUNT, true, &HandleBanAccountByCharCommand, "", NULL },
- { "ip", rbac::RBAC_PERM_COMMAND_BAN_IP, true, &HandleBanIPCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "account", rbac::RBAC_PERM_COMMAND_BAN_ACCOUNT, true, &HandleBanAccountCommand, "" },
+ { "character", rbac::RBAC_PERM_COMMAND_BAN_CHARACTER, true, &HandleBanCharacterCommand, "" },
+ { "playeraccount", rbac::RBAC_PERM_COMMAND_BAN_PLAYERACCOUNT, true, &HandleBanAccountByCharCommand, "" },
+ { "ip", rbac::RBAC_PERM_COMMAND_BAN_IP, true, &HandleBanIPCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "ban", rbac::RBAC_PERM_COMMAND_BAN, true, NULL, "", banCommandTable },
{ "baninfo", rbac::RBAC_PERM_COMMAND_BANINFO, true, NULL, "", baninfoCommandTable },
{ "banlist", rbac::RBAC_PERM_COMMAND_BANLIST, true, NULL, "", banlistCommandTable },
{ "unban", rbac::RBAC_PERM_COMMAND_UNBAN, true, NULL, "", unbanCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -300,7 +295,7 @@ public:
return false;
Player* target = ObjectAccessor::FindPlayerByName(args);
- uint32 targetGuid = 0;
+ ObjectGuid::LowType targetGuid = 0;
std::string name(args);
if (!target)
@@ -318,7 +313,7 @@ public:
targetGuid = (*resultCharacter)[0].GetUInt32();
}
else
- targetGuid = target->GetGUIDLow();
+ targetGuid = target->GetGUID().GetCounter();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_BANINFO);
stmt->setUInt32(0, targetGuid);
diff --git a/src/server/scripts/Commands/cs_bf.cpp b/src/server/scripts/Commands/cs_bf.cpp
index 830e801bcef..7101b89b5fa 100644
--- a/src/server/scripts/Commands/cs_bf.cpp
+++ b/src/server/scripts/Commands/cs_bf.cpp
@@ -31,21 +31,19 @@ class bf_commandscript : public CommandScript
public:
bf_commandscript() : CommandScript("bf_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand battlefieldcommandTable[] =
+ static std::vector<ChatCommand> battlefieldcommandTable =
{
- { "start", rbac::RBAC_PERM_COMMAND_BF_START, false, &HandleBattlefieldStart, "", NULL },
- { "stop", rbac::RBAC_PERM_COMMAND_BF_STOP, false, &HandleBattlefieldEnd, "", NULL },
- { "switch", rbac::RBAC_PERM_COMMAND_BF_SWITCH, false, &HandleBattlefieldSwitch, "", NULL },
- { "timer", rbac::RBAC_PERM_COMMAND_BF_TIMER, false, &HandleBattlefieldTimer, "", NULL },
- { "enable", rbac::RBAC_PERM_COMMAND_BF_ENABLE, false, &HandleBattlefieldEnable, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "start", rbac::RBAC_PERM_COMMAND_BF_START, false, &HandleBattlefieldStart, "" },
+ { "stop", rbac::RBAC_PERM_COMMAND_BF_STOP, false, &HandleBattlefieldEnd, "" },
+ { "switch", rbac::RBAC_PERM_COMMAND_BF_SWITCH, false, &HandleBattlefieldSwitch, "" },
+ { "timer", rbac::RBAC_PERM_COMMAND_BF_TIMER, false, &HandleBattlefieldTimer, "" },
+ { "enable", rbac::RBAC_PERM_COMMAND_BF_ENABLE, false, &HandleBattlefieldEnable, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "bf", rbac::RBAC_PERM_COMMAND_BF, false, NULL, "", battlefieldcommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_cast.cpp b/src/server/scripts/Commands/cs_cast.cpp
index dfd0bb36755..5252d5e368a 100644
--- a/src/server/scripts/Commands/cs_cast.cpp
+++ b/src/server/scripts/Commands/cs_cast.cpp
@@ -33,26 +33,43 @@ class cast_commandscript : public CommandScript
public:
cast_commandscript() : CommandScript("cast_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand castCommandTable[] =
+ static std::vector<ChatCommand> castCommandTable =
{
- { "back", rbac::RBAC_PERM_COMMAND_CAST_BACK, false, &HandleCastBackCommand, "", NULL },
- { "dist", rbac::RBAC_PERM_COMMAND_CAST_DIST, false, &HandleCastDistCommand, "", NULL },
- { "self", rbac::RBAC_PERM_COMMAND_CAST_SELF, false, &HandleCastSelfCommand, "", NULL },
- { "target", rbac::RBAC_PERM_COMMAND_CAST_TARGET, false, &HandleCastTargetCommad, "", NULL },
- { "dest", rbac::RBAC_PERM_COMMAND_CAST_DEST, false, &HandleCastDestCommand, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_CAST, false, &HandleCastCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "back", rbac::RBAC_PERM_COMMAND_CAST_BACK, false, &HandleCastBackCommand, "" },
+ { "dist", rbac::RBAC_PERM_COMMAND_CAST_DIST, false, &HandleCastDistCommand, "" },
+ { "self", rbac::RBAC_PERM_COMMAND_CAST_SELF, false, &HandleCastSelfCommand, "" },
+ { "target", rbac::RBAC_PERM_COMMAND_CAST_TARGET, false, &HandleCastTargetCommad, "" },
+ { "dest", rbac::RBAC_PERM_COMMAND_CAST_DEST, false, &HandleCastDestCommand, "" },
+ { "", rbac::RBAC_PERM_COMMAND_CAST, false, &HandleCastCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "cast", rbac::RBAC_PERM_COMMAND_CAST, false, NULL, "", castCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
+ static bool CheckSpellExistsAndIsValid(ChatHandler* handler, uint32 spellId)
+ {
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
+ if (!spellInfo)
+ {
+ handler->PSendSysMessage(LANG_COMMAND_NOSPELLFOUND);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (!SpellMgr::IsSpellValid(spellInfo, handler->GetSession()->GetPlayer()))
+ {
+ handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+ return true;
+ }
+
static bool HandleCastCommand(ChatHandler* handler, char const* args)
{
if (!*args)
@@ -71,20 +88,8 @@ public:
if (!spellId)
return false;
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- if (!spellInfo)
- {
- handler->PSendSysMessage(LANG_COMMAND_NOSPELLFOUND);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- if (!SpellMgr::IsSpellValid(spellInfo, handler->GetSession()->GetPlayer()))
- {
- handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId);
- handler->SetSentErrorMessage(true);
+ if (!CheckSpellExistsAndIsValid(handler, spellId))
return false;
- }
char* triggeredStr = strtok(NULL, " ");
if (triggeredStr)
@@ -111,15 +116,13 @@ public:
return false;
}
- // number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r
// number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form
uint32 spellId = handler->extractSpellIdFromLink((char*)args);
- if (!spellId || !sSpellMgr->GetSpellInfo(spellId))
- {
- handler->PSendSysMessage(LANG_COMMAND_NOSPELLFOUND);
- handler->SetSentErrorMessage(true);
+ if (!spellId)
+ return false;
+
+ if (!CheckSpellExistsAndIsValid(handler, spellId))
return false;
- }
char* triggeredStr = strtok(NULL, " ");
if (triggeredStr)
@@ -146,20 +149,8 @@ public:
if (!spellId)
return false;
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- if (!spellInfo)
- {
- handler->PSendSysMessage(LANG_COMMAND_NOSPELLFOUND);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- if (!SpellMgr::IsSpellValid(spellInfo, handler->GetSession()->GetPlayer()))
- {
- handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId);
- handler->SetSentErrorMessage(true);
+ if (!CheckSpellExistsAndIsValid(handler, spellId))
return false;
- }
char* distStr = strtok(NULL, " ");
@@ -192,28 +183,14 @@ public:
return false;
Unit* target = handler->getSelectedUnit();
- if (!target)
- {
- handler->SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE);
- handler->SetSentErrorMessage(true);
- return false;
- }
// number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form
uint32 spellId = handler->extractSpellIdFromLink((char*)args);
if (!spellId)
return false;
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- if (!spellInfo)
- return false;
-
- if (!SpellMgr::IsSpellValid(spellInfo, handler->GetSession()->GetPlayer()))
- {
- handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId);
- handler->SetSentErrorMessage(true);
+ if (!CheckSpellExistsAndIsValid(handler, spellId))
return false;
- }
target->CastSpell(target, spellId, false);
@@ -239,12 +216,11 @@ public:
// number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form
uint32 spellId = handler->extractSpellIdFromLink((char*)args);
- if (!spellId || !sSpellMgr->GetSpellInfo(spellId))
- {
- handler->PSendSysMessage(LANG_COMMAND_NOSPELLFOUND);
- handler->SetSentErrorMessage(true);
+ if (!spellId)
+ return false;
+
+ if (!CheckSpellExistsAndIsValid(handler, spellId))
return false;
- }
char* triggeredStr = strtok(NULL, " ");
if (triggeredStr)
@@ -273,12 +249,11 @@ public:
// number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form
uint32 spellId = handler->extractSpellIdFromLink((char*)args);
- if (!spellId || !sSpellMgr->GetSpellInfo(spellId))
- {
- handler->PSendSysMessage(LANG_COMMAND_NOSPELLFOUND);
- handler->SetSentErrorMessage(true);
+ if (!spellId)
+ return false;
+
+ if (!CheckSpellExistsAndIsValid(handler, spellId))
return false;
- }
char* posX = strtok(NULL, " ");
char* posY = strtok(NULL, " ");
diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp
index 4ef4454be99..65dd44f8563 100644
--- a/src/server/scripts/Commands/cs_character.cpp
+++ b/src/server/scripts/Commands/cs_character.cpp
@@ -35,43 +35,39 @@ class character_commandscript : public CommandScript
public:
character_commandscript() : CommandScript("character_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand pdumpCommandTable[] =
+ static std::vector<ChatCommand> pdumpCommandTable =
{
- { "load", rbac::RBAC_PERM_COMMAND_PDUMP_LOAD, true, &HandlePDumpLoadCommand, "", NULL },
- { "write", rbac::RBAC_PERM_COMMAND_PDUMP_WRITE, true, &HandlePDumpWriteCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "load", rbac::RBAC_PERM_COMMAND_PDUMP_LOAD, true, &HandlePDumpLoadCommand, "" },
+ { "write", rbac::RBAC_PERM_COMMAND_PDUMP_WRITE, true, &HandlePDumpWriteCommand, "" },
};
- static ChatCommand characterDeletedCommandTable[] =
+ static std::vector<ChatCommand> characterDeletedCommandTable =
{
- { "delete", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_DELETE, true, &HandleCharacterDeletedDeleteCommand, "", NULL },
- { "list", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_LIST, true, &HandleCharacterDeletedListCommand, "", NULL },
- { "restore", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_RESTORE, true, &HandleCharacterDeletedRestoreCommand, "", NULL },
- { "old", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_OLD, true, &HandleCharacterDeletedOldCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "delete", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_DELETE, true, &HandleCharacterDeletedDeleteCommand, "" },
+ { "list", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_LIST, true, &HandleCharacterDeletedListCommand, "" },
+ { "restore", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_RESTORE, true, &HandleCharacterDeletedRestoreCommand, "" },
+ { "old", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_OLD, true, &HandleCharacterDeletedOldCommand, "" },
};
- static ChatCommand characterCommandTable[] =
+ static std::vector<ChatCommand> characterCommandTable =
{
- { "customize", rbac::RBAC_PERM_COMMAND_CHARACTER_CUSTOMIZE, true, &HandleCharacterCustomizeCommand, "", NULL },
- { "changefaction", rbac::RBAC_PERM_COMMAND_CHARACTER_CHANGEFACTION, true, &HandleCharacterChangeFactionCommand, "", NULL },
- { "changerace", rbac::RBAC_PERM_COMMAND_CHARACTER_CHANGERACE, true, &HandleCharacterChangeRaceCommand, "", NULL },
+ { "customize", rbac::RBAC_PERM_COMMAND_CHARACTER_CUSTOMIZE, true, &HandleCharacterCustomizeCommand, "", },
+ { "changefaction", rbac::RBAC_PERM_COMMAND_CHARACTER_CHANGEFACTION, true, &HandleCharacterChangeFactionCommand, "", },
+ { "changerace", rbac::RBAC_PERM_COMMAND_CHARACTER_CHANGERACE, true, &HandleCharacterChangeRaceCommand, "", },
{ "deleted", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED, true, NULL, "", characterDeletedCommandTable },
- { "erase", rbac::RBAC_PERM_COMMAND_CHARACTER_ERASE, true, &HandleCharacterEraseCommand, "", NULL },
- { "level", rbac::RBAC_PERM_COMMAND_CHARACTER_LEVEL, true, &HandleCharacterLevelCommand, "", NULL },
- { "rename", rbac::RBAC_PERM_COMMAND_CHARACTER_RENAME, true, &HandleCharacterRenameCommand, "", NULL },
- { "reputation", rbac::RBAC_PERM_COMMAND_CHARACTER_REPUTATION, true, &HandleCharacterReputationCommand, "", NULL },
- { "titles", rbac::RBAC_PERM_COMMAND_CHARACTER_TITLES, true, &HandleCharacterTitlesCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "erase", rbac::RBAC_PERM_COMMAND_CHARACTER_ERASE, true, &HandleCharacterEraseCommand, "", },
+ { "level", rbac::RBAC_PERM_COMMAND_CHARACTER_LEVEL, true, &HandleCharacterLevelCommand, "", },
+ { "rename", rbac::RBAC_PERM_COMMAND_CHARACTER_RENAME, true, &HandleCharacterRenameCommand, "", },
+ { "reputation", rbac::RBAC_PERM_COMMAND_CHARACTER_REPUTATION, true, &HandleCharacterReputationCommand, "", },
+ { "titles", rbac::RBAC_PERM_COMMAND_CHARACTER_TITLES, true, &HandleCharacterTitlesCommand, "", },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "character", rbac::RBAC_PERM_COMMAND_CHARACTER, true, NULL, "", characterCommandTable },
- { "levelup", rbac::RBAC_PERM_COMMAND_LEVELUP, false, &HandleLevelUpCommand, "", NULL },
+ { "levelup", rbac::RBAC_PERM_COMMAND_LEVELUP, false, &HandleLevelUpCommand, "" },
{ "pdump", rbac::RBAC_PERM_COMMAND_PDUMP, true, NULL, "", pdumpCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -133,7 +129,7 @@ public:
DeletedInfo info;
- info.guid = ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32());
+ info.guid = ObjectGuid(HighGuid::Player, fields[0].GetUInt32());
info.name = fields[1].GetString();
info.accountId = fields[2].GetUInt32();
@@ -226,7 +222,7 @@ public:
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_NAME_DATA);
stmt->setUInt32(0, delInfo.guid.GetCounter());
if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
- sWorld->AddCharacterNameData(delInfo.guid, delInfo.name, (*result)[2].GetUInt8(), (*result)[0].GetUInt8(), (*result)[1].GetUInt8(), (*result)[3].GetUInt8());
+ sWorld->AddCharacterInfo(delInfo.guid, delInfo.accountId, delInfo.name, (*result)[2].GetUInt8(), (*result)[0].GetUInt8(), (*result)[1].GetUInt8(), (*result)[3].GetUInt8());
}
static void HandleCharacterLevel(Player* player, ObjectGuid playerGuid, uint32 oldLevel, uint32 newLevel, ChatHandler* handler)
@@ -339,7 +335,7 @@ public:
return false;
}
- if (ObjectMgr::CheckPlayerName(newName, true) != CHAR_NAME_SUCCESS)
+ if (ObjectMgr::CheckPlayerName(newName, target ? target->GetSession()->GetSessionDbcLocale() : sWorld->GetDefaultDbcLocale(), true) != CHAR_NAME_SUCCESS)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
@@ -386,7 +382,7 @@ public:
CharacterDatabase.Execute(stmt);
}
- sWorld->UpdateCharacterNameData(targetGuid, newName);
+ sWorld->UpdateCharacterInfo(targetGuid, newName);
handler->PSendSysMessage(LANG_RENAME_PLAYER_WITH_NEW_NAME, playerOldName.c_str(), newName.c_str());
@@ -483,7 +479,7 @@ public:
{
handler->PSendSysMessage(LANG_CUSTOMIZE_PLAYER, handler->GetNameLink(target).c_str());
target->SetAtLoginFlag(AT_LOGIN_CUSTOMIZE);
- stmt->setUInt32(1, target->GetGUIDLow());
+ stmt->setUInt32(1, target->GetGUID().GetCounter());
}
else
{
@@ -511,7 +507,7 @@ public:
{
handler->PSendSysMessage(LANG_CUSTOMIZE_PLAYER, handler->GetNameLink(target).c_str());
target->SetAtLoginFlag(AT_LOGIN_CHANGE_FACTION);
- stmt->setUInt32(1, target->GetGUIDLow());
+ stmt->setUInt32(1, target->GetGUID().GetCounter());
}
else
{
@@ -539,7 +535,7 @@ public:
/// @todo add text into database
handler->PSendSysMessage(LANG_CUSTOMIZE_PLAYER, handler->GetNameLink(target).c_str());
target->SetAtLoginFlag(AT_LOGIN_CHANGE_RACE);
- stmt->setUInt32(1, target->GetGUIDLow());
+ stmt->setUInt32(1, target->GetGUID().GetCounter());
}
else
{
@@ -899,7 +895,7 @@ public:
return false;
}
- if (ObjectMgr::CheckPlayerName(name, true) != CHAR_NAME_SUCCESS)
+ if (ObjectMgr::CheckPlayerName(name, sWorld->GetDefaultDbcLocale(), true) != CHAR_NAME_SUCCESS)
{
handler->PSendSysMessage(LANG_INVALID_CHARACTER_NAME);
handler->SetSentErrorMessage(true);
@@ -909,7 +905,7 @@ public:
guidStr = strtok(NULL, " ");
}
- uint32 guid = 0;
+ ObjectGuid::LowType guid = 0;
if (guidStr)
{
@@ -921,7 +917,7 @@ public:
return false;
}
- if (sObjectMgr->GetPlayerAccountIdByGUID(ObjectGuid(HIGHGUID_PLAYER, guid)))
+ if (sObjectMgr->GetPlayerAccountIdByGUID(ObjectGuid(HighGuid::Player, guid)))
{
handler->PSendSysMessage(LANG_CHARACTER_GUID_IN_USE, guid);
handler->SetSentErrorMessage(true);
@@ -969,7 +965,7 @@ public:
ObjectGuid guid;
// character name can't start from number
if (isNumeric(playerStr))
- guid = ObjectGuid(HIGHGUID_PLAYER, uint32(atoi(playerStr)));
+ guid = ObjectGuid(HighGuid::Player, uint32(atoi(playerStr)));
else
{
std::string name = handler->extractPlayerNameFromLink(playerStr);
diff --git a/src/server/scripts/Commands/cs_cheat.cpp b/src/server/scripts/Commands/cs_cheat.cpp
index 78ba5a4dc74..2dc2c17bdc2 100644
--- a/src/server/scripts/Commands/cs_cheat.cpp
+++ b/src/server/scripts/Commands/cs_cheat.cpp
@@ -32,27 +32,24 @@ class cheat_commandscript : public CommandScript
public:
cheat_commandscript() : CommandScript("cheat_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
-
- static ChatCommand cheatCommandTable[] =
+ static std::vector<ChatCommand> cheatCommandTable =
{
- { "god", rbac::RBAC_PERM_COMMAND_CHEAT_GOD, false, &HandleGodModeCheatCommand, "", NULL },
- { "casttime", rbac::RBAC_PERM_COMMAND_CHEAT_CASTTIME, false, &HandleCasttimeCheatCommand, "", NULL },
- { "cooldown", rbac::RBAC_PERM_COMMAND_CHEAT_COOLDOWN, false, &HandleCoolDownCheatCommand, "", NULL },
- { "power", rbac::RBAC_PERM_COMMAND_CHEAT_POWER, false, &HandlePowerCheatCommand, "", NULL },
- { "waterwalk", rbac::RBAC_PERM_COMMAND_CHEAT_WATERWALK, false, &HandleWaterWalkCheatCommand, "", NULL },
- { "status", rbac::RBAC_PERM_COMMAND_CHEAT_STATUS, false, &HandleCheatStatusCommand, "", NULL },
- { "taxi", rbac::RBAC_PERM_COMMAND_CHEAT_TAXI, false, &HandleTaxiCheatCommand, "", NULL },
- { "explore", rbac::RBAC_PERM_COMMAND_CHEAT_EXPLORE, false, &HandleExploreCheatCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "god", rbac::RBAC_PERM_COMMAND_CHEAT_GOD, false, &HandleGodModeCheatCommand, "" },
+ { "casttime", rbac::RBAC_PERM_COMMAND_CHEAT_CASTTIME, false, &HandleCasttimeCheatCommand, "" },
+ { "cooldown", rbac::RBAC_PERM_COMMAND_CHEAT_COOLDOWN, false, &HandleCoolDownCheatCommand, "" },
+ { "power", rbac::RBAC_PERM_COMMAND_CHEAT_POWER, false, &HandlePowerCheatCommand, "" },
+ { "waterwalk", rbac::RBAC_PERM_COMMAND_CHEAT_WATERWALK, false, &HandleWaterWalkCheatCommand, "" },
+ { "status", rbac::RBAC_PERM_COMMAND_CHEAT_STATUS, false, &HandleCheatStatusCommand, "" },
+ { "taxi", rbac::RBAC_PERM_COMMAND_CHEAT_TAXI, false, &HandleTaxiCheatCommand, "" },
+ { "explore", rbac::RBAC_PERM_COMMAND_CHEAT_EXPLORE, false, &HandleExploreCheatCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "cheat", rbac::RBAC_PERM_COMMAND_CHEAT, false, NULL, "", cheatCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index 7c2ce1a13ec..7f517d09e90 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -42,66 +42,62 @@ class debug_commandscript : public CommandScript
public:
debug_commandscript() : CommandScript("debug_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand debugPlayCommandTable[] =
+ static std::vector<ChatCommand> debugPlayCommandTable =
{
- { "cinematic", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY_CINEMATIC, false, &HandleDebugPlayCinematicCommand, "", NULL },
- { "movie", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY_MOVIE, false, &HandleDebugPlayMovieCommand, "", NULL },
- { "sound", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY_SOUND, false, &HandleDebugPlaySoundCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "cinematic", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY_CINEMATIC, false, &HandleDebugPlayCinematicCommand, "" },
+ { "movie", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY_MOVIE, false, &HandleDebugPlayMovieCommand, "" },
+ { "sound", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY_SOUND, false, &HandleDebugPlaySoundCommand, "" },
};
- static ChatCommand debugSendCommandTable[] =
+ static std::vector<ChatCommand> debugSendCommandTable =
{
- { "buyerror", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_BUYERROR, false, &HandleDebugSendBuyErrorCommand, "", NULL },
- { "channelnotify", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_CHANNELNOTIFY, false, &HandleDebugSendChannelNotifyCommand, "", NULL },
- { "chatmessage", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_CHATMESSAGE, false, &HandleDebugSendChatMsgCommand, "", NULL },
- { "equiperror", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_EQUIPERROR, false, &HandleDebugSendEquipErrorCommand, "", NULL },
- { "largepacket", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_LARGEPACKET, false, &HandleDebugSendLargePacketCommand, "", NULL },
- { "opcode", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_OPCODE, false, &HandleDebugSendOpcodeCommand, "", NULL },
- { "qpartymsg", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_QPARTYMSG, false, &HandleDebugSendQuestPartyMsgCommand, "", NULL },
- { "qinvalidmsg", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_QINVALIDMSG, false, &HandleDebugSendQuestInvalidMsgCommand, "", NULL },
- { "sellerror", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SELLERROR, false, &HandleDebugSendSellErrorCommand, "", NULL },
- { "setphaseshift", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SETPHASESHIFT, false, &HandleDebugSendSetPhaseShiftCommand, "", NULL },
- { "spellfail", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SPELLFAIL, false, &HandleDebugSendSpellFailCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "buyerror", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_BUYERROR, false, &HandleDebugSendBuyErrorCommand, "" },
+ { "channelnotify", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_CHANNELNOTIFY, false, &HandleDebugSendChannelNotifyCommand, "" },
+ { "chatmessage", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_CHATMESSAGE, false, &HandleDebugSendChatMsgCommand, "" },
+ { "equiperror", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_EQUIPERROR, false, &HandleDebugSendEquipErrorCommand, "" },
+ { "largepacket", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_LARGEPACKET, false, &HandleDebugSendLargePacketCommand, "" },
+ { "opcode", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_OPCODE, false, &HandleDebugSendOpcodeCommand, "" },
+ { "qpartymsg", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_QPARTYMSG, false, &HandleDebugSendQuestPartyMsgCommand, "" },
+ { "qinvalidmsg", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_QINVALIDMSG, false, &HandleDebugSendQuestInvalidMsgCommand, "" },
+ { "sellerror", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SELLERROR, false, &HandleDebugSendSellErrorCommand, "" },
+ { "setphaseshift", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SETPHASESHIFT, false, &HandleDebugSendSetPhaseShiftCommand, "" },
+ { "spellfail", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SPELLFAIL, false, &HandleDebugSendSpellFailCommand, "" },
};
- static ChatCommand debugCommandTable[] =
+ static std::vector<ChatCommand> debugCommandTable =
{
- { "setbit", rbac::RBAC_PERM_COMMAND_DEBUG_SETBIT, false, &HandleDebugSet32BitCommand, "", NULL },
- { "threat", rbac::RBAC_PERM_COMMAND_DEBUG_THREAT, false, &HandleDebugThreatListCommand, "", NULL },
- { "hostil", rbac::RBAC_PERM_COMMAND_DEBUG_HOSTIL, false, &HandleDebugHostileRefListCommand, "", NULL },
- { "anim", rbac::RBAC_PERM_COMMAND_DEBUG_ANIM, false, &HandleDebugAnimCommand, "", NULL },
- { "arena", rbac::RBAC_PERM_COMMAND_DEBUG_ARENA, false, &HandleDebugArenaCommand, "", NULL },
- { "bg", rbac::RBAC_PERM_COMMAND_DEBUG_BG, false, &HandleDebugBattlegroundCommand, "", NULL },
- { "getitemstate", rbac::RBAC_PERM_COMMAND_DEBUG_GETITEMSTATE, false, &HandleDebugGetItemStateCommand, "", NULL },
- { "lootrecipient", rbac::RBAC_PERM_COMMAND_DEBUG_LOOTRECIPIENT, false, &HandleDebugGetLootRecipientCommand, "", NULL },
- { "getvalue", rbac::RBAC_PERM_COMMAND_DEBUG_GETVALUE, false, &HandleDebugGetValueCommand, "", NULL },
- { "getitemvalue", rbac::RBAC_PERM_COMMAND_DEBUG_GETITEMVALUE, false, &HandleDebugGetItemValueCommand, "", NULL },
- { "Mod32Value", rbac::RBAC_PERM_COMMAND_DEBUG_MOD32VALUE, false, &HandleDebugMod32ValueCommand, "", NULL },
+ { "setbit", rbac::RBAC_PERM_COMMAND_DEBUG_SETBIT, false, &HandleDebugSet32BitCommand, "" },
+ { "threat", rbac::RBAC_PERM_COMMAND_DEBUG_THREAT, false, &HandleDebugThreatListCommand, "" },
+ { "hostil", rbac::RBAC_PERM_COMMAND_DEBUG_HOSTIL, false, &HandleDebugHostileRefListCommand, "" },
+ { "anim", rbac::RBAC_PERM_COMMAND_DEBUG_ANIM, false, &HandleDebugAnimCommand, "" },
+ { "arena", rbac::RBAC_PERM_COMMAND_DEBUG_ARENA, false, &HandleDebugArenaCommand, "" },
+ { "bg", rbac::RBAC_PERM_COMMAND_DEBUG_BG, false, &HandleDebugBattlegroundCommand, "" },
+ { "getitemstate", rbac::RBAC_PERM_COMMAND_DEBUG_GETITEMSTATE, false, &HandleDebugGetItemStateCommand, "" },
+ { "lootrecipient", rbac::RBAC_PERM_COMMAND_DEBUG_LOOTRECIPIENT, false, &HandleDebugGetLootRecipientCommand, "" },
+ { "getvalue", rbac::RBAC_PERM_COMMAND_DEBUG_GETVALUE, false, &HandleDebugGetValueCommand, "" },
+ { "getitemvalue", rbac::RBAC_PERM_COMMAND_DEBUG_GETITEMVALUE, false, &HandleDebugGetItemValueCommand, "" },
+ { "Mod32Value", rbac::RBAC_PERM_COMMAND_DEBUG_MOD32VALUE, false, &HandleDebugMod32ValueCommand, "" },
{ "play", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY, false, NULL, "", debugPlayCommandTable },
{ "send", rbac::RBAC_PERM_COMMAND_DEBUG_SEND, false, NULL, "", debugSendCommandTable },
- { "setaurastate", rbac::RBAC_PERM_COMMAND_DEBUG_SETAURASTATE, false, &HandleDebugSetAuraStateCommand, "", NULL },
- { "setitemvalue", rbac::RBAC_PERM_COMMAND_DEBUG_SETITEMVALUE, false, &HandleDebugSetItemValueCommand, "", NULL },
- { "setvalue", rbac::RBAC_PERM_COMMAND_DEBUG_SETVALUE, false, &HandleDebugSetValueCommand, "", NULL },
- { "spawnvehicle", rbac::RBAC_PERM_COMMAND_DEBUG_SPAWNVEHICLE, false, &HandleDebugSpawnVehicleCommand, "", NULL },
- { "setvid", rbac::RBAC_PERM_COMMAND_DEBUG_SETVID, false, &HandleDebugSetVehicleIdCommand, "", NULL },
- { "entervehicle", rbac::RBAC_PERM_COMMAND_DEBUG_ENTERVEHICLE, false, &HandleDebugEnterVehicleCommand, "", NULL },
- { "uws", rbac::RBAC_PERM_COMMAND_DEBUG_UWS, false, &HandleDebugUpdateWorldStateCommand, "", NULL },
- { "update", rbac::RBAC_PERM_COMMAND_DEBUG_UPDATE, false, &HandleDebugUpdateCommand, "", NULL },
- { "itemexpire", rbac::RBAC_PERM_COMMAND_DEBUG_ITEMEXPIRE, false, &HandleDebugItemExpireCommand, "", NULL },
- { "areatriggers", rbac::RBAC_PERM_COMMAND_DEBUG_AREATRIGGERS, false, &HandleDebugAreaTriggersCommand, "", NULL },
- { "los", rbac::RBAC_PERM_COMMAND_DEBUG_LOS, false, &HandleDebugLoSCommand, "", NULL },
- { "moveflags", rbac::RBAC_PERM_COMMAND_DEBUG_MOVEFLAGS, false, &HandleDebugMoveflagsCommand, "", NULL },
- { "transport", rbac::RBAC_PERM_COMMAND_DEBUG_TRANSPORT, false, &HandleDebugTransportCommand, "", NULL },
- { "loadcells", rbac::RBAC_PERM_COMMAND_DEBUG_LOADCELLS, false, &HandleDebugLoadCellsCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "setaurastate", rbac::RBAC_PERM_COMMAND_DEBUG_SETAURASTATE, false, &HandleDebugSetAuraStateCommand, "" },
+ { "setitemvalue", rbac::RBAC_PERM_COMMAND_DEBUG_SETITEMVALUE, false, &HandleDebugSetItemValueCommand, "" },
+ { "setvalue", rbac::RBAC_PERM_COMMAND_DEBUG_SETVALUE, false, &HandleDebugSetValueCommand, "" },
+ { "spawnvehicle", rbac::RBAC_PERM_COMMAND_DEBUG_SPAWNVEHICLE, false, &HandleDebugSpawnVehicleCommand, "" },
+ { "setvid", rbac::RBAC_PERM_COMMAND_DEBUG_SETVID, false, &HandleDebugSetVehicleIdCommand, "" },
+ { "entervehicle", rbac::RBAC_PERM_COMMAND_DEBUG_ENTERVEHICLE, false, &HandleDebugEnterVehicleCommand, "" },
+ { "uws", rbac::RBAC_PERM_COMMAND_DEBUG_UWS, false, &HandleDebugUpdateWorldStateCommand, "" },
+ { "update", rbac::RBAC_PERM_COMMAND_DEBUG_UPDATE, false, &HandleDebugUpdateCommand, "" },
+ { "itemexpire", rbac::RBAC_PERM_COMMAND_DEBUG_ITEMEXPIRE, false, &HandleDebugItemExpireCommand, "" },
+ { "areatriggers", rbac::RBAC_PERM_COMMAND_DEBUG_AREATRIGGERS, false, &HandleDebugAreaTriggersCommand, "" },
+ { "los", rbac::RBAC_PERM_COMMAND_DEBUG_LOS, false, &HandleDebugLoSCommand, "" },
+ { "moveflags", rbac::RBAC_PERM_COMMAND_DEBUG_MOVEFLAGS, false, &HandleDebugMoveflagsCommand, "" },
+ { "transport", rbac::RBAC_PERM_COMMAND_DEBUG_TRANSPORT, false, &HandleDebugTransportCommand, "" },
+ { "loadcells", rbac::RBAC_PERM_COMMAND_DEBUG_LOADCELLS, false, &HandleDebugLoadCellsCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "debug", rbac::RBAC_PERM_COMMAND_DEBUG, true, NULL, "", debugCommandTable },
- { "wpgps", rbac::RBAC_PERM_COMMAND_WPGPS, false, &HandleWPGPSCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "wpgps", rbac::RBAC_PERM_COMMAND_WPGPS, false, &HandleWPGPSCommand, "" },
};
return commandTable;
}
@@ -502,7 +498,7 @@ public:
return false;
handler->PSendSysMessage("Loot recipient for creature %s (GUID %u, DB GUID %u) is %s",
- target->GetName().c_str(), target->GetGUIDLow(), target->GetDBTableGUIDLow(),
+ target->GetName().c_str(), target->GetGUID().GetCounter(), target->GetSpawnId(),
target->hasLootRecipient() ? (target->GetLootRecipient() ? target->GetLootRecipient()->GetName().c_str() : "offline") : "no loot recipient");
return true;
}
@@ -597,7 +593,7 @@ public:
break;
}
- handler->PSendSysMessage("bag: %d slot: %d guid: %d - state: %s", bagSlot, item->GetSlot(), item->GetGUIDLow(), st.c_str());
+ handler->PSendSysMessage("bag: %d slot: %d guid: %d - state: %s", bagSlot, item->GetSlot(), item->GetGUID().GetCounter(), st.c_str());
}
if (updateQueue.empty())
handler->PSendSysMessage("The player's updatequeue is empty");
@@ -618,7 +614,7 @@ public:
if (item->GetSlot() != i)
{
- handler->PSendSysMessage("Item with slot %d and guid %d has an incorrect slot value: %d", i, item->GetGUIDLow(), item->GetSlot());
+ handler->PSendSysMessage("Item with slot %d and guid %d has an incorrect slot value: %d", i, item->GetGUID().GetCounter(), item->GetSlot());
error = true;
continue;
}
@@ -642,28 +638,28 @@ public:
uint16 qp = item->GetQueuePos();
if (qp > updateQueue.size())
{
- handler->PSendSysMessage("The item with slot %d and guid %d has its queuepos (%d) larger than the update queue size! ", item->GetSlot(), item->GetGUIDLow(), qp);
+ handler->PSendSysMessage("The item with slot %d and guid %d has its queuepos (%d) larger than the update queue size! ", item->GetSlot(), item->GetGUID().GetCounter(), qp);
error = true;
continue;
}
if (updateQueue[qp] == NULL)
{
- handler->PSendSysMessage("The item with slot %d and guid %d has its queuepos (%d) pointing to NULL in the queue!", item->GetSlot(), item->GetGUIDLow(), qp);
+ handler->PSendSysMessage("The item with slot %d and guid %d has its queuepos (%d) pointing to NULL in the queue!", item->GetSlot(), item->GetGUID().GetCounter(), qp);
error = true;
continue;
}
if (updateQueue[qp] != item)
{
- handler->PSendSysMessage("The item with slot %d and guid %d has a queuepos (%d) that points to another item in the queue (bag: %d, slot: %d, guid: %d)", item->GetSlot(), item->GetGUIDLow(), qp, updateQueue[qp]->GetBagSlot(), updateQueue[qp]->GetSlot(), updateQueue[qp]->GetGUIDLow());
+ handler->PSendSysMessage("The item with slot %d and guid %d has a queuepos (%d) that points to another item in the queue (bag: %d, slot: %d, guid: %d)", item->GetSlot(), item->GetGUID().GetCounter(), qp, updateQueue[qp]->GetBagSlot(), updateQueue[qp]->GetSlot(), updateQueue[qp]->GetGUID().GetCounter());
error = true;
continue;
}
}
else if (item->GetState() != ITEM_UNCHANGED)
{
- handler->PSendSysMessage("The item with slot %d and guid %d is not in queue but should be (state: %d)!", item->GetSlot(), item->GetGUIDLow(), item->GetState());
+ handler->PSendSysMessage("The item with slot %d and guid %d is not in queue but should be (state: %d)!", item->GetSlot(), item->GetGUID().GetCounter(), item->GetState());
error = true;
continue;
}
@@ -678,7 +674,7 @@ public:
if (item2->GetSlot() != j)
{
- handler->PSendSysMessage("The item in bag %d and slot %d (guid: %d) has an incorrect slot value: %d", bag->GetSlot(), j, item2->GetGUIDLow(), item2->GetSlot());
+ handler->PSendSysMessage("The item in bag %d and slot %d (guid: %d) has an incorrect slot value: %d", bag->GetSlot(), j, item2->GetGUID().GetCounter(), item2->GetSlot());
error = true;
continue;
}
@@ -710,28 +706,28 @@ public:
uint16 qp = item2->GetQueuePos();
if (qp > updateQueue.size())
{
- handler->PSendSysMessage("The item in bag %d at slot %d having guid %d has a queuepos (%d) larger than the update queue size! ", bag->GetSlot(), item2->GetSlot(), item2->GetGUIDLow(), qp);
+ handler->PSendSysMessage("The item in bag %d at slot %d having guid %d has a queuepos (%d) larger than the update queue size! ", bag->GetSlot(), item2->GetSlot(), item2->GetGUID().GetCounter(), qp);
error = true;
continue;
}
if (updateQueue[qp] == NULL)
{
- handler->PSendSysMessage("The item in bag %d at slot %d having guid %d has a queuepos (%d) that points to NULL in the queue!", bag->GetSlot(), item2->GetSlot(), item2->GetGUIDLow(), qp);
+ handler->PSendSysMessage("The item in bag %d at slot %d having guid %d has a queuepos (%d) that points to NULL in the queue!", bag->GetSlot(), item2->GetSlot(), item2->GetGUID().GetCounter(), qp);
error = true;
continue;
}
if (updateQueue[qp] != item2)
{
- handler->PSendSysMessage("The item in bag %d at slot %d having guid %d has a queuepos (%d) that points to another item in the queue (bag: %d, slot: %d, guid: %d)", bag->GetSlot(), item2->GetSlot(), item2->GetGUIDLow(), qp, updateQueue[qp]->GetBagSlot(), updateQueue[qp]->GetSlot(), updateQueue[qp]->GetGUIDLow());
+ handler->PSendSysMessage("The item in bag %d at slot %d having guid %d has a queuepos (%d) that points to another item in the queue (bag: %d, slot: %d, guid: %d)", bag->GetSlot(), item2->GetSlot(), item2->GetGUID().GetCounter(), qp, updateQueue[qp]->GetBagSlot(), updateQueue[qp]->GetSlot(), updateQueue[qp]->GetGUID().GetCounter());
error = true;
continue;
}
}
else if (item2->GetState() != ITEM_UNCHANGED)
{
- handler->PSendSysMessage("The item in bag %d at slot %d having guid %d is not in queue but should be (state: %d)!", bag->GetSlot(), item2->GetSlot(), item2->GetGUIDLow(), item2->GetState());
+ handler->PSendSysMessage("The item in bag %d at slot %d having guid %d is not in queue but should be (state: %d)!", bag->GetSlot(), item2->GetSlot(), item2->GetGUID().GetCounter(), item2->GetState());
error = true;
continue;
}
@@ -806,14 +802,14 @@ public:
ThreatContainer::StorageType const &threatList = target->getThreatManager().getThreatList();
ThreatContainer::StorageType::const_iterator itr;
uint32 count = 0;
- handler->PSendSysMessage("Threat list of %s (guid %u)", target->GetName().c_str(), target->GetGUIDLow());
+ handler->PSendSysMessage("Threat list of %s (guid %u)", target->GetName().c_str(), target->GetGUID().GetCounter());
for (itr = threatList.begin(); itr != threatList.end(); ++itr)
{
Unit* unit = (*itr)->getTarget();
if (!unit)
continue;
++count;
- handler->PSendSysMessage(" %u. %s (guid %u) - threat %f", count, unit->GetName().c_str(), unit->GetGUIDLow(), (*itr)->getThreat());
+ handler->PSendSysMessage(" %u. %s (guid %u) - threat %f", count, unit->GetName().c_str(), unit->GetGUID().GetCounter(), (*itr)->getThreat());
}
handler->SendSysMessage("End of threat list.");
return true;
@@ -826,13 +822,13 @@ public:
target = handler->GetSession()->GetPlayer();
HostileReference* ref = target->getHostileRefManager().getFirst();
uint32 count = 0;
- handler->PSendSysMessage("Hostil reference list of %s (guid %u)", target->GetName().c_str(), target->GetGUIDLow());
+ handler->PSendSysMessage("Hostil reference list of %s (guid %u)", target->GetName().c_str(), target->GetGUID().GetCounter());
while (ref)
{
if (Unit* unit = ref->GetSource()->GetOwner())
{
++count;
- handler->PSendSysMessage(" %u. %s (guid %u) - threat %f", count, unit->GetName().c_str(), unit->GetGUIDLow(), ref->getThreat());
+ handler->PSendSysMessage(" %u. %s (guid %u) - threat %f", count, unit->GetName().c_str(), unit->GetGUID().GetCounter(), ref->getThreat());
}
ref = ref->next();
}
@@ -929,7 +925,7 @@ public:
Map* map = handler->GetSession()->GetPlayer()->GetMap();
- if (!v->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_VEHICLE), map, handler->GetSession()->GetPlayer()->GetPhaseMask(), entry, x, y, z, o, nullptr, id))
+ if (!v->Create(map->GenerateLowGuid<HighGuid::Vehicle>(), map, handler->GetSession()->GetPlayer()->GetPhaseMask(), entry, x, y, z, o, nullptr, id))
{
delete v;
return false;
@@ -971,10 +967,10 @@ public:
if (!e || !f)
return false;
- uint32 guid = (uint32)atoi(e);
+ ObjectGuid::LowType guid = (uint32)atoi(e);
uint32 index = (uint32)atoi(f);
- Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid(HIGHGUID_ITEM, 0, guid));
+ Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid(HighGuid::Item, 0, guid));
if (!i)
return false;
@@ -1001,11 +997,11 @@ public:
if (!e || !f || !g)
return false;
- uint32 guid = (uint32)atoi(e);
+ ObjectGuid::LowType guid = (uint32)atoi(e);
uint32 index = (uint32)atoi(f);
uint32 value = (uint32)atoi(g);
- Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid(HIGHGUID_ITEM, 0, guid));
+ Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid(HighGuid::Item, 0, guid));
if (!i)
return false;
@@ -1027,9 +1023,9 @@ public:
if (!e)
return false;
- uint32 guid = (uint32)atoi(e);
+ ObjectGuid::LowType guid = (uint32)atoi(e);
- Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid(HIGHGUID_ITEM, guid));
+ Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid(HighGuid::Item, guid));
if (!i)
return false;
@@ -1054,7 +1050,7 @@ public:
static bool HandleDebugLoSCommand(ChatHandler* handler, char const* /*args*/)
{
if (Unit* unit = handler->getSelectedUnit())
- handler->PSendSysMessage("Unit %s (GuidLow: %u) is %sin LoS", unit->GetName().c_str(), unit->GetGUIDLow(), handler->GetSession()->GetPlayer()->IsWithinLOSInMap(unit) ? "" : "not ");
+ handler->PSendSysMessage("Unit %s (GuidLow: %u) is %sin LoS", unit->GetName().c_str(), unit->GetGUID().GetCounter(), handler->GetSession()->GetPlayer()->IsWithinLOSInMap(unit) ? "" : "not ");
return true;
}
@@ -1199,7 +1195,7 @@ public:
if (opcode >= handler->GetSession()->GetPlayer()->GetValuesCount())
{
- handler->PSendSysMessage(LANG_TOO_BIG_INDEX, opcode, handler->GetSession()->GetPlayer()->GetGUIDLow(), handler->GetSession()->GetPlayer()->GetValuesCount());
+ handler->PSendSysMessage(LANG_TOO_BIG_INDEX, opcode, handler->GetSession()->GetPlayer()->GetGUID().GetCounter(), handler->GetSession()->GetPlayer()->GetValuesCount());
return false;
}
@@ -1249,13 +1245,13 @@ public:
{
value = unit->GetUInt32Value(updateIndex);
- handler->PSendSysMessage(LANG_UPDATE, unit->GetGUIDLow(), updateIndex, value);
+ handler->PSendSysMessage(LANG_UPDATE, unit->GetGUID().GetCounter(), updateIndex, value);
return true;
}
value = atoi(val);
- handler->PSendSysMessage(LANG_UPDATE_CHANGE, unit->GetGUIDLow(), updateIndex, value);
+ handler->PSendSysMessage(LANG_UPDATE_CHANGE, unit->GetGUID().GetCounter(), updateIndex, value);
unit->SetUInt32Value(updateIndex, value);
@@ -1410,11 +1406,12 @@ public:
if (!map)
map = player->GetMap();
+ handler->PSendSysMessage("Loading all cells (mapId: %u). Current next GameObject %u, Creature %u", map->GetId(), map->GetMaxLowGuid<HighGuid::GameObject>(), map->GetMaxLowGuid<HighGuid::Unit>());
for (uint32 cellX = 0; cellX < TOTAL_NUMBER_OF_CELLS_PER_MAP; cellX++)
for (uint32 cellY = 0; cellY < TOTAL_NUMBER_OF_CELLS_PER_MAP; cellY++)
map->LoadGrid((cellX + 0.5f - CENTER_GRID_CELL_ID) * SIZE_OF_GRID_CELL, (cellY + 0.5f - CENTER_GRID_CELL_ID) * SIZE_OF_GRID_CELL);
- handler->PSendSysMessage("Cells loaded (mapId: %u)", map->GetId());
+ handler->PSendSysMessage("Cells loaded (mapId: %u) After load - Next GameObject %u, Creature %u", map->GetId(), map->GetMaxLowGuid<HighGuid::GameObject>(), map->GetMaxLowGuid<HighGuid::Unit>());
return true;
}
};
diff --git a/src/server/scripts/Commands/cs_deserter.cpp b/src/server/scripts/Commands/cs_deserter.cpp
index 2887ac8c134..9f461207707 100644
--- a/src/server/scripts/Commands/cs_deserter.cpp
+++ b/src/server/scripts/Commands/cs_deserter.cpp
@@ -43,31 +43,27 @@ public:
* @brief Returns the command structure for the system.
*/
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand deserterInstanceCommandTable[] =
+ static std::vector<ChatCommand> deserterInstanceCommandTable =
{
- { "add", rbac::RBAC_PERM_COMMAND_DESERTER_INSTANCE_ADD, false, &HandleDeserterInstanceAdd, "", NULL },
- { "remove", rbac::RBAC_PERM_COMMAND_DESERTER_INSTANCE_REMOVE, false, &HandleDeserterInstanceRemove, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "add", rbac::RBAC_PERM_COMMAND_DESERTER_INSTANCE_ADD, false, &HandleDeserterInstanceAdd, "" },
+ { "remove", rbac::RBAC_PERM_COMMAND_DESERTER_INSTANCE_REMOVE, false, &HandleDeserterInstanceRemove, "" },
};
- static ChatCommand deserterBGCommandTable[] =
+ static std::vector<ChatCommand> deserterBGCommandTable =
{
- { "add", rbac::RBAC_PERM_COMMAND_DESERTER_BG_ADD, false, &HandleDeserterBGAdd, "", NULL },
- { "remove", rbac::RBAC_PERM_COMMAND_DESERTER_BG_REMOVE, false, &HandleDeserterBGRemove, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "add", rbac::RBAC_PERM_COMMAND_DESERTER_BG_ADD, false, &HandleDeserterBGAdd, "" },
+ { "remove", rbac::RBAC_PERM_COMMAND_DESERTER_BG_REMOVE, false, &HandleDeserterBGRemove, "" },
};
- static ChatCommand deserterCommandTable[] =
+ static std::vector<ChatCommand> deserterCommandTable =
{
{ "instance", rbac::RBAC_PERM_COMMAND_DESERTER_INSTANCE, false, NULL, "", deserterInstanceCommandTable },
{ "bg", rbac::RBAC_PERM_COMMAND_DESERTER_BG, false, NULL, "", deserterBGCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "deserter", rbac::RBAC_PERM_COMMAND_DESERTER, false, NULL, "", deserterCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_disable.cpp b/src/server/scripts/Commands/cs_disable.cpp
index 14f76945a80..8c73f3f41de 100644
--- a/src/server/scripts/Commands/cs_disable.cpp
+++ b/src/server/scripts/Commands/cs_disable.cpp
@@ -37,42 +37,38 @@ class disable_commandscript : public CommandScript
public:
disable_commandscript() : CommandScript("disable_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand removeDisableCommandTable[] =
+ static std::vector<ChatCommand> removeDisableCommandTable =
{
- { "spell", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_SPELL, true, &HandleRemoveDisableSpellCommand, "", NULL },
- { "quest", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_QUEST, true, &HandleRemoveDisableQuestCommand, "", NULL },
- { "map", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_MAP, true, &HandleRemoveDisableMapCommand, "", NULL },
- { "battleground", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_BATTLEGROUND, true, &HandleRemoveDisableBattlegroundCommand, "", NULL },
- { "achievement_criteria", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_ACHIEVEMENT_CRITERIA, true, &HandleRemoveDisableAchievementCriteriaCommand, "", NULL },
- { "outdoorpvp", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_OUTDOORPVP, true, &HandleRemoveDisableOutdoorPvPCommand, "", NULL },
- { "vmap", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_VMAP, true, &HandleRemoveDisableVmapCommand, "", NULL },
- { "mmap", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_MMAP, true, &HandleRemoveDisableMMapCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "spell", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_SPELL, true, &HandleRemoveDisableSpellCommand, "" },
+ { "quest", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_QUEST, true, &HandleRemoveDisableQuestCommand, "" },
+ { "map", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_MAP, true, &HandleRemoveDisableMapCommand, "" },
+ { "battleground", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_BATTLEGROUND, true, &HandleRemoveDisableBattlegroundCommand, "" },
+ { "achievement_criteria", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_ACHIEVEMENT_CRITERIA, true, &HandleRemoveDisableAchievementCriteriaCommand, "" },
+ { "outdoorpvp", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_OUTDOORPVP, true, &HandleRemoveDisableOutdoorPvPCommand, "" },
+ { "vmap", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_VMAP, true, &HandleRemoveDisableVmapCommand, "" },
+ { "mmap", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_MMAP, true, &HandleRemoveDisableMMapCommand, "" },
};
- static ChatCommand addDisableCommandTable[] =
+ static std::vector<ChatCommand> addDisableCommandTable =
{
- { "spell", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_SPELL, true, &HandleAddDisableSpellCommand, "", NULL },
- { "quest", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_QUEST, true, &HandleAddDisableQuestCommand, "", NULL },
- { "map", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_MAP, true, &HandleAddDisableMapCommand, "", NULL },
- { "battleground", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_BATTLEGROUND, true, &HandleAddDisableBattlegroundCommand, "", NULL },
- { "achievement_criteria", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_ACHIEVEMENT_CRITERIA, true, &HandleAddDisableAchievementCriteriaCommand, "", NULL },
- { "outdoorpvp", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_OUTDOORPVP, true, &HandleAddDisableOutdoorPvPCommand, "", NULL },
- { "vmap", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_VMAP, true, &HandleAddDisableVmapCommand, "", NULL },
- { "mmap", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_MMAP, true, &HandleAddDisableMMapCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "spell", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_SPELL, true, &HandleAddDisableSpellCommand, "" },
+ { "quest", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_QUEST, true, &HandleAddDisableQuestCommand, "" },
+ { "map", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_MAP, true, &HandleAddDisableMapCommand, "" },
+ { "battleground", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_BATTLEGROUND, true, &HandleAddDisableBattlegroundCommand, "" },
+ { "achievement_criteria", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_ACHIEVEMENT_CRITERIA, true, &HandleAddDisableAchievementCriteriaCommand, "" },
+ { "outdoorpvp", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_OUTDOORPVP, true, &HandleAddDisableOutdoorPvPCommand, "" },
+ { "vmap", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_VMAP, true, &HandleAddDisableVmapCommand, "" },
+ { "mmap", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_MMAP, true, &HandleAddDisableMMapCommand, "" },
};
- static ChatCommand disableCommandTable[] =
+ static std::vector<ChatCommand> disableCommandTable =
{
{ "add", rbac::RBAC_PERM_COMMAND_DISABLE_ADD, true, NULL, "", addDisableCommandTable },
{ "remove", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE, true, NULL, "", removeDisableCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "disable", rbac::RBAC_PERM_COMMAND_DISABLE, false, NULL, "", disableCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_event.cpp b/src/server/scripts/Commands/cs_event.cpp
index 37495289149..352bce4e7f0 100644
--- a/src/server/scripts/Commands/cs_event.cpp
+++ b/src/server/scripts/Commands/cs_event.cpp
@@ -33,20 +33,18 @@ class event_commandscript : public CommandScript
public:
event_commandscript() : CommandScript("event_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand eventCommandTable[] =
+ static std::vector<ChatCommand> eventCommandTable =
{
- { "activelist", rbac::RBAC_PERM_COMMAND_EVENT_ACTIVELIST, true, &HandleEventActiveListCommand, "", NULL },
- { "start", rbac::RBAC_PERM_COMMAND_EVENT_START, true, &HandleEventStartCommand, "", NULL },
- { "stop", rbac::RBAC_PERM_COMMAND_EVENT_STOP, true, &HandleEventStopCommand, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_EVENT, true, &HandleEventInfoCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "activelist", rbac::RBAC_PERM_COMMAND_EVENT_ACTIVELIST, true, &HandleEventActiveListCommand, "" },
+ { "start", rbac::RBAC_PERM_COMMAND_EVENT_START, true, &HandleEventStartCommand, "" },
+ { "stop", rbac::RBAC_PERM_COMMAND_EVENT_STOP, true, &HandleEventStopCommand, "" },
+ { "", rbac::RBAC_PERM_COMMAND_EVENT, true, &HandleEventInfoCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "event", rbac::RBAC_PERM_COMMAND_EVENT, false, NULL, "", eventCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp
index 94e974bea0b..81b70603680 100644
--- a/src/server/scripts/Commands/cs_gm.cpp
+++ b/src/server/scripts/Commands/cs_gm.cpp
@@ -36,22 +36,20 @@ class gm_commandscript : public CommandScript
public:
gm_commandscript() : CommandScript("gm_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand gmCommandTable[] =
+ static std::vector<ChatCommand> gmCommandTable =
{
- { "chat", rbac::RBAC_PERM_COMMAND_GM_CHAT, false, &HandleGMChatCommand, "", NULL },
- { "fly", rbac::RBAC_PERM_COMMAND_GM_FLY, false, &HandleGMFlyCommand, "", NULL },
- { "ingame", rbac::RBAC_PERM_COMMAND_GM_INGAME, true, &HandleGMListIngameCommand, "", NULL },
- { "list", rbac::RBAC_PERM_COMMAND_GM_LIST, true, &HandleGMListFullCommand, "", NULL },
- { "visible", rbac::RBAC_PERM_COMMAND_GM_VISIBLE, false, &HandleGMVisibleCommand, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_GM, false, &HandleGMCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "chat", rbac::RBAC_PERM_COMMAND_GM_CHAT, false, &HandleGMChatCommand, "" },
+ { "fly", rbac::RBAC_PERM_COMMAND_GM_FLY, false, &HandleGMFlyCommand, "" },
+ { "ingame", rbac::RBAC_PERM_COMMAND_GM_INGAME, true, &HandleGMListIngameCommand, "" },
+ { "list", rbac::RBAC_PERM_COMMAND_GM_LIST, true, &HandleGMListFullCommand, "" },
+ { "visible", rbac::RBAC_PERM_COMMAND_GM_VISIBLE, false, &HandleGMVisibleCommand, "" },
+ { "", rbac::RBAC_PERM_COMMAND_GM, false, &HandleGMCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "gm", rbac::RBAC_PERM_COMMAND_GM, false, NULL, "", gmCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp
index 1ddfaa4bfd8..a810106269e 100644
--- a/src/server/scripts/Commands/cs_go.cpp
+++ b/src/server/scripts/Commands/cs_go.cpp
@@ -36,27 +36,25 @@ class go_commandscript : public CommandScript
public:
go_commandscript() : CommandScript("go_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand goCommandTable[] =
- {
- { "creature", rbac::RBAC_PERM_COMMAND_GO_CREATURE, false, &HandleGoCreatureCommand, "", NULL },
- { "graveyard", rbac::RBAC_PERM_COMMAND_GO_GRAVEYARD, false, &HandleGoGraveyardCommand, "", NULL },
- { "grid", rbac::RBAC_PERM_COMMAND_GO_GRID, false, &HandleGoGridCommand, "", NULL },
- { "object", rbac::RBAC_PERM_COMMAND_GO_OBJECT, false, &HandleGoObjectCommand, "", NULL },
- { "taxinode", rbac::RBAC_PERM_COMMAND_GO_TAXINODE, false, &HandleGoTaxinodeCommand, "", NULL },
- { "trigger", rbac::RBAC_PERM_COMMAND_GO_TRIGGER, false, &HandleGoTriggerCommand, "", NULL },
- { "zonexy", rbac::RBAC_PERM_COMMAND_GO_ZONEXY, false, &HandleGoZoneXYCommand, "", NULL },
- { "xyz", rbac::RBAC_PERM_COMMAND_GO_XYZ, false, &HandleGoXYZCommand, "", NULL },
- { "ticket", rbac::RBAC_PERM_COMMAND_GO_TICKET, false, &HandleGoTicketCommand, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_GO, false, &HandleGoXYZCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ static std::vector<ChatCommand> goCommandTable =
+ {
+ { "creature", rbac::RBAC_PERM_COMMAND_GO_CREATURE, false, &HandleGoCreatureCommand, "" },
+ { "graveyard", rbac::RBAC_PERM_COMMAND_GO_GRAVEYARD, false, &HandleGoGraveyardCommand, "" },
+ { "grid", rbac::RBAC_PERM_COMMAND_GO_GRID, false, &HandleGoGridCommand, "" },
+ { "object", rbac::RBAC_PERM_COMMAND_GO_OBJECT, false, &HandleGoObjectCommand, "" },
+ { "taxinode", rbac::RBAC_PERM_COMMAND_GO_TAXINODE, false, &HandleGoTaxinodeCommand, "" },
+ { "trigger", rbac::RBAC_PERM_COMMAND_GO_TRIGGER, false, &HandleGoTriggerCommand, "" },
+ { "zonexy", rbac::RBAC_PERM_COMMAND_GO_ZONEXY, false, &HandleGoZoneXYCommand, "" },
+ { "xyz", rbac::RBAC_PERM_COMMAND_GO_XYZ, false, &HandleGoXYZCommand, "" },
+ { "ticket", rbac::RBAC_PERM_COMMAND_GO_TICKET, false, &HandleGoTicketCommand, "" },
+ { "", rbac::RBAC_PERM_COMMAND_GO, false, &HandleGoXYZCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "go", rbac::RBAC_PERM_COMMAND_GO, false, NULL, "", goCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -135,21 +133,9 @@ public:
float z = fields[2].GetFloat();
float o = fields[3].GetFloat();
uint32 mapId = fields[4].GetUInt16();
- uint32 guid = fields[5].GetUInt32();
- uint32 id = fields[6].GetUInt32();
Transport* transport = NULL;
- if (Creature* creature = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_UNIT, id, guid), (Creature*)NULL))
- {
- x = creature->GetPositionX();
- y = creature->GetPositionY();
- z = creature->GetPositionZ();
- o = creature->GetOrientation();
- mapId = creature->GetMapId();
- transport = creature->GetTransport();
- }
-
if (!MapManager::IsValidMapCoord(mapId, x, y, z, o) || sObjectMgr->IsTransportMap(mapId))
{
handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, x, y, mapId);
diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp
index 0142cfa0e52..fda9101fc3f 100644
--- a/src/server/scripts/Commands/cs_gobject.cpp
+++ b/src/server/scripts/Commands/cs_gobject.cpp
@@ -37,37 +37,33 @@ class gobject_commandscript : public CommandScript
public:
gobject_commandscript() : CommandScript("gobject_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand gobjectAddCommandTable[] =
+ static std::vector<ChatCommand> gobjectAddCommandTable =
{
- { "temp", rbac::RBAC_PERM_COMMAND_GOBJECT_ADD_TEMP, false, &HandleGameObjectAddTempCommand, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_GOBJECT_ADD, false, &HandleGameObjectAddCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "temp", rbac::RBAC_PERM_COMMAND_GOBJECT_ADD_TEMP, false, &HandleGameObjectAddTempCommand, "" },
+ { "", rbac::RBAC_PERM_COMMAND_GOBJECT_ADD, false, &HandleGameObjectAddCommand, "" },
};
- static ChatCommand gobjectSetCommandTable[] =
+ static std::vector<ChatCommand> gobjectSetCommandTable =
{
- { "phase", rbac::RBAC_PERM_COMMAND_GOBJECT_SET_PHASE, false, &HandleGameObjectSetPhaseCommand, "", NULL },
- { "state", rbac::RBAC_PERM_COMMAND_GOBJECT_SET_STATE, false, &HandleGameObjectSetStateCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "phase", rbac::RBAC_PERM_COMMAND_GOBJECT_SET_PHASE, false, &HandleGameObjectSetPhaseCommand, "" },
+ { "state", rbac::RBAC_PERM_COMMAND_GOBJECT_SET_STATE, false, &HandleGameObjectSetStateCommand, "" },
};
- static ChatCommand gobjectCommandTable[] =
- {
- { "activate", rbac::RBAC_PERM_COMMAND_GOBJECT_ACTIVATE, false, &HandleGameObjectActivateCommand, "", NULL },
- { "delete", rbac::RBAC_PERM_COMMAND_GOBJECT_DELETE, false, &HandleGameObjectDeleteCommand, "", NULL },
- { "info", rbac::RBAC_PERM_COMMAND_GOBJECT_INFO, false, &HandleGameObjectInfoCommand, "", NULL },
- { "move", rbac::RBAC_PERM_COMMAND_GOBJECT_MOVE, false, &HandleGameObjectMoveCommand, "", NULL },
- { "near", rbac::RBAC_PERM_COMMAND_GOBJECT_NEAR, false, &HandleGameObjectNearCommand, "", NULL },
- { "target", rbac::RBAC_PERM_COMMAND_GOBJECT_TARGET, false, &HandleGameObjectTargetCommand, "", NULL },
- { "turn", rbac::RBAC_PERM_COMMAND_GOBJECT_TURN, false, &HandleGameObjectTurnCommand, "", NULL },
+ static std::vector<ChatCommand> gobjectCommandTable =
+ {
+ { "activate", rbac::RBAC_PERM_COMMAND_GOBJECT_ACTIVATE, false, &HandleGameObjectActivateCommand, "" },
+ { "delete", rbac::RBAC_PERM_COMMAND_GOBJECT_DELETE, false, &HandleGameObjectDeleteCommand, "" },
+ { "info", rbac::RBAC_PERM_COMMAND_GOBJECT_INFO, false, &HandleGameObjectInfoCommand, "" },
+ { "move", rbac::RBAC_PERM_COMMAND_GOBJECT_MOVE, false, &HandleGameObjectMoveCommand, "" },
+ { "near", rbac::RBAC_PERM_COMMAND_GOBJECT_NEAR, false, &HandleGameObjectNearCommand, "" },
+ { "target", rbac::RBAC_PERM_COMMAND_GOBJECT_TARGET, false, &HandleGameObjectTargetCommand, "" },
+ { "turn", rbac::RBAC_PERM_COMMAND_GOBJECT_TURN, false, &HandleGameObjectTurnCommand, "" },
{ "add", rbac::RBAC_PERM_COMMAND_GOBJECT_ADD, false, NULL, "", gobjectAddCommandTable },
{ "set", rbac::RBAC_PERM_COMMAND_GOBJECT_SET, false, NULL, "", gobjectSetCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "gobject", rbac::RBAC_PERM_COMMAND_GOBJECT, false, NULL, "", gobjectCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -81,7 +77,7 @@ public:
if (!id)
return false;
- uint32 guidLow = atoi(id);
+ ObjectGuid::LowType guidLow = atoi(id);
if (!guidLow)
return false;
@@ -150,7 +146,7 @@ public:
Map* map = player->GetMap();
GameObject* object = new GameObject;
- uint32 guidLow = sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT);
+ ObjectGuid::LowType guidLow = map->GenerateLowGuid<HighGuid::GameObject>();
if (!object->Create(guidLow, objectInfo->entry, map, player->GetPhaseMaskForSpawn(), x, y, z, o, 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY))
{
@@ -166,6 +162,8 @@ public:
// fill the gameobject data and save to the db
object->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), player->GetPhaseMaskForSpawn());
+ guidLow = object->GetSpawnId();
+
// delete the old object and do a clean load from DB with a fresh new GameObject instance.
// this is required to avoid weird behavior and memory leaks
delete object;
@@ -290,7 +288,8 @@ public:
bool found = false;
float x, y, z, o;
- uint32 guidLow, id, phase;
+ ObjectGuid::LowType guidLow;
+ uint32 id, phase;
uint16 mapId;
uint32 poolId;
@@ -324,7 +323,7 @@ public:
return false;
}
- GameObject* target = handler->GetSession()->GetPlayer()->GetMap()->GetGameObject(ObjectGuid(HIGHGUID_GAMEOBJECT, id, guidLow));
+ GameObject* target = handler->GetSession()->GetPlayer()->GetMap()->GetGameObject(ObjectGuid(HighGuid::GameObject, id, guidLow));
handler->PSendSysMessage(LANG_GAMEOBJECT_DETAIL, guidLow, objectInfo->name.c_str(), guidLow, id, x, y, z, mapId, o, phase);
@@ -350,7 +349,7 @@ public:
if (!id)
return false;
- uint32 guidLow = atoi(id);
+ ObjectGuid::LowType guidLow = atoi(id);
if (!guidLow)
return false;
@@ -373,7 +372,7 @@ public:
Unit* owner = ObjectAccessor::GetUnit(*handler->GetSession()->GetPlayer(), ownerGuid);
if (!owner || !ownerGuid.IsPlayer())
{
- handler->PSendSysMessage(LANG_COMMAND_DELOBJREFERCREATURE, ownerGuid.GetCounter(), object->GetGUIDLow());
+ handler->PSendSysMessage(LANG_COMMAND_DELOBJREFERCREATURE, ownerGuid.GetCounter(), object->GetGUID().GetCounter());
handler->SetSentErrorMessage(true);
return false;
}
@@ -385,7 +384,7 @@ public:
object->Delete();
object->DeleteFromDB();
- handler->PSendSysMessage(LANG_COMMAND_DELOBJMESSAGE, object->GetGUIDLow());
+ handler->PSendSysMessage(LANG_COMMAND_DELOBJMESSAGE, object->GetGUID().GetCounter());
return true;
}
@@ -398,7 +397,7 @@ public:
if (!id)
return false;
- uint32 guidLow = atoi(id);
+ ObjectGuid::LowType guidLow = atoi(id);
if (!guidLow)
return false;
@@ -426,16 +425,26 @@ public:
o = player->GetOrientation();
}
+ Map* map = object->GetMap();
+
object->Relocate(object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), o);
object->UpdateRotationFields();
- object->DestroyForNearbyPlayers();
- object->UpdateObjectVisibility();
-
object->SaveToDB();
- object->Refresh();
- handler->PSendSysMessage(LANG_COMMAND_TURNOBJMESSAGE, object->GetGUIDLow(), object->GetGOInfo()->name.c_str(), object->GetGUIDLow(), o);
+ // Generate a completely new spawn with new guid
+ // 3.3.5a client caches recently deleted objects and brings them back to life
+ // when CreateObject block for this guid is received again
+ // however it entirely skips parsing that block and only uses already known location
+ object->Delete();
+
+ object = new GameObject();
+ if (!object->LoadGameObjectFromDB(guidLow, map))
+ {
+ delete object;
+ return false;
+ }
+ handler->PSendSysMessage(LANG_COMMAND_TURNOBJMESSAGE, object->GetSpawnId(), object->GetGOInfo()->name.c_str(), object->GetSpawnId());
return true;
}
@@ -447,7 +456,7 @@ public:
if (!id)
return false;
- uint32 guidLow = atoi(id);
+ ObjectGuid::LowType guidLow = atoi(id);
if (!guidLow)
return false;
@@ -468,21 +477,20 @@ public:
char* toY = strtok(NULL, " ");
char* toZ = strtok(NULL, " ");
+ float x, y, z;
if (!toX)
{
Player* player = handler->GetSession()->GetPlayer();
- object->Relocate(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), object->GetOrientation());
- object->DestroyForNearbyPlayers();
- object->UpdateObjectVisibility();
+ player->GetPosition(x, y, z);
}
else
{
if (!toY || !toZ)
return false;
- float x = (float)atof(toX);
- float y = (float)atof(toY);
- float z = (float)atof(toZ);
+ x = (float)atof(toX);
+ y = (float)atof(toY);
+ z = (float)atof(toZ);
if (!MapManager::IsValidMapCoord(object->GetMapId(), x, y, z))
{
@@ -490,17 +498,27 @@ public:
handler->SetSentErrorMessage(true);
return false;
}
-
- object->Relocate(x, y, z, object->GetOrientation());
- object->DestroyForNearbyPlayers();
- object->UpdateObjectVisibility();
}
+ Map* map = object->GetMap();
+
+ object->Relocate(x, y, z, object->GetOrientation());
object->SaveToDB();
- object->Refresh();
- handler->PSendSysMessage(LANG_COMMAND_MOVEOBJMESSAGE, object->GetGUIDLow(), object->GetGOInfo()->name.c_str(), object->GetGUIDLow());
+ // Generate a completely new spawn with new guid
+ // 3.3.5a client caches recently deleted objects and brings them back to life
+ // when CreateObject block for this guid is received again
+ // however it entirely skips parsing that block and only uses already known location
+ object->Delete();
+
+ object = new GameObject();
+ if (!object->LoadGameObjectFromDB(guidLow, map))
+ {
+ delete object;
+ return false;
+ }
+ handler->PSendSysMessage(LANG_COMMAND_MOVEOBJMESSAGE, object->GetSpawnId(), object->GetGOInfo()->name.c_str(), object->GetSpawnId());
return true;
}
@@ -512,7 +530,7 @@ public:
if (!id)
return false;
- uint32 guidLow = atoi(id);
+ ObjectGuid::LowType guidLow = atoi(id);
if (!guidLow)
return false;
@@ -566,7 +584,7 @@ public:
do
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
uint32 entry = fields[1].GetUInt32();
float x = fields[2].GetFloat();
float y = fields[3].GetFloat();
@@ -635,7 +653,7 @@ public:
if (!id)
return false;
- uint32 guidLow = atoi(id);
+ ObjectGuid::LowType guidLow = atoi(id);
if (!guidLow)
return false;
diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp
index c0a4b2cfead..054cff996f9 100644
--- a/src/server/scripts/Commands/cs_group.cpp
+++ b/src/server/scripts/Commands/cs_group.cpp
@@ -28,23 +28,21 @@ class group_commandscript : public CommandScript
public:
group_commandscript() : CommandScript("group_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand groupCommandTable[] =
+ static std::vector<ChatCommand> groupCommandTable =
{
- { "leader", rbac::RBAC_PERM_COMMAND_GROUP_LEADER, false, &HandleGroupLeaderCommand, "", NULL },
- { "disband", rbac::RBAC_PERM_COMMAND_GROUP_DISBAND, false, &HandleGroupDisbandCommand, "", NULL },
- { "remove", rbac::RBAC_PERM_COMMAND_GROUP_REMOVE, false, &HandleGroupRemoveCommand, "", NULL },
- { "join", rbac::RBAC_PERM_COMMAND_GROUP_JOIN, false, &HandleGroupJoinCommand, "", NULL },
- { "list", rbac::RBAC_PERM_COMMAND_GROUP_LIST, false, &HandleGroupListCommand, "", NULL },
- { "summon", rbac::RBAC_PERM_COMMAND_GROUP_SUMMON, false, &HandleGroupSummonCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "leader", rbac::RBAC_PERM_COMMAND_GROUP_LEADER, false, &HandleGroupLeaderCommand, "" },
+ { "disband", rbac::RBAC_PERM_COMMAND_GROUP_DISBAND, false, &HandleGroupDisbandCommand, "" },
+ { "remove", rbac::RBAC_PERM_COMMAND_GROUP_REMOVE, false, &HandleGroupRemoveCommand, "" },
+ { "join", rbac::RBAC_PERM_COMMAND_GROUP_JOIN, false, &HandleGroupJoinCommand, "" },
+ { "list", rbac::RBAC_PERM_COMMAND_GROUP_LIST, false, &HandleGroupListCommand, "" },
+ { "summon", rbac::RBAC_PERM_COMMAND_GROUP_SUMMON, false, &HandleGroupSummonCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "group", rbac::RBAC_PERM_COMMAND_GROUP, false, NULL, "", groupCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -269,7 +267,7 @@ public:
const char* onlineState = "";
// Parse the guid to uint32...
- ObjectGuid parseGUID(HIGHGUID_PLAYER, uint32(atoul(args)));
+ ObjectGuid parseGUID(HighGuid::Player, uint32(atoul(args)));
// ... and try to extract a player out of it.
if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget))
diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp
index a735e296f59..04b633f6f40 100644
--- a/src/server/scripts/Commands/cs_guild.cpp
+++ b/src/server/scripts/Commands/cs_guild.cpp
@@ -34,23 +34,21 @@ class guild_commandscript : public CommandScript
public:
guild_commandscript() : CommandScript("guild_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand guildCommandTable[] =
+ static std::vector<ChatCommand> guildCommandTable =
{
- { "create", rbac::RBAC_PERM_COMMAND_GUILD_CREATE, true, &HandleGuildCreateCommand, "", NULL },
- { "delete", rbac::RBAC_PERM_COMMAND_GUILD_DELETE, true, &HandleGuildDeleteCommand, "", NULL },
- { "invite", rbac::RBAC_PERM_COMMAND_GUILD_INVITE, true, &HandleGuildInviteCommand, "", NULL },
- { "uninvite", rbac::RBAC_PERM_COMMAND_GUILD_UNINVITE, true, &HandleGuildUninviteCommand, "", NULL },
- { "rank", rbac::RBAC_PERM_COMMAND_GUILD_RANK, true, &HandleGuildRankCommand, "", NULL },
- { "rename", rbac::RBAC_PERM_COMMAND_GUILD_RENAME, true, &HandleGuildRenameCommand, "", NULL },
- { "info", rbac::RBAC_PERM_COMMAND_GUILD_INFO, true, &HandleGuildInfoCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "create", rbac::RBAC_PERM_COMMAND_GUILD_CREATE, true, &HandleGuildCreateCommand, "" },
+ { "delete", rbac::RBAC_PERM_COMMAND_GUILD_DELETE, true, &HandleGuildDeleteCommand, "" },
+ { "invite", rbac::RBAC_PERM_COMMAND_GUILD_INVITE, true, &HandleGuildInviteCommand, "" },
+ { "uninvite", rbac::RBAC_PERM_COMMAND_GUILD_UNINVITE, true, &HandleGuildUninviteCommand, "" },
+ { "rank", rbac::RBAC_PERM_COMMAND_GUILD_RANK, true, &HandleGuildRankCommand, "" },
+ { "rename", rbac::RBAC_PERM_COMMAND_GUILD_RENAME, true, &HandleGuildRenameCommand, "" },
+ { "info", rbac::RBAC_PERM_COMMAND_GUILD_INFO, true, &HandleGuildInfoCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "guild", rbac::RBAC_PERM_COMMAND_GUILD, true, NULL, "", guildCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -158,7 +156,7 @@ public:
if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid))
return false;
- uint32 guildId = target ? target->GetGuildId() : Player::GetGuildIdFromDB(targetGuid);
+ ObjectGuid::LowType guildId = target ? target->GetGuildId() : Player::GetGuildIdFromDB(targetGuid);
if (!guildId)
return false;
@@ -184,7 +182,7 @@ public:
if (!handler->extractPlayerTarget(nameStr, &target, &targetGuid, &target_name))
return false;
- uint32 guildId = target ? target->GetGuildId() : Player::GetGuildIdFromDB(targetGuid);
+ ObjectGuid::LowType guildId = target ? target->GetGuildId() : Player::GetGuildIdFromDB(targetGuid);
if (!guildId)
return false;
diff --git a/src/server/scripts/Commands/cs_honor.cpp b/src/server/scripts/Commands/cs_honor.cpp
index ad2c53415bb..e8b41309d47 100644
--- a/src/server/scripts/Commands/cs_honor.cpp
+++ b/src/server/scripts/Commands/cs_honor.cpp
@@ -33,26 +33,23 @@ class honor_commandscript : public CommandScript
public:
honor_commandscript() : CommandScript("honor_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand honorAddCommandTable[] =
+ static std::vector<ChatCommand> honorAddCommandTable =
{
- { "kill", rbac::RBAC_PERM_COMMAND_HONOR_ADD_KILL, false, &HandleHonorAddKillCommand, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_HONOR_ADD, false, &HandleHonorAddCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "kill", rbac::RBAC_PERM_COMMAND_HONOR_ADD_KILL, false, &HandleHonorAddKillCommand, "" },
+ { "", rbac::RBAC_PERM_COMMAND_HONOR_ADD, false, &HandleHonorAddCommand, "" },
};
- static ChatCommand honorCommandTable[] =
+ static std::vector<ChatCommand> honorCommandTable =
{
{ "add", rbac::RBAC_PERM_COMMAND_HONOR_ADD, false, NULL, "", honorAddCommandTable },
- { "update", rbac::RBAC_PERM_COMMAND_HONOR_UPDATE, false, &HandleHonorUpdateCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "update", rbac::RBAC_PERM_COMMAND_HONOR_UPDATE, false, &HandleHonorUpdateCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "honor", rbac::RBAC_PERM_COMMAND_HONOR, false, NULL, "", honorCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_instance.cpp b/src/server/scripts/Commands/cs_instance.cpp
index 78c8f970f52..5651aaa12ee 100644
--- a/src/server/scripts/Commands/cs_instance.cpp
+++ b/src/server/scripts/Commands/cs_instance.cpp
@@ -36,23 +36,21 @@ class instance_commandscript : public CommandScript
public:
instance_commandscript() : CommandScript("instance_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand instanceCommandTable[] =
+ static std::vector<ChatCommand> instanceCommandTable =
{
- { "listbinds", rbac::RBAC_PERM_COMMAND_INSTANCE_LISTBINDS, false, &HandleInstanceListBindsCommand, "", NULL },
- { "unbind", rbac::RBAC_PERM_COMMAND_INSTANCE_UNBIND, false, &HandleInstanceUnbindCommand, "", NULL },
- { "stats", rbac::RBAC_PERM_COMMAND_INSTANCE_STATS, true, &HandleInstanceStatsCommand, "", NULL },
- { "savedata", rbac::RBAC_PERM_COMMAND_INSTANCE_SAVEDATA, false, &HandleInstanceSaveDataCommand, "", NULL },
- { "setbossstate", rbac::RBAC_PERM_COMMAND_INSTANCE_SET_BOSS_STATE, true, &HandleInstanceSetBossStateCommand, "", NULL },
- { "getbossstate", rbac::RBAC_PERM_COMMAND_INSTANCE_GET_BOSS_STATE, true, &HandleInstanceGetBossStateCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "listbinds", rbac::RBAC_PERM_COMMAND_INSTANCE_LISTBINDS, false, &HandleInstanceListBindsCommand, "" },
+ { "unbind", rbac::RBAC_PERM_COMMAND_INSTANCE_UNBIND, false, &HandleInstanceUnbindCommand, "" },
+ { "stats", rbac::RBAC_PERM_COMMAND_INSTANCE_STATS, true, &HandleInstanceStatsCommand, "" },
+ { "savedata", rbac::RBAC_PERM_COMMAND_INSTANCE_SAVEDATA, false, &HandleInstanceSaveDataCommand, "" },
+ { "setbossstate", rbac::RBAC_PERM_COMMAND_INSTANCE_SET_BOSS_STATE, true, &HandleInstanceSetBossStateCommand, "" },
+ { "getbossstate", rbac::RBAC_PERM_COMMAND_INSTANCE_GET_BOSS_STATE, true, &HandleInstanceGetBossStateCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "instance", rbac::RBAC_PERM_COMMAND_INSTANCE, true, NULL, "", instanceCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
@@ -170,22 +168,22 @@ public:
static bool HandleInstanceSaveDataCommand(ChatHandler* handler, char const* /*args*/)
{
Player* player = handler->GetSession()->GetPlayer();
- Map* map = player->GetMap();
- if (!map->IsDungeon())
+ InstanceMap* map = player->GetMap()->ToInstanceMap();
+ if (!map)
{
handler->PSendSysMessage(LANG_NOT_DUNGEON);
handler->SetSentErrorMessage(true);
return false;
}
- if (!((InstanceMap*)map)->GetInstanceScript())
+ if (!map->GetInstanceScript())
{
handler->PSendSysMessage(LANG_NO_INSTANCE_DATA);
handler->SetSentErrorMessage(true);
return false;
}
- ((InstanceMap*)map)->GetInstanceScript()->SaveToDB();
+ map->GetInstanceScript()->SaveToDB();
return true;
}
@@ -217,7 +215,7 @@ public:
{
playerName = param3;
if (normalizePlayerName(playerName))
- player = sObjectAccessor->FindPlayerByName(playerName);
+ player = ObjectAccessor::FindPlayerByName(playerName);
}
if (!player)
@@ -227,15 +225,15 @@ public:
return false;
}
- Map* map = player->GetMap();
- if (!map->IsDungeon())
+ InstanceMap* map = player->GetMap()->ToInstanceMap();
+ if (!map)
{
handler->PSendSysMessage(LANG_NOT_DUNGEON);
handler->SetSentErrorMessage(true);
return false;
}
- if (!map->ToInstanceMap()->GetInstanceScript())
+ if (!map->GetInstanceScript())
{
handler->PSendSysMessage(LANG_NO_INSTANCE_DATA);
handler->SetSentErrorMessage(true);
@@ -246,15 +244,16 @@ public:
state = atoi(param2);
// Reject improper values.
- if (state > TO_BE_DECIDED || encounterId > map->ToInstanceMap()->GetInstanceScript()->GetEncounterCount())
+ if (state > TO_BE_DECIDED || encounterId > map->GetInstanceScript()->GetEncounterCount())
{
handler->PSendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
- map->ToInstanceMap()->GetInstanceScript()->SetBossState(encounterId, (EncounterState)state);
- handler->PSendSysMessage(LANG_COMMAND_INST_SET_BOSS_STATE, encounterId, state);
+ map->GetInstanceScript()->SetBossState(encounterId, EncounterState(state));
+ std::string stateName = InstanceScript::GetBossStateName(state);
+ handler->PSendSysMessage(LANG_COMMAND_INST_SET_BOSS_STATE, encounterId, state, stateName);
return true;
}
@@ -283,7 +282,7 @@ public:
{
playerName = param2;
if (normalizePlayerName(playerName))
- player = sObjectAccessor->FindPlayerByName(playerName);
+ player = ObjectAccessor::FindPlayerByName(playerName);
}
if (!player)
@@ -293,15 +292,15 @@ public:
return false;
}
- Map* map = player->GetMap();
- if (!map->IsDungeon())
+ InstanceMap* map = player->GetMap()->ToInstanceMap();
+ if (!map)
{
handler->PSendSysMessage(LANG_NOT_DUNGEON);
handler->SetSentErrorMessage(true);
return false;
}
- if (!map->ToInstanceMap()->GetInstanceScript())
+ if (!map->GetInstanceScript())
{
handler->PSendSysMessage(LANG_NO_INSTANCE_DATA);
handler->SetSentErrorMessage(true);
@@ -310,15 +309,16 @@ public:
encounterId = atoi(param1);
- if (encounterId > map->ToInstanceMap()->GetInstanceScript()->GetEncounterCount())
+ if (encounterId > map->GetInstanceScript()->GetEncounterCount())
{
handler->PSendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
- uint8 state = map->ToInstanceMap()->GetInstanceScript()->GetBossState(encounterId);
- handler->PSendSysMessage(LANG_COMMAND_INST_GET_BOSS_STATE, encounterId, state);
+ uint32 state = map->GetInstanceScript()->GetBossState(encounterId);
+ std::string stateName = InstanceScript::GetBossStateName(state);
+ handler->PSendSysMessage(LANG_COMMAND_INST_GET_BOSS_STATE, encounterId, state, stateName);
return true;
}
};
diff --git a/src/server/scripts/Commands/cs_learn.cpp b/src/server/scripts/Commands/cs_learn.cpp
index 21211afad50..d7fd4e6664c 100644
--- a/src/server/scripts/Commands/cs_learn.cpp
+++ b/src/server/scripts/Commands/cs_learn.cpp
@@ -36,40 +36,36 @@ class learn_commandscript : public CommandScript
public:
learn_commandscript() : CommandScript("learn_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand learnAllMyCommandTable[] =
+ static std::vector<ChatCommand> learnAllMyCommandTable =
{
- { "class", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_CLASS, false, &HandleLearnAllMyClassCommand, "", NULL },
- { "pettalents", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_PETTALENTS, false, &HandleLearnAllMyPetTalentsCommand, "", NULL },
- { "spells", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_SPELLS, false, &HandleLearnAllMySpellsCommand, "", NULL },
- { "talents", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_TALENTS, false, &HandleLearnAllMyTalentsCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "class", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_CLASS, false, &HandleLearnAllMyClassCommand, "" },
+ { "pettalents", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_PETTALENTS, false, &HandleLearnAllMyPetTalentsCommand, "" },
+ { "spells", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_SPELLS, false, &HandleLearnAllMySpellsCommand, "" },
+ { "talents", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_TALENTS, false, &HandleLearnAllMyTalentsCommand, "" },
};
- static ChatCommand learnAllCommandTable[] =
+ static std::vector<ChatCommand> learnAllCommandTable =
{
{ "my", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY, false, NULL, "", learnAllMyCommandTable },
- { "gm", rbac::RBAC_PERM_COMMAND_LEARN_ALL_GM, false, &HandleLearnAllGMCommand, "", NULL },
- { "crafts", rbac::RBAC_PERM_COMMAND_LEARN_ALL_CRAFTS, false, &HandleLearnAllCraftsCommand, "", NULL },
- { "default", rbac::RBAC_PERM_COMMAND_LEARN_ALL_DEFAULT, false, &HandleLearnAllDefaultCommand, "", NULL },
- { "lang", rbac::RBAC_PERM_COMMAND_LEARN_ALL_LANG, false, &HandleLearnAllLangCommand, "", NULL },
- { "recipes", rbac::RBAC_PERM_COMMAND_LEARN_ALL_RECIPES, false, &HandleLearnAllRecipesCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "gm", rbac::RBAC_PERM_COMMAND_LEARN_ALL_GM, false, &HandleLearnAllGMCommand, "" },
+ { "crafts", rbac::RBAC_PERM_COMMAND_LEARN_ALL_CRAFTS, false, &HandleLearnAllCraftsCommand, "" },
+ { "default", rbac::RBAC_PERM_COMMAND_LEARN_ALL_DEFAULT, false, &HandleLearnAllDefaultCommand, "" },
+ { "lang", rbac::RBAC_PERM_COMMAND_LEARN_ALL_LANG, false, &HandleLearnAllLangCommand, "" },
+ { "recipes", rbac::RBAC_PERM_COMMAND_LEARN_ALL_RECIPES, false, &HandleLearnAllRecipesCommand, "" },
};
- static ChatCommand learnCommandTable[] =
+ static std::vector<ChatCommand> learnCommandTable =
{
{ "all", rbac::RBAC_PERM_COMMAND_LEARN_ALL, false, NULL, "", learnAllCommandTable },
- { "", rbac::RBAC_PERM_COMMAND_LEARN, false, &HandleLearnCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "", rbac::RBAC_PERM_COMMAND_LEARN, false, &HandleLearnCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "learn", rbac::RBAC_PERM_COMMAND_LEARN, false, NULL, "", learnCommandTable },
- { "unlearn", rbac::RBAC_PERM_COMMAND_UNLEARN, false, &HandleUnLearnCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "unlearn", rbac::RBAC_PERM_COMMAND_UNLEARN, false, &HandleUnLearnCommand, "" },
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_lfg.cpp b/src/server/scripts/Commands/cs_lfg.cpp
index d1662f3a97c..9287d5553e3 100644
--- a/src/server/scripts/Commands/cs_lfg.cpp
+++ b/src/server/scripts/Commands/cs_lfg.cpp
@@ -43,22 +43,20 @@ class lfg_commandscript : public CommandScript
public:
lfg_commandscript() : CommandScript("lfg_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand lfgCommandTable[] =
+ static std::vector<ChatCommand> lfgCommandTable =
{
- { "player", rbac::RBAC_PERM_COMMAND_LFG_PLAYER, false, &HandleLfgPlayerInfoCommand, "", NULL },
- { "group", rbac::RBAC_PERM_COMMAND_LFG_GROUP, false, &HandleLfgGroupInfoCommand, "", NULL },
- { "queue", rbac::RBAC_PERM_COMMAND_LFG_QUEUE, true, &HandleLfgQueueInfoCommand, "", NULL },
- { "clean", rbac::RBAC_PERM_COMMAND_LFG_CLEAN, true, &HandleLfgCleanCommand, "", NULL },
- { "options", rbac::RBAC_PERM_COMMAND_LFG_OPTIONS, true, &HandleLfgOptionsCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "player", rbac::RBAC_PERM_COMMAND_LFG_PLAYER, false, &HandleLfgPlayerInfoCommand, "" },
+ { "group", rbac::RBAC_PERM_COMMAND_LFG_GROUP, false, &HandleLfgGroupInfoCommand, "" },
+ { "queue", rbac::RBAC_PERM_COMMAND_LFG_QUEUE, true, &HandleLfgQueueInfoCommand, "" },
+ { "clean", rbac::RBAC_PERM_COMMAND_LFG_CLEAN, true, &HandleLfgCleanCommand, "" },
+ { "options", rbac::RBAC_PERM_COMMAND_LFG_OPTIONS, true, &HandleLfgOptionsCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "lfg", rbac::RBAC_PERM_COMMAND_LFG, true, NULL, "", lfgCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -80,7 +78,7 @@ public:
ObjectGuid guidTarget;
std::string nameTarget;
- ObjectGuid parseGUID(HIGHGUID_PLAYER, uint32(atoul(args)));
+ ObjectGuid parseGUID(HighGuid::Player, uint32(atoul(args)));
if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget))
{
@@ -150,7 +148,7 @@ public:
static bool HandleLfgQueueInfoCommand(ChatHandler* handler, char const* args)
{
- handler->SendSysMessage(sLFGMgr->DumpQueueInfo(*args != '\0').c_str());
+ handler->SendSysMessage(sLFGMgr->DumpQueueInfo(*args != '\0').c_str(), true);
return true;
}
diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp
index 3e4b46804ff..a1b79a69605 100644
--- a/src/server/scripts/Commands/cs_list.cpp
+++ b/src/server/scripts/Commands/cs_list.cpp
@@ -36,21 +36,19 @@ class list_commandscript : public CommandScript
public:
list_commandscript() : CommandScript("list_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand listCommandTable[] =
+ static std::vector<ChatCommand> listCommandTable =
{
- { "creature", rbac::RBAC_PERM_COMMAND_LIST_CREATURE, true, &HandleListCreatureCommand, "", NULL },
- { "item", rbac::RBAC_PERM_COMMAND_LIST_ITEM, true, &HandleListItemCommand, "", NULL },
- { "object", rbac::RBAC_PERM_COMMAND_LIST_OBJECT, true, &HandleListObjectCommand, "", NULL },
- { "auras", rbac::RBAC_PERM_COMMAND_LIST_AURAS, false, &HandleListAurasCommand, "", NULL },
- { "mail", rbac::RBAC_PERM_COMMAND_LIST_MAIL, true, &HandleListMailCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "creature", rbac::RBAC_PERM_COMMAND_LIST_CREATURE, true, &HandleListCreatureCommand, "" },
+ { "item", rbac::RBAC_PERM_COMMAND_LIST_ITEM, true, &HandleListItemCommand, "" },
+ { "object", rbac::RBAC_PERM_COMMAND_LIST_OBJECT, true, &HandleListObjectCommand, "" },
+ { "auras", rbac::RBAC_PERM_COMMAND_LIST_AURAS, false, &HandleListAurasCommand, "" },
+ { "mail", rbac::RBAC_PERM_COMMAND_LIST_MAIL, true, &HandleListMailCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "list", rbac::RBAC_PERM_COMMAND_LIST,true, NULL, "", listCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -109,7 +107,7 @@ public:
do
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
float x = fields[1].GetFloat();
float y = fields[2].GetFloat();
float z = fields[3].GetFloat();
@@ -235,8 +233,8 @@ public:
do
{
Field* fields = result->Fetch();
- uint32 itemGuid = fields[0].GetUInt32();
- uint32 itemSender = fields[1].GetUInt32();
+ ObjectGuid::LowType itemGuid = fields[0].GetUInt32();
+ ObjectGuid::LowType itemSender = fields[1].GetUInt32();
uint32 itemReceiver = fields[2].GetUInt32();
uint32 itemSenderAccountId = fields[3].GetUInt32();
std::string itemSenderName = fields[4].GetString();
@@ -398,7 +396,7 @@ public:
do
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
float x = fields[1].GetFloat();
float y = fields[2].GetFloat();
float z = fields[3].GetFloat();
@@ -476,7 +474,7 @@ public:
if (!*args)
return false;
- ObjectGuid parseGUID(HIGHGUID_PLAYER, uint32(atoul(args)));
+ ObjectGuid parseGUID(HighGuid::Player, uint32(atoul(args)));
if (sObjectMgr->GetPlayerNameByGUID(parseGUID, targetName))
{
@@ -534,7 +532,7 @@ public:
{
do
{
- uint32 item_guid = (*result2)[0].GetUInt32();
+ ObjectGuid::LowType item_guid = (*result2)[0].GetUInt32();
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAIL_LIST_ITEMS);
stmt->setUInt32(0, item_guid);
PreparedQueryResult result3 = CharacterDatabase.Query(stmt);
diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp
index 56aa6d0bf92..ec35c5a7b62 100644
--- a/src/server/scripts/Commands/cs_lookup.cpp
+++ b/src/server/scripts/Commands/cs_lookup.cpp
@@ -37,47 +37,43 @@ class lookup_commandscript : public CommandScript
public:
lookup_commandscript() : CommandScript("lookup_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand lookupPlayerCommandTable[] =
+ static std::vector<ChatCommand> lookupPlayerCommandTable =
{
- { "ip", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER_IP, true, &HandleLookupPlayerIpCommand, "", NULL },
- { "account", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER_ACCOUNT, true, &HandleLookupPlayerAccountCommand, "", NULL },
- { "email", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER_EMAIL, true, &HandleLookupPlayerEmailCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "ip", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER_IP, true, &HandleLookupPlayerIpCommand, "" },
+ { "account", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER_ACCOUNT, true, &HandleLookupPlayerAccountCommand, "" },
+ { "email", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER_EMAIL, true, &HandleLookupPlayerEmailCommand, "" },
};
- static ChatCommand lookupSpellCommandTable[] =
+ static std::vector<ChatCommand> lookupSpellCommandTable =
{
- { "id", rbac::RBAC_PERM_COMMAND_LOOKUP_SPELL_ID, true, &HandleLookupSpellIdCommand, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_LOOKUP_SPELL, true, &HandleLookupSpellCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "id", rbac::RBAC_PERM_COMMAND_LOOKUP_SPELL_ID, true, &HandleLookupSpellIdCommand, "" },
+ { "", rbac::RBAC_PERM_COMMAND_LOOKUP_SPELL, true, &HandleLookupSpellCommand, "" },
};
- static ChatCommand lookupCommandTable[] =
+ static std::vector<ChatCommand> lookupCommandTable =
{
- { "area", rbac::RBAC_PERM_COMMAND_LOOKUP_AREA, true, &HandleLookupAreaCommand, "", NULL },
- { "creature", rbac::RBAC_PERM_COMMAND_LOOKUP_CREATURE, true, &HandleLookupCreatureCommand, "", NULL },
- { "event", rbac::RBAC_PERM_COMMAND_LOOKUP_EVENT, true, &HandleLookupEventCommand, "", NULL },
- { "faction", rbac::RBAC_PERM_COMMAND_LOOKUP_FACTION, true, &HandleLookupFactionCommand, "", NULL },
- { "item", rbac::RBAC_PERM_COMMAND_LOOKUP_ITEM, true, &HandleLookupItemCommand, "", NULL },
- { "itemset", rbac::RBAC_PERM_COMMAND_LOOKUP_ITEMSET, true, &HandleLookupItemSetCommand, "", NULL },
- { "object", rbac::RBAC_PERM_COMMAND_LOOKUP_OBJECT, true, &HandleLookupObjectCommand, "", NULL },
- { "quest", rbac::RBAC_PERM_COMMAND_LOOKUP_QUEST, true, &HandleLookupQuestCommand, "", NULL },
+ { "area", rbac::RBAC_PERM_COMMAND_LOOKUP_AREA, true, &HandleLookupAreaCommand, "" },
+ { "creature", rbac::RBAC_PERM_COMMAND_LOOKUP_CREATURE, true, &HandleLookupCreatureCommand, "" },
+ { "event", rbac::RBAC_PERM_COMMAND_LOOKUP_EVENT, true, &HandleLookupEventCommand, "" },
+ { "faction", rbac::RBAC_PERM_COMMAND_LOOKUP_FACTION, true, &HandleLookupFactionCommand, "" },
+ { "item", rbac::RBAC_PERM_COMMAND_LOOKUP_ITEM, true, &HandleLookupItemCommand, "" },
+ { "itemset", rbac::RBAC_PERM_COMMAND_LOOKUP_ITEMSET, true, &HandleLookupItemSetCommand, "" },
+ { "object", rbac::RBAC_PERM_COMMAND_LOOKUP_OBJECT, true, &HandleLookupObjectCommand, "" },
+ { "quest", rbac::RBAC_PERM_COMMAND_LOOKUP_QUEST, true, &HandleLookupQuestCommand, "" },
{ "player", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER, true, NULL, "", lookupPlayerCommandTable },
- { "skill", rbac::RBAC_PERM_COMMAND_LOOKUP_SKILL, true, &HandleLookupSkillCommand, "", NULL },
+ { "skill", rbac::RBAC_PERM_COMMAND_LOOKUP_SKILL, true, &HandleLookupSkillCommand, "" },
{ "spell", rbac::RBAC_PERM_COMMAND_LOOKUP_SPELL, true, NULL, "", lookupSpellCommandTable },
- { "taxinode", rbac::RBAC_PERM_COMMAND_LOOKUP_TAXINODE, true, &HandleLookupTaxiNodeCommand, "", NULL },
- { "tele", rbac::RBAC_PERM_COMMAND_LOOKUP_TELE, true, &HandleLookupTeleCommand, "", NULL },
- { "title", rbac::RBAC_PERM_COMMAND_LOOKUP_TITLE, true, &HandleLookupTitleCommand, "", NULL },
- { "map", rbac::RBAC_PERM_COMMAND_LOOKUP_MAP, true, &HandleLookupMapCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "taxinode", rbac::RBAC_PERM_COMMAND_LOOKUP_TAXINODE, true, &HandleLookupTaxiNodeCommand, "" },
+ { "tele", rbac::RBAC_PERM_COMMAND_LOOKUP_TELE, true, &HandleLookupTeleCommand, "" },
+ { "title", rbac::RBAC_PERM_COMMAND_LOOKUP_TITLE, true, &HandleLookupTitleCommand, "" },
+ { "map", rbac::RBAC_PERM_COMMAND_LOOKUP_MAP, true, &HandleLookupMapCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "lookup", rbac::RBAC_PERM_COMMAND_LOOKUP, true, NULL, "", lookupCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -1410,7 +1406,7 @@ public:
do
{
Field* characterFields = result2->Fetch();
- uint32 guid = characterFields[0].GetUInt32();
+ ObjectGuid::LowType guid = characterFields[0].GetUInt32();
std::string name = characterFields[1].GetString();
handler->PSendSysMessage(LANG_LOOKUP_PLAYER_CHARACTER, name.c_str(), guid);
diff --git a/src/server/scripts/Commands/cs_message.cpp b/src/server/scripts/Commands/cs_message.cpp
index 922958f7222..f3c1f4d7df8 100644
--- a/src/server/scripts/Commands/cs_message.cpp
+++ b/src/server/scripts/Commands/cs_message.cpp
@@ -34,29 +34,26 @@ class message_commandscript : public CommandScript
public:
message_commandscript() : CommandScript("message_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand channelSetCommandTable[] =
+ static std::vector<ChatCommand> channelSetCommandTable =
{
- { "ownership", rbac::RBAC_PERM_COMMAND_CHANNEL_SET_OWNERSHIP, false, &HandleChannelSetOwnership, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "ownership", rbac::RBAC_PERM_COMMAND_CHANNEL_SET_OWNERSHIP, false, &HandleChannelSetOwnership, "" },
};
- static ChatCommand channelCommandTable[] =
+ static std::vector<ChatCommand> channelCommandTable =
{
{ "set", rbac::RBAC_PERM_COMMAND_CHANNEL_SET, true, NULL, "", channelSetCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "channel", rbac::RBAC_PERM_COMMAND_CHANNEL, true, NULL, "", channelCommandTable },
- { "nameannounce", rbac::RBAC_PERM_COMMAND_NAMEANNOUNCE, true, &HandleNameAnnounceCommand, "", NULL },
- { "gmnameannounce", rbac::RBAC_PERM_COMMAND_GMNAMEANNOUNCE, true, &HandleGMNameAnnounceCommand, "", NULL },
- { "announce", rbac::RBAC_PERM_COMMAND_ANNOUNCE, true, &HandleAnnounceCommand, "", NULL },
- { "gmannounce", rbac::RBAC_PERM_COMMAND_GMANNOUNCE, true, &HandleGMAnnounceCommand, "", NULL },
- { "notify", rbac::RBAC_PERM_COMMAND_NOTIFY, true, &HandleNotifyCommand, "", NULL },
- { "gmnotify", rbac::RBAC_PERM_COMMAND_GMNOTIFY, true, &HandleGMNotifyCommand, "", NULL },
- { "whispers", rbac::RBAC_PERM_COMMAND_WHISPERS, false, &HandleWhispersCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "nameannounce", rbac::RBAC_PERM_COMMAND_NAMEANNOUNCE, true, &HandleNameAnnounceCommand, "" },
+ { "gmnameannounce", rbac::RBAC_PERM_COMMAND_GMNAMEANNOUNCE, true, &HandleGMNameAnnounceCommand, "" },
+ { "announce", rbac::RBAC_PERM_COMMAND_ANNOUNCE, true, &HandleAnnounceCommand, "" },
+ { "gmannounce", rbac::RBAC_PERM_COMMAND_GMANNOUNCE, true, &HandleGMAnnounceCommand, "" },
+ { "notify", rbac::RBAC_PERM_COMMAND_NOTIFY, true, &HandleNotifyCommand, "" },
+ { "gmnotify", rbac::RBAC_PERM_COMMAND_GMNOTIFY, true, &HandleGMNotifyCommand, "" },
+ { "whispers", rbac::RBAC_PERM_COMMAND_WHISPERS, false, &HandleWhispersCommand, "" },
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 7baef489865..b81d6152c03 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -42,62 +42,61 @@ class misc_commandscript : public CommandScript
public:
misc_commandscript() : CommandScript("misc_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand commandTable[] =
- {
- { "additem", rbac::RBAC_PERM_COMMAND_ADDITEM, false, &HandleAddItemCommand, "", NULL },
- { "additemset", rbac::RBAC_PERM_COMMAND_ADDITEMSET, false, &HandleAddItemSetCommand, "", NULL },
- { "appear", rbac::RBAC_PERM_COMMAND_APPEAR, false, &HandleAppearCommand, "", NULL },
- { "aura", rbac::RBAC_PERM_COMMAND_AURA, false, &HandleAuraCommand, "", NULL },
- { "bank", rbac::RBAC_PERM_COMMAND_BANK, false, &HandleBankCommand, "", NULL },
- { "bindsight", rbac::RBAC_PERM_COMMAND_BINDSIGHT, false, &HandleBindSightCommand, "", NULL },
- { "combatstop", rbac::RBAC_PERM_COMMAND_COMBATSTOP, true, &HandleCombatStopCommand, "", NULL },
- { "cometome", rbac::RBAC_PERM_COMMAND_COMETOME, false, &HandleComeToMeCommand, "", NULL },
- { "commands", rbac::RBAC_PERM_COMMAND_COMMANDS, true, &HandleCommandsCommand, "", NULL },
- { "cooldown", rbac::RBAC_PERM_COMMAND_COOLDOWN, false, &HandleCooldownCommand, "", NULL },
- { "damage", rbac::RBAC_PERM_COMMAND_DAMAGE, false, &HandleDamageCommand, "", NULL },
- { "dev", rbac::RBAC_PERM_COMMAND_DEV, false, &HandleDevCommand, "", NULL },
- { "die", rbac::RBAC_PERM_COMMAND_DIE, false, &HandleDieCommand, "", NULL },
- { "dismount", rbac::RBAC_PERM_COMMAND_DISMOUNT, false, &HandleDismountCommand, "", NULL },
- { "distance", rbac::RBAC_PERM_COMMAND_DISTANCE, false, &HandleGetDistanceCommand, "", NULL },
- { "flusharenapoints", rbac::RBAC_PERM_COMMAND_FLUSHARENAPOINTS, false, &HandleFlushArenaPointsCommand, "", NULL },
- { "freeze", rbac::RBAC_PERM_COMMAND_FREEZE, false, &HandleFreezeCommand, "", NULL },
- { "gps", rbac::RBAC_PERM_COMMAND_GPS, false, &HandleGPSCommand, "", NULL },
- { "guid", rbac::RBAC_PERM_COMMAND_GUID, false, &HandleGUIDCommand, "", NULL },
- { "help", rbac::RBAC_PERM_COMMAND_HELP, true, &HandleHelpCommand, "", NULL },
- { "hidearea", rbac::RBAC_PERM_COMMAND_HIDEAREA, false, &HandleHideAreaCommand, "", NULL },
- { "itemmove", rbac::RBAC_PERM_COMMAND_ITEMMOVE, false, &HandleItemMoveCommand, "", NULL },
- { "kick", rbac::RBAC_PERM_COMMAND_KICK, true, &HandleKickPlayerCommand, "", NULL },
- { "linkgrave", rbac::RBAC_PERM_COMMAND_LINKGRAVE, false, &HandleLinkGraveCommand, "", NULL },
- { "listfreeze", rbac::RBAC_PERM_COMMAND_LISTFREEZE, false, &HandleListFreezeCommand, "", NULL },
- { "maxskill", rbac::RBAC_PERM_COMMAND_MAXSKILL, false, &HandleMaxSkillCommand, "", NULL },
- { "movegens", rbac::RBAC_PERM_COMMAND_MOVEGENS, false, &HandleMovegensCommand, "", NULL },
- { "mute", rbac::RBAC_PERM_COMMAND_MUTE, true, &HandleMuteCommand, "", NULL },
- { "mutehistory", rbac::RBAC_PERM_COMMAND_MUTEHISTORY, true, &HandleMuteInfoCommand, "", NULL },
- { "neargrave", rbac::RBAC_PERM_COMMAND_NEARGRAVE, false, &HandleNearGraveCommand, "", NULL },
- { "pinfo", rbac::RBAC_PERM_COMMAND_PINFO, true, &HandlePInfoCommand, "", NULL },
- { "playall", rbac::RBAC_PERM_COMMAND_PLAYALL, false, &HandlePlayAllCommand, "", NULL },
- { "possess", rbac::RBAC_PERM_COMMAND_POSSESS, false, &HandlePossessCommand, "", NULL },
- { "pvpstats", rbac::RBAC_PERM_COMMAND_PVPSTATS, true, &HandlePvPstatsCommand, "", NULL },
- { "recall", rbac::RBAC_PERM_COMMAND_RECALL, false, &HandleRecallCommand, "", NULL },
- { "repairitems", rbac::RBAC_PERM_COMMAND_REPAIRITEMS, true, &HandleRepairitemsCommand, "", NULL },
- { "respawn", rbac::RBAC_PERM_COMMAND_RESPAWN, false, &HandleRespawnCommand, "", NULL },
- { "revive", rbac::RBAC_PERM_COMMAND_REVIVE, true, &HandleReviveCommand, "", NULL },
- { "saveall", rbac::RBAC_PERM_COMMAND_SAVEALL, true, &HandleSaveAllCommand, "", NULL },
- { "save", rbac::RBAC_PERM_COMMAND_SAVE, false, &HandleSaveCommand, "", NULL },
- { "setskill", rbac::RBAC_PERM_COMMAND_SETSKILL, false, &HandleSetSkillCommand, "", NULL },
- { "showarea", rbac::RBAC_PERM_COMMAND_SHOWAREA, false, &HandleShowAreaCommand, "", NULL },
- { "summon", rbac::RBAC_PERM_COMMAND_SUMMON, false, &HandleSummonCommand, "", NULL },
- { "unaura", rbac::RBAC_PERM_COMMAND_UNAURA, false, &HandleUnAuraCommand, "", NULL },
- { "unbindsight", rbac::RBAC_PERM_COMMAND_UNBINDSIGHT, false, HandleUnbindSightCommand, "", NULL },
- { "unfreeze", rbac::RBAC_PERM_COMMAND_UNFREEZE, false, &HandleUnFreezeCommand, "", NULL },
- { "unmute", rbac::RBAC_PERM_COMMAND_UNMUTE, true, &HandleUnmuteCommand, "", NULL },
- { "unpossess", rbac::RBAC_PERM_COMMAND_UNPOSSESS, false, &HandleUnPossessCommand, "", NULL },
- { "unstuck", rbac::RBAC_PERM_COMMAND_UNSTUCK, true, &HandleUnstuckCommand, "", NULL },
- { "wchange", rbac::RBAC_PERM_COMMAND_WCHANGE, false, &HandleChangeWeather, "", NULL },
- { "mailbox", rbac::RBAC_PERM_COMMAND_MAILBOX, false, &HandleMailBoxCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ static std::vector<ChatCommand> commandTable =
+ {
+ { "additem", rbac::RBAC_PERM_COMMAND_ADDITEM, false, &HandleAddItemCommand, "" },
+ { "additemset", rbac::RBAC_PERM_COMMAND_ADDITEMSET, false, &HandleAddItemSetCommand, "" },
+ { "appear", rbac::RBAC_PERM_COMMAND_APPEAR, false, &HandleAppearCommand, "" },
+ { "aura", rbac::RBAC_PERM_COMMAND_AURA, false, &HandleAuraCommand, "" },
+ { "bank", rbac::RBAC_PERM_COMMAND_BANK, false, &HandleBankCommand, "" },
+ { "bindsight", rbac::RBAC_PERM_COMMAND_BINDSIGHT, false, &HandleBindSightCommand, "" },
+ { "combatstop", rbac::RBAC_PERM_COMMAND_COMBATSTOP, true, &HandleCombatStopCommand, "" },
+ { "cometome", rbac::RBAC_PERM_COMMAND_COMETOME, false, &HandleComeToMeCommand, "" },
+ { "commands", rbac::RBAC_PERM_COMMAND_COMMANDS, true, &HandleCommandsCommand, "" },
+ { "cooldown", rbac::RBAC_PERM_COMMAND_COOLDOWN, false, &HandleCooldownCommand, "" },
+ { "damage", rbac::RBAC_PERM_COMMAND_DAMAGE, false, &HandleDamageCommand, "" },
+ { "dev", rbac::RBAC_PERM_COMMAND_DEV, false, &HandleDevCommand, "" },
+ { "die", rbac::RBAC_PERM_COMMAND_DIE, false, &HandleDieCommand, "" },
+ { "dismount", rbac::RBAC_PERM_COMMAND_DISMOUNT, false, &HandleDismountCommand, "" },
+ { "distance", rbac::RBAC_PERM_COMMAND_DISTANCE, false, &HandleGetDistanceCommand, "" },
+ { "flusharenapoints", rbac::RBAC_PERM_COMMAND_FLUSHARENAPOINTS, false, &HandleFlushArenaPointsCommand, "" },
+ { "freeze", rbac::RBAC_PERM_COMMAND_FREEZE, false, &HandleFreezeCommand, "" },
+ { "gps", rbac::RBAC_PERM_COMMAND_GPS, false, &HandleGPSCommand, "" },
+ { "guid", rbac::RBAC_PERM_COMMAND_GUID, false, &HandleGUIDCommand, "" },
+ { "help", rbac::RBAC_PERM_COMMAND_HELP, true, &HandleHelpCommand, "" },
+ { "hidearea", rbac::RBAC_PERM_COMMAND_HIDEAREA, false, &HandleHideAreaCommand, "" },
+ { "itemmove", rbac::RBAC_PERM_COMMAND_ITEMMOVE, false, &HandleItemMoveCommand, "" },
+ { "kick", rbac::RBAC_PERM_COMMAND_KICK, true, &HandleKickPlayerCommand, "" },
+ { "linkgrave", rbac::RBAC_PERM_COMMAND_LINKGRAVE, false, &HandleLinkGraveCommand, "" },
+ { "listfreeze", rbac::RBAC_PERM_COMMAND_LISTFREEZE, false, &HandleListFreezeCommand, "" },
+ { "maxskill", rbac::RBAC_PERM_COMMAND_MAXSKILL, false, &HandleMaxSkillCommand, "" },
+ { "movegens", rbac::RBAC_PERM_COMMAND_MOVEGENS, false, &HandleMovegensCommand, "" },
+ { "mute", rbac::RBAC_PERM_COMMAND_MUTE, true, &HandleMuteCommand, "" },
+ { "mutehistory", rbac::RBAC_PERM_COMMAND_MUTEHISTORY, true, &HandleMuteInfoCommand, "" },
+ { "neargrave", rbac::RBAC_PERM_COMMAND_NEARGRAVE, false, &HandleNearGraveCommand, "" },
+ { "pinfo", rbac::RBAC_PERM_COMMAND_PINFO, true, &HandlePInfoCommand, "" },
+ { "playall", rbac::RBAC_PERM_COMMAND_PLAYALL, false, &HandlePlayAllCommand, "" },
+ { "possess", rbac::RBAC_PERM_COMMAND_POSSESS, false, &HandlePossessCommand, "" },
+ { "pvpstats", rbac::RBAC_PERM_COMMAND_PVPSTATS, true, &HandlePvPstatsCommand, "" },
+ { "recall", rbac::RBAC_PERM_COMMAND_RECALL, false, &HandleRecallCommand, "" },
+ { "repairitems", rbac::RBAC_PERM_COMMAND_REPAIRITEMS, true, &HandleRepairitemsCommand, "" },
+ { "respawn", rbac::RBAC_PERM_COMMAND_RESPAWN, false, &HandleRespawnCommand, "" },
+ { "revive", rbac::RBAC_PERM_COMMAND_REVIVE, true, &HandleReviveCommand, "" },
+ { "saveall", rbac::RBAC_PERM_COMMAND_SAVEALL, true, &HandleSaveAllCommand, "" },
+ { "save", rbac::RBAC_PERM_COMMAND_SAVE, false, &HandleSaveCommand, "" },
+ { "setskill", rbac::RBAC_PERM_COMMAND_SETSKILL, false, &HandleSetSkillCommand, "" },
+ { "showarea", rbac::RBAC_PERM_COMMAND_SHOWAREA, false, &HandleShowAreaCommand, "" },
+ { "summon", rbac::RBAC_PERM_COMMAND_SUMMON, false, &HandleSummonCommand, "" },
+ { "unaura", rbac::RBAC_PERM_COMMAND_UNAURA, false, &HandleUnAuraCommand, "" },
+ { "unbindsight", rbac::RBAC_PERM_COMMAND_UNBINDSIGHT, false, HandleUnbindSightCommand, "" },
+ { "unfreeze", rbac::RBAC_PERM_COMMAND_UNFREEZE, false, &HandleUnFreezeCommand, "" },
+ { "unmute", rbac::RBAC_PERM_COMMAND_UNMUTE, true, &HandleUnmuteCommand, "" },
+ { "unpossess", rbac::RBAC_PERM_COMMAND_UNPOSSESS, false, &HandleUnPossessCommand, "" },
+ { "unstuck", rbac::RBAC_PERM_COMMAND_UNSTUCK, true, &HandleUnstuckCommand, "" },
+ { "wchange", rbac::RBAC_PERM_COMMAND_WCHANGE, false, &HandleChangeWeather, "" },
+ { "mailbox", rbac::RBAC_PERM_COMMAND_MAILBOX, false, &HandleMailBoxCommand, "" },
};
return commandTable;
}
@@ -600,8 +599,10 @@ public:
target->SaveToDB();
}
else
- // will resurrected at login without corpse
- sObjectAccessor->ConvertCorpseForPlayer(targetGuid);
+ {
+ SQLTransaction trans(nullptr);
+ Player::OfflineResurrect(targetGuid, trans);
+ }
return true;
}
@@ -641,7 +642,7 @@ public:
return false;
}
- handler->PSendSysMessage(LANG_OBJECT_GUID, guid.GetCounter(), guid.GetHigh());
+ handler->PSendSysMessage(LANG_OBJECT_GUID, guid.ToString().c_str());
return true;
}
@@ -820,7 +821,7 @@ public:
// Save all players in the world
static bool HandleSaveAllCommand(ChatHandler* handler, char const* /*args*/)
{
- sObjectAccessor->SaveAllPlayers();
+ ObjectAccessor::SaveAllPlayers();
handler->SendSysMessage(LANG_PLAYERS_SAVED);
return true;
}
@@ -1421,7 +1422,7 @@ public:
PreparedStatement* stmt = NULL;
// To make sure we get a target, we convert our guid to an omniversal...
- ObjectGuid parseGUID(HIGHGUID_PLAYER, uint32(atoul(args)));
+ ObjectGuid parseGUID(HighGuid::Player, uint32(atoul(args)));
// ... and make sure we get a target, somehow.
if (sObjectMgr->GetPlayerNameByGUID(parseGUID, targetName))
@@ -1468,7 +1469,7 @@ public:
// Account data print variables
std::string userName = handler->GetTrinityString(LANG_ERROR);
uint32 accId = 0;
- uint32 lowguid = targetGuid.GetCounter();
+ ObjectGuid::LowType lowguid = targetGuid.GetCounter();
std::string eMail = handler->GetTrinityString(LANG_ERROR);
std::string regMail = handler->GetTrinityString(LANG_ERROR);
uint32 security = 0;
@@ -1657,7 +1658,7 @@ public:
{
Field* fields = result4->Fetch();
xp = fields[0].GetUInt32(); // Used for "current xp" output and "%u XP Left" calculation
- uint32 gguid = fields[1].GetUInt32(); // We check if have a guild for the person, so we might not require to query it at all
+ ObjectGuid::LowType gguid = fields[1].GetUInt32(); // We check if have a guild for the person, so we might not require to query it at all
xptotal = sObjectMgr->GetXPForLevel(level);
if (gguid != 0)
@@ -1772,21 +1773,13 @@ public:
PreparedQueryResult result6 = CharacterDatabase.Query(stmt4);
if (result6)
{
- // Define the variables, so the compiler knows they exist
- uint32 rmailint = 0;
-
- // Fetch the fields - readmail is a SUM(x) and given out as char! Thus...
- // ... while totalmail is a COUNT(x), which is given out as INt64, which we just convert on fetch...
Field* fields = result6->Fetch();
- std::string readmail = fields[0].GetString();
+ uint32 readmail = uint32(fields[0].GetDouble());
uint32 totalmail = uint32(fields[1].GetUInt64());
- // ... we have to convert it from Char to int. We can use totalmail as it is
- rmailint = atoul(readmail.c_str());
-
// Output XXI. LANG_INFO_CHR_MAILS if at least one mail is given
if (totalmail >= 1)
- handler->PSendSysMessage(LANG_PINFO_CHR_MAILS, rmailint, totalmail);
+ handler->PSendSysMessage(LANG_PINFO_CHR_MAILS, readmail, totalmail);
}
return true;
@@ -2018,7 +2011,7 @@ public:
return false;
}
- handler->PSendSysMessage(LANG_MOVEGENS_LIST, (unit->GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), unit->GetGUIDLow());
+ handler->PSendSysMessage(LANG_MOVEGENS_LIST, (unit->GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), unit->GetGUID().GetCounter());
MotionMaster* motionMaster = unit->GetMotionMaster();
float x, y, z;
@@ -2061,9 +2054,9 @@ public:
if (!target)
handler->SendSysMessage(LANG_MOVEGENS_CHASE_NULL);
else if (target->GetTypeId() == TYPEID_PLAYER)
- handler->PSendSysMessage(LANG_MOVEGENS_CHASE_PLAYER, target->GetName().c_str(), target->GetGUIDLow());
+ handler->PSendSysMessage(LANG_MOVEGENS_CHASE_PLAYER, target->GetName().c_str(), target->GetGUID().GetCounter());
else
- handler->PSendSysMessage(LANG_MOVEGENS_CHASE_CREATURE, target->GetName().c_str(), target->GetGUIDLow());
+ handler->PSendSysMessage(LANG_MOVEGENS_CHASE_CREATURE, target->GetName().c_str(), target->GetGUID().GetCounter());
break;
}
case FOLLOW_MOTION_TYPE:
@@ -2077,9 +2070,9 @@ public:
if (!target)
handler->SendSysMessage(LANG_MOVEGENS_FOLLOW_NULL);
else if (target->GetTypeId() == TYPEID_PLAYER)
- handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_PLAYER, target->GetName().c_str(), target->GetGUIDLow());
+ handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_PLAYER, target->GetName().c_str(), target->GetGUID().GetCounter());
else
- handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_CREATURE, target->GetName().c_str(), target->GetGUIDLow());
+ handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_CREATURE, target->GetName().c_str(), target->GetGUID().GetCounter());
break;
}
case HOME_MOTION_TYPE:
@@ -2485,7 +2478,7 @@ public:
// If player found: delete his freeze aura
Field* fields = result->Fetch();
- uint32 lowGuid = fields[0].GetUInt32();
+ ObjectGuid::LowType lowGuid = fields[0].GetUInt32();
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_AURA_FROZEN);
stmt->setUInt32(0, lowGuid);
diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp
index e06159a6748..479c34dd90c 100644
--- a/src/server/scripts/Commands/cs_mmaps.cpp
+++ b/src/server/scripts/Commands/cs_mmaps.cpp
@@ -42,22 +42,20 @@ class mmaps_commandscript : public CommandScript
public:
mmaps_commandscript() : CommandScript("mmaps_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand mmapCommandTable[] =
+ static std::vector<ChatCommand> mmapCommandTable =
{
- { "loadedtiles", rbac::RBAC_PERM_COMMAND_MMAP_LOADEDTILES, false, &HandleMmapLoadedTilesCommand, "", NULL },
- { "loc", rbac::RBAC_PERM_COMMAND_MMAP_LOC, false, &HandleMmapLocCommand, "", NULL },
- { "path", rbac::RBAC_PERM_COMMAND_MMAP_PATH, false, &HandleMmapPathCommand, "", NULL },
- { "stats", rbac::RBAC_PERM_COMMAND_MMAP_STATS, false, &HandleMmapStatsCommand, "", NULL },
- { "testarea", rbac::RBAC_PERM_COMMAND_MMAP_TESTAREA, false, &HandleMmapTestArea, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "loadedtiles", rbac::RBAC_PERM_COMMAND_MMAP_LOADEDTILES, false, &HandleMmapLoadedTilesCommand, "" },
+ { "loc", rbac::RBAC_PERM_COMMAND_MMAP_LOC, false, &HandleMmapLocCommand, "" },
+ { "path", rbac::RBAC_PERM_COMMAND_MMAP_PATH, false, &HandleMmapPathCommand, "" },
+ { "stats", rbac::RBAC_PERM_COMMAND_MMAP_STATS, false, &HandleMmapStatsCommand, "" },
+ { "testarea", rbac::RBAC_PERM_COMMAND_MMAP_TESTAREA, false, &HandleMmapTestArea, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
- { "mmap", rbac::RBAC_PERM_COMMAND_MMAP, true, NULL, "", mmapCommandTable },
- { NULL, 0, false, NULL, "", NULL }
+ { "mmap", rbac::RBAC_PERM_COMMAND_MMAP, true, NULL, "", mmapCommandTable },
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp
index 9fd0260ed2e..a3eed4dfd5d 100644
--- a/src/server/scripts/Commands/cs_modify.cpp
+++ b/src/server/scripts/Commands/cs_modify.cpp
@@ -36,49 +36,46 @@ class modify_commandscript : public CommandScript
public:
modify_commandscript() : CommandScript("modify_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand modifyspeedCommandTable[] =
+ static std::vector<ChatCommand> modifyspeedCommandTable =
{
- { "all", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_ALL, false, &HandleModifyASpeedCommand, "", NULL },
- { "backwalk", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_BACKWALK, false, &HandleModifyBWalkCommand, "", NULL },
- { "fly", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_FLY, false, &HandleModifyFlyCommand, "", NULL },
- { "walk", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_WALK, false, &HandleModifySpeedCommand, "", NULL },
- { "swim", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_SWIM, false, &HandleModifySwimCommand, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED, false, &HandleModifyASpeedCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "all", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_ALL, false, &HandleModifyASpeedCommand, "" },
+ { "backwalk", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_BACKWALK, false, &HandleModifyBWalkCommand, "" },
+ { "fly", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_FLY, false, &HandleModifyFlyCommand, "" },
+ { "walk", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_WALK, false, &HandleModifySpeedCommand, "" },
+ { "swim", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_SWIM, false, &HandleModifySwimCommand, "" },
+ { "", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED, false, &HandleModifyASpeedCommand, "" },
};
- static ChatCommand modifyCommandTable[] =
+ static std::vector<ChatCommand> modifyCommandTable =
{
- { "arenapoints", rbac::RBAC_PERM_COMMAND_MODIFY_ARENAPOINTS, false, &HandleModifyArenaCommand, "", NULL },
- { "bit", rbac::RBAC_PERM_COMMAND_MODIFY_BIT, false, &HandleModifyBitCommand, "", NULL },
- { "drunk", rbac::RBAC_PERM_COMMAND_MODIFY_DRUNK, false, &HandleModifyDrunkCommand, "", NULL },
- { "energy", rbac::RBAC_PERM_COMMAND_MODIFY_ENERGY, false, &HandleModifyEnergyCommand, "", NULL },
- { "faction", rbac::RBAC_PERM_COMMAND_MODIFY_FACTION, false, &HandleModifyFactionCommand, "", NULL },
- { "gender", rbac::RBAC_PERM_COMMAND_MODIFY_GENDER, false, &HandleModifyGenderCommand, "", NULL },
- { "honor", rbac::RBAC_PERM_COMMAND_MODIFY_HONOR, false, &HandleModifyHonorCommand, "", NULL },
- { "hp", rbac::RBAC_PERM_COMMAND_MODIFY_HP, false, &HandleModifyHPCommand, "", NULL },
- { "mana", rbac::RBAC_PERM_COMMAND_MODIFY_MANA, false, &HandleModifyManaCommand, "", NULL },
- { "money", rbac::RBAC_PERM_COMMAND_MODIFY_MONEY, false, &HandleModifyMoneyCommand, "", NULL },
- { "mount", rbac::RBAC_PERM_COMMAND_MODIFY_MOUNT, false, &HandleModifyMountCommand, "", NULL },
- { "phase", rbac::RBAC_PERM_COMMAND_MODIFY_PHASE, false, &HandleModifyPhaseCommand, "", NULL },
- { "rage", rbac::RBAC_PERM_COMMAND_MODIFY_RAGE, false, &HandleModifyRageCommand, "", NULL },
- { "reputation", rbac::RBAC_PERM_COMMAND_MODIFY_REPUTATION, false, &HandleModifyRepCommand, "", NULL },
- { "runicpower", rbac::RBAC_PERM_COMMAND_MODIFY_RUNICPOWER, false, &HandleModifyRunicPowerCommand, "", NULL },
- { "scale", rbac::RBAC_PERM_COMMAND_MODIFY_SCALE, false, &HandleModifyScaleCommand, "", NULL },
+ { "arenapoints", rbac::RBAC_PERM_COMMAND_MODIFY_ARENAPOINTS, false, &HandleModifyArenaCommand, "" },
+ { "bit", rbac::RBAC_PERM_COMMAND_MODIFY_BIT, false, &HandleModifyBitCommand, "" },
+ { "drunk", rbac::RBAC_PERM_COMMAND_MODIFY_DRUNK, false, &HandleModifyDrunkCommand, "" },
+ { "energy", rbac::RBAC_PERM_COMMAND_MODIFY_ENERGY, false, &HandleModifyEnergyCommand, "" },
+ { "faction", rbac::RBAC_PERM_COMMAND_MODIFY_FACTION, false, &HandleModifyFactionCommand, "" },
+ { "gender", rbac::RBAC_PERM_COMMAND_MODIFY_GENDER, false, &HandleModifyGenderCommand, "" },
+ { "honor", rbac::RBAC_PERM_COMMAND_MODIFY_HONOR, false, &HandleModifyHonorCommand, "" },
+ { "hp", rbac::RBAC_PERM_COMMAND_MODIFY_HP, false, &HandleModifyHPCommand, "" },
+ { "mana", rbac::RBAC_PERM_COMMAND_MODIFY_MANA, false, &HandleModifyManaCommand, "" },
+ { "money", rbac::RBAC_PERM_COMMAND_MODIFY_MONEY, false, &HandleModifyMoneyCommand, "" },
+ { "mount", rbac::RBAC_PERM_COMMAND_MODIFY_MOUNT, false, &HandleModifyMountCommand, "" },
+ { "phase", rbac::RBAC_PERM_COMMAND_MODIFY_PHASE, false, &HandleModifyPhaseCommand, "" },
+ { "rage", rbac::RBAC_PERM_COMMAND_MODIFY_RAGE, false, &HandleModifyRageCommand, "" },
+ { "reputation", rbac::RBAC_PERM_COMMAND_MODIFY_REPUTATION, false, &HandleModifyRepCommand, "" },
+ { "runicpower", rbac::RBAC_PERM_COMMAND_MODIFY_RUNICPOWER, false, &HandleModifyRunicPowerCommand, "" },
+ { "scale", rbac::RBAC_PERM_COMMAND_MODIFY_SCALE, false, &HandleModifyScaleCommand, "" },
{ "speed", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED, false, NULL, "", modifyspeedCommandTable },
- { "spell", rbac::RBAC_PERM_COMMAND_MODIFY_SPELL, false, &HandleModifySpellCommand, "", NULL },
- { "standstate", rbac::RBAC_PERM_COMMAND_MODIFY_STANDSTATE, false, &HandleModifyStandStateCommand, "", NULL },
- { "talentpoints", rbac::RBAC_PERM_COMMAND_MODIFY_TALENTPOINTS, false, &HandleModifyTalentCommand, "", NULL },
- { "xp", rbac::RBAC_PERM_COMMAND_MODIFY_XP, false, &HandleModifyXPCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "spell", rbac::RBAC_PERM_COMMAND_MODIFY_SPELL, false, &HandleModifySpellCommand, "" },
+ { "standstate", rbac::RBAC_PERM_COMMAND_MODIFY_STANDSTATE, false, &HandleModifyStandStateCommand, "" },
+ { "talentpoints", rbac::RBAC_PERM_COMMAND_MODIFY_TALENTPOINTS, false, &HandleModifyTalentCommand, "" },
+ { "xp", rbac::RBAC_PERM_COMMAND_MODIFY_XP, false, &HandleModifyXPCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
- { "morph", rbac::RBAC_PERM_COMMAND_MORPH, false, &HandleModifyMorphCommand, "", NULL },
- { "demorph", rbac::RBAC_PERM_COMMAND_DEMORPH, false, &HandleDeMorphCommand, "", NULL },
+ { "morph", rbac::RBAC_PERM_COMMAND_MORPH, false, &HandleModifyMorphCommand, "" },
+ { "demorph", rbac::RBAC_PERM_COMMAND_DEMORPH, false, &HandleDeMorphCommand, "" },
{ "modify", rbac::RBAC_PERM_COMMAND_MODIFY, false, NULL, "", modifyCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -292,7 +289,7 @@ public:
uint32 flag = target->GetUInt32Value(UNIT_FIELD_FLAGS);
uint32 npcflag = target->GetUInt32Value(UNIT_NPC_FLAGS);
uint32 dyflag = target->GetUInt32Value(UNIT_DYNAMIC_FLAGS);
- handler->PSendSysMessage(LANG_CURRENT_FACTION, target->GetGUIDLow(), factionid, flag, npcflag, dyflag);
+ handler->PSendSysMessage(LANG_CURRENT_FACTION, target->GetGUID().GetCounter(), factionid, flag, npcflag, dyflag);
return true;
}
@@ -328,7 +325,7 @@ public:
return false;
}
- handler->PSendSysMessage(LANG_YOU_CHANGE_FACTION, target->GetGUIDLow(), factionid, flag, npcflag, dyflag);
+ handler->PSendSysMessage(LANG_YOU_CHANGE_FACTION, target->GetGUID().GetCounter(), factionid, flag, npcflag, dyflag);
target->setFaction(factionid);
target->SetUInt32Value(UNIT_FIELD_FLAGS, flag);
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index 09a41fd82b5..99c10b074a0 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -170,69 +170,61 @@ class npc_commandscript : public CommandScript
public:
npc_commandscript() : CommandScript("npc_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand npcAddCommandTable[] =
- {
- { "formation", rbac::RBAC_PERM_COMMAND_NPC_ADD_FORMATION, false, &HandleNpcAddFormationCommand, "", NULL },
- { "item", rbac::RBAC_PERM_COMMAND_NPC_ADD_ITEM, false, &HandleNpcAddVendorItemCommand, "", NULL },
- { "move", rbac::RBAC_PERM_COMMAND_NPC_ADD_MOVE, false, &HandleNpcAddMoveCommand, "", NULL },
- { "temp", rbac::RBAC_PERM_COMMAND_NPC_ADD_TEMP, false, &HandleNpcAddTempSpawnCommand, "", NULL },
- //{ "weapon", rbac::RBAC_PERM_COMMAND_NPC_ADD_WEAPON, false, &HandleNpcAddWeaponCommand, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_NPC_ADD, false, &HandleNpcAddCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ static std::vector<ChatCommand> npcAddCommandTable =
+ {
+ { "formation", rbac::RBAC_PERM_COMMAND_NPC_ADD_FORMATION, false, &HandleNpcAddFormationCommand, "" },
+ { "item", rbac::RBAC_PERM_COMMAND_NPC_ADD_ITEM, false, &HandleNpcAddVendorItemCommand, "" },
+ { "move", rbac::RBAC_PERM_COMMAND_NPC_ADD_MOVE, false, &HandleNpcAddMoveCommand, "" },
+ { "temp", rbac::RBAC_PERM_COMMAND_NPC_ADD_TEMP, false, &HandleNpcAddTempSpawnCommand, "" },
+ //{ "weapon", rbac::RBAC_PERM_COMMAND_NPC_ADD_WEAPON, false, &HandleNpcAddWeaponCommand, "" },
+ { "", rbac::RBAC_PERM_COMMAND_NPC_ADD, false, &HandleNpcAddCommand, "" },
};
- static ChatCommand npcDeleteCommandTable[] =
+ static std::vector<ChatCommand> npcDeleteCommandTable =
{
- { "item", rbac::RBAC_PERM_COMMAND_NPC_DELETE_ITEM, false, &HandleNpcDeleteVendorItemCommand, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_NPC_DELETE, false, &HandleNpcDeleteCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "item", rbac::RBAC_PERM_COMMAND_NPC_DELETE_ITEM, false, &HandleNpcDeleteVendorItemCommand, "" },
+ { "", rbac::RBAC_PERM_COMMAND_NPC_DELETE, false, &HandleNpcDeleteCommand, "" },
};
- static ChatCommand npcFollowCommandTable[] =
+ static std::vector<ChatCommand> npcFollowCommandTable =
{
- { "stop", rbac::RBAC_PERM_COMMAND_NPC_FOLLOW_STOP, false, &HandleNpcUnFollowCommand, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_NPC_FOLLOW, false, &HandleNpcFollowCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "stop", rbac::RBAC_PERM_COMMAND_NPC_FOLLOW_STOP, false, &HandleNpcUnFollowCommand, "" },
+ { "", rbac::RBAC_PERM_COMMAND_NPC_FOLLOW, false, &HandleNpcFollowCommand, "" },
};
- static ChatCommand npcSetCommandTable[] =
- {
- { "allowmove", rbac::RBAC_PERM_COMMAND_NPC_SET_ALLOWMOVE, false, &HandleNpcSetAllowMovementCommand, "", NULL },
- { "entry", rbac::RBAC_PERM_COMMAND_NPC_SET_ENTRY, false, &HandleNpcSetEntryCommand, "", NULL },
- { "factionid", rbac::RBAC_PERM_COMMAND_NPC_SET_FACTIONID, false, &HandleNpcSetFactionIdCommand, "", NULL },
- { "flag", rbac::RBAC_PERM_COMMAND_NPC_SET_FLAG, false, &HandleNpcSetFlagCommand, "", NULL },
- { "level", rbac::RBAC_PERM_COMMAND_NPC_SET_LEVEL, false, &HandleNpcSetLevelCommand, "", NULL },
- { "link", rbac::RBAC_PERM_COMMAND_NPC_SET_LINK, false, &HandleNpcSetLinkCommand, "", NULL },
- { "model", rbac::RBAC_PERM_COMMAND_NPC_SET_MODEL, false, &HandleNpcSetModelCommand, "", NULL },
- { "movetype", rbac::RBAC_PERM_COMMAND_NPC_SET_MOVETYPE, false, &HandleNpcSetMoveTypeCommand, "", NULL },
- { "phase", rbac::RBAC_PERM_COMMAND_NPC_SET_PHASE, false, &HandleNpcSetPhaseCommand, "", NULL },
- { "spawndist", rbac::RBAC_PERM_COMMAND_NPC_SET_SPAWNDIST, false, &HandleNpcSetSpawnDistCommand, "", NULL },
- { "spawntime", rbac::RBAC_PERM_COMMAND_NPC_SET_SPAWNTIME, false, &HandleNpcSetSpawnTimeCommand, "", NULL },
- { "data", rbac::RBAC_PERM_COMMAND_NPC_SET_DATA, false, &HandleNpcSetDataCommand, "", NULL },
- //{ "name", rbac::RBAC_PERM_COMMAND_NPC_SET_NAME, false, &HandleNpcSetNameCommand, "", NULL },
- //{ "subname", rbac::RBAC_PERM_COMMAND_NPC_SET_SUBNAME, false, &HandleNpcSetSubNameCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ static std::vector<ChatCommand> npcSetCommandTable =
+ {
+ { "allowmove", rbac::RBAC_PERM_COMMAND_NPC_SET_ALLOWMOVE, false, &HandleNpcSetAllowMovementCommand, "" },
+ { "entry", rbac::RBAC_PERM_COMMAND_NPC_SET_ENTRY, false, &HandleNpcSetEntryCommand, "" },
+ { "factionid", rbac::RBAC_PERM_COMMAND_NPC_SET_FACTIONID, false, &HandleNpcSetFactionIdCommand, "" },
+ { "flag", rbac::RBAC_PERM_COMMAND_NPC_SET_FLAG, false, &HandleNpcSetFlagCommand, "" },
+ { "level", rbac::RBAC_PERM_COMMAND_NPC_SET_LEVEL, false, &HandleNpcSetLevelCommand, "" },
+ { "link", rbac::RBAC_PERM_COMMAND_NPC_SET_LINK, false, &HandleNpcSetLinkCommand, "" },
+ { "model", rbac::RBAC_PERM_COMMAND_NPC_SET_MODEL, false, &HandleNpcSetModelCommand, "" },
+ { "movetype", rbac::RBAC_PERM_COMMAND_NPC_SET_MOVETYPE, false, &HandleNpcSetMoveTypeCommand, "" },
+ { "phase", rbac::RBAC_PERM_COMMAND_NPC_SET_PHASE, false, &HandleNpcSetPhaseCommand, "" },
+ { "spawndist", rbac::RBAC_PERM_COMMAND_NPC_SET_SPAWNDIST, false, &HandleNpcSetSpawnDistCommand, "" },
+ { "spawntime", rbac::RBAC_PERM_COMMAND_NPC_SET_SPAWNTIME, false, &HandleNpcSetSpawnTimeCommand, "" },
+ { "data", rbac::RBAC_PERM_COMMAND_NPC_SET_DATA, false, &HandleNpcSetDataCommand, "" },
};
- static ChatCommand npcCommandTable[] =
- {
- { "info", rbac::RBAC_PERM_COMMAND_NPC_INFO, false, &HandleNpcInfoCommand, "", NULL },
- { "near", rbac::RBAC_PERM_COMMAND_NPC_NEAR, false, &HandleNpcNearCommand, "", NULL },
- { "move", rbac::RBAC_PERM_COMMAND_NPC_MOVE, false, &HandleNpcMoveCommand, "", NULL },
- { "playemote", rbac::RBAC_PERM_COMMAND_NPC_PLAYEMOTE, false, &HandleNpcPlayEmoteCommand, "", NULL },
- { "say", rbac::RBAC_PERM_COMMAND_NPC_SAY, false, &HandleNpcSayCommand, "", NULL },
- { "textemote", rbac::RBAC_PERM_COMMAND_NPC_TEXTEMOTE, false, &HandleNpcTextEmoteCommand, "", NULL },
- { "whisper", rbac::RBAC_PERM_COMMAND_NPC_WHISPER, false, &HandleNpcWhisperCommand, "", NULL },
- { "yell", rbac::RBAC_PERM_COMMAND_NPC_YELL, false, &HandleNpcYellCommand, "", NULL },
- { "tame", rbac::RBAC_PERM_COMMAND_NPC_TAME, false, &HandleNpcTameCommand, "", NULL },
+ static std::vector<ChatCommand> npcCommandTable =
+ {
+ { "info", rbac::RBAC_PERM_COMMAND_NPC_INFO, false, &HandleNpcInfoCommand, "" },
+ { "near", rbac::RBAC_PERM_COMMAND_NPC_NEAR, false, &HandleNpcNearCommand, "" },
+ { "move", rbac::RBAC_PERM_COMMAND_NPC_MOVE, false, &HandleNpcMoveCommand, "" },
+ { "playemote", rbac::RBAC_PERM_COMMAND_NPC_PLAYEMOTE, false, &HandleNpcPlayEmoteCommand, "" },
+ { "say", rbac::RBAC_PERM_COMMAND_NPC_SAY, false, &HandleNpcSayCommand, "" },
+ { "textemote", rbac::RBAC_PERM_COMMAND_NPC_TEXTEMOTE, false, &HandleNpcTextEmoteCommand, "" },
+ { "whisper", rbac::RBAC_PERM_COMMAND_NPC_WHISPER, false, &HandleNpcWhisperCommand, "" },
+ { "yell", rbac::RBAC_PERM_COMMAND_NPC_YELL, false, &HandleNpcYellCommand, "" },
+ { "tame", rbac::RBAC_PERM_COMMAND_NPC_TAME, false, &HandleNpcTameCommand, "" },
{ "add", rbac::RBAC_PERM_COMMAND_NPC_ADD, false, NULL, "", npcAddCommandTable },
{ "delete", rbac::RBAC_PERM_COMMAND_NPC_DELETE, false, NULL, "", npcDeleteCommandTable },
{ "follow", rbac::RBAC_PERM_COMMAND_NPC_FOLLOW, false, NULL, "", npcFollowCommandTable },
{ "set", rbac::RBAC_PERM_COMMAND_NPC_SET, false, NULL, "", npcSetCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "npc", rbac::RBAC_PERM_COMMAND_NPC, false, NULL, "", npcCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -260,7 +252,7 @@ public:
if (Transport* trans = chr->GetTransport())
{
- uint32 guid = sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT);
+ ObjectGuid::LowType guid = map->GenerateLowGuid<HighGuid::Unit>();
CreatureData& data = sObjectMgr->NewOrExistCreatureData(guid);
data.id = id;
data.phaseMask = chr->GetPhaseMaskForSpawn();
@@ -278,7 +270,7 @@ public:
}
Creature* creature = new Creature();
- if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o))
+ if (!creature->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o))
{
delete creature;
return false;
@@ -286,7 +278,7 @@ public:
creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
- uint32 db_guid = creature->GetDBTableGUIDLow();
+ ObjectGuid::LowType db_guid = creature->GetSpawnId();
// To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells()
// current "creature" variable is deleted and created fresh new, otherwise old values might trigger asserts or cause undefined behavior
@@ -368,7 +360,7 @@ public:
char* guidStr = strtok((char*)args, " ");
char* waitStr = strtok((char*)NULL, " ");
- uint32 lowGuid = atoi((char*)guidStr);
+ ObjectGuid::LowType lowGuid = atoi((char*)guidStr);
// attempt check creature existence by DB data
CreatureData const* data = sObjectMgr->GetCreatureData(lowGuid);
@@ -489,12 +481,12 @@ public:
if (!cId)
return false;
- uint32 lowguid = atoi(cId);
+ ObjectGuid::LowType lowguid = atoi(cId);
if (!lowguid)
return false;
if (CreatureData const* cr_data = sObjectMgr->GetCreatureData(lowguid))
- unit = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HIGHGUID_UNIT, cr_data->id, lowguid));
+ unit = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HighGuid::Unit, cr_data->id, lowguid));
}
else
unit = handler->getSelectedCreature();
@@ -705,7 +697,7 @@ public:
std::string curRespawnDelayStr = secsToTimeString(uint64(curRespawnDelay), true);
std::string defRespawnDelayStr = secsToTimeString(target->GetRespawnDelay(), true);
- handler->PSendSysMessage(LANG_NPCINFO_CHAR, target->GetDBTableGUIDLow(), target->GetGUIDLow(), faction, npcflags, Entry, displayid, nativeid);
+ handler->PSendSysMessage(LANG_NPCINFO_CHAR, target->GetSpawnId(), target->GetGUID().GetCounter(), faction, npcflags, Entry, displayid, nativeid);
handler->PSendSysMessage(LANG_NPCINFO_LEVEL, target->getLevel());
handler->PSendSysMessage(LANG_NPCINFO_EQUIPMENT, target->GetCurrentEquipmentId(), target->GetOriginalEquipmentId());
handler->PSendSysMessage(LANG_NPCINFO_HEALTH, target->GetCreateHealth(), target->GetMaxHealth(), target->GetHealth());
@@ -764,7 +756,7 @@ public:
do
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
uint32 entry = fields[1].GetUInt32();
float x = fields[2].GetFloat();
float y = fields[3].GetFloat();
@@ -790,7 +782,7 @@ public:
//move selected creature
static bool HandleNpcMoveCommand(ChatHandler* handler, char const* args)
{
- uint32 lowguid = 0;
+ ObjectGuid::LowType lowguid = 0;
Creature* creature = handler->getSelectedCreature();
@@ -823,7 +815,7 @@ public:
}
else
{
- lowguid = creature->GetDBTableGUIDLow();
+ lowguid = creature->GetSpawnId();
}
float x = handler->GetSession()->GetPlayer()->GetPositionX();
@@ -833,7 +825,7 @@ public:
if (creature)
{
- if (CreatureData const* data = sObjectMgr->GetCreatureData(creature->GetDBTableGUIDLow()))
+ if (CreatureData const* data = sObjectMgr->GetCreatureData(creature->GetSpawnId()))
{
const_cast<CreatureData*>(data)->posX = x;
const_cast<CreatureData*>(data)->posY = y;
@@ -939,7 +931,7 @@ public:
if (!guid_str)
return false;
- uint32 lowguid = 0;
+ ObjectGuid::LowType lowguid = 0;
Creature* creature = NULL;
if (dontdel_str)
@@ -977,7 +969,7 @@ public:
creature = handler->getSelectedCreature();
if (!creature || creature->IsPet())
return false;
- lowguid = creature->GetDBTableGUIDLow();
+ lowguid = creature->GetSpawnId();
}
else // case .setmovetype #creature_guid $move_type (with selected creature)
{
@@ -985,7 +977,7 @@ public:
/* impossible without entry
if (lowguid)
- creature = ObjectAccessor::GetCreature(*handler->GetSession()->GetPlayer(), MAKE_GUID(lowguid, HIGHGUID_UNIT));
+ creature = ObjectAccessor::GetCreature(*handler->GetSession()->GetPlayer(), MAKE_GUID(lowguid, HighGuid::Unit));
*/
// attempt check creature existence by DB data
@@ -1001,7 +993,7 @@ public:
}
else
{
- lowguid = creature->GetDBTableGUIDLow();
+ lowguid = creature->GetSpawnId();
}
}
@@ -1101,10 +1093,10 @@ public:
mtype = RANDOM_MOTION_TYPE;
Creature* creature = handler->getSelectedCreature();
- uint32 guidLow = 0;
+ ObjectGuid::LowType guidLow = 0;
if (creature)
- guidLow = creature->GetDBTableGUIDLow();
+ guidLow = creature->GetSpawnId();
else
return false;
@@ -1150,10 +1142,10 @@ public:
}
Creature* creature = handler->getSelectedCreature();
- uint32 guidLow = 0;
+ ObjectGuid::LowType guidLow = 0;
if (creature)
- guidLow = creature->GetDBTableGUIDLow();
+ guidLow = creature->GetSpawnId();
else
return false;
@@ -1282,7 +1274,7 @@ public:
return false;
}
- ObjectGuid receiver_guid(HIGHGUID_PLAYER, uint32(atoul(receiver_str)));
+ ObjectGuid receiver_guid(HighGuid::Player, uint32(atoul(receiver_str)));
// check online security
Player* receiver = ObjectAccessor::FindPlayer(receiver_guid);
@@ -1414,17 +1406,17 @@ public:
if (!*args)
return false;
- uint32 leaderGUID = (uint32) atoi((char*)args);
+ ObjectGuid::LowType leaderGUID = (uint32) atoi((char*)args);
Creature* creature = handler->getSelectedCreature();
- if (!creature || !creature->GetDBTableGUIDLow())
+ if (!creature || !creature->GetSpawnId())
{
handler->SendSysMessage(LANG_SELECT_CREATURE);
handler->SetSentErrorMessage(true);
return false;
}
- uint32 lowguid = creature->GetDBTableGUIDLow();
+ ObjectGuid::LowType lowguid = creature->GetSpawnId();
if (creature->GetFormation())
{
handler->PSendSysMessage("Selected creature is already member of group %u", creature->GetFormation()->GetId());
@@ -1466,7 +1458,7 @@ public:
if (!*args)
return false;
- uint32 linkguid = (uint32) atoi((char*)args);
+ ObjectGuid::LowType linkguid = (uint32) atoi((char*)args);
Creature* creature = handler->getSelectedCreature();
@@ -1477,21 +1469,21 @@ public:
return false;
}
- if (!creature->GetDBTableGUIDLow())
+ if (!creature->GetSpawnId())
{
- handler->PSendSysMessage("Selected creature %u isn't in creature table", creature->GetGUIDLow());
+ handler->PSendSysMessage("Selected creature %u isn't in creature table", creature->GetGUID().GetCounter());
handler->SetSentErrorMessage(true);
return false;
}
- if (!sObjectMgr->SetCreatureLinkedRespawn(creature->GetDBTableGUIDLow(), linkguid))
+ if (!sObjectMgr->SetCreatureLinkedRespawn(creature->GetSpawnId(), linkguid))
{
handler->PSendSysMessage("Selected creature can't link with guid '%u'", linkguid);
handler->SetSentErrorMessage(true);
return false;
}
- handler->PSendSysMessage("LinkGUID '%u' added to creature with DBTableGUID: '%u'", linkguid, creature->GetDBTableGUIDLow());
+ handler->PSendSysMessage("LinkGUID '%u' added to creature with DBTableGUID: '%u'", linkguid, creature->GetSpawnId());
return true;
}
@@ -1563,98 +1555,6 @@ public:
*/
return true;
}
-
- static bool HandleNpcSetNameCommand(ChatHandler* /*handler*/, char const* /*args*/)
- {
- /* Temp. disabled
- if (!*args)
- return false;
-
- if (strlen((char*)args)>75)
- {
- handler->PSendSysMessage(LANG_TOO_LONG_NAME, strlen((char*)args)-75);
- return true;
- }
-
- for (uint8 i = 0; i < strlen(args); ++i)
- {
- if (!isalpha(args[i]) && args[i] != ' ')
- {
- handler->SendSysMessage(LANG_CHARS_ONLY);
- return false;
- }
- }
-
- uint64 guid;
- guid = handler->GetSession()->GetPlayer()->GetSelection();
- if (guid == 0)
- {
- handler->SendSysMessage(LANG_NO_SELECTION);
- return true;
- }
-
- Creature* creature = ObjectAccessor::GetCreature(*handler->GetSession()->GetPlayer(), guid);
-
- if (!creature)
- {
- handler->SendSysMessage(LANG_SELECT_CREATURE);
- return true;
- }
-
- creature->SetName(args);
- uint32 idname = sObjectMgr->AddCreatureTemplate(creature->GetName());
- creature->SetUInt32Value(OBJECT_FIELD_ENTRY, idname);
-
- creature->SaveToDB();
- */
-
- return true;
- }
-
- static bool HandleNpcSetSubNameCommand(ChatHandler* /*handler*/, char const* /*args*/)
- {
- /* Temp. disabled
-
- if (!*args)
- args = "";
-
- if (strlen((char*)args)>75)
- {
- handler->PSendSysMessage(LANG_TOO_LONG_SUBNAME, strlen((char*)args)-75);
- return true;
- }
-
- for (uint8 i = 0; i < strlen(args); i++)
- {
- if (!isalpha(args[i]) && args[i] != ' ')
- {
- handler->SendSysMessage(LANG_CHARS_ONLY);
- return false;
- }
- }
- uint64 guid;
- guid = handler->GetSession()->GetPlayer()->GetSelection();
- if (guid == 0)
- {
- handler->SendSysMessage(LANG_NO_SELECTION);
- return true;
- }
-
- Creature* creature = ObjectAccessor::GetCreature(*handler->GetSession()->GetPlayer(), guid);
-
- if (!creature)
- {
- handler->SendSysMessage(LANG_SELECT_CREATURE);
- return true;
- }
-
- uint32 idname = sObjectMgr->AddCreatureSubName(creature->GetName(), args, creature->GetUInt32Value(UNIT_FIELD_DISPLAYID));
- creature->SetUInt32Value(OBJECT_FIELD_ENTRY, idname);
-
- creature->SaveToDB();
- */
- return true;
- }
};
void AddSC_npc_commandscript()
diff --git a/src/server/scripts/Commands/cs_pet.cpp b/src/server/scripts/Commands/cs_pet.cpp
index fdac9d1a35f..e3046817821 100644
--- a/src/server/scripts/Commands/cs_pet.cpp
+++ b/src/server/scripts/Commands/cs_pet.cpp
@@ -27,20 +27,18 @@ class pet_commandscript : public CommandScript
public:
pet_commandscript() : CommandScript("pet_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand petCommandTable[] =
+ static std::vector<ChatCommand> petCommandTable =
{
- { "create", rbac::RBAC_PERM_COMMAND_PET_CREATE, false, &HandlePetCreateCommand, "", NULL },
- { "learn", rbac::RBAC_PERM_COMMAND_PET_LEARN, false, &HandlePetLearnCommand, "", NULL },
- { "unlearn", rbac::RBAC_PERM_COMMAND_PET_UNLEARN, false, &HandlePetUnlearnCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "create", rbac::RBAC_PERM_COMMAND_PET_CREATE, false, &HandlePetCreateCommand, "" },
+ { "learn", rbac::RBAC_PERM_COMMAND_PET_LEARN, false, &HandlePetLearnCommand, "" },
+ { "unlearn", rbac::RBAC_PERM_COMMAND_PET_UNLEARN, false, &HandlePetUnlearnCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "pet", rbac::RBAC_PERM_COMMAND_PET, false, NULL, "", petCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp
index 9ad12bd0943..442950bca96 100644
--- a/src/server/scripts/Commands/cs_quest.cpp
+++ b/src/server/scripts/Commands/cs_quest.cpp
@@ -33,20 +33,18 @@ class quest_commandscript : public CommandScript
public:
quest_commandscript() : CommandScript("quest_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand questCommandTable[] =
+ static std::vector<ChatCommand> questCommandTable =
{
- { "add", rbac::RBAC_PERM_COMMAND_QUEST_ADD, false, &HandleQuestAdd, "", NULL },
- { "complete", rbac::RBAC_PERM_COMMAND_QUEST_COMPLETE, false, &HandleQuestComplete, "", NULL },
- { "remove", rbac::RBAC_PERM_COMMAND_QUEST_REMOVE, false, &HandleQuestRemove, "", NULL },
- { "reward", rbac::RBAC_PERM_COMMAND_QUEST_REWARD, false, &HandleQuestReward, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "add", rbac::RBAC_PERM_COMMAND_QUEST_ADD, false, &HandleQuestAdd, "" },
+ { "complete", rbac::RBAC_PERM_COMMAND_QUEST_COMPLETE, false, &HandleQuestComplete, "" },
+ { "remove", rbac::RBAC_PERM_COMMAND_QUEST_REMOVE, false, &HandleQuestRemove, "" },
+ { "reward", rbac::RBAC_PERM_COMMAND_QUEST_REWARD, false, &HandleQuestReward, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "quest", rbac::RBAC_PERM_COMMAND_QUEST, false, NULL, "", questCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -243,7 +241,7 @@ public:
// prepare Quest Tracker datas
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_QUEST_TRACK_GM_COMPLETE);
stmt->setUInt32(0, quest->GetQuestId());
- stmt->setUInt32(1, player->GetGUIDLow());
+ stmt->setUInt32(1, player->GetGUID().GetCounter());
// add to Quest Tracker
CharacterDatabase.Execute(stmt);
diff --git a/src/server/scripts/Commands/cs_rbac.cpp b/src/server/scripts/Commands/cs_rbac.cpp
index 03f35e6ba65..c28aa04175f 100644
--- a/src/server/scripts/Commands/cs_rbac.cpp
+++ b/src/server/scripts/Commands/cs_rbac.cpp
@@ -49,28 +49,25 @@ class rbac_commandscript : public CommandScript
public:
rbac_commandscript() : CommandScript("rbac_commandscript") { }
- ChatCommand* GetCommands() const
+ std::vector<ChatCommand> GetCommands() const
{
- static ChatCommand rbacAccountCommandTable[] =
+ static std::vector<ChatCommand> rbacAccountCommandTable =
{
- { "list", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_LIST, true, &HandleRBACPermListCommand, "", NULL },
- { "grant", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_GRANT, true, &HandleRBACPermGrantCommand, "", NULL },
- { "deny", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_DENY, true, &HandleRBACPermDenyCommand, "", NULL },
- { "revoke", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_REVOKE, true, &HandleRBACPermRevokeCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "list", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_LIST, true, &HandleRBACPermListCommand, "" },
+ { "grant", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_GRANT, true, &HandleRBACPermGrantCommand, "" },
+ { "deny", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_DENY, true, &HandleRBACPermDenyCommand, "" },
+ { "revoke", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_REVOKE, true, &HandleRBACPermRevokeCommand, "" },
};
- static ChatCommand rbacCommandTable[] =
+ static std::vector<ChatCommand> rbacCommandTable =
{
{ "account", rbac::RBAC_PERM_COMMAND_RBAC_ACC, true, NULL, "", rbacAccountCommandTable },
- { "list", rbac::RBAC_PERM_COMMAND_RBAC_LIST, true, &HandleRBACListPermissionsCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "list", rbac::RBAC_PERM_COMMAND_RBAC_LIST, true, &HandleRBACListPermissionsCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "rbac", rbac::RBAC_PERM_COMMAND_RBAC, true, NULL, "", rbacCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp
index f4b442de92a..44e34b8e2a9 100644
--- a/src/server/scripts/Commands/cs_reload.cpp
+++ b/src/server/scripts/Commands/cs_reload.cpp
@@ -47,122 +47,119 @@ class reload_commandscript : public CommandScript
public:
reload_commandscript() : CommandScript("reload_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand reloadAllCommandTable[] =
+ static std::vector<ChatCommand> reloadAllCommandTable =
{
- { "achievement", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ACHIEVEMENT, true, &HandleReloadAllAchievementCommand, "", NULL },
- { "area", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_AREA, true, &HandleReloadAllAreaCommand, "", NULL },
- { "gossips", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_GOSSIP, true, &HandleReloadAllGossipsCommand, "", NULL },
- { "item", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ITEM, true, &HandleReloadAllItemCommand, "", NULL },
- { "locales", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOCALES, true, &HandleReloadAllLocalesCommand, "", NULL },
- { "loot", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOOT, true, &HandleReloadAllLootCommand, "", NULL },
- { "npc", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_NPC, true, &HandleReloadAllNpcCommand, "", NULL },
- { "quest", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_QUEST, true, &HandleReloadAllQuestCommand, "", NULL },
- { "scripts", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SCRIPTS, true, &HandleReloadAllScriptsCommand, "", NULL },
- { "spell", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SPELL, true, &HandleReloadAllSpellCommand, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_RELOAD_ALL, true, &HandleReloadAllCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "achievement", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ACHIEVEMENT, true, &HandleReloadAllAchievementCommand, "" },
+ { "area", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_AREA, true, &HandleReloadAllAreaCommand, "" },
+ { "gossips", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_GOSSIP, true, &HandleReloadAllGossipsCommand, "" },
+ { "item", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ITEM, true, &HandleReloadAllItemCommand, "" },
+ { "locales", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOCALES, true, &HandleReloadAllLocalesCommand, "" },
+ { "loot", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOOT, true, &HandleReloadAllLootCommand, "" },
+ { "npc", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_NPC, true, &HandleReloadAllNpcCommand, "" },
+ { "quest", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_QUEST, true, &HandleReloadAllQuestCommand, "" },
+ { "scripts", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SCRIPTS, true, &HandleReloadAllScriptsCommand, "" },
+ { "spell", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SPELL, true, &HandleReloadAllSpellCommand, "" },
+ { "", rbac::RBAC_PERM_COMMAND_RELOAD_ALL, true, &HandleReloadAllCommand, "" },
};
- static ChatCommand reloadCommandTable[] =
+ static std::vector<ChatCommand> reloadCommandTable =
{
- { "auctions", rbac::RBAC_PERM_COMMAND_RELOAD_AUCTIONS, true, &HandleReloadAuctionsCommand, "", NULL },
- { "access_requirement", rbac::RBAC_PERM_COMMAND_RELOAD_ACCESS_REQUIREMENT, true, &HandleReloadAccessRequirementCommand, "", NULL },
- { "achievement_criteria_data", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_CRITERIA_DATA, true, &HandleReloadAchievementCriteriaDataCommand, "", NULL },
- { "achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_REWARD, true, &HandleReloadAchievementRewardCommand, "", NULL },
+ { "auctions", rbac::RBAC_PERM_COMMAND_RELOAD_AUCTIONS, true, &HandleReloadAuctionsCommand, "" },
+ { "access_requirement", rbac::RBAC_PERM_COMMAND_RELOAD_ACCESS_REQUIREMENT, true, &HandleReloadAccessRequirementCommand, "" },
+ { "achievement_criteria_data", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_CRITERIA_DATA, true, &HandleReloadAchievementCriteriaDataCommand, "" },
+ { "achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_REWARD, true, &HandleReloadAchievementRewardCommand, "" },
{ "all", rbac::RBAC_PERM_COMMAND_RELOAD_ALL, true, NULL, "", reloadAllCommandTable },
- { "areatrigger_involvedrelation", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_INVOLVEDRELATION, true, &HandleReloadQuestAreaTriggersCommand, "", NULL },
- { "areatrigger_tavern", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TAVERN, true, &HandleReloadAreaTriggerTavernCommand, "", NULL },
- { "areatrigger_teleport", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TELEPORT, true, &HandleReloadAreaTriggerTeleportCommand, "", NULL },
- { "autobroadcast", rbac::RBAC_PERM_COMMAND_RELOAD_AUTOBROADCAST, true, &HandleReloadAutobroadcastCommand, "", NULL },
- { "battleground_template", rbac::RBAC_PERM_COMMAND_RELOAD_BATTLEGROUND_TEMPLATE, true, &HandleReloadBattlegroundTemplate, "", NULL },
- { "broadcast_text", rbac::RBAC_PERM_COMMAND_RELOAD_BROADCAST_TEXT, true, &HandleReloadBroadcastTextCommand, "", NULL },
- { "command", rbac::RBAC_PERM_COMMAND_RELOAD_COMMAND, true, &HandleReloadCommandCommand, "", NULL },
- { "conditions", rbac::RBAC_PERM_COMMAND_RELOAD_CONDITIONS, true, &HandleReloadConditions, "", NULL },
- { "config", rbac::RBAC_PERM_COMMAND_RELOAD_CONFIG, true, &HandleReloadConfigCommand, "", NULL },
- { "creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEXT, true, &HandleReloadCreatureText, "", NULL },
- { "creature_questender", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTENDER, true, &HandleReloadCreatureQuestEnderCommand, "", NULL },
- { "creature_linked_respawn", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LINKED_RESPAWN, true, &HandleReloadLinkedRespawnCommand, "", NULL },
- { "creature_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesCreatureCommand, "", NULL },
- { "creature_onkill_reputation", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_ONKILL_REPUTATION, true, &HandleReloadOnKillReputationCommand, "", NULL },
- { "creature_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTSTARTER, true, &HandleReloadCreatureQuestStarterCommand, "", NULL },
- { "creature_summon_groups", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_SUMMON_GROUPS, true, &HandleReloadCreatureSummonGroupsCommand, "", NULL },
- { "creature_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEMPLATE, true, &HandleReloadCreatureTemplateCommand, "", NULL },
- { "disables", rbac::RBAC_PERM_COMMAND_RELOAD_DISABLES, true, &HandleReloadDisablesCommand, "", NULL },
- { "disenchant_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_DISENCHANT_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesDisenchantCommand, "", NULL },
- { "event_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_EVENT_SCRIPTS, true, &HandleReloadEventScriptsCommand, "", NULL },
- { "fishing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_FISHING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesFishingCommand, "", NULL },
- { "game_graveyard_zone", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_GRAVEYARD_ZONE, true, &HandleReloadGameGraveyardZoneCommand, "", NULL },
- { "game_tele", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_TELE, true, &HandleReloadGameTeleCommand, "", NULL },
- { "gameobject_questender", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTENDER, true, &HandleReloadGOQuestEnderCommand, "", NULL },
- { "gameobject_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesGameobjectCommand, "", NULL },
- { "gameobject_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTSTARTER, true, &HandleReloadGOQuestStarterCommand, "", NULL },
- { "gm_tickets", rbac::RBAC_PERM_COMMAND_RELOAD_GM_TICKETS, true, &HandleReloadGMTicketsCommand, "", NULL },
- { "gossip_menu", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU, true, &HandleReloadGossipMenuCommand, "", NULL },
- { "gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU_OPTION, true, &HandleReloadGossipMenuOptionCommand, "", NULL },
- { "item_enchantment_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_ENCHANTMENT_TEMPLATE, true, &HandleReloadItemEnchantementsCommand, "", NULL },
- { "item_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesItemCommand, "", NULL },
- { "item_set_names", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_SET_NAMES, true, &HandleReloadItemSetNamesCommand, "", NULL },
- { "lfg_dungeon_rewards", rbac::RBAC_PERM_COMMAND_RELOAD_LFG_DUNGEON_REWARDS, true, &HandleReloadLfgRewardsCommand, "", NULL },
- { "locales_achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ACHIEVEMENT_REWARD, true, &HandleReloadLocalesAchievementRewardCommand, "", NULL },
- { "locales_creature", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE, true, &HandleReloadLocalesCreatureCommand, "", NULL },
- { "locales_creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE_TEXT, true, &HandleReloadLocalesCreatureTextCommand, "", NULL },
- { "locales_gameobject", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GAMEOBJECT, true, &HandleReloadLocalesGameobjectCommand, "", NULL },
- { "locales_gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GOSSIP_MENU_OPTION, true, &HandleReloadLocalesGossipMenuOptionCommand, "", NULL },
- { "locales_item", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM, true, &HandleReloadLocalesItemCommand, "", NULL },
- { "locales_item_set_name", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM_SET_NAME, true, &HandleReloadLocalesItemSetNameCommand, "", NULL },
- { "locales_npc_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_NPC_TEXT, true, &HandleReloadLocalesNpcTextCommand, "", NULL },
- { "locales_page_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_PAGE_TEXT, true, &HandleReloadLocalesPageTextCommand, "", NULL },
- { "locales_points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_POINTS_OF_INTEREST, true, &HandleReloadLocalesPointsOfInterestCommand, "", NULL },
- { "locales_quest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_QUEST, true, &HandleReloadLocalesQuestCommand, "", NULL },
- { "mail_level_reward", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LEVEL_REWARD, true, &HandleReloadMailLevelRewardCommand, "", NULL },
- { "mail_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMailCommand, "", NULL },
- { "milling_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MILLING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMillingCommand, "", NULL },
- { "npc_spellclick_spells", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_SPELLCLICK_SPELLS, true, &HandleReloadSpellClickSpellsCommand, "", NULL },
- { "npc_trainer", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_TRAINER, true, &HandleReloadNpcTrainerCommand, "", NULL },
- { "npc_vendor", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_VENDOR, true, &HandleReloadNpcVendorCommand, "", NULL },
- { "page_text", rbac::RBAC_PERM_COMMAND_RELOAD_PAGE_TEXT, true, &HandleReloadPageTextsCommand, "", NULL },
- { "pickpocketing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PICKPOCKETING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesPickpocketingCommand, "", NULL },
- { "points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_POINTS_OF_INTEREST, true, &HandleReloadPointsOfInterestCommand, "", NULL },
- { "prospecting_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PROSPECTING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesProspectingCommand, "", NULL },
- { "quest_poi", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_POI, true, &HandleReloadQuestPOICommand, "", NULL },
- { "quest_template", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_TEMPLATE, true, &HandleReloadQuestTemplateCommand, "", NULL },
- { "rbac", rbac::RBAC_PERM_COMMAND_RELOAD_RBAC, true, &HandleReloadRBACCommand, "", NULL },
- { "reference_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_REFERENCE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesReferenceCommand, "", NULL },
- { "reserved_name", rbac::RBAC_PERM_COMMAND_RELOAD_RESERVED_NAME, true, &HandleReloadReservedNameCommand, "", NULL },
- { "reputation_reward_rate", rbac::RBAC_PERM_COMMAND_RELOAD_REPUTATION_REWARD_RATE, true, &HandleReloadReputationRewardRateCommand, "", NULL },
- { "reputation_spillover_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPILLOVER_TEMPLATE, true, &HandleReloadReputationRewardRateCommand, "", NULL },
- { "skill_discovery_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_DISCOVERY_TEMPLATE, true, &HandleReloadSkillDiscoveryTemplateCommand, "", NULL },
- { "skill_extra_item_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE, true, &HandleReloadSkillExtraItemTemplateCommand, "", NULL },
- { "skill_fishing_base_level", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_FISHING_BASE_LEVEL, true, &HandleReloadSkillFishingBaseLevelCommand, "", NULL },
- { "skinning_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKINNING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSkinningCommand, "", NULL },
- { "smart_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SMART_SCRIPTS, true, &HandleReloadSmartScripts, "", NULL },
- { "spell_required", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_REQUIRED, true, &HandleReloadSpellRequiredCommand, "", NULL },
- { "spell_area", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_AREA, true, &HandleReloadSpellAreaCommand, "", NULL },
- { "spell_bonus_data", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_BONUS_DATA, true, &HandleReloadSpellBonusesCommand, "", NULL },
- { "spell_group", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP, true, &HandleReloadSpellGroupsCommand, "", NULL },
- { "spell_learn_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LEARN_SPELL, true, &HandleReloadSpellLearnSpellCommand, "", NULL },
- { "spell_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSpellCommand, "", NULL },
- { "spell_linked_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LINKED_SPELL, true, &HandleReloadSpellLinkedSpellCommand, "", NULL },
- { "spell_pet_auras", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PET_AURAS, true, &HandleReloadSpellPetAurasCommand, "", NULL },
- { "spell_proc_event", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC_EVENT, true, &HandleReloadSpellProcEventCommand, "", NULL },
- { "spell_proc", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC, true, &HandleReloadSpellProcsCommand, "", NULL },
- { "spell_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_SCRIPTS, true, &HandleReloadSpellScriptsCommand, "", NULL },
- { "spell_target_position", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_TARGET_POSITION, true, &HandleReloadSpellTargetPositionCommand, "", NULL },
- { "spell_threats", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_THREATS, true, &HandleReloadSpellThreatsCommand, "", NULL },
- { "spell_group_stack_rules", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP_STACK_RULES, true, &HandleReloadSpellGroupStackRulesCommand, "", NULL },
- { "trinity_string", rbac::RBAC_PERM_COMMAND_RELOAD_TRINITY_STRING, true, &HandleReloadTrinityStringCommand, "", NULL },
- { "warden_action", rbac::RBAC_PERM_COMMAND_RELOAD_WARDEN_ACTION, true, &HandleReloadWardenactionCommand, "", NULL },
- { "waypoint_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_SCRIPTS, true, &HandleReloadWpScriptsCommand, "", NULL },
- { "waypoint_data", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_DATA, true, &HandleReloadWpCommand, "", NULL },
- { "vehicle_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_ACCESORY, true, &HandleReloadVehicleAccessoryCommand, "", NULL },
- { "vehicle_template_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_TEMPLATE_ACCESSORY, true, &HandleReloadVehicleTemplateAccessoryCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "areatrigger_involvedrelation", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_INVOLVEDRELATION, true, &HandleReloadQuestAreaTriggersCommand, "" },
+ { "areatrigger_tavern", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TAVERN, true, &HandleReloadAreaTriggerTavernCommand, "" },
+ { "areatrigger_teleport", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TELEPORT, true, &HandleReloadAreaTriggerTeleportCommand, "" },
+ { "autobroadcast", rbac::RBAC_PERM_COMMAND_RELOAD_AUTOBROADCAST, true, &HandleReloadAutobroadcastCommand, "" },
+ { "battleground_template", rbac::RBAC_PERM_COMMAND_RELOAD_BATTLEGROUND_TEMPLATE, true, &HandleReloadBattlegroundTemplate, "" },
+ { "broadcast_text", rbac::RBAC_PERM_COMMAND_RELOAD_BROADCAST_TEXT, true, &HandleReloadBroadcastTextCommand, "" },
+ { "command", rbac::RBAC_PERM_COMMAND_RELOAD_COMMAND, true, &HandleReloadCommandCommand, "" },
+ { "conditions", rbac::RBAC_PERM_COMMAND_RELOAD_CONDITIONS, true, &HandleReloadConditions, "" },
+ { "config", rbac::RBAC_PERM_COMMAND_RELOAD_CONFIG, true, &HandleReloadConfigCommand, "" },
+ { "creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEXT, true, &HandleReloadCreatureText, "" },
+ { "creature_questender", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTENDER, true, &HandleReloadCreatureQuestEnderCommand, "" },
+ { "creature_linked_respawn", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LINKED_RESPAWN, true, &HandleReloadLinkedRespawnCommand, "" },
+ { "creature_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesCreatureCommand, "" },
+ { "creature_onkill_reputation", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_ONKILL_REPUTATION, true, &HandleReloadOnKillReputationCommand, "" },
+ { "creature_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTSTARTER, true, &HandleReloadCreatureQuestStarterCommand, "" },
+ { "creature_summon_groups", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_SUMMON_GROUPS, true, &HandleReloadCreatureSummonGroupsCommand, "" },
+ { "creature_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEMPLATE, true, &HandleReloadCreatureTemplateCommand, "" },
+ { "disables", rbac::RBAC_PERM_COMMAND_RELOAD_DISABLES, true, &HandleReloadDisablesCommand, "" },
+ { "disenchant_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_DISENCHANT_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesDisenchantCommand, "" },
+ { "event_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_EVENT_SCRIPTS, true, &HandleReloadEventScriptsCommand, "" },
+ { "fishing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_FISHING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesFishingCommand, "" },
+ { "game_graveyard_zone", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_GRAVEYARD_ZONE, true, &HandleReloadGameGraveyardZoneCommand, "" },
+ { "game_tele", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_TELE, true, &HandleReloadGameTeleCommand, "" },
+ { "gameobject_questender", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTENDER, true, &HandleReloadGOQuestEnderCommand, "" },
+ { "gameobject_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesGameobjectCommand, "" },
+ { "gameobject_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTSTARTER, true, &HandleReloadGOQuestStarterCommand, "" },
+ { "gm_tickets", rbac::RBAC_PERM_COMMAND_RELOAD_GM_TICKETS, true, &HandleReloadGMTicketsCommand, "" },
+ { "gossip_menu", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU, true, &HandleReloadGossipMenuCommand, "" },
+ { "gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU_OPTION, true, &HandleReloadGossipMenuOptionCommand, "" },
+ { "item_enchantment_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_ENCHANTMENT_TEMPLATE, true, &HandleReloadItemEnchantementsCommand, "" },
+ { "item_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesItemCommand, "" },
+ { "item_set_names", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_SET_NAMES, true, &HandleReloadItemSetNamesCommand, "" },
+ { "lfg_dungeon_rewards", rbac::RBAC_PERM_COMMAND_RELOAD_LFG_DUNGEON_REWARDS, true, &HandleReloadLfgRewardsCommand, "" },
+ { "locales_achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ACHIEVEMENT_REWARD, true, &HandleReloadLocalesAchievementRewardCommand, "" },
+ { "locales_creature", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE, true, &HandleReloadLocalesCreatureCommand, "" },
+ { "locales_creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE_TEXT, true, &HandleReloadLocalesCreatureTextCommand, "" },
+ { "locales_gameobject", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GAMEOBJECT, true, &HandleReloadLocalesGameobjectCommand, "" },
+ { "locales_gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GOSSIP_MENU_OPTION, true, &HandleReloadLocalesGossipMenuOptionCommand, "" },
+ { "locales_item", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM, true, &HandleReloadLocalesItemCommand, "" },
+ { "locales_item_set_name", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM_SET_NAME, true, &HandleReloadLocalesItemSetNameCommand, "" },
+ { "locales_npc_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_NPC_TEXT, true, &HandleReloadLocalesNpcTextCommand, "" },
+ { "locales_page_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_PAGE_TEXT, true, &HandleReloadLocalesPageTextCommand, "" },
+ { "locales_points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_POINTS_OF_INTEREST, true, &HandleReloadLocalesPointsOfInterestCommand, "" },
+ { "locales_quest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_QUEST, true, &HandleReloadLocalesQuestCommand, "" },
+ { "mail_level_reward", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LEVEL_REWARD, true, &HandleReloadMailLevelRewardCommand, "" },
+ { "mail_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMailCommand, "" },
+ { "milling_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MILLING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMillingCommand, "" },
+ { "npc_spellclick_spells", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_SPELLCLICK_SPELLS, true, &HandleReloadSpellClickSpellsCommand, "" },
+ { "npc_trainer", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_TRAINER, true, &HandleReloadNpcTrainerCommand, "" },
+ { "npc_vendor", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_VENDOR, true, &HandleReloadNpcVendorCommand, "" },
+ { "page_text", rbac::RBAC_PERM_COMMAND_RELOAD_PAGE_TEXT, true, &HandleReloadPageTextsCommand, "" },
+ { "pickpocketing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PICKPOCKETING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesPickpocketingCommand, "" },
+ { "points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_POINTS_OF_INTEREST, true, &HandleReloadPointsOfInterestCommand, "" },
+ { "prospecting_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PROSPECTING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesProspectingCommand, "" },
+ { "quest_poi", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_POI, true, &HandleReloadQuestPOICommand, "" },
+ { "quest_template", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_TEMPLATE, true, &HandleReloadQuestTemplateCommand, "" },
+ { "rbac", rbac::RBAC_PERM_COMMAND_RELOAD_RBAC, true, &HandleReloadRBACCommand, "" },
+ { "reference_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_REFERENCE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesReferenceCommand, "" },
+ { "reserved_name", rbac::RBAC_PERM_COMMAND_RELOAD_RESERVED_NAME, true, &HandleReloadReservedNameCommand, "" },
+ { "reputation_reward_rate", rbac::RBAC_PERM_COMMAND_RELOAD_REPUTATION_REWARD_RATE, true, &HandleReloadReputationRewardRateCommand, "" },
+ { "reputation_spillover_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPILLOVER_TEMPLATE, true, &HandleReloadReputationRewardRateCommand, "" },
+ { "skill_discovery_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_DISCOVERY_TEMPLATE, true, &HandleReloadSkillDiscoveryTemplateCommand, "" },
+ { "skill_extra_item_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE, true, &HandleReloadSkillExtraItemTemplateCommand, "" },
+ { "skill_fishing_base_level", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_FISHING_BASE_LEVEL, true, &HandleReloadSkillFishingBaseLevelCommand, "" },
+ { "skinning_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKINNING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSkinningCommand, "" },
+ { "smart_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SMART_SCRIPTS, true, &HandleReloadSmartScripts, "" },
+ { "spell_required", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_REQUIRED, true, &HandleReloadSpellRequiredCommand, "" },
+ { "spell_area", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_AREA, true, &HandleReloadSpellAreaCommand, "" },
+ { "spell_bonus_data", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_BONUS_DATA, true, &HandleReloadSpellBonusesCommand, "" },
+ { "spell_group", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP, true, &HandleReloadSpellGroupsCommand, "" },
+ { "spell_learn_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LEARN_SPELL, true, &HandleReloadSpellLearnSpellCommand, "" },
+ { "spell_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSpellCommand, "" },
+ { "spell_linked_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LINKED_SPELL, true, &HandleReloadSpellLinkedSpellCommand, "" },
+ { "spell_pet_auras", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PET_AURAS, true, &HandleReloadSpellPetAurasCommand, "" },
+ { "spell_proc_event", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC_EVENT, true, &HandleReloadSpellProcEventCommand, "" },
+ { "spell_proc", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC, true, &HandleReloadSpellProcsCommand, "" },
+ { "spell_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_SCRIPTS, true, &HandleReloadSpellScriptsCommand, "" },
+ { "spell_target_position", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_TARGET_POSITION, true, &HandleReloadSpellTargetPositionCommand, "" },
+ { "spell_threats", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_THREATS, true, &HandleReloadSpellThreatsCommand, "" },
+ { "spell_group_stack_rules", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP_STACK_RULES, true, &HandleReloadSpellGroupStackRulesCommand, "" },
+ { "trinity_string", rbac::RBAC_PERM_COMMAND_RELOAD_TRINITY_STRING, true, &HandleReloadTrinityStringCommand, "" },
+ { "warden_action", rbac::RBAC_PERM_COMMAND_RELOAD_WARDEN_ACTION, true, &HandleReloadWardenactionCommand, "" },
+ { "waypoint_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_SCRIPTS, true, &HandleReloadWpScriptsCommand, "" },
+ { "waypoint_data", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_DATA, true, &HandleReloadWpCommand, "" },
+ { "vehicle_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_ACCESORY, true, &HandleReloadVehicleAccessoryCommand, "" },
+ { "vehicle_template_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_TEMPLATE_ACCESSORY, true, &HandleReloadVehicleTemplateAccessoryCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "reload", rbac::RBAC_PERM_COMMAND_RELOAD, true, NULL, "", reloadCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -749,12 +746,21 @@ public:
return true;
}
- static bool HandleReloadSkillExtraItemTemplateCommand(ChatHandler* handler, const char* /*args*/)
+ static bool HandleReloadSkillPerfectItemTemplateCommand(ChatHandler* handler, const char* /*args*/)
+ { // latched onto HandleReloadSkillExtraItemTemplateCommand as it's part of that table group (and i don't want to chance all the command IDs)
+ TC_LOG_INFO("misc", "Re-Loading Skill Perfection Data Table...");
+ LoadSkillPerfectItemTable();
+ handler->SendGlobalGMSysMessage("DB table `skill_perfect_item_template` (perfect item procs when crafting) reloaded.");
+ return true;
+ }
+
+ static bool HandleReloadSkillExtraItemTemplateCommand(ChatHandler* handler, const char* args)
{
TC_LOG_INFO("misc", "Re-Loading Skill Extra Item Table...");
LoadSkillExtraItemTable();
handler->SendGlobalGMSysMessage("DB table `skill_extra_item_template` (extra item creation when crafting) reloaded.");
- return true;
+
+ return HandleReloadSkillPerfectItemTemplateCommand(handler, args);
}
static bool HandleReloadSkillFishingBaseLevelCommand(ChatHandler* handler, const char* /*args*/)
diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp
index b2bccfd884a..d1c7421b761 100644
--- a/src/server/scripts/Commands/cs_reset.cpp
+++ b/src/server/scripts/Commands/cs_reset.cpp
@@ -35,23 +35,21 @@ class reset_commandscript : public CommandScript
public:
reset_commandscript() : CommandScript("reset_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand resetCommandTable[] =
+ static std::vector<ChatCommand> resetCommandTable =
{
- { "achievements", rbac::RBAC_PERM_COMMAND_RESET_ACHIEVEMENTS, true, &HandleResetAchievementsCommand, "", NULL },
- { "honor", rbac::RBAC_PERM_COMMAND_RESET_HONOR, true, &HandleResetHonorCommand, "", NULL },
- { "level", rbac::RBAC_PERM_COMMAND_RESET_LEVEL, true, &HandleResetLevelCommand, "", NULL },
- { "spells", rbac::RBAC_PERM_COMMAND_RESET_SPELLS, true, &HandleResetSpellsCommand, "", NULL },
- { "stats", rbac::RBAC_PERM_COMMAND_RESET_STATS, true, &HandleResetStatsCommand, "", NULL },
- { "talents", rbac::RBAC_PERM_COMMAND_RESET_TALENTS, true, &HandleResetTalentsCommand, "", NULL },
- { "all", rbac::RBAC_PERM_COMMAND_RESET_ALL, true, &HandleResetAllCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "achievements", rbac::RBAC_PERM_COMMAND_RESET_ACHIEVEMENTS, true, &HandleResetAchievementsCommand, "" },
+ { "honor", rbac::RBAC_PERM_COMMAND_RESET_HONOR, true, &HandleResetHonorCommand, "" },
+ { "level", rbac::RBAC_PERM_COMMAND_RESET_LEVEL, true, &HandleResetLevelCommand, "" },
+ { "spells", rbac::RBAC_PERM_COMMAND_RESET_SPELLS, true, &HandleResetSpellsCommand, "" },
+ { "stats", rbac::RBAC_PERM_COMMAND_RESET_STATS, true, &HandleResetStatsCommand, "" },
+ { "talents", rbac::RBAC_PERM_COMMAND_RESET_TALENTS, true, &HandleResetTalentsCommand, "" },
+ { "all", rbac::RBAC_PERM_COMMAND_RESET_ALL, true, &HandleResetAllCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "reset", rbac::RBAC_PERM_COMMAND_RESET, true, NULL, "", resetCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_send.cpp b/src/server/scripts/Commands/cs_send.cpp
index e7ea4bc99d7..b7165ed339c 100644
--- a/src/server/scripts/Commands/cs_send.cpp
+++ b/src/server/scripts/Commands/cs_send.cpp
@@ -27,21 +27,19 @@ class send_commandscript : public CommandScript
public:
send_commandscript() : CommandScript("send_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand sendCommandTable[] =
+ static std::vector<ChatCommand> sendCommandTable =
{
- { "items", rbac::RBAC_PERM_COMMAND_SEND_ITEMS, true, &HandleSendItemsCommand, "", NULL },
- { "mail", rbac::RBAC_PERM_COMMAND_SEND_MAIL, true, &HandleSendMailCommand, "", NULL },
- { "message", rbac::RBAC_PERM_COMMAND_SEND_MESSAGE, true, &HandleSendMessageCommand, "", NULL },
- { "money", rbac::RBAC_PERM_COMMAND_SEND_MONEY, true, &HandleSendMoneyCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "items", rbac::RBAC_PERM_COMMAND_SEND_ITEMS, true, &HandleSendItemsCommand, "" },
+ { "mail", rbac::RBAC_PERM_COMMAND_SEND_MAIL, true, &HandleSendMailCommand, "" },
+ { "message", rbac::RBAC_PERM_COMMAND_SEND_MESSAGE, true, &HandleSendMessageCommand, "" },
+ { "money", rbac::RBAC_PERM_COMMAND_SEND_MONEY, true, &HandleSendMoneyCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "send", rbac::RBAC_PERM_COMMAND_SEND, false, NULL, "", sendCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -77,7 +75,7 @@ public:
std::string text = msgText;
// from console show not existed sender
- MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
+ MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUID().GetCounter() : 0, MAIL_STATIONERY_GM);
/// @todo Fix poor design
SQLTransaction trans = CharacterDatabase.BeginTransaction();
@@ -176,7 +174,7 @@ public:
}
// from console show not existed sender
- MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
+ MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUID().GetCounter() : 0, MAIL_STATIONERY_GM);
// fill mail
MailDraft draft(subject, text);
@@ -236,7 +234,7 @@ public:
std::string text = msgText;
// from console show not existed sender
- MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
+ MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUID().GetCounter() : 0, MAIL_STATIONERY_GM);
SQLTransaction trans = CharacterDatabase.BeginTransaction();
diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp
index 6fa84d1bc75..e41a7d161d2 100644
--- a/src/server/scripts/Commands/cs_server.cpp
+++ b/src/server/scripts/Commands/cs_server.cpp
@@ -35,64 +35,57 @@ class server_commandscript : public CommandScript
public:
server_commandscript() : CommandScript("server_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand serverIdleRestartCommandTable[] =
+ static std::vector<ChatCommand> serverIdleRestartCommandTable =
{
- { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_IDLERESTART_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL },
- { "" , rbac::RBAC_PERM_COMMAND_SERVER_IDLERESTART, true, &HandleServerIdleRestartCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_IDLERESTART_CANCEL, true, &HandleServerShutDownCancelCommand, "" },
+ { "" , rbac::RBAC_PERM_COMMAND_SERVER_IDLERESTART, true, &HandleServerIdleRestartCommand, "" },
};
- static ChatCommand serverIdleShutdownCommandTable[] =
+ static std::vector<ChatCommand> serverIdleShutdownCommandTable =
{
- { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL },
- { "" , rbac::RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN, true, &HandleServerIdleShutDownCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN_CANCEL, true, &HandleServerShutDownCancelCommand, "" },
+ { "" , rbac::RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN, true, &HandleServerIdleShutDownCommand, "" },
};
- static ChatCommand serverRestartCommandTable[] =
+ static std::vector<ChatCommand> serverRestartCommandTable =
{
- { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_RESTART_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL },
- { "" , rbac::RBAC_PERM_COMMAND_SERVER_RESTART, true, &HandleServerRestartCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_RESTART_CANCEL, true, &HandleServerShutDownCancelCommand, "" },
+ { "" , rbac::RBAC_PERM_COMMAND_SERVER_RESTART, true, &HandleServerRestartCommand, "" },
};
- static ChatCommand serverShutdownCommandTable[] =
+ static std::vector<ChatCommand> serverShutdownCommandTable =
{
- { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_SHUTDOWN_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL },
- { "" , rbac::RBAC_PERM_COMMAND_SERVER_SHUTDOWN, true, &HandleServerShutDownCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_SHUTDOWN_CANCEL, true, &HandleServerShutDownCancelCommand, "" },
+ { "" , rbac::RBAC_PERM_COMMAND_SERVER_SHUTDOWN, true, &HandleServerShutDownCommand, "" },
};
- static ChatCommand serverSetCommandTable[] =
+ static std::vector<ChatCommand> serverSetCommandTable =
{
- { "difftime", rbac::RBAC_PERM_COMMAND_SERVER_SET_DIFFTIME, true, &HandleServerSetDiffTimeCommand, "", NULL },
- { "loglevel", rbac::RBAC_PERM_COMMAND_SERVER_SET_LOGLEVEL, true, &HandleServerSetLogLevelCommand, "", NULL },
- { "motd", rbac::RBAC_PERM_COMMAND_SERVER_SET_MOTD, true, &HandleServerSetMotdCommand, "", NULL },
- { "closed", rbac::RBAC_PERM_COMMAND_SERVER_SET_CLOSED, true, &HandleServerSetClosedCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "difftime", rbac::RBAC_PERM_COMMAND_SERVER_SET_DIFFTIME, true, &HandleServerSetDiffTimeCommand, "" },
+ { "loglevel", rbac::RBAC_PERM_COMMAND_SERVER_SET_LOGLEVEL, true, &HandleServerSetLogLevelCommand, "" },
+ { "motd", rbac::RBAC_PERM_COMMAND_SERVER_SET_MOTD, true, &HandleServerSetMotdCommand, "" },
+ { "closed", rbac::RBAC_PERM_COMMAND_SERVER_SET_CLOSED, true, &HandleServerSetClosedCommand, "" },
};
- static ChatCommand serverCommandTable[] =
+ static std::vector<ChatCommand> serverCommandTable =
{
- { "corpses", rbac::RBAC_PERM_COMMAND_SERVER_CORPSES, true, &HandleServerCorpsesCommand, "", NULL },
- { "exit", rbac::RBAC_PERM_COMMAND_SERVER_EXIT, true, &HandleServerExitCommand, "", NULL },
+ { "corpses", rbac::RBAC_PERM_COMMAND_SERVER_CORPSES, true, &HandleServerCorpsesCommand, "" },
+ { "exit", rbac::RBAC_PERM_COMMAND_SERVER_EXIT, true, &HandleServerExitCommand, "" },
{ "idlerestart", rbac::RBAC_PERM_COMMAND_SERVER_IDLERESTART, true, NULL, "", serverIdleRestartCommandTable },
{ "idleshutdown", rbac::RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN, true, NULL, "", serverIdleShutdownCommandTable },
- { "info", rbac::RBAC_PERM_COMMAND_SERVER_INFO, true, &HandleServerInfoCommand, "", NULL },
- { "motd", rbac::RBAC_PERM_COMMAND_SERVER_MOTD, true, &HandleServerMotdCommand, "", NULL },
- { "plimit", rbac::RBAC_PERM_COMMAND_SERVER_PLIMIT, true, &HandleServerPLimitCommand, "", NULL },
+ { "info", rbac::RBAC_PERM_COMMAND_SERVER_INFO, true, &HandleServerInfoCommand, "" },
+ { "motd", rbac::RBAC_PERM_COMMAND_SERVER_MOTD, true, &HandleServerMotdCommand, "" },
+ { "plimit", rbac::RBAC_PERM_COMMAND_SERVER_PLIMIT, true, &HandleServerPLimitCommand, "" },
{ "restart", rbac::RBAC_PERM_COMMAND_SERVER_RESTART, true, NULL, "", serverRestartCommandTable },
{ "shutdown", rbac::RBAC_PERM_COMMAND_SERVER_SHUTDOWN, true, NULL, "", serverShutdownCommandTable },
{ "set", rbac::RBAC_PERM_COMMAND_SERVER_SET, true, NULL, "", serverSetCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "server", rbac::RBAC_PERM_COMMAND_SERVER, true, NULL, "", serverCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -100,7 +93,7 @@ public:
// Triggering corpses expire check in world
static bool HandleServerCorpsesCommand(ChatHandler* /*handler*/, char const* /*args*/)
{
- sObjectAccessor->RemoveOldCorpses();
+ sWorld->RemoveOldCorpses();
return true;
}
diff --git a/src/server/scripts/Commands/cs_tele.cpp b/src/server/scripts/Commands/cs_tele.cpp
index 8e82f9980d3..9ea516f0972 100644
--- a/src/server/scripts/Commands/cs_tele.cpp
+++ b/src/server/scripts/Commands/cs_tele.cpp
@@ -35,21 +35,19 @@ class tele_commandscript : public CommandScript
public:
tele_commandscript() : CommandScript("tele_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand teleCommandTable[] =
+ static std::vector<ChatCommand> teleCommandTable =
{
- { "add", rbac::RBAC_PERM_COMMAND_TELE_ADD, false, &HandleTeleAddCommand, "", NULL },
- { "del", rbac::RBAC_PERM_COMMAND_TELE_DEL, true, &HandleTeleDelCommand, "", NULL },
- { "name", rbac::RBAC_PERM_COMMAND_TELE_NAME, true, &HandleTeleNameCommand, "", NULL },
- { "group", rbac::RBAC_PERM_COMMAND_TELE_GROUP, false, &HandleTeleGroupCommand, "", NULL },
- { "", rbac::RBAC_PERM_COMMAND_TELE, false, &HandleTeleCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "add", rbac::RBAC_PERM_COMMAND_TELE_ADD, false, &HandleTeleAddCommand, "" },
+ { "del", rbac::RBAC_PERM_COMMAND_TELE_DEL, true, &HandleTeleDelCommand, "" },
+ { "name", rbac::RBAC_PERM_COMMAND_TELE_NAME, true, &HandleTeleNameCommand, "" },
+ { "group", rbac::RBAC_PERM_COMMAND_TELE_GROUP, false, &HandleTeleGroupCommand, "" },
+ { "", rbac::RBAC_PERM_COMMAND_TELE, false, &HandleTeleCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "tele", rbac::RBAC_PERM_COMMAND_TELE, false, NULL, "", teleCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp
index 5fc3cc618e5..a9baa45f344 100644
--- a/src/server/scripts/Commands/cs_ticket.cpp
+++ b/src/server/scripts/Commands/cs_ticket.cpp
@@ -36,38 +36,35 @@ class ticket_commandscript : public CommandScript
public:
ticket_commandscript() : CommandScript("ticket_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand ticketResponseCommandTable[] =
+ static std::vector<ChatCommand> ticketResponseCommandTable =
{
- { "append", rbac::RBAC_PERM_COMMAND_TICKET_RESPONSE_APPEND, true, &HandleGMTicketResponseAppendCommand, "", NULL },
- { "appendln", rbac::RBAC_PERM_COMMAND_TICKET_RESPONSE_APPENDLN, true, &HandleGMTicketResponseAppendLnCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "append", rbac::RBAC_PERM_COMMAND_TICKET_RESPONSE_APPEND, true, &HandleGMTicketResponseAppendCommand, "" },
+ { "appendln", rbac::RBAC_PERM_COMMAND_TICKET_RESPONSE_APPENDLN, true, &HandleGMTicketResponseAppendLnCommand, "" },
};
- static ChatCommand ticketCommandTable[] =
+ static std::vector<ChatCommand> ticketCommandTable =
{
- { "assign", rbac::RBAC_PERM_COMMAND_TICKET_ASSIGN, true, &HandleGMTicketAssignToCommand, "", NULL },
- { "close", rbac::RBAC_PERM_COMMAND_TICKET_CLOSE, true, &HandleGMTicketCloseByIdCommand, "", NULL },
- { "closedlist", rbac::RBAC_PERM_COMMAND_TICKET_CLOSEDLIST, true, &HandleGMTicketListClosedCommand, "", NULL },
- { "comment", rbac::RBAC_PERM_COMMAND_TICKET_COMMENT, true, &HandleGMTicketCommentCommand, "", NULL },
- { "complete", rbac::RBAC_PERM_COMMAND_TICKET_COMPLETE, true, &HandleGMTicketCompleteCommand, "", NULL },
- { "delete", rbac::RBAC_PERM_COMMAND_TICKET_DELETE, true, &HandleGMTicketDeleteByIdCommand, "", NULL },
- { "escalate", rbac::RBAC_PERM_COMMAND_TICKET_ESCALATE, true, &HandleGMTicketEscalateCommand, "", NULL },
- { "escalatedlist", rbac::RBAC_PERM_COMMAND_TICKET_ESCALATEDLIST, true, &HandleGMTicketListEscalatedCommand, "", NULL },
- { "list", rbac::RBAC_PERM_COMMAND_TICKET_LIST, true, &HandleGMTicketListCommand, "", NULL },
- { "onlinelist", rbac::RBAC_PERM_COMMAND_TICKET_ONLINELIST, true, &HandleGMTicketListOnlineCommand, "", NULL },
- { "reset", rbac::RBAC_PERM_COMMAND_TICKET_RESET, true, &HandleGMTicketResetCommand, "", NULL },
+ { "assign", rbac::RBAC_PERM_COMMAND_TICKET_ASSIGN, true, &HandleGMTicketAssignToCommand, "" },
+ { "close", rbac::RBAC_PERM_COMMAND_TICKET_CLOSE, true, &HandleGMTicketCloseByIdCommand, "" },
+ { "closedlist", rbac::RBAC_PERM_COMMAND_TICKET_CLOSEDLIST, true, &HandleGMTicketListClosedCommand, "" },
+ { "comment", rbac::RBAC_PERM_COMMAND_TICKET_COMMENT, true, &HandleGMTicketCommentCommand, "" },
+ { "complete", rbac::RBAC_PERM_COMMAND_TICKET_COMPLETE, true, &HandleGMTicketCompleteCommand, "" },
+ { "delete", rbac::RBAC_PERM_COMMAND_TICKET_DELETE, true, &HandleGMTicketDeleteByIdCommand, "" },
+ { "escalate", rbac::RBAC_PERM_COMMAND_TICKET_ESCALATE, true, &HandleGMTicketEscalateCommand, "" },
+ { "escalatedlist", rbac::RBAC_PERM_COMMAND_TICKET_ESCALATEDLIST, true, &HandleGMTicketListEscalatedCommand, "" },
+ { "list", rbac::RBAC_PERM_COMMAND_TICKET_LIST, true, &HandleGMTicketListCommand, "" },
+ { "onlinelist", rbac::RBAC_PERM_COMMAND_TICKET_ONLINELIST, true, &HandleGMTicketListOnlineCommand, "" },
+ { "reset", rbac::RBAC_PERM_COMMAND_TICKET_RESET, true, &HandleGMTicketResetCommand, "" },
{ "response", rbac::RBAC_PERM_COMMAND_TICKET_RESPONSE, true, NULL, "", ticketResponseCommandTable },
- { "togglesystem", rbac::RBAC_PERM_COMMAND_TICKET_TOGGLESYSTEM, true, &HandleToggleGMTicketSystem, "", NULL },
- { "unassign", rbac::RBAC_PERM_COMMAND_TICKET_UNASSIGN, true, &HandleGMTicketUnAssignCommand, "", NULL },
- { "viewid", rbac::RBAC_PERM_COMMAND_TICKET_VIEWID, true, &HandleGMTicketGetByIdCommand, "", NULL },
- { "viewname", rbac::RBAC_PERM_COMMAND_TICKET_VIEWNAME, true, &HandleGMTicketGetByNameCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "togglesystem", rbac::RBAC_PERM_COMMAND_TICKET_TOGGLESYSTEM, true, &HandleToggleGMTicketSystem, "" },
+ { "unassign", rbac::RBAC_PERM_COMMAND_TICKET_UNASSIGN, true, &HandleGMTicketUnAssignCommand, "" },
+ { "viewid", rbac::RBAC_PERM_COMMAND_TICKET_VIEWID, true, &HandleGMTicketGetByIdCommand, "" },
+ { "viewname", rbac::RBAC_PERM_COMMAND_TICKET_VIEWNAME, true, &HandleGMTicketGetByNameCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "ticket", rbac::RBAC_PERM_COMMAND_TICKET, false, NULL, "", ticketCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -113,7 +110,7 @@ public:
// If assigned to different player other than current, leave
//! Console can override though
- Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL;
+ Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr;
if (player && ticket->IsAssignedNotTo(player->GetGUID()))
{
handler->PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId(), target.c_str());
@@ -146,14 +143,14 @@ public:
// Ticket should be assigned to the player who tries to close it.
// Console can override though
- Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL;
+ Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr;
if (player && ticket->IsAssignedNotTo(player->GetGUID()))
{
handler->PSendSysMessage(LANG_COMMAND_TICKETCANNOTCLOSE, ticket->GetId());
return true;
}
- sTicketMgr->CloseTicket(ticket->GetId(), player ? player->GetGUID() : ObjectGuid(uint64(-1)));
+ sTicketMgr->ResolveAndCloseTicket(ticket->GetId(), player ? player->GetGUID() : ObjectGuid(uint64(0)));
sTicketMgr->UpdateLastChange();
std::string msg = ticket->FormatMessageString(*handler, player ? player->GetName().c_str() : "Console", NULL, NULL, NULL, NULL);
@@ -190,7 +187,7 @@ public:
// Cannot comment ticket assigned to someone else
//! Console excluded
- Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL;
+ Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr;
if (player && ticket->IsAssignedNotTo(player->GetGUID()))
{
handler->PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId());
@@ -220,7 +217,9 @@ public:
if (!*args)
return false;
- uint32 ticketId = atoi(args);
+ char* ticketIdStr = strtok((char*)args, " ");
+ uint32 ticketId = atoi(ticketIdStr);
+
GmTicket* ticket = sTicketMgr->GetTicket(ticketId);
if (!ticket || ticket->IsClosed() || ticket->IsCompleted())
{
@@ -228,10 +227,28 @@ public:
return true;
}
+ char* response = strtok(NULL, "\n");
+ if (response)
+ {
+ // Cannot add response to ticket, assigned to someone else
+ //! Console excluded
+ Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr;
+ if (player && ticket->IsAssignedNotTo(player->GetGUID()))
+ {
+ handler->PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId());
+ return true;
+ }
+
+ ticket->AppendResponse(response);
+ }
+
if (Player* player = ticket->GetPlayer())
ticket->SendResponse(player->GetSession());
+ Player* gm = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr;
+
SQLTransaction trans = SQLTransaction(NULL);
+ ticket->SetResolvedBy(gm ? gm->GetGUID() : ObjectGuid(uint64(0)));
ticket->SetCompleted();
ticket->SaveToDB(trans);
@@ -476,7 +493,7 @@ public:
// Cannot add response to ticket, assigned to someone else
//! Console excluded
- Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL;
+ Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr;
if (player && ticket->IsAssignedNotTo(player->GetGUID()))
{
handler->PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId());
diff --git a/src/server/scripts/Commands/cs_titles.cpp b/src/server/scripts/Commands/cs_titles.cpp
index 74a2f9f5aaf..bc6027ce3c3 100644
--- a/src/server/scripts/Commands/cs_titles.cpp
+++ b/src/server/scripts/Commands/cs_titles.cpp
@@ -33,25 +33,22 @@ class titles_commandscript : public CommandScript
public:
titles_commandscript() : CommandScript("titles_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand titlesSetCommandTable[] =
+ static std::vector<ChatCommand> titlesSetCommandTable =
{
- { "mask", rbac::RBAC_PERM_COMMAND_TITLES_SET_MASK, false, &HandleTitlesSetMaskCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "mask", rbac::RBAC_PERM_COMMAND_TITLES_SET_MASK, false, &HandleTitlesSetMaskCommand, "" },
};
- static ChatCommand titlesCommandTable[] =
+ static std::vector<ChatCommand> titlesCommandTable =
{
- { "add", rbac::RBAC_PERM_COMMAND_TITLES_ADD, false, &HandleTitlesAddCommand, "", NULL },
- { "current", rbac::RBAC_PERM_COMMAND_TITLES_CURRENT, false, &HandleTitlesCurrentCommand, "", NULL },
- { "remove", rbac::RBAC_PERM_COMMAND_TITLES_REMOVE, false, &HandleTitlesRemoveCommand, "", NULL },
+ { "add", rbac::RBAC_PERM_COMMAND_TITLES_ADD, false, &HandleTitlesAddCommand, "" },
+ { "current", rbac::RBAC_PERM_COMMAND_TITLES_CURRENT, false, &HandleTitlesCurrentCommand, "" },
+ { "remove", rbac::RBAC_PERM_COMMAND_TITLES_REMOVE, false, &HandleTitlesRemoveCommand, "" },
{ "set", rbac::RBAC_PERM_COMMAND_TITLES_SET, false, NULL, "", titlesSetCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "titles", rbac::RBAC_PERM_COMMAND_TITLES, false, NULL, "", titlesCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp
index c9da1ed9635..30ee8254f72 100644
--- a/src/server/scripts/Commands/cs_wp.cpp
+++ b/src/server/scripts/Commands/cs_wp.cpp
@@ -34,23 +34,21 @@ class wp_commandscript : public CommandScript
public:
wp_commandscript() : CommandScript("wp_commandscript") { }
- ChatCommand* GetCommands() const override
+ std::vector<ChatCommand> GetCommands() const override
{
- static ChatCommand wpCommandTable[] =
+ static std::vector<ChatCommand> wpCommandTable =
{
- { "add", rbac::RBAC_PERM_COMMAND_WP_ADD, false, &HandleWpAddCommand, "", NULL },
- { "event", rbac::RBAC_PERM_COMMAND_WP_EVENT, false, &HandleWpEventCommand, "", NULL },
- { "load", rbac::RBAC_PERM_COMMAND_WP_LOAD, false, &HandleWpLoadCommand, "", NULL },
- { "modify", rbac::RBAC_PERM_COMMAND_WP_MODIFY, false, &HandleWpModifyCommand, "", NULL },
- { "unload", rbac::RBAC_PERM_COMMAND_WP_UNLOAD, false, &HandleWpUnLoadCommand, "", NULL },
- { "reload", rbac::RBAC_PERM_COMMAND_WP_RELOAD, false, &HandleWpReloadCommand, "", NULL },
- { "show", rbac::RBAC_PERM_COMMAND_WP_SHOW, false, &HandleWpShowCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "add", rbac::RBAC_PERM_COMMAND_WP_ADD, false, &HandleWpAddCommand, "" },
+ { "event", rbac::RBAC_PERM_COMMAND_WP_EVENT, false, &HandleWpEventCommand, "" },
+ { "load", rbac::RBAC_PERM_COMMAND_WP_LOAD, false, &HandleWpLoadCommand, "" },
+ { "modify", rbac::RBAC_PERM_COMMAND_WP_MODIFY, false, &HandleWpModifyCommand, "" },
+ { "unload", rbac::RBAC_PERM_COMMAND_WP_UNLOAD, false, &HandleWpUnLoadCommand, "" },
+ { "reload", rbac::RBAC_PERM_COMMAND_WP_RELOAD, false, &HandleWpReloadCommand, "" },
+ { "show", rbac::RBAC_PERM_COMMAND_WP_SHOW, false, &HandleWpShowCommand, "" },
};
- static ChatCommand commandTable[] =
+ static std::vector<ChatCommand> commandTable =
{
{ "wp", rbac::RBAC_PERM_COMMAND_WP, false, NULL, "", wpCommandTable },
- { NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -150,7 +148,7 @@ public:
path_number = strtok((char*)args, " ");
uint32 pathid = 0;
- uint32 guidLow = 0;
+ ObjectGuid::LowType guidLow = 0;
Creature* target = handler->getSelectedCreature();
// Did player provide a path_id?
@@ -179,7 +177,7 @@ public:
return true;
}
- guidLow = target->GetDBTableGUIDLow();
+ guidLow = target->GetSpawnId();
PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_CREATURE_ADDON_BY_GUID);
@@ -246,7 +244,7 @@ public:
return true;
}
- uint32 guildLow = target->GetDBTableGUIDLow();
+ uint32 guildLow = target->GetSpawnId();
if (target->GetCreatureAddon())
{
@@ -376,6 +374,12 @@ public:
if (show == "del")
{
+ if (!arg_id)
+ {
+ handler->SendSysMessage("|cffff33ffERROR: Waypoint script guid not present.|r");
+ return true;
+ }
+
id = atoi(arg_id);
stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID);
@@ -568,7 +572,7 @@ public:
}
// The visual waypoint
- wpGuid = target->GetGUIDLow();
+ wpGuid = target->GetGUID().GetCounter();
// User did select a visual waypoint?
@@ -579,7 +583,7 @@ public:
if (!result)
{
- handler->PSendSysMessage(LANG_WAYPOINT_NOTFOUNDSEARCH, target->GetGUIDLow());
+ handler->PSendSysMessage(LANG_WAYPOINT_NOTFOUNDSEARCH, target->GetGUID().GetCounter());
// Select waypoint number from database
// Since we compare float values, we have to deal with
// some difficulties.
@@ -628,7 +632,7 @@ public:
handler->PSendSysMessage("|cff00ff00DEBUG: wp modify del, PathID: |r|cff00ffff%u|r", pathid);
if (wpGuid != 0)
- if (Creature* wpCreature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HIGHGUID_UNIT, VISUAL_WAYPOINT, wpGuid)))
+ if (Creature* wpCreature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HighGuid::Unit, VISUAL_WAYPOINT, wpGuid)))
{
wpCreature->CombatStop();
wpCreature->DeleteFromDB();
@@ -661,7 +665,7 @@ public:
// Respawn the owner of the waypoints
if (wpGuid != 0)
{
- if (Creature* wpCreature = map->GetCreature(ObjectGuid(HIGHGUID_UNIT, VISUAL_WAYPOINT, wpGuid)))
+ if (Creature* wpCreature = map->GetCreature(ObjectGuid(HighGuid::Unit, VISUAL_WAYPOINT, wpGuid)))
{
wpCreature->CombatStop();
wpCreature->DeleteFromDB();
@@ -669,7 +673,7 @@ public:
}
// re-create
Creature* wpCreature2 = new Creature();
- if (!wpCreature2->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), VISUAL_WAYPOINT, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation()))
+ if (!wpCreature2->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, chr->GetPhaseMaskForSpawn(), VISUAL_WAYPOINT, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation()))
{
handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT);
delete wpCreature2;
@@ -680,7 +684,7 @@ public:
wpCreature2->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
// To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells();
/// @todo Should we first use "Create" then use "LoadFromDB"?
- if (!wpCreature2->LoadCreatureFromDB(wpCreature2->GetDBTableGUIDLow(), map))
+ if (!wpCreature2->LoadCreatureFromDB(wpCreature2->GetSpawnId(), map))
{
handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT);
delete wpCreature2;
@@ -782,7 +786,7 @@ public:
}
stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_ALL_BY_WPGUID);
- stmt->setUInt32(0, target->GetGUIDLow());
+ stmt->setUInt32(0, target->GetGUID().GetCounter());
PreparedQueryResult result = WorldDatabase.Query(stmt);
if (!result)
@@ -842,7 +846,7 @@ public:
{
Field* fields = result2->Fetch();
uint32 wpguid = fields[0].GetUInt32();
- Creature* creature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HIGHGUID_UNIT, VISUAL_WAYPOINT, wpguid));
+ Creature* creature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HighGuid::Unit, VISUAL_WAYPOINT, wpguid));
if (!creature)
{
@@ -886,7 +890,7 @@ public:
float o = chr->GetOrientation();
Creature* wpCreature = new Creature();
- if (!wpCreature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o))
+ if (!wpCreature->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o))
{
handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id);
delete wpCreature;
@@ -895,14 +899,14 @@ public:
// Set "wpguid" column to the visual waypoint
stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_WPGUID);
- stmt->setInt32(0, int32(wpCreature->GetGUIDLow()));
+ stmt->setInt32(0, int32(wpCreature->GetGUID().GetCounter()));
stmt->setUInt32(1, pathid);
stmt->setUInt32(2, point);
WorldDatabase.Execute(stmt);
wpCreature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
// To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells();
- if (!wpCreature->LoadCreatureFromDB(wpCreature->GetDBTableGUIDLow(), map))
+ if (!wpCreature->LoadCreatureFromDB(wpCreature->GetSpawnId(), map))
{
handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id);
delete wpCreature;
@@ -948,7 +952,7 @@ public:
Map* map = chr->GetMap();
Creature* creature = new Creature();
- if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o))
+ if (!creature->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o))
{
handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id);
delete creature;
@@ -956,7 +960,7 @@ public:
}
creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
- if (!creature->LoadCreatureFromDB(creature->GetDBTableGUIDLow(), map))
+ if (!creature->LoadCreatureFromDB(creature->GetSpawnId(), map))
{
handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id);
delete creature;
@@ -997,7 +1001,7 @@ public:
Map* map = chr->GetMap();
Creature* creature = new Creature();
- if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o))
+ if (!creature->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o))
{
handler->PSendSysMessage(LANG_WAYPOINT_NOTCREATED, id);
delete creature;
@@ -1005,7 +1009,7 @@ public:
}
creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
- if (!creature->LoadCreatureFromDB(creature->GetDBTableGUIDLow(), map))
+ if (!creature->LoadCreatureFromDB(creature->GetSpawnId(), map))
{
handler->PSendSysMessage(LANG_WAYPOINT_NOTCREATED, id);
delete creature;
@@ -1037,8 +1041,8 @@ public:
do
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
- Creature* creature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HIGHGUID_UNIT, VISUAL_WAYPOINT, guid));
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
+ Creature* creature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HighGuid::Unit, VISUAL_WAYPOINT, guid));
if (!creature)
{
handler->PSendSysMessage(LANG_WAYPOINT_NOTREMOVED, guid);
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp
deleted file mode 100644
index c2261785782..00000000000
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp
+++ /dev/null
@@ -1,116 +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/>.
- */
-
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-
-enum Spells
-{
- SPELL_SHADOWBOLT = 17228,
- SPELL_CURSEOFTONGUES = 15470,
- SPELL_CURSEOFWEAKNESS = 17227,
- SPELL_DEMONARMOR = 11735,
- SPELL_ENVELOPINGWEB = 15471
-};
-
-enum Events
-{
- EVENT_SHADOWBOLT = 1,
- EVENT_CURSE_OF_TONGUES = 2,
- EVENT_CURSE_OF_WEAKNESS = 3,
- EVENT_DEMON_ARMOR = 4,
- EVENT_ENVELOPING_WEB = 5
-};
-
-class boss_anubshiah : public CreatureScript
-{
- public:
- boss_anubshiah() : CreatureScript("boss_anubshiah") { }
-
- struct boss_anubshiahAI : public ScriptedAI
- {
- boss_anubshiahAI(Creature* creature) : ScriptedAI(creature) { }
-
- void Reset() override
- {
- _events.Reset();
- }
-
- void EnterCombat(Unit* /*who*/) override
- {
- _events.ScheduleEvent(EVENT_SHADOWBOLT, 7000);
- _events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 24000);
- _events.ScheduleEvent(EVENT_CURSE_OF_WEAKNESS, 12000);
- _events.ScheduleEvent(EVENT_DEMON_ARMOR, 3000);
- _events.ScheduleEvent(EVENT_ENVELOPING_WEB, 16000);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
-
- _events.Update(diff);
-
- while (uint32 eventId = _events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_SHADOWBOLT:
- DoCast(me, SPELL_SHADOWBOLT);
- _events.ScheduleEvent(EVENT_SHADOWBOLT, 7000);
- break;
- case EVENT_CURSE_OF_TONGUES:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(target, SPELL_CURSEOFTONGUES);
- _events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 18000);
- break;
- case EVENT_CURSE_OF_WEAKNESS:
- DoCastVictim(SPELL_CURSEOFWEAKNESS);
- _events.ScheduleEvent(EVENT_CURSE_OF_WEAKNESS, 45000);
- break;
- case EVENT_DEMON_ARMOR:
- DoCast(me, SPELL_DEMONARMOR);
- _events.ScheduleEvent(EVENT_DEMON_ARMOR, 300000);
- break;
- case EVENT_ENVELOPING_WEB:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(target, SPELL_ENVELOPINGWEB);
- _events.ScheduleEvent(EVENT_ENVELOPING_WEB, 12000);
- break;
- default:
- break;
- }
- }
-
- DoMeleeAttackIfReady();
- }
-
- private:
- EventMap _events;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new boss_anubshiahAI(creature);
- }
-};
-
-void AddSC_boss_anubshiah()
-{
- new boss_anubshiah();
-}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp
deleted file mode 100644
index 83702ffb16d..00000000000
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp
+++ /dev/null
@@ -1,93 +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/>.
- */
-
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-
-enum Spells
-{
- SPELL_WHIRLWIND = 15589,
- SPELL_MORTALSTRIKE = 24573
-};
-
-enum Events
-{
- EVENT_WHIRLWIND = 1,
- EVENT_MORTALSTRIKE = 2
-};
-
-class boss_gorosh_the_dervish : public CreatureScript
-{
- public:
- boss_gorosh_the_dervish() : CreatureScript("boss_gorosh_the_dervish") { }
-
- struct boss_gorosh_the_dervishAI : public ScriptedAI
- {
- boss_gorosh_the_dervishAI(Creature* creature) : ScriptedAI(creature) { }
-
- void Reset() override
- {
- _events.Reset();
- }
-
- void EnterCombat(Unit* /*who*/) override
- {
- _events.ScheduleEvent(EVENT_WHIRLWIND, 12000);
- _events.ScheduleEvent(EVENT_MORTALSTRIKE, 22000);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
-
- _events.Update(diff);
-
- while (uint32 eventId = _events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_WHIRLWIND:
- DoCast(me, SPELL_WHIRLWIND);
- _events.ScheduleEvent(EVENT_WHIRLWIND, 15000);
- break;
- case EVENT_MORTALSTRIKE:
- DoCastVictim(SPELL_MORTALSTRIKE);
- _events.ScheduleEvent(EVENT_MORTALSTRIKE, 15000);
- break;
- default:
- break;
- }
- }
-
- DoMeleeAttackIfReady();
- }
-
- private:
- EventMap _events;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new boss_gorosh_the_dervishAI(creature);
- }
-};
-
-void AddSC_boss_gorosh_the_dervish()
-{
- new boss_gorosh_the_dervish();
-}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp
deleted file mode 100644
index 44dbbe3f4c2..00000000000
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp
+++ /dev/null
@@ -1,110 +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/>.
- */
-
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-
-enum Grizzle
-{
- SPELL_GROUNDTREMOR = 6524,
- SPELL_FRENZY = 28371,
- EMOTE_FRENZY_KILL = 0
-};
-
-enum Events
-{
- EVENT_GROUNDTREMOR = 1,
- EVENT_FRENZY = 2
-};
-
-enum Phases
-{
- PHASE_ONE = 1,
- PHASE_TWO = 2
-};
-
-class boss_grizzle : public CreatureScript
-{
- public:
- boss_grizzle() : CreatureScript("boss_grizzle") { }
-
- struct boss_grizzleAI : public ScriptedAI
- {
- boss_grizzleAI(Creature* creature) : ScriptedAI(creature) { }
-
- void Reset() override
- {
- _events.Reset();
- }
-
- void EnterCombat(Unit* /*who*/) override
- {
- _events.SetPhase(PHASE_ONE);
- _events.ScheduleEvent(EVENT_GROUNDTREMOR, 12000);
- }
-
- void DamageTaken(Unit* /*attacker*/, uint32& damage) override
- {
- if (me->HealthBelowPctDamaged(50, damage) && _events.IsInPhase(PHASE_ONE))
- {
- _events.SetPhase(PHASE_TWO);
- _events.ScheduleEvent(EVENT_FRENZY, 0, 0, PHASE_TWO);
- }
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
-
- _events.Update(diff);
-
- while (uint32 eventId = _events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_GROUNDTREMOR:
- DoCastVictim(SPELL_GROUNDTREMOR);
- _events.ScheduleEvent(EVENT_GROUNDTREMOR, 8000);
- break;
- case EVENT_FRENZY:
- DoCast(me, SPELL_FRENZY);
- Talk(EMOTE_FRENZY_KILL);
- _events.ScheduleEvent(EVENT_FRENZY, 15000, 0, PHASE_TWO);
- break;
- default:
- break;
- }
- }
-
- DoMeleeAttackIfReady();
- }
-
- private:
- EventMap _events;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new boss_grizzleAI(creature);
- }
-};
-
-void AddSC_boss_grizzle()
-{
- new boss_grizzle();
-}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
index 51e1bf67f16..a89571e8197 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
@@ -367,9 +367,9 @@ public:
}
}
- void sGossipSelect(Player* player, uint32 sender, uint32 action) override
+ void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
- if (sender == GOSSIP_ID && action == GOSSIP_OPTION_ID)
+ if (menuId == GOSSIP_ID && gossipListId == GOSSIP_OPTION_ID)
{
player->CLOSE_GOSSIP_MENU();
Talk(SAY_GAMESBEGIN_1);
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp
index 636554a0ae4..76ab4736275 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp
@@ -221,9 +221,9 @@ public:
DoMeleeAttackIfReady();
}
- void sGossipSelect(Player* player, uint32 sender, uint32 action) override
+ void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
- if (sender == GOSSIP_ID && action == 0)
+ if (menuId == GOSSIP_ID && gossipListId == 0)
{
player->CLOSE_GOSSIP_MENU();
BeginSpeech(player);
diff --git a/src/server/scripts/EasternKingdoms/CMakeLists.txt b/src/server/scripts/EasternKingdoms/CMakeLists.txt
index fdebfca7979..76e4d36e0a9 100644
--- a/src/server/scripts/EasternKingdoms/CMakeLists.txt
+++ b/src/server/scripts/EasternKingdoms/CMakeLists.txt
@@ -17,12 +17,9 @@ set(scripts_STAT_SRCS
EasternKingdoms/AlteracValley/boss_vanndar.cpp
EasternKingdoms/AlteracValley/alterac_valley.cpp
EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp
- EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp
EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
- EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp
EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp
EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp
- EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp
EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp
EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp
EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp
diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
index 64513fece8b..c1470d3bc47 100644
--- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
+++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
@@ -203,10 +203,6 @@ public:
void AggroAllPlayers(Creature* temp)
{
Map::PlayerList const &PlList = me->GetMap()->GetPlayers();
-
- if (PlList.isEmpty())
- return;
-
for (Map::PlayerList::const_iterator i = PlList.begin(); i != PlList.end(); ++i)
{
if (Player* player = i->GetSource())
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
index 0b5c3302890..96c7c5d8102 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
@@ -108,7 +108,7 @@ public:
{
Talk(SAY_DEATH);
if (Unit* midnight = ObjectAccessor::GetUnit(*me, Midnight))
- midnight->Kill(midnight);
+ midnight->KillSelf();
}
void UpdateAI(uint32 diff) override;
@@ -264,7 +264,7 @@ void boss_attumen::boss_attumenAI::UpdateAI(uint32 diff)
}
Midnight.Clear();
me->SetVisible(false);
- me->Kill(me);
+ me->KillSelf();
} else ResetTimer -= diff;
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
index 8965b64767a..0a287173ada 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
@@ -181,23 +181,21 @@ public:
// temporary store for the best suitable beam reciever
Unit* target = me;
- if (Map* map = me->GetMap())
- {
- Map::PlayerList const& players = map->GetPlayers();
+ Map::PlayerList const& players = me->GetMap()->GetPlayers();
- // get the best suitable target
- for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
- {
- Player* p = i->GetSource();
- if (p && p->IsAlive() // alive
- && (!target || target->GetDistance2d(portal)>p->GetDistance2d(portal)) // closer than current best
- && !p->HasAura(PlayerDebuff[j]) // not exhausted
- && !p->HasAura(PlayerBuff[(j + 1) % 3]) // not on another beam
- && !p->HasAura(PlayerBuff[(j + 2) % 3])
- && IsBetween(me, p, portal)) // on the beam
- target = p;
- }
+ // get the best suitable target
+ for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
+ {
+ Player* p = i->GetSource();
+ if (p && p->IsAlive() // alive
+ && (!target || target->GetDistance2d(portal)>p->GetDistance2d(portal)) // closer than current best
+ && !p->HasAura(PlayerDebuff[j]) // not exhausted
+ && !p->HasAura(PlayerBuff[(j + 1) % 3]) // not on another beam
+ && !p->HasAura(PlayerBuff[(j + 2) % 3])
+ && IsBetween(me, p, portal)) // on the beam
+ target = p;
}
+
// buff the target
if (target->GetTypeId() == TYPEID_PLAYER)
target->AddAura(PlayerBuff[j], target);
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
index 0abba3dfff4..d11c4a6e584 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
@@ -295,7 +295,7 @@ public:
{
Unit* axe = ObjectAccessor::GetUnit(*me, axes[i]);
if (axe && axe->IsAlive())
- axe->Kill(axe);
+ axe->KillSelf();
axes[i].Clear();
}
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
index f3c59654295..8aba0a15462 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
@@ -25,7 +25,6 @@ EndScriptData */
/* ContentData
npc_barnes
-npc_berthold
npc_image_of_medivh
EndContentData */
@@ -310,11 +309,7 @@ public:
{
if (WipeTimer <= diff)
{
- Map* map = me->GetMap();
- if (!map->IsDungeon())
- return;
-
- Map::PlayerList const &PlayerList = map->GetPlayers();
+ Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
if (PlayerList.isEmpty())
return;
@@ -416,41 +411,6 @@ public:
};
/*###
-# npc_berthold
-####*/
-
-#define GOSSIP_ITEM_TELEPORT "Teleport me to the Guardian's Library"
-
-class npc_berthold : public CreatureScript
-{
-public:
- npc_berthold() : CreatureScript("npc_berthold") { }
-
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
- {
- player->PlayerTalkClass->ClearMenus();
- if (action == GOSSIP_ACTION_INFO_DEF + 1)
- player->CastSpell(player, SPELL_TELEPORT, true);
-
- player->CLOSE_GOSSIP_MENU();
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (InstanceScript* instance = creature->GetInstanceScript())
- {
- // Check if Shade of Aran event is done
- if (instance->GetData(TYPE_ARAN) == DONE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_TELEPORT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- }
-
- player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
- return true;
- }
-};
-
-/*###
# npc_image_of_medivh
####*/
@@ -554,8 +514,6 @@ public:
uint32 NextStep(uint32 step)
{
- Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID);
- Map* map = me->GetMap();
switch (step)
{
case 0: return 9999999;
@@ -563,21 +521,21 @@ public:
me->Yell(SAY_DIALOG_MEDIVH_1, LANG_UNIVERSAL);
return 10000;
case 2:
- if (arca)
+ if (Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID))
arca->Yell(SAY_DIALOG_ARCANAGOS_2, LANG_UNIVERSAL);
return 20000;
case 3:
me->Yell(SAY_DIALOG_MEDIVH_3, LANG_UNIVERSAL);
return 10000;
case 4:
- if (arca)
+ if (Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID))
arca->Yell(SAY_DIALOG_ARCANAGOS_4, LANG_UNIVERSAL);
return 20000;
case 5:
me->Yell(SAY_DIALOG_MEDIVH_5, LANG_UNIVERSAL);
return 20000;
case 6:
- if (arca)
+ if (Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID))
arca->Yell(SAY_DIALOG_ARCANAGOS_6, LANG_UNIVERSAL);
return 10000;
case 7:
@@ -591,15 +549,15 @@ public:
me->TextEmote(EMOTE_DIALOG_MEDIVH_7);
return 10000;
case 10:
- if (arca)
+ if (Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID))
DoCast(arca, SPELL_CONFLAGRATION_BLAST, false);
return 1000;
case 11:
- if (arca)
+ if (Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID))
arca->Yell(SAY_DIALOG_ARCANAGOS_8, LANG_UNIVERSAL);
return 5000;
case 12:
- if (arca)
+ if (Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID))
{
arca->GetMotionMaster()->MovePoint(0, -11010.82f, -1761.18f, 156.47f);
arca->setActive(true);
@@ -611,27 +569,27 @@ public:
me->Yell(SAY_DIALOG_MEDIVH_9, LANG_UNIVERSAL);
return 10000;
case 14:
+ {
me->SetVisible(false);
me->ClearInCombat();
- if (map->IsDungeon())
+ InstanceMap::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
+ for (InstanceMap::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
{
- InstanceMap::PlayerList const &PlayerList = map->GetPlayers();
- for (InstanceMap::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
+ if (i->GetSource()->IsAlive())
{
- if (i->GetSource()->IsAlive())
- {
- if (i->GetSource()->GetQuestStatus(9645) == QUEST_STATUS_INCOMPLETE)
- i->GetSource()->CompleteQuest(9645);
- }
+ if (i->GetSource()->GetQuestStatus(9645) == QUEST_STATUS_INCOMPLETE)
+ i->GetSource()->CompleteQuest(9645);
}
}
return 50000;
+ }
case 15:
- if (arca)
+ if (Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID))
arca->DealDamage(arca, arca->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
return 5000;
- default : return 9999999;
+ default:
+ return 9999999;
}
}
@@ -668,6 +626,5 @@ public:
void AddSC_karazhan()
{
new npc_barnes();
- new npc_berthold();
new npc_image_of_medivh();
}
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
index a95ac9aaa20..e4cc7c0e84a 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
@@ -473,7 +473,7 @@ public:
if (FlameStrikeTimer <= diff)
{
DoCast(me, SPELL_FLAMESTRIKE1_NORMAL, true);
- me->Kill(me);
+ me->KillSelf();
} else FlameStrikeTimer -= diff;
}
};
@@ -636,7 +636,7 @@ public:
if (HatchTimer <= diff)
{
me->SummonCreature(CREATURE_PHOENIX, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000);
- me->Kill(me);
+ me->KillSelf();
} else HatchTimer -= diff;
}
};
@@ -675,7 +675,7 @@ public:
void UpdateAI(uint32 diff) override
{
if (DespawnTimer <= diff)
- me->Kill(me);
+ me->KillSelf();
else
DespawnTimer -= diff;
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
index f57de5316ab..480fd8848f5 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
@@ -139,7 +139,7 @@ class boss_selin_fireheart : public CreatureScript
for (Creature* crystal : Crystals)
{
if (crystal && crystal->IsAlive())
- crystal->Kill(crystal);
+ crystal->KillSelf();
}
}
@@ -218,7 +218,7 @@ class boss_selin_fireheart : public CreatureScript
Creature* CrystalChosen = ObjectAccessor::GetCreature(*me, CrystalGUID);
if (CrystalChosen && CrystalChosen->IsAlive())
- CrystalChosen->Kill(CrystalChosen);
+ CrystalChosen->KillSelf();
CrystalGUID.Clear();
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp
index 9b303fce89d..9c904dcada9 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp
@@ -145,39 +145,13 @@ public:
m_uiTransformTimer = MINUTE*IN_MILLISECONDS;
}
- // some targeting issues with the spell, so use this workaround as temporary solution
- void DoWorkaroundForQuestCredit()
- {
- Map* map = me->GetMap();
-
- if (!map || map->IsHeroic())
- return;
-
- Map::PlayerList const &lList = map->GetPlayers();
-
- if (lList.isEmpty())
- return;
-
- SpellInfo const* spell = sSpellMgr->GetSpellInfo(SPELL_ORB_KILL_CREDIT);
-
- for (Map::PlayerList::const_iterator i = lList.begin(); i != lList.end(); ++i)
- {
- if (Player* player = i->GetSource())
- {
- if (spell && spell->Effects[0].MiscValue)
- player->KilledMonsterCredit(spell->Effects[0].MiscValue);
- }
- }
- }
-
void UpdateAI(uint32 uiDiff) override
{
if (m_uiTransformTimer)
{
if (m_uiTransformTimer <= uiDiff)
{
- DoCast(me, SPELL_ORB_KILL_CREDIT, false);
- DoWorkaroundForQuestCredit();
+ DoCast(me, SPELL_ORB_KILL_CREDIT, true);
// Transform and update entry, now ready for quest/read gossip
DoCast(me, SPELL_TRANSFORM_TO_KAEL, false);
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
index b37d505d766..f2d7f23bdc7 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
@@ -93,11 +93,6 @@ class npc_unworthy_initiate : public CreatureScript
public:
npc_unworthy_initiate() : CreatureScript("npc_unworthy_initiate") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_unworthy_initiateAI(creature);
- }
-
struct npc_unworthy_initiateAI : public ScriptedAI
{
npc_unworthy_initiateAI(Creature* creature) : ScriptedAI(creature)
@@ -156,7 +151,7 @@ public:
me->CastSpell(me, SPELL_DK_INITIATE_VISUAL, true);
if (Player* starter = ObjectAccessor::GetPlayer(*me, playerGUID))
- sCreatureTextMgr->SendChat(me, SAY_EVENT_ATTACK, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, starter);
+ Talk(SAY_EVENT_ATTACK, starter);
phase = PHASE_TO_ATTACK;
}
@@ -286,6 +281,11 @@ public:
}
}
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_unworthy_initiateAI(creature);
+ }
};
class npc_unworthy_initiate_anchor : public CreatureScript
@@ -457,6 +457,7 @@ enum Spells_DKI
//SPELL_DUEL_TRIGGERED = 52990,
SPELL_DUEL_VICTORY = 52994,
SPELL_DUEL_FLAG = 52991,
+ SPELL_GROVEL = 7267,
};
enum Says_VBM
@@ -494,8 +495,6 @@ public:
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15);
- sCreatureTextMgr->SendChat(creature, SAY_DUEL, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player);
-
player->CastSpell(creature, SPELL_DUEL, false);
player->CastSpell(player, SPELL_DUEL_FLAG, true);
}
@@ -518,11 +517,6 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_death_knight_initiateAI(creature);
- }
-
struct npc_death_knight_initiateAI : public CombatAI
{
npc_death_knight_initiateAI(Creature* creature) : CombatAI(creature)
@@ -557,6 +551,7 @@ public:
if (!m_bIsDuelInProgress && pSpell->Id == SPELL_DUEL)
{
m_uiDuelerGUID = pCaster->GetGUID();
+ Talk(SAY_DUEL, pCaster);
m_bIsDuelInProgress = true;
}
}
@@ -577,7 +572,7 @@ public:
pDoneBy->AttackStop();
me->CastSpell(pDoneBy, SPELL_DUEL_VICTORY, true);
lose = true;
- me->CastSpell(me, 7267, true);
+ me->CastSpell(me, SPELL_GROVEL, true);
me->RestoreFaction();
}
}
@@ -607,13 +602,13 @@ public:
{
if (lose)
{
- if (!me->HasAura(7267))
+ if (!me->HasAura(SPELL_GROVEL))
EnterEvadeMode();
return;
}
else if (me->GetVictim() && me->EnsureVictim()->GetTypeId() == TYPEID_PLAYER && me->EnsureVictim()->HealthBelowPct(10))
{
- me->EnsureVictim()->CastSpell(me->GetVictim(), 7267, true); // beg
+ me->EnsureVictim()->CastSpell(me->GetVictim(), SPELL_GROVEL, true); // beg
me->EnsureVictim()->RemoveGameObject(SPELL_DUEL_FLAG, true);
EnterEvadeMode();
return;
@@ -626,6 +621,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_death_knight_initiateAI(creature);
+ }
};
/*######
@@ -729,13 +728,19 @@ class npc_dark_rider_of_acherus : public CreatureScript
## npc_salanar_the_horseman
######*/
-enum Spells_Salanar
+enum SalanarTheHorseman
{
- SPELL_REALM_OF_SHADOWS = 52693,
+ GOSSIP_SALANAR_MENU = 9739,
+ GOSSIP_SALANAR_OPTION = 0,
+ SALANAR_SAY = 0,
+ QUEST_INTO_REALM_OF_SHADOWS = 12687,
+ NPC_DARK_RIDER_OF_ACHERUS = 28654,
+ NPC_SALANAR_IN_REALM_OF_SHADOWS = 28788,
SPELL_EFFECT_STOLEN_HORSE = 52263,
SPELL_DELIVER_STOLEN_HORSE = 52264,
SPELL_CALL_DARK_RIDER = 52266,
- SPELL_EFFECT_OVERTAKE = 52349
+ SPELL_EFFECT_OVERTAKE = 52349,
+ SPELL_REALM_OF_SHADOWS = 52693
};
class npc_salanar_the_horseman : public CreatureScript
@@ -743,15 +748,19 @@ class npc_salanar_the_horseman : public CreatureScript
public:
npc_salanar_the_horseman() : CreatureScript("npc_salanar_the_horseman") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_salanar_the_horsemanAI(creature);
- }
-
struct npc_salanar_the_horsemanAI : public ScriptedAI
{
npc_salanar_the_horsemanAI(Creature* creature) : ScriptedAI(creature) { }
+ void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ {
+ if (menuId == GOSSIP_SALANAR_MENU && gossipListId == GOSSIP_SALANAR_OPTION)
+ {
+ player->CastSpell(player, SPELL_REALM_OF_SHADOWS, true);
+ player->PlayerTalkClass->SendCloseGossip();
+ }
+ }
+
void SpellHit(Unit* caster, const SpellInfo* spell) override
{
if (spell->Id == SPELL_DELIVER_STOLEN_HORSE)
@@ -766,7 +775,7 @@ public:
caster->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
caster->setFaction(35);
DoCast(caster, SPELL_CALL_DARK_RIDER, true);
- if (Creature* Dark_Rider = me->FindNearestCreature(28654, 15))
+ if (Creature* Dark_Rider = me->FindNearestCreature(NPC_DARK_RIDER_OF_ACHERUS, 15))
ENSURE_AI(npc_dark_rider_of_acherus::npc_dark_rider_of_acherusAI, Dark_Rider->AI())->InitDespawnHorse(caster);
}
}
@@ -784,10 +793,11 @@ public:
{
if (Player* player = charmer->ToPlayer())
{
- // for quest Into the Realm of Shadows(12687)
- if (me->GetEntry() == 28788 && player->GetQuestStatus(12687) == QUEST_STATUS_INCOMPLETE)
+ // for quest Into the Realm of Shadows(QUEST_INTO_REALM_OF_SHADOWS)
+ if (me->GetEntry() == NPC_SALANAR_IN_REALM_OF_SHADOWS && player->GetQuestStatus(QUEST_INTO_REALM_OF_SHADOWS) == QUEST_STATUS_INCOMPLETE)
{
- player->GroupEventHappens(12687, me);
+ player->GroupEventHappens(QUEST_INTO_REALM_OF_SHADOWS, me);
+ Talk(SALANAR_SAY);
charmer->RemoveAurasDueToSpell(SPELL_EFFECT_OVERTAKE);
if (Creature* creature = who->ToCreature())
{
@@ -796,14 +806,17 @@ public:
}
}
- if (player->HasAura(SPELL_REALM_OF_SHADOWS))
- player->RemoveAurasDueToSpell(SPELL_REALM_OF_SHADOWS);
+ player->RemoveAurasDueToSpell(SPELL_REALM_OF_SHADOWS);
}
}
}
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_salanar_the_horsemanAI(creature);
+ }
};
/*######
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
index 3df07562d50..ce8b094bb83 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
@@ -1218,7 +1218,7 @@ public:
if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) // Lich king disappears here
{
temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN17);
- temp->Kill(temp);
+ temp->KillSelf();
}
JumpToNextStep(10000);
break;
@@ -1293,8 +1293,8 @@ public:
//if (GameObject* go = me->GetMap()->GetGameObject(uiDawnofLightGUID)) // Turn off dawn of light
// go->SetPhaseMask(0, true);
{
- Map* map = me->GetMap(); // search players with in 50 yards for quest credit
- Map::PlayerList const &PlayerList = map->GetPlayers();
+ // search players with in 50 yards for quest credit
+ Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
if (!PlayerList.isEmpty())
{
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
@@ -1633,7 +1633,7 @@ public:
if (temp->IsAlive())
{
temp->SetVisible(false);
- temp->Kill(temp);
+ temp->KillSelf();
}
}
};
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
index 14be8c51bc2..bac4e450a03 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
@@ -359,8 +359,8 @@ public:
{
die = false;
if (Unit* body = ObjectAccessor::GetUnit(*me, bodyGUID))
- body->Kill(body);
- me->Kill(me);
+ body->KillSelf();
+ me->KillSelf();
}
else wait -= diff;
}
@@ -538,11 +538,7 @@ public:
Player* SelectRandomPlayer(float range = 0.0f, bool checkLoS = true)
{
- Map* map = me->GetMap();
- if (!map->IsDungeon())
- return NULL;
-
- Map::PlayerList const &PlayerList = map->GetPlayers();
+ Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
if (PlayerList.isEmpty())
return NULL;
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp
index ed9f7ccb6dd..c41b1d87d61 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp
@@ -121,7 +121,7 @@ class instance_scarlet_monastery : public InstanceMapScript
{
Creature* add = instance->GetCreature(guid);
if (add && add->IsAlive())
- add->Kill(add);
+ add->KillSelf();
}
HorsemanAdds.clear();
HandleGameObject(PumpkinShrineGUID, false);
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
index 8d7d43048b4..f6f6dab866d 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
@@ -106,7 +106,8 @@ public:
void AttackStart(Unit* who) override
{
//can't use entercombat(), boss' dmg aura sets near players in combat, before entering the room's door
- instance->SetData(TYPE_BARON, IN_PROGRESS);
+ if (instance->GetData(TYPE_BARON) == NOT_STARTED)
+ instance->SetData(TYPE_BARON, IN_PROGRESS);
ScriptedAI::AttackStart(who);
}
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
index ba99df8cdd5..60dd27eed90 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
@@ -170,7 +170,7 @@ public:
{
if (Player* player = temp->ToPlayer())
player->KilledMonsterCredit(NPC_RESTLESS, me->GetGUID());
- me->Kill(me);
+ me->KillSelf();
}
}
else
@@ -248,7 +248,7 @@ public:
if (Tagged)
{
if (Die_Timer <= diff)
- me->Kill(me);
+ me->KillSelf();
else Die_Timer -= diff;
}
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
index 31ca716e0fb..77e0e680f4a 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
@@ -698,7 +698,7 @@ public:
if (KillTimer <= diff)
{
- me->Kill(me);
+ me->KillSelf();
KillTimer = 9999999;
} else KillTimer -= diff;
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
index ae327dbb874..c8964b2ff31 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
@@ -551,13 +551,9 @@ public:
bool OnGossipHello(Player* player, GameObject* go) override
{
- Map* map = go->GetMap();
- if (!map->IsDungeon())
- return true;
-
#if MAX_PLAYERS_IN_SPECTRAL_REALM > 0
uint8 SpectralPlayers = 0;
- Map::PlayerList const &PlayerList = map->GetPlayers();
+ Map::PlayerList const &PlayerList = go->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
{
if (i->GetSource() && i->GetSource()->GetPositionZ() < DEMON_REALM_Z + 5)
@@ -569,6 +565,8 @@ public:
player->GetSession()->SendNotification(GO_FAILED);
return true;
}
+#else
+ (void)go;
#endif
player->CastSpell(player, SPELL_TELEPORT_SPECTRAL, true);
@@ -688,12 +686,8 @@ public:
void TeleportAllPlayersBack()
{
- Map* map = me->GetMap();
- if (!map->IsDungeon())
- return;
-
- Map::PlayerList const &playerList = map->GetPlayers();
- Position homePos = me->GetHomePosition();
+ Map::PlayerList const &playerList = me->GetMap()->GetPlayers();
+ Position const& homePos = me->GetHomePosition();
for (Map::PlayerList::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr)
{
Player* player = itr->GetSource();
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
index 4d544ccdeab..e3deac506b0 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
@@ -1112,7 +1112,7 @@ public:
else if (me->IsWithinDistInMap(me->GetVictim(), 3)) // Explode if it's close enough to it's target
{
DoCastVictim(SPELL_FELFIRE_FISSION);
- me->Kill(me);
+ me->KillSelf();
}
}
};
@@ -1172,7 +1172,7 @@ public:
uiTimer = 5000;
break;
case 3:
- me->Kill(me);
+ me->KillSelf();
me->RemoveCorpse();
break;
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
index 3b52e6775b2..1927b0f9829 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
@@ -268,9 +268,9 @@ class npc_harrison_jones : public CreatureScript
void EnterCombat(Unit* /*who*/) override { }
- void sGossipSelect(Player* player, uint32 sender, uint32 action) override
+ void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
- if (me->GetCreatureTemplate()->GossipMenuId == sender && !action)
+ if (me->GetCreatureTemplate()->GossipMenuId == menuId && !gossipListId)
{
player->CLOSE_GOSSIP_MENU();
me->SetFacingToObject(player);
diff --git a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp
index 9cecbc31665..9af23f17dca 100644
--- a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp
@@ -277,145 +277,6 @@ public:
};
/*######
-## npc_anchorite_truuen
-######*/
-
-enum Truuen
-{
- NPC_GHOST_UTHER = 17233,
- NPC_THEL_DANIS = 1854,
- NPC_GHOUL = 1791, //ambush
-
- QUEST_TOMB_LIGHTBRINGER = 9446,
-
- SAY_WP_0 = 0, //Beware! We are attacked!
- SAY_WP_1 = 1, //It must be the purity of the Mark of the Lightbringer that is drawing forth the Scourge to attack us. We must proceed with caution lest we be overwhelmed!
- SAY_WP_2 = 2, //This land truly needs to be cleansed by the Light! Let us continue on to the tomb. It isn't far now...
- SAY_WP_3 = 0, //Be welcome, friends!
- SAY_WP_4 = 0, //Thank you for coming here in remembrance of me. Your efforts in recovering that symbol, while unnecessary, are certainly touching to an old man's heart.
- SAY_WP_5 = 1, //Please, rise my friend. Keep the Blessing as a symbol of the strength of the Light and how heroes long gone might once again rise in each of us to inspire.
- SAY_WP_6 = 2 //Thank you my friend for making this possible. This is a day that I shall never forget! I think I will stay a while. Please return to High Priestess MacDonnell at the camp. I know that she'll be keenly interested to know of what has transpired here.
-};
-
-class npc_anchorite_truuen : public CreatureScript
-{
-public:
- npc_anchorite_truuen() : CreatureScript("npc_anchorite_truuen") { }
-
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
- {
- if (quest->GetQuestId() == QUEST_TOMB_LIGHTBRINGER)
- {
- npc_escortAI* pEscortAI = ENSURE_AI(npc_anchorite_truuen::npc_anchorite_truuenAI, creature->AI());
- pEscortAI->Start(true, true, player->GetGUID());
- }
- return false;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_anchorite_truuenAI(creature);
- }
-
- struct npc_anchorite_truuenAI : public npc_escortAI
- {
- npc_anchorite_truuenAI(Creature* creature) : npc_escortAI(creature)
- {
- Initialize();
- }
-
- void Initialize()
- {
- m_uiChatTimer = 7000;
- }
-
- uint32 m_uiChatTimer;
-
- ObjectGuid UghostGUID;
-
- void Reset() override
- {
- Initialize();
- }
-
- void JustSummoned(Creature* summoned) override
- {
- if (summoned->GetEntry() == NPC_GHOUL)
- summoned->AI()->AttackStart(me);
- }
-
- void WaypointReached(uint32 waypointId) override
- {
- Player* player = GetPlayerForEscort();
-
- switch (waypointId)
- {
- case 8:
- Talk(SAY_WP_0);
- me->SummonCreature(NPC_GHOUL, me->GetPositionX()+7.0f, me->GetPositionY()+7.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000);
- me->SummonCreature(NPC_GHOUL, me->GetPositionX()+5.0f, me->GetPositionY()+5.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000);
- break;
- case 9:
- Talk(SAY_WP_1);
- break;
- case 14:
- me->SummonCreature(NPC_GHOUL, me->GetPositionX()+7.0f, me->GetPositionY()+7.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000);
- me->SummonCreature(NPC_GHOUL, me->GetPositionX()+5.0f, me->GetPositionY()+5.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000);
- me->SummonCreature(NPC_GHOUL, me->GetPositionX()+10.0f, me->GetPositionY()+10.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000);
- me->SummonCreature(NPC_GHOUL, me->GetPositionX()+8.0f, me->GetPositionY()+8.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000);
- break;
- case 15:
- Talk(SAY_WP_2);
- break;
- case 21:
- if (Creature* Theldanis = GetClosestCreatureWithEntry(me, NPC_THEL_DANIS, 150))
- Theldanis->AI()->Talk(SAY_WP_3);
- break;
- case 23:
- if (Creature* Ughost = me->SummonCreature(NPC_GHOST_UTHER, 971.86f, -1825.42f, 81.99f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))
- {
- UghostGUID = Ughost->GetGUID();
- Ughost->SetDisableGravity(true);
- Ughost->AI()->Talk(SAY_WP_4, me);
- }
- m_uiChatTimer = 4000;
- break;
- case 24:
- if (Creature* Ughost = ObjectAccessor::GetCreature(*me, UghostGUID))
- Ughost->AI()->Talk(SAY_WP_5, me);
- m_uiChatTimer = 4000;
- break;
- case 25:
- if (Creature* Ughost = ObjectAccessor::GetCreature(*me, UghostGUID))
- Ughost->AI()->Talk(SAY_WP_6, me);
- m_uiChatTimer = 4000;
- break;
- case 26:
- if (player)
- player->GroupEventHappens(QUEST_TOMB_LIGHTBRINGER, me);
- break;
- }
- }
-
- void EnterCombat(Unit* /*who*/) override { }
-
- void JustDied(Unit* /*killer*/) override
- {
- if (Player* player = GetPlayerForEscort())
- player->FailQuest(QUEST_TOMB_LIGHTBRINGER);
- }
-
- void UpdateAI(uint32 uiDiff) override
- {
- npc_escortAI::UpdateAI(uiDiff);
- DoMeleeAttackIfReady();
- if (HasEscortState(STATE_ESCORT_ESCORTING))
- m_uiChatTimer = 6000;
- }
- };
-};
-
-/*######
##
######*/
@@ -425,5 +286,4 @@ void AddSC_western_plaguelands()
new npc_myranda_the_hag();
new npc_the_scourge_cauldron();
new npc_andorhal_tower();
- new npc_anchorite_truuen();
}
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
index 8d9406adee1..ab7509c7a2b 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
@@ -226,7 +226,7 @@ public:
}
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
DoCast(player, SPELL_TELEPORT_DARNASSUS);
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
index 254e3a41d6b..d0a9b233454 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
@@ -235,7 +235,7 @@ public:
if (AnetheronGUID)
{
Creature* boss = ObjectAccessor::GetCreature(*me, AnetheronGUID);
- if (!boss || (boss && boss->isDead()))
+ if (!boss || boss->isDead())
{
me->setDeathState(JUST_DIED);
me->RemoveCorpse();
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
index 08942e3393f..8bfdee067b2 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
@@ -200,7 +200,6 @@ public:
CrippleTimer = 50000;
WarstompTimer = 10000;
CheckTimer = 5000;
- instance = creature->GetInstanceScript();
AzgalorGUID = instance->GetGuidData(DATA_AZGALOR);
}
@@ -208,7 +207,6 @@ public:
uint32 WarstompTimer;
uint32 CheckTimer;
ObjectGuid AzgalorGUID;
- InstanceScript* instance;
void Reset() override
{
@@ -248,7 +246,7 @@ public:
if (AzgalorGUID)
{
Creature* boss = ObjectAccessor::GetCreature(*me, AzgalorGUID);
- if (!boss || (boss && boss->isDead()))
+ if (!boss || boss->isDead())
{
me->setDeathState(JUST_DIED);
me->RemoveCorpse();
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
index 70ecaad3d8d..c39fbc90795 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
@@ -218,7 +218,7 @@ public:
break;
case 5:
me->SetVisible(false);
- me->Kill(me);
+ me->KillSelf();
break;
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
index b5d2931377f..a73a6b8d998 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
@@ -817,7 +817,7 @@ public:
cityman1->AI()->Talk(SAY_PHASE204);
cityman1->SetTarget(me->GetGUID());
if (Creature* cityman0 = ObjectAccessor::GetCreature(*me, citymenGUID[0]))
- cityman0->Kill(cityman0);
+ cityman0->KillSelf();
me->SetTarget(citymenGUID[1]);
}
JumpToNextStep(0);
@@ -829,7 +829,7 @@ public:
break;
case 33:
if (Creature* cityman1 = ObjectAccessor::GetCreature(*me, citymenGUID[1]))
- cityman1->Kill(cityman1);
+ cityman1->KillSelf();
JumpToNextStep(1000);
break;
case 34:
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
index 780cf6646a3..33b8516657a 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
@@ -433,15 +433,11 @@ public:
}
//kill credit Creature for quest
- Map* map = me->GetMap();
- Map::PlayerList const& players = map->GetPlayers();
- if (!players.isEmpty() && map->IsDungeon())
+ Map::PlayerList const& players = me->GetMap()->GetPlayers();
+ for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
{
- for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
- {
- if (Player* player = itr->GetSource())
- player->KilledMonsterCredit(20156);
- }
+ if (Player* player = itr->GetSource())
+ player->KilledMonsterCredit(20156);
}
//alot will happen here, thrall and taretha talk, erozion appear at spot to explain
diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp
index d8966ec76c1..b57d1b78de0 100644
--- a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp
@@ -54,14 +54,10 @@ public:
Player* GetPlayerInMap()
{
Map::PlayerList const& players = instance->GetPlayers();
-
- if (!players.isEmpty())
+ for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
{
- for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
- {
- if (Player* player = itr->GetSource())
- return player;
- }
+ if (Player* player = itr->GetSource())
+ return player;
}
TC_LOG_DEBUG("scripts", "Instance Razorfen Kraul: GetPlayerInMap, but PlayerList is empty!");
return NULL;
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
index 463d1ee7e0b..8ccc5f0b4ce 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
@@ -143,8 +143,6 @@ class boss_ossirian : public CreatureScript
Talk(SAY_AGGRO);
Map* map = me->GetMap();
- if (!map->IsDungeon())
- return;
WorldPacket data(SMSG_WEATHER, (4+4+4));
data << uint32(WEATHER_STATE_HEAVY_SANDSTORM) << float(1) << uint8(0);
@@ -153,7 +151,7 @@ class boss_ossirian : public CreatureScript
for (uint8 i = 0; i < NUM_TORNADOS; ++i)
{
Position Point = me->GetRandomPoint(RoomCenter, RoomRadius);
- if (Creature* Tornado = me->GetMap()->SummonCreature(NPC_SAND_VORTEX, Point))
+ if (Creature* Tornado = map->SummonCreature(NPC_SAND_VORTEX, Point))
Tornado->CastSpell(Tornado, SPELL_SAND_STORM, true);
}
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
index f967bd6a217..6016893a785 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
@@ -586,21 +586,10 @@ public:
//WisperTimer
if (WisperTimer <= diff)
{
- Map* map = me->GetMap();
- if (!map->IsDungeon())
- return;
-
//Play random sound to the zone
- Map::PlayerList const &PlayerList = map->GetPlayers();
-
- if (!PlayerList.isEmpty())
- {
- for (Map::PlayerList::const_iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr)
- {
- if (Player* pPlr = itr->GetSource())
- pPlr->PlayDirectSound(RANDOM_SOUND_WHISPER, pPlr);
- }
- }
+ Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
+ for (Map::PlayerList::const_iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr)
+ me->PlayDirectSound(RANDOM_SOUND_WHISPER, itr->GetSource());
//One random wisper every 90 - 300 seconds
WisperTimer = urand(90000, 300000);
@@ -928,7 +917,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
- p->Kill(p);
+ p->KillSelf();
}
void Reset() override
@@ -954,7 +943,7 @@ public:
//KillSelfTimer
if (KillSelfTimer <= diff)
{
- me->Kill(me);
+ me->KillSelf();
return;
} else KillSelfTimer -= diff;
@@ -1008,7 +997,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
- p->Kill(p);
+ p->KillSelf();
}
void Reset() override
@@ -1036,7 +1025,7 @@ public:
if (EvadeTimer <= diff)
{
if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
- p->Kill(p);
+ p->KillSelf();
//Dissapear and reappear at new position
me->SetVisible(false);
@@ -1044,7 +1033,7 @@ public:
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);
if (!target)
{
- me->Kill(me);
+ me->KillSelf();
return;
}
@@ -1124,7 +1113,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
- p->Kill(p);
+ p->KillSelf();
}
void Reset() override
@@ -1153,7 +1142,7 @@ public:
if (EvadeTimer <= diff)
{
if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
- p->Kill(p);
+ p->KillSelf();
//Dissapear and reappear at new position
me->SetVisible(false);
@@ -1161,7 +1150,7 @@ public:
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);
if (!target)
{
- me->Kill(me);
+ me->KillSelf();
return;
}
@@ -1242,7 +1231,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
if (Unit* p = ObjectAccessor::GetUnit(*me, Portal))
- p->Kill(p);
+ p->KillSelf();
}
void Reset() override
diff --git a/src/server/scripts/Kalimdor/zone_azshara.cpp b/src/server/scripts/Kalimdor/zone_azshara.cpp
index 6727aa69552..d6aa943123b 100644
--- a/src/server/scripts/Kalimdor/zone_azshara.cpp
+++ b/src/server/scripts/Kalimdor/zone_azshara.cpp
@@ -345,7 +345,7 @@ public:
}
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
player->CLOSE_GOSSIP_MENU();
me->CastSpell(player, SPELL_GIVE_SOUTHFURY_MOONSTONE, true);
diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
index 388834d1eff..52e32d3d37c 100644
--- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
@@ -230,7 +230,7 @@ public:
Talk(ATTACK_YELL, who);
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
player->CLOSE_GOSSIP_MENU();
me->setFaction(FACTION_HOSTILE);
diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
index ab2e82171f1..0ae870b27ee 100644
--- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
@@ -272,7 +272,7 @@ public:
if (killer->GetGUID() == legoso->GetGUID() ||
(group && group->IsMember(killer->GetGUID())) ||
- killer->GetGUIDLow() == legoso->AI()->GetData(DATA_EVENT_STARTER_GUID))
+ killer->GetGUID().GetCounter() == legoso->AI()->GetData(DATA_EVENT_STARTER_GUID))
legoso->AI()->DoAction(ACTION_LEGOSO_SIRONAS_KILLED);
}
}
@@ -370,7 +370,7 @@ public:
{
if (quest->GetQuestId() == QUEST_ENDING_THEIR_WORLD)
{
- SetData(DATA_EVENT_STARTER_GUID, player->GetGUIDLow());
+ SetData(DATA_EVENT_STARTER_GUID, player->GetGUID().GetCounter());
Start(true, true, player->GetGUID(), quest);
}
}
@@ -541,7 +541,7 @@ public:
case PHASE_PLANT_FIRST_DETONATE: // first explosives detonate finish
for (GuidList::iterator itr = _explosivesGuids.begin(); itr != _explosivesGuids.end(); ++itr)
{
- if (GameObject* explosive = sObjectAccessor->GetGameObject(*me, *itr))
+ if (GameObject* explosive = ObjectAccessor::GetGameObject(*me, *itr))
me->RemoveGameObject(explosive, true);
}
_explosivesGuids.clear();
@@ -638,7 +638,7 @@ public:
case PHASE_PLANT_SECOND_DETONATE: // second explosives detonate finish
for (GuidList::iterator itr = _explosivesGuids.begin(); itr != _explosivesGuids.end(); ++itr)
{
- if (GameObject* explosive = sObjectAccessor->GetGameObject(*me, *itr))
+ if (GameObject* explosive = ObjectAccessor::GetGameObject(*me, *itr))
me->RemoveGameObject(explosive, true);
}
_explosivesGuids.clear();
@@ -808,7 +808,7 @@ public:
private:
int8 _phase;
uint32 _moveTimer;
- uint32 _eventStarterGuidLow;
+ ObjectGuid::LowType _eventStarterGuidLow;
GuidList _explosivesGuids;
EventMap _events;
};
diff --git a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp
index b0800918765..fba0956ccfc 100644
--- a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp
+++ b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp
@@ -352,7 +352,7 @@ class spell_ooze_zap_channel_end : public SpellScriptLoader
PreventHitDefaultEffect(effIndex);
if (Player* player = GetCaster()->ToPlayer())
player->CastSpell(player, SPELL_OOZE_CHANNEL_CREDIT, true);
- GetHitUnit()->Kill(GetHitUnit());
+ GetHitUnit()->KillSelf();
}
void Register() override
diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp
index 163620230ef..c7decd3e286 100644
--- a/src/server/scripts/Kalimdor/zone_moonglade.cpp
+++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp
@@ -108,64 +108,6 @@ public:
};
/*######
-## npc_great_bear_spirit
-######*/
-
-#define GOSSIP_BEAR1 "What do you represent, spirit?"
-#define GOSSIP_BEAR2 "I seek to understand the importance of strength of the body."
-#define GOSSIP_BEAR3 "I seek to understand the importance of strength of the heart."
-#define GOSSIP_BEAR4 "I have heard your words, Great Bear Spirit, and I understand. I now seek your blessings to fully learn the way of the Claw."
-
-class npc_great_bear_spirit : public CreatureScript
-{
-public:
- npc_great_bear_spirit() : CreatureScript("npc_great_bear_spirit") { }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- player->PlayerTalkClass->ClearMenus();
- switch (action)
- {
- case GOSSIP_ACTION_INFO_DEF:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BEAR2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- player->SEND_GOSSIP_MENU(4721, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF + 1:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BEAR3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
- player->SEND_GOSSIP_MENU(4733, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF + 2:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BEAR4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
- player->SEND_GOSSIP_MENU(4734, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF + 3:
- player->SEND_GOSSIP_MENU(4735, creature->GetGUID());
- if (player->GetQuestStatus(5929) == QUEST_STATUS_INCOMPLETE)
- player->AreaExploredOrEventHappens(5929);
- if (player->GetQuestStatus(5930) == QUEST_STATUS_INCOMPLETE)
- player->AreaExploredOrEventHappens(5930);
- break;
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- //ally or horde quest
- if (player->GetQuestStatus(5929) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(5930) == QUEST_STATUS_INCOMPLETE)
- {
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BEAR1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
- player->SEND_GOSSIP_MENU(4719, creature->GetGUID());
- }
- else
- player->SEND_GOSSIP_MENU(4718, creature->GetGUID());
-
- return true;
- }
-
-};
-
-/*######
## npc_silva_filnaveth
######*/
@@ -712,7 +654,6 @@ public:
void AddSC_moonglade()
{
new npc_bunthen_plainswind();
- new npc_great_bear_spirit();
new npc_silva_filnaveth();
new npc_clintar_spirit();
new npc_omen();
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
index cfed13a8f38..d8ebfbbd743 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
@@ -230,11 +230,7 @@ public:
// Roll Insanity
uint32 spell = GetSpellForPhaseMask(phase);
uint32 spell2 = GetSpellForPhaseMask(nextPhase);
- Map* map = me->GetMap();
- if (!map)
- return;
-
- Map::PlayerList const &PlayerList = map->GetPlayers();
+ Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
if (!PlayerList.isEmpty())
{
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
index 7cb2c0e5178..240e8a7b957 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
@@ -185,7 +185,7 @@ public:
who->RemoveAurasByType(SPELL_AURA_MOD_STEALTH);
AttackStart(who);
}
- else if (me->GetMap()->IsDungeon())
+ else
{
who->SetInCombatWith(me);
me->AddThreat(who, 0.0f);
@@ -433,7 +433,7 @@ public:
{
ENSURE_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerok = true;
ENSURE_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerokFail = false;
- me->Kill(me);
+ me->KillSelf();
}
}
break;
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
index b4627d7f941..3b12104a90b 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
@@ -338,14 +338,14 @@ struct dummy_dragonAI : public ScriptedAI
if (instance->GetBossState(DATA_SARTHARION) != IN_PROGRESS)
instance->SetBossState(DATA_SHADRON, DONE);
if (Creature* acolyte = me->FindNearestCreature(NPC_ACOLYTE_OF_SHADRON, 100.0f))
- acolyte->Kill(acolyte);
+ acolyte->KillSelf();
break;
case NPC_VESPERON:
spellId = SPELL_POWER_OF_VESPERON;
if (instance->GetBossState(DATA_SARTHARION) != IN_PROGRESS)
instance->SetBossState(DATA_VESPERON, DONE);
if (Creature* acolyte = me->FindNearestCreature(NPC_ACOLYTE_OF_VESPERON, 100.0f))
- acolyte->Kill(acolyte);
+ acolyte->KillSelf();
break;
}
@@ -652,23 +652,19 @@ class npc_acolyte_of_shadron : public CreatureScript
if (ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SHADRON)))
instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED);
- Map* map = me->GetMap();
- if (map->IsDungeon())
- {
- Map::PlayerList const& PlayerList = map->GetPlayers();
+ Map::PlayerList const& PlayerList = me->GetMap()->GetPlayers();
- if (PlayerList.isEmpty())
- return;
+ if (PlayerList.isEmpty())
+ return;
- for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
+ for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
+ {
+ if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_SHIFT) && !i->GetSource()->GetVictim())
{
- if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_SHIFT) && !i->GetSource()->GetVictim())
- {
- i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_SHIFT_REMOVAL_ALL, true);
- i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_RESIDUE, true);
- i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT);
- i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT_ENTER);
- }
+ i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_SHIFT_REMOVAL_ALL, true);
+ i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_RESIDUE, true);
+ i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT);
+ i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT_ENTER);
}
}
@@ -740,26 +736,22 @@ class npc_acolyte_of_vesperon : public CreatureScript
vesperon->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP);
}
- Map* map = me->GetMap();
- if (map->IsDungeon())
- {
- Map::PlayerList const &PlayerList = map->GetPlayers();
+ Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
- if (PlayerList.isEmpty())
- return;
+ if (PlayerList.isEmpty())
+ return;
- for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
+ for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
+ {
+ if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_SHIFT) && !i->GetSource()->GetVictim())
{
- if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_SHIFT) && !i->GetSource()->GetVictim())
- {
- i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_SHIFT_REMOVAL_ALL, true);
- i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_RESIDUE, true);
- i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT);
- i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT_ENTER);
- }
- if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_TORMENT_VESP) && !i->GetSource()->GetVictim())
- i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP);
+ i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_SHIFT_REMOVAL_ALL, true);
+ i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_RESIDUE, true);
+ i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT);
+ i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT_ENTER);
}
+ if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_TORMENT_VESP) && !i->GetSource()->GetVictim())
+ i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP);
}
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_TWILIGHT_TORMENT_VESP_ACO);
@@ -956,7 +948,7 @@ public:
//DoCastVictim(57620, true);
//DoCastVictim(57874, true);
me->RemoveAllAuras();
- me->Kill(me);
+ me->KillSelf();
}
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index 0b8fa7459a8..6bc49de5319 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -360,11 +360,11 @@ class boss_halion : public CreatureScript
if (Creature* twilightHalion = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TWILIGHT_HALION)))
if (twilightHalion->IsAlive())
- twilightHalion->Kill(twilightHalion);
+ twilightHalion->KillSelf();
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER)))
if (controller->IsAlive())
- controller->Kill(controller);
+ controller->KillSelf();
}
Position const* GetMeteorStrikePosition() const { return &_meteorStrikePos; }
@@ -523,7 +523,7 @@ class boss_twilight_halion : public CreatureScript
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER)))
if (controller->IsAlive())
- controller->Kill(controller);
+ controller->KillSelf();
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
index c375e5c1b95..512016c6eeb 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
@@ -254,7 +254,7 @@ public:
if (uiChargeTimer <= uiDiff)
{
Map::PlayerList const& players = me->GetMap()->GetPlayers();
- if (me->GetMap()->IsDungeon() && !players.isEmpty())
+ if (!players.isEmpty())
{
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
{
@@ -281,7 +281,7 @@ public:
if (Unit* pPassenger = pVehicle->GetPassenger(SEAT_ID_0))
{
Map::PlayerList const& players = me->GetMap()->GetPlayers();
- if (me->GetMap()->IsDungeon() && !players.isEmpty())
+ if (!players.isEmpty())
{
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
{
@@ -400,7 +400,7 @@ public:
if (uiInterceptTimer <= uiDiff)
{
Map::PlayerList const& players = me->GetMap()->GetPlayers();
- if (me->GetMap()->IsDungeon() && !players.isEmpty())
+ if (!players.isEmpty())
{
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
{
@@ -867,7 +867,7 @@ public:
else
{
Map::PlayerList const& players = me->GetMap()->GetPlayers();
- if (me->GetMap()->IsDungeon() && !players.isEmpty())
+ if (!players.isEmpty())
{
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
{
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
index abeaff421cf..aeaf8a70ba5 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
@@ -376,7 +376,7 @@ class boss_prince_keleseth_icc : public CreatureScript
void InitializeAI() override
{
- if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow()))
+ if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetSpawnId()))
if (data->curhealth)
_spawnHealth = data->curhealth;
@@ -591,7 +591,7 @@ class boss_prince_taldaram_icc : public CreatureScript
void InitializeAI() override
{
- if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow()))
+ if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetSpawnId()))
if (data->curhealth)
_spawnHealth = data->curhealth;
@@ -815,7 +815,7 @@ class boss_prince_valanar_icc : public CreatureScript
void InitializeAI() override
{
- if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow()))
+ if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetSpawnId()))
if (data->curhealth)
_spawnHealth = data->curhealth;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
index efc24b94cdb..a7ac5d1227e 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
@@ -203,7 +203,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
{
instance->SetData(DATA_BLOOD_QUICKENING_STATE, DONE);
if (Player* player = killer->ToPlayer())
- player->RewardPlayerAndGroupAtEvent(NPC_INFILTRATOR_MINCHAR_BQ, player);
+ player->RewardPlayerAndGroupAtEvent(Is25ManRaid() ? NPC_INFILTRATOR_MINCHAR_BQ_25 : NPC_INFILTRATOR_MINCHAR_BQ, player);
if (Creature* minchar = me->FindNearestCreature(NPC_INFILTRATOR_MINCHAR_BQ, 200.0f))
{
minchar->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
index 943be27943d..365e0a1588d 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
@@ -203,6 +203,9 @@ enum Misc
{
DATA_MADE_A_MESS = 45374613, // 4537, 4613 are achievement IDs
FACTION_SCOURGE = 974,
+
+ GOSSIP_MENU_MURADIN_BRONZEBEARD = 10934,
+ GOSSIP_MENU_HIGH_OVERLORD_SAURFANG = 10952
};
enum MovePoints
@@ -634,6 +637,15 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
_events.Reset();
}
+ void sGossipSelect(Player* player, uint32 menuId, uint32 /*gossipListId*/) override
+ {
+ if (menuId == GOSSIP_MENU_HIGH_OVERLORD_SAURFANG)
+ {
+ player->PlayerTalkClass->SendCloseGossip();
+ DoAction(ACTION_START_EVENT);
+ }
+ }
+
void DoAction(int32 action) override
{
switch (action)
@@ -798,28 +810,6 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
std::list<Creature*> _guardList;
};
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- InstanceScript* instance = creature->GetInstanceScript();
- if (instance && instance->GetBossState(DATA_DEATHBRINGER_SAURFANG) != DONE)
- {
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "We are ready to go, High Overlord. The Lich King must fall!", 631, -ACTION_START_EVENT);
- player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
- }
-
- return true;
- }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- player->PlayerTalkClass->ClearMenus();
- player->CLOSE_GOSSIP_MENU();
- if (action == -ACTION_START_EVENT)
- creature->AI()->DoAction(ACTION_START_EVENT);
-
- return true;
- }
-
CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_high_overlord_saurfangAI>(creature);
@@ -843,6 +833,15 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
_events.Reset();
}
+ void sGossipSelect(Player* player, uint32 menuId, uint32 /*gossipListId*/) override
+ {
+ if (menuId == GOSSIP_MENU_MURADIN_BRONZEBEARD)
+ {
+ player->PlayerTalkClass->SendCloseGossip();
+ DoAction(ACTION_START_EVENT);
+ }
+ }
+
void DoAction(int32 action) override
{
switch (action)
@@ -946,28 +945,6 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
std::list<Creature*> _guardList;
};
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- InstanceScript* instance = creature->GetInstanceScript();
- if (instance && instance->GetBossState(DATA_DEATHBRINGER_SAURFANG) != DONE)
- {
- player->ADD_GOSSIP_ITEM(0, "Let it begin...", 631, -ACTION_START_EVENT + 1);
- player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
- }
-
- return true;
- }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- player->PlayerTalkClass->ClearMenus();
- player->CLOSE_GOSSIP_MENU();
- if (action == -ACTION_START_EVENT + 1)
- creature->AI()->DoAction(ACTION_START_EVENT);
-
- return true;
- }
-
CreatureAI* GetAI(Creature* creature) const override
{
return GetIcecrownCitadelAI<npc_muradin_bronzebeard_iccAI>(creature);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
index db0fcee22fa..e3e89d865ff 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
@@ -470,21 +470,11 @@ class spell_festergut_blighted_spores : public SpellScriptLoader
if (target->HasAura(SPELL_ORANGE_BLIGHT_RESIDUE))
return;
- if (target->GetMap() && !target->GetMap()->Is25ManRaid())
- {
- if (target->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_10) != QUEST_STATUS_INCOMPLETE)
- return;
-
- target->CastSpell(target, SPELL_ORANGE_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK);
- }
-
- if (target->GetMap() && target->GetMap()->Is25ManRaid())
- {
- if (target->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_25) != QUEST_STATUS_INCOMPLETE)
- return;
+ uint32 questId = target->GetMap()->Is25ManRaid() ? QUEST_RESIDUE_RENDEZVOUS_25 : QUEST_RESIDUE_RENDEZVOUS_10;
+ if (target->GetQuestStatus(questId) != QUEST_STATUS_INCOMPLETE)
+ return;
- target->CastSpell(target, SPELL_ORANGE_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK);
- }
+ target->CastSpell(target, SPELL_ORANGE_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK);
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
index 68430f6f0f7..babd444288f 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
@@ -492,7 +492,7 @@ public:
_caster->CastSpell(_caster, _spellId, true);
_caster->GetTransport()->AddObjectToRemoveList();
- if (GameObject* go = HashMapHolder<GameObject>::Find(_otherTransport))
+ if (Transport* go = HashMapHolder<Transport>::Find(_otherTransport))
go->AddObjectToRemoveList();
return true;
@@ -770,9 +770,8 @@ class npc_gunship : public CreatureScript
if (isVictory)
{
- if (GameObject* go = HashMapHolder<GameObject>::Find(instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE)))
- if (Transport* otherTransport = go->ToTransport())
- otherTransport->EnableMovement(true);
+ if (Transport* otherTransport = HashMapHolder<Transport>::Find(instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE)))
+ otherTransport->EnableMovement(true);
me->GetTransport()->EnableMovement(true);
@@ -962,7 +961,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
}
}
- void sGossipSelect(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/) override
+ void sGossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->GetTransport()->EnableMovement(true);
@@ -1035,9 +1034,8 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
if (Transport* orgrimsHammer = me->GetTransport())
orgrimsHammer->SummonPassenger(NPC_TELEPORT_PORTAL, OrgrimsHammerTeleportPortal, TEMPSUMMON_TIMED_DESPAWN, NULL, 21000);
- if (GameObject* go = HashMapHolder<GameObject>::Find(_instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE)))
- if (Transport* skybreaker = go->ToTransport())
- skybreaker->SummonPassenger(NPC_TELEPORT_EXIT, SkybreakerTeleportExit, TEMPSUMMON_TIMED_DESPAWN, NULL, 23000);
+ if (Transport* skybreaker = HashMapHolder<Transport>::Find(_instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE)))
+ skybreaker->SummonPassenger(NPC_TELEPORT_EXIT, SkybreakerTeleportExit, TEMPSUMMON_TIMED_DESPAWN, NULL, 23000);
_events.ScheduleEvent(EVENT_ADDS_BOARD_YELL, 6000);
_events.ScheduleEvent(EVENT_ADDS, 60000);
@@ -1231,7 +1229,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
}
}
- void sGossipSelect(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/) override
+ void sGossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->GetTransport()->EnableMovement(true);
@@ -1308,9 +1306,8 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
if (Transport* skybreaker = me->GetTransport())
skybreaker->SummonPassenger(NPC_TELEPORT_PORTAL, SkybreakerTeleportPortal, TEMPSUMMON_TIMED_DESPAWN, NULL, 21000);
- if (GameObject* go = HashMapHolder<GameObject>::Find(_instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE)))
- if (Transport* orgrimsHammer = go->ToTransport())
- orgrimsHammer->SummonPassenger(NPC_TELEPORT_EXIT, OrgrimsHammerTeleportExit, TEMPSUMMON_TIMED_DESPAWN, NULL, 23000);
+ if (Transport* orgrimsHammer = HashMapHolder<Transport>::Find(_instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE)))
+ orgrimsHammer->SummonPassenger(NPC_TELEPORT_EXIT, OrgrimsHammerTeleportExit, TEMPSUMMON_TIMED_DESPAWN, NULL, 23000);
_events.ScheduleEvent(EVENT_ADDS_BOARD_YELL, 6000);
_events.ScheduleEvent(EVENT_ADDS, 60000);
@@ -1397,7 +1394,7 @@ class npc_zafod_boombox : public CreatureScript
me->SetReactState(REACT_PASSIVE);
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
player->AddItem(ITEM_GOBLIN_ROCKET_PACK, 1);
player->PlayerTalkClass->SendCloseGossip();
@@ -1454,9 +1451,8 @@ struct npc_gunship_boarding_addAI : public gunship_npc_AI
if (!myTransport)
return;
- if (GameObject* go = HashMapHolder<GameObject>::Find(Instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE)))
- if (Transport* destTransport = go->ToTransport())
- destTransport->CalculatePassengerPosition(x, y, z, &o);
+ if (Transport* destTransport = HashMapHolder<Transport>::Find(Instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE)))
+ destTransport->CalculatePassengerPosition(x, y, z, &o);
float angle = frand(0, float(M_PI) * 2.0f);
x += 2.0f * std::cos(angle);
@@ -2352,7 +2348,7 @@ class spell_igb_gunship_fall_teleport : public SpellScriptLoader
void SelectTransport(WorldObject*& target)
{
if (InstanceScript* instance = target->GetInstanceScript())
- target = HashMapHolder<GameObject>::Find(instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE));
+ target = HashMapHolder<Transport>::Find(instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE));
}
void RelocateDest(SpellEffIndex /*effIndex*/)
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
index f5843cbfd30..3a745e2c98c 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
@@ -820,7 +820,7 @@ class npc_vengeful_shade : public CreatureScript
case SPELL_VENGEFUL_BLAST_25N:
case SPELL_VENGEFUL_BLAST_10H:
case SPELL_VENGEFUL_BLAST_25H:
- me->Kill(me);
+ me->KillSelf();
break;
default:
break;
@@ -1008,7 +1008,7 @@ class spell_cultist_dark_martyrdom : public SpellScriptLoader
if (Unit* owner = GetCaster()->ToTempSummon()->GetSummoner())
owner->GetAI()->SetGUID(GetCaster()->GetGUID(), GUID_CULTIST);
- GetCaster()->Kill(GetCaster());
+ GetCaster()->KillSelf();
GetCaster()->SetDisplayId(uint32(GetCaster()->GetEntry() == NPC_CULT_FANATIC ? 38009 : 38010));
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
index c1d930cb62c..1a2ebd179fe 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
@@ -892,21 +892,11 @@ class spell_rotface_slime_spray : public SpellScriptLoader
if (target->HasAura(SPELL_GREEN_BLIGHT_RESIDUE))
return;
- if (target->GetMap() && !target->GetMap()->Is25ManRaid())
- {
- if (target->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_10) != QUEST_STATUS_INCOMPLETE)
- return;
-
- target->CastSpell(target, SPELL_GREEN_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK);
- }
-
- if (target->GetMap() && target->GetMap()->Is25ManRaid())
- {
- if (target->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_25) != QUEST_STATUS_INCOMPLETE)
- return;
+ uint32 questId = target->GetMap()->Is25ManRaid() ? QUEST_RESIDUE_RENDEZVOUS_25 : QUEST_RESIDUE_RENDEZVOUS_10;
+ if (target->GetQuestStatus(questId) != QUEST_STATUS_INCOMPLETE)
+ return;
- target->CastSpell(target, SPELL_GREEN_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK);
- }
+ target->CastSpell(target, SPELL_GREEN_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK);
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
index e908d088554..65d99b022dc 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
@@ -648,7 +648,7 @@ class npc_spinestalker : public CreatureScript
// Increase add count
if (!me->isDead())
{
- _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade
+ _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetSpawnId()); // this cannot be in Reset because reset also happens on evade
Reset();
}
}
@@ -671,7 +671,7 @@ class npc_spinestalker : public CreatureScript
void JustRespawned() override
{
ScriptedAI::JustRespawned();
- _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade
+ _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetSpawnId()); // this cannot be in Reset because reset also happens on evade
}
void JustDied(Unit* /*killer*/) override
@@ -784,7 +784,7 @@ class npc_rimefang : public CreatureScript
// Increase add count
if (!me->isDead())
{
- _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade
+ _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetSpawnId()); // this cannot be in Reset because reset also happens on evade
Reset();
}
}
@@ -807,7 +807,7 @@ class npc_rimefang : public CreatureScript
void JustRespawned() override
{
ScriptedAI::JustRespawned();
- _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade
+ _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetSpawnId()); // this cannot be in Reset because reset also happens on evade
}
void JustDied(Unit* /*killer*/) override
@@ -951,7 +951,7 @@ class npc_sindragosa_trash : public CreatureScript
if (!me->isDead())
{
if (me->GetEntry() == NPC_FROSTWING_WHELP)
- _instance->SetData(_frostwyrmId, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade
+ _instance->SetData(_frostwyrmId, me->GetSpawnId()); // this cannot be in Reset because reset also happens on evade
Reset();
}
}
@@ -974,7 +974,7 @@ class npc_sindragosa_trash : public CreatureScript
// Increase add count
if (me->GetEntry() == NPC_FROSTWING_WHELP)
- _instance->SetData(_frostwyrmId, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade
+ _instance->SetData(_frostwyrmId, me->GetSpawnId()); // this cannot be in Reset because reset also happens on evade
}
void SetData(uint32 type, uint32 data) override
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 6c512546a24..4fadc0bf8fa 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -1199,9 +1199,9 @@ class npc_tirion_fordring_tft : public CreatureScript
SetEquipmentSlots(true); // remove glow on ashbringer
}
- void sGossipSelect(Player* /*player*/, uint32 sender, uint32 action) override
+ void sGossipSelect(Player* /*player*/, uint32 menuId, uint32 gossipListId) override
{
- if (me->GetCreatureTemplate()->GossipMenuId == sender && !action)
+ if (me->GetCreatureTemplate()->GossipMenuId == menuId && !gossipListId)
{
_events.SetPhase(PHASE_INTRO);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index 7af550582a0..4a76dc667e8 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -156,7 +156,7 @@ class RisenArchmageCheck
bool operator()(Creature* creature)
{
return creature->IsAlive() && creature->GetEntry() == NPC_RISEN_ARCHMAGE &&
- creature->GetDBTableGUIDLow() && !creature->IsInCombat();
+ creature->GetSpawnId() && !creature->IsInCombat();
}
};
@@ -244,7 +244,7 @@ class ValithriaDespawner : public BasicEvent
creature->DespawnOrUnsummon();
return;
case NPC_RISEN_ARCHMAGE:
- if (!creature->GetDBTableGUIDLow())
+ if (!creature->GetSpawnId())
{
creature->DespawnOrUnsummon();
return;
@@ -297,7 +297,7 @@ class boss_valithria_dreamwalker : public CreatureScript
void InitializeAI() override
{
- if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow()))
+ if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetSpawnId()))
if (data->curhealth)
_spawnHealth = data->curhealth;
@@ -309,7 +309,7 @@ class boss_valithria_dreamwalker : public CreatureScript
{
me->SetHealth(_spawnHealth);
me->SetReactState(REACT_PASSIVE);
- me->LoadCreaturesAddon(true);
+ me->LoadCreaturesAddon();
// immune to percent heals
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_OBS_MOD_HEALTH, true);
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_HEAL_PCT, true);
@@ -712,7 +712,7 @@ class npc_risen_archmage : public CreatureScript
void EnterCombat(Unit* /*target*/) override
{
me->FinishSpell(CURRENT_CHANNELED_SPELL, false);
- if (me->GetDBTableGUIDLow() && _canCallEnterCombat)
+ if (me->GetSpawnId() && _canCallEnterCombat)
{
std::list<Creature*> archmages;
RisenArchmageCheck check;
@@ -750,7 +750,7 @@ class npc_risen_archmage : public CreatureScript
void UpdateAI(uint32 diff) override
{
if (!me->IsInCombat())
- if (me->GetDBTableGUIDLow())
+ if (me->GetSpawnId())
if (!me->GetCurrentSpell(CURRENT_CHANNELED_SPELL))
DoCast(me, SPELL_CORRUPTION);
@@ -1072,7 +1072,7 @@ class npc_dream_cloud : public CreatureScript
_events.Reset();
_events.ScheduleEvent(EVENT_CHECK_PLAYER, 1000);
me->SetCorpseDelay(0); // remove corpse immediately
- me->LoadCreaturesAddon(true);
+ me->LoadCreaturesAddon();
}
void UpdateAI(uint32 diff) override
@@ -1336,7 +1336,7 @@ class spell_dreamwalker_summon_dream_portal : public SpellScriptLoader
if (!GetHitUnit())
return;
- uint32 spellId = RAND<uint32>(71301, 72220, 72223, 72225);
+ uint32 spellId = RAND(71301, 72220, 72223, 72225);
GetHitUnit()->CastSpell(GetHitUnit(), spellId, true);
}
@@ -1367,7 +1367,7 @@ class spell_dreamwalker_summon_nightmare_portal : public SpellScriptLoader
if (!GetHitUnit())
return;
- uint32 spellId = RAND<uint32>(71977, 72481, 72482, 72483);
+ uint32 spellId = RAND(71977, 72481, 72482, 72483);
GetHitUnit()->CastSpell(GetHitUnit(), spellId, true);
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index ab1450a87ea..f05fc48c074 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -545,7 +545,7 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript
case EVENT_MURADIN_RUN:
case EVENT_SAURFANG_RUN:
if (Creature* factionNPC = ObjectAccessor::GetCreature(*me, _factionNPC))
- factionNPC->GetMotionMaster()->MovePath(factionNPC->GetDBTableGUIDLow()*10, false);
+ factionNPC->GetMotionMaster()->MovePath(factionNPC->GetSpawnId() * 10, false);
me->setActive(false);
_damnedKills = 3;
break;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
index 091190b6b4e..e739f5a5036 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
@@ -155,6 +155,7 @@ enum CreaturesIds
NPC_ALCHEMIST_ADRIANNA = 38501,
NPC_ALRIN_THE_AGILE = 38551,
NPC_INFILTRATOR_MINCHAR_BQ = 38558,
+ NPC_INFILTRATOR_MINCHAR_BQ_25 = 39123,
NPC_MINCHAR_BEAM_STALKER = 38557,
NPC_VALITHRIA_DREAMWALKER_QUEST = 38589,
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
index 992ca0b4d74..5354d1772b6 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
@@ -417,14 +417,14 @@ class instance_icecrown_citadel : public InstanceMapScript
if (creature->AI()->GetData(1/*DATA_FROSTWYRM_OWNER*/) == DATA_SPINESTALKER)
{
- SpinestalkerTrash.erase(creature->GetDBTableGUIDLow());
+ SpinestalkerTrash.erase(creature->GetSpawnId());
if (SpinestalkerTrash.empty())
if (Creature* spinestalk = instance->GetCreature(SpinestalkerGUID))
spinestalk->AI()->DoAction(ACTION_START_FROSTWYRM);
}
else
{
- RimefangTrash.erase(creature->GetDBTableGUIDLow());
+ RimefangTrash.erase(creature->GetSpawnId());
if (RimefangTrash.empty())
if (Creature* spinestalk = instance->GetCreature(RimefangGUID))
spinestalk->AI()->DoAction(ACTION_START_FROSTWYRM);
@@ -439,7 +439,7 @@ class instance_icecrown_citadel : public InstanceMapScript
if (GetBossState(DATA_SINDRAGOSA) == DONE)
return;
- FrostwyrmGUIDs.erase(creature->GetDBTableGUIDLow());
+ FrostwyrmGUIDs.erase(creature->GetSpawnId());
if (FrostwyrmGUIDs.empty())
{
instance->LoadGrid(SindragosaSpawnPos.GetPositionX(), SindragosaSpawnPos.GetPositionY());
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
index 733647fdb66..11fe5f41455 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
@@ -17,39 +17,61 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "Player.h"
#include "naxxramas.h"
-enum Says
+enum AnubSays
{
SAY_AGGRO = 0,
SAY_GREET = 1,
- SAY_SLAY = 2
+ SAY_SLAY = 2,
+
+ EMOTE_LOCUST = 3
};
-Position const GuardSummonPos = {3333.72f, -3476.30f, 287.1f, 6.2801f};
+enum GuardSays
+{
+ EMOTE_FRENZY = 0,
+ EMOTE_SPAWN = 1,
+ EMOTE_SCARAB = 2
+};
enum Events
{
- EVENT_IMPALE = 1,
- EVENT_LOCUST,
- EVENT_SPAWN_GUARDIAN_NORMAL,
- EVENT_BERSERK
+ EVENT_IMPALE = 1, // Cast Impale on a random target
+ EVENT_LOCUST, // Begin channeling Locust Swarm
+ EVENT_LOCUST_ENDS, // Locust swarm dissipates
+ EVENT_SPAWN_GUARD, // 10-man only - crypt guard has delayed spawn; also used for the locust swarm crypt guard in both modes
+ EVENT_SCARABS, // spawn corpse scarabs
+ EVENT_BERSERK // Berserk
};
enum Spells
{
- SPELL_IMPALE = 28783,
- SPELL_LOCUST_SWARM = 28785,
+ SPELL_IMPALE = 28783, // 25-man: 56090
+ SPELL_LOCUST_SWARM = 28785, // 25-man: 54021
SPELL_SUMMON_CORPSE_SCARABS_PLR = 29105, // This spawns 5 corpse scarabs on top of player
SPELL_SUMMON_CORPSE_SCARABS_MOB = 28864, // This spawns 10 corpse scarabs on top of dead guards
SPELL_BERSERK = 27680
};
+enum SpawnGroups
+{
+ GROUP_INITIAL_25M = 1,
+ GROUP_SINGLE_SPAWN = 2
+};
+
enum Misc
{
ACHIEV_TIMED_START_EVENT = 9891
};
+enum Phases
+{
+ PHASE_NORMAL = 1,
+ PHASE_SWARM
+};
+
class boss_anubrekhan : public CreatureScript
{
public:
@@ -62,46 +84,64 @@ public:
struct boss_anubrekhanAI : public BossAI
{
- boss_anubrekhanAI(Creature* creature) : BossAI(creature, BOSS_ANUBREKHAN)
+ boss_anubrekhanAI(Creature* creature) : BossAI(creature, BOSS_ANUBREKHAN) { }
+
+ void SummonGuards()
{
- Initialize();
+ if (Is25ManRaid())
+ me->SummonCreatureGroup(GROUP_INITIAL_25M);
}
- void Initialize()
+ void InitializeAI() override
{
- hasTaunted = false;
+ if (!me->isDead())
+ {
+ Reset();
+ SummonGuards();
+ }
}
- bool hasTaunted;
-
void Reset() override
{
_Reset();
+ guardCorpses.clear();
+ }
- Initialize();
+ void JustReachedHome() override
+ {
+ _JustReachedHome();
+ SummonGuards();
+ }
- if (GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL)
- {
- Position pos;
+ void JustSummoned(Creature* summon) override
+ {
+ BossAI::JustSummoned(summon);
- // respawn guard using home position,
- // otherwise, after a wipe, they respawn where boss was at wipe moment.
- pos = me->GetHomePosition();
- pos.m_positionY -= 10.0f;
- me->SummonCreature(NPC_CRYPT_GUARD, pos, TEMPSUMMON_CORPSE_DESPAWN);
+ if (me->IsInCombat())
+ if (summon->GetEntry() == NPC_CRYPT_GUARD)
+ summon->AI()->Talk(EMOTE_SPAWN, me);
+ }
- pos = me->GetHomePosition();
- pos.m_positionY += 10.0f;
- me->SummonCreature(NPC_CRYPT_GUARD, pos, TEMPSUMMON_CORPSE_DESPAWN);
- }
+ void SummonedCreatureDies(Creature* summon, Unit* killer) override
+ {
+ BossAI::SummonedCreatureDies(summon, killer);
+
+ if (summon->GetEntry() == NPC_CRYPT_GUARD)
+ guardCorpses.insert(summon->GetGUID());
+ }
+
+ void SummonedCreatureDespawn(Creature* summon) override
+ {
+ BossAI::SummonedCreatureDespawn(summon);
+
+ if (summon->GetEntry() == NPC_CRYPT_GUARD)
+ guardCorpses.erase(summon->GetGUID());
}
void KilledUnit(Unit* victim) override
{
- /// Force the player to spawn corpse scarabs via spell, @todo Check percent chance for scarabs, 20% at the moment
- if (!(rand32() % 5))
- if (victim->GetTypeId() == TYPEID_PLAYER)
- victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCARABS_PLR, true, NULL, NULL, me->GetGUID());
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCARABS_PLR, true, nullptr, nullptr, me->GetGUID());
Talk(SAY_SLAY);
}
@@ -113,37 +153,22 @@ public:
// start achievement timer (kill Maexna within 20 min)
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
}
+
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
- events.ScheduleEvent(EVENT_IMPALE, urand(10000, 20000));
- events.ScheduleEvent(EVENT_LOCUST, 90000);
- events.ScheduleEvent(EVENT_BERSERK, 600000);
-
- if (GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL)
- events.ScheduleEvent(EVENT_SPAWN_GUARDIAN_NORMAL, urand(15000, 20000));
- }
-
- void MoveInLineOfSight(Unit* who) override
- {
- if (!hasTaunted && me->IsWithinDistInMap(who, 60.0f) && who->GetTypeId() == TYPEID_PLAYER)
- {
- Talk(SAY_GREET);
- hasTaunted = true;
- }
- ScriptedAI::MoveInLineOfSight(who);
- }
- void SummonedCreatureDespawn(Creature* summon) override
- {
- BossAI::SummonedCreatureDespawn(summon);
+ summons.DoZoneInCombat();
- // check if it is an actual killed guard
- if (!me->IsAlive() || summon->IsAlive() || summon->GetEntry() != NPC_CRYPT_GUARD)
- return;
+ events.SetPhase(PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_IMPALE, urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_SCARABS, urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS), 0, PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_LOCUST, urand(80,120) * IN_MILLISECONDS, 0, PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_BERSERK, 10 * MINUTE * IN_MILLISECONDS);
- summon->CastSpell(summon, SPELL_SUMMON_CORPSE_SCARABS_MOB, true, NULL, NULL, me->GetGUID());
+ if (!Is25ManRaid())
+ events.ScheduleEvent(EVENT_SPAWN_GUARD, urand(15, 20) * IN_MILLISECONDS);
}
void UpdateAI(uint32 diff) override
@@ -158,22 +183,44 @@ public:
switch (eventId)
{
case EVENT_IMPALE:
- //Cast Impale on a random target
- //Do NOT cast it when we are afflicted by locust swarm
- if (!me->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_LOCUST_SWARM, me)))
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_IMPALE);
- events.ScheduleEvent(EVENT_IMPALE, urand(10000, 20000));
+ if (events.GetTimeUntilEvent(EVENT_LOCUST) < 5 * IN_MILLISECONDS) break; // don't chain impale tank -> locust swarm
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_IMPALE);
+ else
+ EnterEvadeMode();
+
+ events.ScheduleEvent(EVENT_IMPALE, urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_NORMAL);
+ break;
+ case EVENT_SCARABS:
+ events.ScheduleEvent(EVENT_SCARABS, urand(40 * IN_MILLISECONDS, 60 * IN_MILLISECONDS), 0, PHASE_NORMAL);
+
+ if (!guardCorpses.empty())
+ {
+ if (ObjectGuid target = Trinity::Containers::SelectRandomContainerElement(guardCorpses))
+ if (Creature* creatureTarget = ObjectAccessor::GetCreature(*me, target))
+ {
+ creatureTarget->CastSpell(creatureTarget, SPELL_SUMMON_CORPSE_SCARABS_MOB, true, nullptr, nullptr, me->GetGUID());
+ creatureTarget->AI()->Talk(EMOTE_SCARAB);
+ creatureTarget->DespawnOrUnsummon();
+ }
+ }
break;
case EVENT_LOCUST:
- /// @todo Add Text
+ Talk(EMOTE_LOCUST);
DoCast(me, SPELL_LOCUST_SWARM);
- DoSummon(NPC_CRYPT_GUARD, GuardSummonPos, 0, TEMPSUMMON_CORPSE_DESPAWN);
+ events.ScheduleEvent(EVENT_SPAWN_GUARD, 3 * IN_MILLISECONDS);
+
+ events.ScheduleEvent(EVENT_LOCUST_ENDS, RAID_MODE(19, 23) * IN_MILLISECONDS);
events.ScheduleEvent(EVENT_LOCUST, 90000);
+ events.SetPhase(PHASE_SWARM);
+ break;
+ case EVENT_LOCUST_ENDS:
+ events.ScheduleEvent(EVENT_IMPALE, urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_SCARABS, urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS), 0, PHASE_NORMAL);
+ events.SetPhase(PHASE_NORMAL);
break;
- case EVENT_SPAWN_GUARDIAN_NORMAL:
- /// @todo Add Text
- DoSummon(NPC_CRYPT_GUARD, GuardSummonPos, 0, TEMPSUMMON_CORPSE_DESPAWN);
+ case EVENT_SPAWN_GUARD:
+ me->SummonCreatureGroup(GROUP_SINGLE_SPAWN);
break;
case EVENT_BERSERK:
DoCast(me, SPELL_BERSERK, true);
@@ -182,13 +229,37 @@ public:
}
}
- DoMeleeAttackIfReady();
+ if (events.IsInPhase(PHASE_NORMAL))
+ DoMeleeAttackIfReady();
}
+ private:
+ GuidSet guardCorpses;
};
};
+class at_anubrekhan_entrance : public AreaTriggerScript
+{
+ public:
+ at_anubrekhan_entrance() : AreaTriggerScript("at_anubrekhan_entrance") { }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
+ {
+ InstanceScript* instance = player->GetInstanceScript();
+ if (!instance || instance->GetData(DATA_HAD_ANUBREKHAN_GREET) || instance->GetBossState(BOSS_ANUBREKHAN) != NOT_STARTED)
+ return true;
+
+ if (Creature* anub = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_ANUBREKHAN)))
+ anub->AI()->Talk(SAY_GREET);
+ instance->SetData(DATA_HAD_ANUBREKHAN_GREET, 1u);
+
+ return true;
+ }
+};
+
void AddSC_boss_anubrekhan()
{
new boss_anubrekhan();
+
+ new at_anubrekhan_entrance();
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp
index a87501e885a..dd9061603c8 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp
@@ -18,14 +18,20 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "naxxramas.h"
+#include "Player.h"
+#include "SpellAuras.h"
#include "SpellInfo.h"
enum Yells
{
- SAY_GREET = 0,
- SAY_AGGRO = 1,
- SAY_SLAY = 2,
- SAY_DEATH = 3
+ SAY_GREET = 0,
+ SAY_AGGRO = 1,
+ SAY_SLAY = 2,
+ SAY_DEATH = 3,
+
+ EMOTE_WIDOW_EMBRACE = 4,
+ EMOTE_FRENZY = 5
+
};
enum Spells
@@ -33,7 +39,9 @@ enum Spells
SPELL_POISON_BOLT_VOLLEY = 28796,
SPELL_RAIN_OF_FIRE = 28794,
SPELL_FRENZY = 28798,
- SPELL_WIDOWS_EMBRACE = 28732
+ SPELL_WIDOWS_EMBRACE = 28732,
+
+ SPELL_ADD_FIREBALL = 54095 // 25-man: 54096
};
#define SPELL_WIDOWS_EMBRACE_HELPER RAID_MODE<uint32>(28732, 54097)
@@ -45,6 +53,12 @@ enum Events
EVENT_FRENZY = 3
};
+enum SummonGroups
+{
+ SUMMON_GROUP_WORSHIPPERS = 1,
+ SUMMON_GROUP_FOLLOWERS = 2
+};
+
enum Misc
{
DATA_FRENZY_DISPELS = 1
@@ -57,39 +71,46 @@ class boss_faerlina : public CreatureScript
struct boss_faerlinaAI : public BossAI
{
- boss_faerlinaAI(Creature* creature) : BossAI(creature, BOSS_FAERLINA),
- _frenzyDispels(0), _introDone(false), _delayFrenzy(false)
+ boss_faerlinaAI(Creature* creature) : BossAI(creature, BOSS_FAERLINA), _frenzyDispels(0) { }
+
+ void SummonAdds()
{
+ me->SummonCreatureGroup(SUMMON_GROUP_WORSHIPPERS);
+ if (Is25ManRaid())
+ me->SummonCreatureGroup(SUMMON_GROUP_FOLLOWERS);
}
+ void InitializeAI() override
+ {
+ if (!me->isDead())
+ {
+ Reset();
+ SummonAdds();
+ }
+ }
+
+ void JustReachedHome() override
+ {
+ _JustReachedHome();
+ SummonAdds();
+ }
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
- events.ScheduleEvent(EVENT_POISON, urand(10000, 15000));
- events.ScheduleEvent(EVENT_FIRE, urand(6000, 18000));
- events.ScheduleEvent(EVENT_FRENZY, urand(60000, 80000));
+ summons.DoZoneInCombat();
+ events.ScheduleEvent(EVENT_POISON, urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS));
+ events.ScheduleEvent(EVENT_FIRE, urand(6 * IN_MILLISECONDS, 18 * IN_MILLISECONDS));
+ events.ScheduleEvent(EVENT_FRENZY, urand(60 * IN_MILLISECONDS, 80 * IN_MILLISECONDS));
}
void Reset() override
{
_Reset();
- _delayFrenzy = false;
_frenzyDispels = 0;
}
- void MoveInLineOfSight(Unit* who) override
- {
- if (!_introDone && who->GetTypeId() == TYPEID_PLAYER)
- {
- Talk(SAY_GREET);
- _introDone = true;
- }
-
- BossAI::MoveInLineOfSight(who);
- }
-
void KilledUnit(Unit* /*victim*/) override
{
if (!urand(0, 2))
@@ -106,9 +127,8 @@ class boss_faerlina : public CreatureScript
{
if (spell->Id == SPELL_WIDOWS_EMBRACE_HELPER)
{
- /// @todo Add Text
++_frenzyDispels;
- _delayFrenzy = true;
+ Talk(EMOTE_WIDOW_EMBRACE, caster);
me->Kill(caster);
}
}
@@ -126,12 +146,6 @@ class boss_faerlina : public CreatureScript
if (!UpdateVictim())
return;
- if (_delayFrenzy && !me->HasAura(SPELL_WIDOWS_EMBRACE_HELPER))
- {
- _delayFrenzy = false;
- DoCast(me, SPELL_FRENZY, true);
- }
-
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
@@ -152,13 +166,14 @@ class boss_faerlina : public CreatureScript
events.ScheduleEvent(EVENT_FIRE, urand(6000, 18000));
break;
case EVENT_FRENZY:
- /// @todo Add Text
- if (!me->HasAura(SPELL_WIDOWS_EMBRACE_HELPER))
- DoCast(me, SPELL_FRENZY);
+ if (Aura* widowsEmbrace = me->GetAura(SPELL_WIDOWS_EMBRACE_HELPER))
+ events.ScheduleEvent(EVENT_FRENZY, widowsEmbrace->GetDuration()+1 * IN_MILLISECONDS);
else
- _delayFrenzy = true;
-
- events.ScheduleEvent(EVENT_FRENZY, urand(60000, 80000));
+ {
+ DoCast(SPELL_FRENZY);
+ Talk(EMOTE_FRENZY);
+ events.ScheduleEvent(EVENT_FRENZY, urand(60 * IN_MILLISECONDS, 80 * IN_MILLISECONDS));
+ }
break;
}
}
@@ -168,8 +183,6 @@ class boss_faerlina : public CreatureScript
private:
uint32 _frenzyDispels;
- bool _introDone;
- bool _delayFrenzy;
};
CreatureAI* GetAI(Creature* creature) const override
@@ -192,19 +205,36 @@ class npc_faerlina_add : public CreatureScript
void Reset() override
{
- if (GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL) {
+ if (!Is25ManRaid()) {
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_BIND, true);
me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_CHARM, true);
}
}
+ void EnterCombat(Unit* /*who*/) override
+ {
+ if (Creature* faerlina = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_FAERLINA)))
+ faerlina->AI()->DoZoneInCombat(nullptr, 250.0f);
+ }
+
void JustDied(Unit* /*killer*/) override
{
- if (_instance && GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL)
+ if (!Is25ManRaid())
if (Creature* faerlina = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_FAERLINA)))
DoCast(faerlina, SPELL_WIDOWS_EMBRACE);
}
+ void UpdateAI(uint32 /*diff*/) override
+ {
+ if (!UpdateVictim())
+ return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ DoCastVictim(SPELL_ADD_FIREBALL);
+ DoMeleeAttackIfReady(); // this will only happen if the fireball cast fails for some reason
+ }
+
private:
InstanceScript* const _instance;
};
@@ -226,9 +256,29 @@ class achievement_momma_said_knock_you_out : public AchievementCriteriaScript
}
};
+class at_faerlina_entrance : public AreaTriggerScript
+{
+ public:
+ at_faerlina_entrance() : AreaTriggerScript("at_faerlina_entrance") { }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
+ {
+ InstanceScript* instance = player->GetInstanceScript();
+ if (!instance || instance->GetData(DATA_HAD_FAERLINA_GREET) || instance->GetBossState(BOSS_FAERLINA) != NOT_STARTED)
+ return true;
+
+ if (Creature* faerlina = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_FAERLINA)))
+ faerlina->AI()->Talk(SAY_GREET);
+ instance->SetData(DATA_HAD_FAERLINA_GREET, 1u);
+
+ return true;
+ }
+};
+
void AddSC_boss_faerlina()
{
new boss_faerlina();
new npc_faerlina_add();
+ new at_faerlina_entrance();
new achievement_momma_said_knock_you_out();
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
index dd67f2b1ac0..3778d8d25a0 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
@@ -317,37 +317,30 @@ class boss_gothik : public CreatureScript
bool CheckGroupSplitted()
{
- Map* map = me->GetMap();
- if (map && map->IsDungeon())
+ bool checklife = false;
+ bool checkdead = false;
+ Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
+ for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
{
- Map::PlayerList const &PlayerList = map->GetPlayers();
- if (!PlayerList.isEmpty())
+ if (i->GetSource() && i->GetSource()->IsAlive() &&
+ i->GetSource()->GetPositionX() <= POS_X_NORTH &&
+ i->GetSource()->GetPositionX() >= POS_X_SOUTH &&
+ i->GetSource()->GetPositionY() <= POS_Y_GATE &&
+ i->GetSource()->GetPositionY() >= POS_Y_EAST)
{
- bool checklife = false;
- bool checkdead = false;
- for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
- {
- if (i->GetSource() && i->GetSource()->IsAlive() &&
- i->GetSource()->GetPositionX() <= POS_X_NORTH &&
- i->GetSource()->GetPositionX() >= POS_X_SOUTH &&
- i->GetSource()->GetPositionY() <= POS_Y_GATE &&
- i->GetSource()->GetPositionY() >= POS_Y_EAST)
- {
- checklife = true;
- }
- else if (i->GetSource() && i->GetSource()->IsAlive() &&
- i->GetSource()->GetPositionX() <= POS_X_NORTH &&
- i->GetSource()->GetPositionX() >= POS_X_SOUTH &&
- i->GetSource()->GetPositionY() >= POS_Y_GATE &&
- i->GetSource()->GetPositionY() <= POS_Y_WEST)
- {
- checkdead = true;
- }
-
- if (checklife && checkdead)
- return true;
- }
+ checklife = true;
}
+ else if (i->GetSource() && i->GetSource()->IsAlive() &&
+ i->GetSource()->GetPositionX() <= POS_X_NORTH &&
+ i->GetSource()->GetPositionX() >= POS_X_SOUTH &&
+ i->GetSource()->GetPositionY() >= POS_Y_GATE &&
+ i->GetSource()->GetPositionY() <= POS_Y_WEST)
+ {
+ checkdead = true;
+ }
+
+ if (checklife && checkdead)
+ return true;
}
return false;
@@ -555,20 +548,13 @@ class npc_gothik_minion : public CreatureScript
if (!_EnterEvadeMode())
return;
- Map* map = me->GetMap();
- if (map->IsDungeon())
+ Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
+ for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
{
- Map::PlayerList const &PlayerList = map->GetPlayers();
- if (!PlayerList.isEmpty())
+ if (i->GetSource() && i->GetSource()->IsAlive() && isOnSameSide(i->GetSource()))
{
- for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
- {
- if (i->GetSource() && i->GetSource()->IsAlive() && isOnSameSide(i->GetSource()))
- {
- AttackStart(i->GetSource());
- return;
- }
- }
+ AttackStart(i->GetSource());
+ return;
}
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
index 3d7c128c8dd..36e48d068b5 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
@@ -21,36 +21,42 @@
#include "naxxramas.h"
#include "Player.h"
-enum Heigan
+enum Spells
{
- SPELL_DECREPIT_FEVER = 29998, // 25-man: 55011
- SPELL_SPELL_DISRUPTION = 29310,
- SPELL_PLAGUE_CLOUD = 29350,
-
- SAY_AGGRO = 0,
- SAY_SLAY = 1,
- SAY_TAUNT = 2,
- SAY_DEATH = 3
+ SPELL_DECREPIT_FEVER = 29998, // 25-man: 55011
+ SPELL_SPELL_DISRUPTION = 29310,
+ SPELL_PLAGUE_CLOUD = 29350,
+ SPELL_TELEPORT_SELF = 30211,
+};
+
+enum Yells
+{
+ SAY_AGGRO = 0,
+ SAY_SLAY = 1,
+ SAY_TAUNT = 2,
+ SAY_DEATH = 3,
+
+ EMOTE_DANCE = 4,
+ EMOTE_DANCE_END = 5,
};
enum Events
{
- EVENT_NONE,
- EVENT_DISRUPT,
+ EVENT_DISRUPT = 1,
EVENT_FEVER,
EVENT_ERUPT,
- EVENT_PHASE,
+ EVENT_DANCE,
+ EVENT_DANCE_END
};
enum Phases
{
PHASE_FIGHT = 1,
- PHASE_DANCE,
+ PHASE_DANCE
};
enum Misc
{
- ACTION_SAFETY_DANCE_FAIL = 1,
DATA_SAFETY_DANCE = 19962139
};
@@ -66,39 +72,25 @@ public:
struct boss_heiganAI : public BossAI
{
- boss_heiganAI(Creature* creature) : BossAI(creature, BOSS_HEIGAN)
+ boss_heiganAI(Creature* creature) : BossAI(creature, BOSS_HEIGAN), eruptSection(0), eruptDirection(false), safetyDance(false) { }
+
+ void Reset() override
{
- eruptSection = 0;
- eruptDirection = false;
- safetyDance = false;
- phase = PHASE_FIGHT;
+ me->SetReactState(REACT_AGGRESSIVE);
+ _Reset();
}
- uint32 eruptSection;
- bool eruptDirection;
- bool safetyDance;
- Phases phase;
-
void KilledUnit(Unit* who) override
{
- if (!(rand32() % 5))
- Talk(SAY_SLAY);
+ Talk(SAY_SLAY);
+
if (who->GetTypeId() == TYPEID_PLAYER)
safetyDance = false;
}
- void SetData(uint32 id, uint32 data) override
- {
- if (id == DATA_SAFETY_DANCE)
- safetyDance = data ? true : false;
- }
-
uint32 GetData(uint32 type) const override
{
- if (type == DATA_SAFETY_DANCE)
- return safetyDance ? 1 : 0;
-
- return 0;
+ return (type == DATA_SAFETY_DANCE && safetyDance) ? 1u : 0u;
}
void JustDied(Unit* /*killer*/) override
@@ -111,35 +103,14 @@ public:
{
_EnterCombat();
Talk(SAY_AGGRO);
- EnterPhase(PHASE_FIGHT);
- safetyDance = true;
- }
- void EnterPhase(Phases newPhase)
- {
- phase = newPhase;
- events.Reset();
eruptSection = 3;
- if (phase == PHASE_FIGHT)
- {
- events.ScheduleEvent(EVENT_DISRUPT, urand(10000, 25000));
- events.ScheduleEvent(EVENT_FEVER, urand(15000, 20000));
- events.ScheduleEvent(EVENT_PHASE, 90000);
- events.ScheduleEvent(EVENT_ERUPT, 15000);
- me->GetMotionMaster()->MoveChase(me->GetVictim());
- }
- else
- {
- float x, y, z, o;
- me->GetHomePosition(x, y, z, o);
- me->NearTeleportTo(x, y, z, o - (float(M_PI) / 2));
- me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MoveIdle();
- me->SetTarget(ObjectGuid::Empty);
- DoCastAOE(SPELL_PLAGUE_CLOUD);
- events.ScheduleEvent(EVENT_PHASE, 45000);
- events.ScheduleEvent(EVENT_ERUPT, 8000);
- }
+ events.ScheduleEvent(EVENT_DISRUPT, urand(15 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_FIGHT);
+ events.ScheduleEvent(EVENT_FEVER, urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_FIGHT);
+ events.ScheduleEvent(EVENT_DANCE, 90 * IN_MILLISECONDS, 0, PHASE_FIGHT);
+ events.ScheduleEvent(EVENT_ERUPT, 15 * IN_MILLISECONDS, 0, PHASE_FIGHT);
+
+ safetyDance = true;
}
void UpdateAI(uint32 diff) override
@@ -155,15 +126,36 @@ public:
{
case EVENT_DISRUPT:
DoCastAOE(SPELL_SPELL_DISRUPTION);
- events.ScheduleEvent(EVENT_DISRUPT, urand(5000, 10000));
+ events.ScheduleEvent(EVENT_DISRUPT, 11 * IN_MILLISECONDS);
break;
case EVENT_FEVER:
DoCastAOE(SPELL_DECREPIT_FEVER);
- events.ScheduleEvent(EVENT_FEVER, urand(20000, 25000));
+ events.ScheduleEvent(EVENT_FEVER, urand(20 * IN_MILLISECONDS, 25 * IN_MILLISECONDS));
+ break;
+ case EVENT_DANCE:
+ events.SetPhase(PHASE_DANCE);
+ Talk(SAY_TAUNT);
+ Talk(EMOTE_DANCE);
+ eruptSection = 3;
+ me->SetReactState(REACT_PASSIVE);
+ me->AttackStop();
+ me->StopMoving();
+ DoCast(SPELL_TELEPORT_SELF);
+ DoCastAOE(SPELL_PLAGUE_CLOUD);
+ events.ScheduleEvent(EVENT_DANCE_END, 45 * IN_MILLISECONDS, 0, PHASE_DANCE);
+ events.ScheduleEvent(EVENT_ERUPT, 10 * IN_MILLISECONDS);
break;
- case EVENT_PHASE:
- /// @todo Add missing texts for both phase switches
- EnterPhase(phase == PHASE_FIGHT ? PHASE_DANCE : PHASE_FIGHT);
+ case EVENT_DANCE_END:
+ events.SetPhase(PHASE_FIGHT);
+ Talk(EMOTE_DANCE_END);
+ eruptSection = 3;
+ events.ScheduleEvent(EVENT_DISRUPT, urand(10, 25) * IN_MILLISECONDS, 0, PHASE_FIGHT);
+ events.ScheduleEvent(EVENT_FEVER, urand(15, 20) * IN_MILLISECONDS, 0, PHASE_FIGHT);
+ events.ScheduleEvent(EVENT_DANCE, 90 * IN_MILLISECONDS, 0, PHASE_FIGHT);
+ events.ScheduleEvent(EVENT_ERUPT, 15 * IN_MILLISECONDS, 0, PHASE_FIGHT);
+ me->CastStop();
+ me->SetReactState(REACT_AGGRESSIVE);
+ DoZoneInCombat();
break;
case EVENT_ERUPT:
instance->SetData(DATA_HEIGAN_ERUPT, eruptSection);
@@ -176,13 +168,22 @@ public:
eruptDirection ? ++eruptSection : --eruptSection;
- events.ScheduleEvent(EVENT_ERUPT, phase == PHASE_FIGHT ? 10000 : 3000);
+ if (events.IsInPhase(PHASE_DANCE))
+ events.ScheduleEvent(EVENT_ERUPT, 3 * IN_MILLISECONDS, 0, PHASE_DANCE);
+ else
+ events.ScheduleEvent(EVENT_ERUPT, 10 * IN_MILLISECONDS, 0, PHASE_FIGHT);
break;
}
}
DoMeleeAttackIfReady();
}
+
+ private:
+ uint32 eruptSection;
+ bool eruptDirection;
+
+ bool safetyDance; // is achievement still possible? (= no player deaths yet)
};
};
@@ -205,7 +206,7 @@ class spell_heigan_eruption : public SpellScriptLoader
if (GetHitDamage() >= int32(GetHitPlayer()->GetHealth()))
if (InstanceScript* instance = caster->GetInstanceScript())
if (Creature* Heigan = ObjectAccessor::GetCreature(*caster, instance->GetGuidData(DATA_HEIGAN)))
- Heigan->AI()->SetData(DATA_SAFETY_DANCE, 0);
+ Heigan->AI()->KilledUnit(GetHitPlayer());
}
void Register() override
@@ -223,9 +224,7 @@ class spell_heigan_eruption : public SpellScriptLoader
class achievement_safety_dance : public AchievementCriteriaScript
{
public:
- achievement_safety_dance() : AchievementCriteriaScript("achievement_safety_dance")
- {
- }
+ achievement_safety_dance() : AchievementCriteriaScript("achievement_safety_dance") { }
bool OnCheck(Player* /*player*/, Unit* target) override
{
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
index 33fb43b6bbc..494c173f5fc 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
@@ -27,7 +27,10 @@ enum Spells
SPELL_WARN_NECROTIC_AURA = 59481,
SPELL_SUMMON_SPORE = 29234,
SPELL_DEATHBLOOM = 29865,
- SPELL_INEVITABLE_DOOM = 29204
+ SPELL_INEVITABLE_DOOM = 29204,
+ SPELL_FUNGAL_CREEP = 29232,
+
+ SPELL_DEATHBLOOM_FINAL_DAMAGE = 55594,
};
enum Texts
@@ -72,29 +75,35 @@ class boss_loatheb : public CreatureScript
void Reset() override
{
_Reset();
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_FUNGAL_CREEP);
Initialize();
}
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
- events.ScheduleEvent(EVENT_NECROTIC_AURA, 17000);
- events.ScheduleEvent(EVENT_DEATHBLOOM, 5000);
- events.ScheduleEvent(EVENT_SPORE, IsHeroic() ? 18000 : 36000);
- events.ScheduleEvent(EVENT_INEVITABLE_DOOM, 120000);
+ events.ScheduleEvent(EVENT_NECROTIC_AURA, 17 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_DEATHBLOOM, 5 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SPORE, RAID_MODE(36,18) * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_INEVITABLE_DOOM, 2 * MINUTE * IN_MILLISECONDS);
}
- void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override
+ void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override
{
_sporeLoserData = false;
+ summon->CastSpell(summon,SPELL_FUNGAL_CREEP,true);
}
- uint32 GetData(uint32 id) const override
+ void SummonedCreatureDespawn(Creature* summon) override
{
- if (id != DATA_ACHIEVEMENT_SPORE_LOSER)
- return 0;
+ summons.Despawn(summon);
+ if (summon->IsAlive())
+ summon->CastSpell(summon,SPELL_FUNGAL_CREEP,true);
+ }
- return uint32(_sporeLoserData);
+ uint32 GetData(uint32 id) const override
+ {
+ return (_sporeLoserData && id == DATA_ACHIEVEMENT_SPORE_LOSER) ? 1u : 0u;
}
void UpdateAI(uint32 diff) override
@@ -111,21 +120,29 @@ class boss_loatheb : public CreatureScript
case EVENT_NECROTIC_AURA:
DoCastAOE(SPELL_NECROTIC_AURA);
DoCast(me, SPELL_WARN_NECROTIC_AURA);
- events.ScheduleEvent(EVENT_NECROTIC_AURA, 20000);
- events.ScheduleEvent(EVENT_NECROTIC_AURA_FADING, 14000);
+ events.ScheduleEvent(EVENT_NECROTIC_AURA, 20 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_NECROTIC_AURA_FADING, 14 * IN_MILLISECONDS);
break;
case EVENT_DEATHBLOOM:
DoCastAOE(SPELL_DEATHBLOOM);
- events.ScheduleEvent(EVENT_DEATHBLOOM, 30000);
+ events.ScheduleEvent(EVENT_DEATHBLOOM, 30 * IN_MILLISECONDS);
break;
case EVENT_INEVITABLE_DOOM:
_doomCounter++;
DoCastAOE(SPELL_INEVITABLE_DOOM);
- events.ScheduleEvent(EVENT_INEVITABLE_DOOM, std::max(120000 - _doomCounter * 15000, 15000)); // needs to be confirmed
+ if (_doomCounter > 6)
+ {
+ if (_doomCounter & 1) // odd
+ events.ScheduleEvent(EVENT_INEVITABLE_DOOM, 14 * IN_MILLISECONDS);
+ else
+ events.ScheduleEvent(EVENT_INEVITABLE_DOOM, 17 * IN_MILLISECONDS);
+ }
+ else
+ events.ScheduleEvent(EVENT_INEVITABLE_DOOM, 30 * IN_MILLISECONDS);
break;
case EVENT_SPORE:
DoCast(me, SPELL_SUMMON_SPORE, false);
- events.ScheduleEvent(EVENT_SPORE, IsHeroic() ? 18000 : 36000);
+ events.ScheduleEvent(EVENT_SPORE, RAID_MODE(36,18) * IN_MILLISECONDS);
break;
case EVENT_NECROTIC_AURA_FADING:
Talk(SAY_NECROTIC_AURA_FADING);
@@ -203,9 +220,46 @@ class spell_loatheb_necrotic_aura_warning : public SpellScriptLoader
}
};
+class spell_loatheb_deathbloom : public SpellScriptLoader
+{
+ public:
+ spell_loatheb_deathbloom() : SpellScriptLoader("spell_loatheb_deathbloom") { }
+
+ class spell_loatheb_deathbloom_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_loatheb_deathbloom_AuraScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_DEATHBLOOM_FINAL_DAMAGE))
+ return false;
+ return true;
+ }
+
+ void AfterRemove(AuraEffect const* eff, AuraEffectHandleModes /*mode*/)
+ {
+ if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
+ return;
+
+ GetTarget()->CastSpell(nullptr, SPELL_DEATHBLOOM_FINAL_DAMAGE, true, nullptr, eff, GetCasterGUID());
+ }
+
+ void Register() override
+ {
+ AfterEffectRemove += AuraEffectRemoveFn(spell_loatheb_deathbloom_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_loatheb_deathbloom_AuraScript();
+ }
+};
+
void AddSC_boss_loatheb()
{
new boss_loatheb();
new achievement_spore_loser();
new spell_loatheb_necrotic_aura_warning();
+ new spell_loatheb_deathbloom();
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
index e52731d003e..0d938122f28 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
@@ -18,6 +18,7 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "PassiveAI.h"
+#include "SpellScript.h"
#include "naxxramas.h"
enum Spells
@@ -28,6 +29,14 @@ enum Spells
SPELL_NECROTIC_POISON = 28776,
SPELL_FRENZY = 54123
};
+#define SPELL_FRENZY_HELPER RAID_MODE(54123,54124)
+
+enum Emotes
+{
+ EMOTE_SPIDERS = 0,
+ EMOTE_WEB_WRAP = 1,
+ EMOTE_WEB_SPRAY = 2
+};
enum Creatures
{
@@ -35,12 +44,16 @@ enum Creatures
NPC_SPIDERLING = 17055,
};
-#define MAX_POS_WRAP 3
-const Position PosWrap[MAX_POS_WRAP] =
+#define MAX_WRAP_POSITION 7
+const Position WrapPositions[MAX_WRAP_POSITION] =
{
- {3546.796f, -3869.082f, 296.450f, 0.0f},
- {3531.271f, -3847.424f, 299.450f, 0.0f},
- {3497.067f, -3843.384f, 302.384f, 0.0f},
+ {3453.818f, -3854.651f, 308.7581f, 4.362833f},
+ {3535.042f, -3842.383f, 300.795f, 3.179324f},
+ {3538.399f, -3846.088f, 299.964f, 4.310297f},
+ {3548.464f, -3854.676f, 298.6075f, 4.546609f},
+ {3557.663f, -3870.123f, 297.5027f, 3.756433f},
+ {3560.546f, -3879.353f, 297.4843f, 2.508937f},
+ {3562.535f, -3892.507f, 298.532f, 6.022466f},
};
enum Events
@@ -51,7 +64,24 @@ enum Events
EVENT_POISON,
EVENT_WRAP,
EVENT_SUMMON,
- EVENT_FRENZY,
+};
+
+const float WEB_WRAP_MOVE_SPEED = 20.0f;
+
+struct WebTargetSelector : public std::unary_function<Unit*, bool>
+{
+ WebTargetSelector(Unit* maexxna) : _maexxna(maexxna) {}
+ bool operator()(Unit const* target) const
+ {
+ if (_maexxna->GetVictim() == target) // never target tank
+ return false;
+ if (target->HasAura(SPELL_WEB_WRAP)) // never target targets that are already webbed
+ return false;
+ return true;
+ }
+
+ private:
+ const Unit* _maexxna;
};
class boss_maexxna : public CreatureScript
@@ -66,27 +96,22 @@ public:
struct boss_maexxnaAI : public BossAI
{
- boss_maexxnaAI(Creature* creature) : BossAI(creature, BOSS_MAEXXNA)
- {
- Initialize();
- }
+ boss_maexxnaAI(Creature* creature) : BossAI(creature, BOSS_MAEXXNA) { }
- void Initialize()
+ void EnterCombat(Unit* /*who*/) override
{
- enraged = false;
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_WRAP, 20 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SPRAY, 40 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SHOCK, urandms(5, 10));
+ events.ScheduleEvent(EVENT_POISON, urandms(10, 15));
+ events.ScheduleEvent(EVENT_SUMMON, 30 * IN_MILLISECONDS);
}
- bool enraged;
-
- void EnterCombat(Unit* /*who*/) override
+ void Reset() override
{
- _EnterCombat();
- Initialize();
- events.ScheduleEvent(EVENT_WRAP, 20000);
- events.ScheduleEvent(EVENT_SPRAY, 40000);
- events.ScheduleEvent(EVENT_SHOCK, urand(5000, 10000));
- events.ScheduleEvent(EVENT_POISON, urand(10000, 15000));
- events.ScheduleEvent(EVENT_SUMMON, 30000);
+ _Reset();
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_WEB_WRAP);
}
void UpdateAI(uint32 diff) override
@@ -94,10 +119,9 @@ public:
if (!UpdateVictim() || !CheckInRoom())
return;
- if (!enraged && HealthBelowPct(30))
+ if (HealthBelowPct(30) && !me->HasAura(SPELL_FRENZY_HELPER))
{
- enraged = true;
- events.ScheduleEvent(EVENT_FRENZY, 0); // will be cast immediately
+ DoCast(SPELL_FRENZY);
}
events.Update(diff);
@@ -107,41 +131,49 @@ public:
switch (eventId)
{
case EVENT_WRAP:
- /// @todo Add missing text
- for (uint8 i = 0; i < RAID_MODE(1, 2); ++i)
+ {
+ std::list<Unit*> targets;
+ SelectTargetList(targets, WebTargetSelector(me), RAID_MODE(1, 2), SELECT_TARGET_RANDOM);
+ if (!targets.empty())
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0, true, -SPELL_WEB_WRAP))
+ Talk(EMOTE_WEB_WRAP);
+ int8 wrapPos = -1;
+ for (Unit* target : targets)
{
+ if (wrapPos == -1) // allow all positions on the first target
+ wrapPos = urand(0, MAX_WRAP_POSITION - 1);
+ else // on subsequent iterations, only allow positions that are not equal to the previous one (this is sufficient since we should only have two targets at most, ever)
+ wrapPos = (wrapPos + urand(1, MAX_WRAP_POSITION - 1)) % MAX_WRAP_POSITION;
+
target->RemoveAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_WEB_SPRAY, me));
- uint8 pos = rand32() % MAX_POS_WRAP;
- target->GetMotionMaster()->MoveJump(PosWrap[pos].GetPositionX(), PosWrap[pos].GetPositionY(), PosWrap[pos].GetPositionZ(), 20, 20);
- if (Creature* wrap = DoSummon(NPC_WEB_WRAP, PosWrap[pos], 0, TEMPSUMMON_CORPSE_DESPAWN))
- wrap->AI()->SetGUID(target->GetGUID());
+ if (Creature* wrap = DoSummon(NPC_WEB_WRAP, WrapPositions[wrapPos], 70 * IN_MILLISECONDS, TEMPSUMMON_TIMED_DESPAWN))
+ {
+ wrap->AI()->SetGUID(target->GetGUID()); // handles application of debuff
+ target->GetMotionMaster()->MoveJump(WrapPositions[wrapPos], WEB_WRAP_MOVE_SPEED, WEB_WRAP_MOVE_SPEED); // move after stun to avoid stun cancelling move
+ }
}
}
events.ScheduleEvent(EVENT_WRAP, 40000);
break;
+ }
case EVENT_SPRAY:
+ Talk(EMOTE_WEB_SPRAY);
DoCastAOE(SPELL_WEB_SPRAY);
events.ScheduleEvent(EVENT_SPRAY, 40000);
break;
case EVENT_SHOCK:
DoCastAOE(SPELL_POISON_SHOCK);
- events.ScheduleEvent(EVENT_SHOCK, urand(10000, 20000));
+ events.ScheduleEvent(EVENT_SHOCK, urandms(10, 20));
break;
case EVENT_POISON:
DoCastVictim(SPELL_NECROTIC_POISON);
- events.ScheduleEvent(EVENT_POISON, urand(10000, 20000));
- break;
- case EVENT_FRENZY:
- DoCast(me, SPELL_FRENZY, true);
- events.ScheduleEvent(EVENT_FRENZY, 600000);
+ events.ScheduleEvent(EVENT_POISON, urandms(10, 20));
break;
case EVENT_SUMMON:
- /// @todo Add missing text
+ Talk(EMOTE_SPIDERS);
uint8 amount = urand(8, 10);
for (uint8 i = 0; i < amount; ++i)
- DoSummon(NPC_SPIDERLING, me, 0, TEMPSUMMON_CORPSE_DESPAWN);
+ DoSummon(NPC_SPIDERLING, me, 4.0f, 5 * IN_MILLISECONDS, TEMPSUMMON_CORPSE_TIMED_DESPAWN);
events.ScheduleEvent(EVENT_SUMMON, 40000);
break;
}
@@ -165,23 +197,49 @@ public:
struct npc_webwrapAI : public NullCreatureAI
{
- npc_webwrapAI(Creature* creature) : NullCreatureAI(creature) { }
+ npc_webwrapAI(Creature* creature) : NullCreatureAI(creature), visibleTimer(0) { }
ObjectGuid victimGUID;
+ uint32 visibleTimer;
+
+ void InitializeAI() override
+ {
+ me->SetVisible(false);
+ }
void SetGUID(ObjectGuid guid, int32 /*param*/) override
{
+ if (!guid)
+ return;
victimGUID = guid;
- if (me->m_spells[0] && victimGUID)
- if (Unit* victim = ObjectAccessor::GetUnit(*me, victimGUID))
- victim->CastSpell(victim, me->m_spells[0], true, NULL, NULL, me->GetGUID());
+ if (Unit* victim = ObjectAccessor::GetUnit(*me, victimGUID))
+ {
+ visibleTimer = (me->GetDistance2d(victim)/WEB_WRAP_MOVE_SPEED + 0.5f) * IN_MILLISECONDS;
+ victim->CastSpell(victim, SPELL_WEB_WRAP, true, NULL, NULL, me->GetGUID());
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!visibleTimer)
+ return;
+
+ if (diff >= visibleTimer)
+ {
+ visibleTimer = 0;
+ me->SetVisible(true);
+ }
+ else
+ visibleTimer -= diff;
}
void JustDied(Unit* /*killer*/) override
{
- if (me->m_spells[0] && victimGUID)
+ if (victimGUID)
if (Unit* victim = ObjectAccessor::GetUnit(*me, victimGUID))
- victim->RemoveAurasDueToSpell(me->m_spells[0], me->GetGUID());
+ victim->RemoveAurasDueToSpell(SPELL_WEB_WRAP, me->GetGUID());
+
+ me->DespawnOrUnsummon(5 * IN_MILLISECONDS);
}
};
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
index f5e5b287571..7b3a9f8ac74 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
@@ -19,51 +19,58 @@
#include "ScriptedCreature.h"
#include "naxxramas.h"
-enum Noth
+enum Phases
{
- SAY_AGGRO = 0,
- SAY_SUMMON = 1,
- SAY_SLAY = 2,
- SAY_DEATH = 3,
-
- SOUND_DEATH = 8848,
-
- SPELL_CURSE_PLAGUEBRINGER = 29213, // 25-man: 54835
- SPELL_CRIPPLE = 29212, // 25-man: 54814
- SPELL_TELEPORT = 29216,
-
- NPC_WARRIOR = 16984,
- NPC_CHAMPION = 16983,
- NPC_GUARDIAN = 16981
+ PHASE_NONE,
+ PHASE_GROUND,
+ PHASE_BALCONY
};
-#define SPELL_BLINK RAND(29208, 29209, 29210, 29211)
+enum Events
+{
+ EVENT_CURSE = 1, // curse of the plaguebringer
+ EVENT_BLINK, // blink (25m only)
+ EVENT_WARRIOR, // summon warriors during ground phase
+ EVENT_BALCONY, // become untargetable and begin balcony phase
+ EVENT_BALCONY_TELEPORT, // actually teleport to balcony, this is slightly delayed
+ EVENT_WAVE, // spawn wave during balcony phase
+ EVENT_GROUND, // end balcony phase and teleport to ground
+ EVENT_GROUND_ATTACKABLE // become attackable and aggressive again at start of ground phase, once again slightly delayed to prevent motionmaster weirdness
+};
-// Teleport position of Noth on his balcony
-Position const Teleport = { 2631.370f, -3529.680f, 274.040f, 6.277f };
+enum Talk
+{
+ SAY_AGGRO = 0,
+ SAY_SUMMON = 1,
+ SAY_SLAY = 2,
+ SAY_DEATH = 3,
-#define MAX_SUMMON_POS 5
+ EMOTE_SUMMON = 4, // ground phase
+ EMOTE_SUMMON_WAVE = 5, // balcony phase
+ EMOTE_TELEPORT_1 = 6, // ground to balcony
+ EMOTE_TELEPORT_2 = 7 // balcony to ground
+};
-Position const SummonPos[MAX_SUMMON_POS] =
+enum Spells
{
- { 2728.12f, -3544.43f, 261.91f, 6.04f },
- { 2729.05f, -3544.47f, 261.91f, 5.58f },
- { 2728.24f, -3465.08f, 264.20f, 3.56f },
- { 2704.11f, -3456.81f, 265.53f, 4.51f },
- { 2663.56f, -3464.43f, 262.66f, 5.20f }
+ SPELL_CURSE = 29213, // 25-man: 54835
+ SPELL_CRIPPLE = 29212, // 25-man: 54814
+
+ SPELL_TELEPORT = 29216, // ground to balcony
+ SPELL_TELEPORT_BACK = 29231 // balcony to ground
};
-enum Events
+enum Adds
{
- EVENT_NONE,
- EVENT_BERSERK,
- EVENT_CURSE,
- EVENT_BLINK,
- EVENT_WARRIOR,
- EVENT_BALCONY,
- EVENT_WAVE,
- EVENT_GROUND
+ N_WARRIOR_SPELLS = 3,
+ N_CHAMPION_SPELLS = 6,
+ N_GUARDIAN_SPELLS = 3
};
+const uint32 SummonWarriorSpells[N_WARRIOR_SPELLS] = { 29247, 29248, 29249 };
+const uint32 SummonChampionSpells[N_CHAMPION_SPELLS] = { 29238, 29255, 29257, 29258, 29262, 29267 };
+const uint32 SummonGuardianSpells[N_GUARDIAN_SPELLS] = { 29239, 29256, 29268 };
+
+#define SPELL_BLINK RAND(29208, 29209, 29210, 29211)
class boss_noth : public CreatureScript
{
@@ -72,16 +79,38 @@ public:
struct boss_nothAI : public BossAI
{
- boss_nothAI(Creature* creature) : BossAI(creature, BOSS_NOTH)
+ boss_nothAI(Creature* creature) : BossAI(creature, BOSS_NOTH), balconyCount(0), justBlinked(false)
{
- balconyCount = 0;
- waveCount = 0;
+ std::copy(SummonWarriorSpells, SummonWarriorSpells + N_WARRIOR_SPELLS, _SummonWarriorSpells);
+ std::copy(SummonChampionSpells, SummonChampionSpells + N_CHAMPION_SPELLS, _SummonChampionSpells);
+ std::copy(SummonGuardianSpells, SummonGuardianSpells + N_GUARDIAN_SPELLS, _SummonGuardianSpells);
+
+ events.SetPhase(PHASE_NONE);
+ }
+
+ void EnterEvadeMode() override
+ {
+ Reset(); // teleport back first
+ _EnterEvadeMode();
}
void Reset() override
{
- me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ if (!me->IsAlive())
+ return;
+
+ // in case we reset during balcony phase
+ if (events.IsInPhase(PHASE_BALCONY))
+ {
+ DoCastAOE(SPELL_TELEPORT_BACK);
+ me->SetReactState(REACT_AGGRESSIVE);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ }
+
+ balconyCount = 0;
+ events.SetPhase(PHASE_NONE);
+ justBlinked = false;
+
_Reset();
}
@@ -89,31 +118,44 @@ public:
{
_EnterCombat();
Talk(SAY_AGGRO);
- balconyCount = 0;
EnterPhaseGround();
}
void EnterPhaseGround()
{
- me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ events.SetPhase(PHASE_GROUND);
+
DoZoneInCombat();
if (me->getThreatManager().isThreatListEmpty())
- EnterEvadeMode();
+ Reset();
else
{
- events.ScheduleEvent(EVENT_BALCONY, 110000);
- events.ScheduleEvent(EVENT_CURSE, 10000 + rand32() % 15000);
- events.ScheduleEvent(EVENT_WARRIOR, 30000);
+ uint8 secondsGround;
+ switch (balconyCount)
+ {
+ case 0:
+ secondsGround = 90;
+ break;
+ case 1:
+ secondsGround = 110;
+ break;
+ case 2:
+ default:
+ secondsGround = 180;
+ }
+ events.ScheduleEvent(EVENT_GROUND_ATTACKABLE, 2 * IN_MILLISECONDS, 0, PHASE_GROUND);
+ events.ScheduleEvent(EVENT_BALCONY, secondsGround * IN_MILLISECONDS, 0, PHASE_GROUND);
+ events.ScheduleEvent(EVENT_CURSE, urand(10,25) * IN_MILLISECONDS, 0, PHASE_GROUND);
+ events.ScheduleEvent(EVENT_WARRIOR, urand(20,30) * IN_MILLISECONDS, 0, PHASE_GROUND);
if (GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL)
- events.ScheduleEvent(EVENT_BLINK, urand(20000, 40000));
+ events.ScheduleEvent(EVENT_BLINK, urand(20,30) * IN_MILLISECONDS, 0, PHASE_GROUND);
}
}
- void KilledUnit(Unit* /*victim*/) override
+ void KilledUnit(Unit* victim) override
{
- if (!(rand32() % 5))
+ if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
@@ -121,7 +163,7 @@ public:
{
summons.Summon(summon);
summon->setActive(true);
- summon->AI()->DoZoneInCombat();
+ summon->AI()->DoZoneInCombat(nullptr, 250.0f); // specify range to cover entire room - default 50yd is not enough
}
void JustDied(Unit* /*killer*/) override
@@ -130,10 +172,35 @@ public:
Talk(SAY_DEATH);
}
- void SummonUndead(uint32 entry, uint32 num)
+ void DamageTaken(Unit* /*who*/, uint32& damage) override // prevent noth from somehow dying in the balcony phase
{
- for (uint32 i = 0; i < num; ++i)
- me->SummonCreature(entry, SummonPos[rand32() % MAX_SUMMON_POS], TEMPSUMMON_CORPSE_DESPAWN, 60000);
+ if (!events.IsInPhase(PHASE_BALCONY))
+ return;
+ if (damage < me->GetHealth())
+ return;
+
+ me->SetHealth(1u);
+ damage = 0u;
+ }
+
+ void HandleSummon(uint32* spellsList, const uint8 nSpells, uint8 num)
+ { // this ensures we do not spawn two mobs using the same spell (<=> in the same position) if we can help it
+ while (num)
+ for (uint8 it = 0; it < nSpells && num; ++it)
+ {
+ num--;
+ uint8 selected = urand(it, nSpells - 1);
+ DoCastAOE(spellsList[selected]);
+ if (selected != it) // shuffle the selected into the part of the array that is no longer being searched
+ std::swap(spellsList[selected], spellsList[it]);
+ }
+ }
+
+ void CastSummon(uint8 nWarrior, uint8 nChampion, uint8 nGuardian)
+ {
+ HandleSummon(_SummonWarriorSpells, N_WARRIOR_SPELLS, nWarrior);
+ HandleSummon(_SummonChampionSpells, N_CHAMPION_SPELLS, nChampion);
+ HandleSummon(_SummonGuardianSpells, N_GUARDIAN_SPELLS, nGuardian);
}
void UpdateAI(uint32 diff) override
@@ -151,72 +218,115 @@ public:
switch (eventId)
{
case EVENT_CURSE:
- DoCastAOE(SPELL_CURSE_PLAGUEBRINGER);
- events.ScheduleEvent(EVENT_CURSE, urand(50000, 60000));
- return;
+ {
+ DoCastAOE(SPELL_CURSE);
+ events.ScheduleEvent(EVENT_CURSE, urand(50, 70) * IN_MILLISECONDS, 0, PHASE_GROUND);
+ break;
+ }
case EVENT_WARRIOR:
Talk(SAY_SUMMON);
- SummonUndead(NPC_WARRIOR, RAID_MODE(2, 3));
- events.ScheduleEvent(EVENT_WARRIOR, 30000);
- return;
+ Talk(EMOTE_SUMMON);
+
+ CastSummon(RAID_MODE(2, 3), 0, 0);
+
+ events.ScheduleEvent(EVENT_WARRIOR, 40 * IN_MILLISECONDS, 0, PHASE_GROUND);
+ break;
case EVENT_BLINK:
DoCastAOE(SPELL_CRIPPLE, true);
DoCastAOE(SPELL_BLINK);
DoResetThreat();
- events.ScheduleEvent(EVENT_BLINK, 40000);
- return;
+ justBlinked = true;
+
+ events.ScheduleEvent(EVENT_BLINK, 40000, 0, PHASE_GROUND);
+ break;
case EVENT_BALCONY:
+ events.SetPhase(PHASE_BALCONY);
me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
me->AttackStop();
+ me->StopMoving();
me->RemoveAllAuras();
- me->NearTeleportTo(Teleport.GetPositionX(), Teleport.GetPositionY(), Teleport.GetPositionZ(), Teleport.GetOrientation());
- events.Reset();
- events.ScheduleEvent(EVENT_WAVE, urand(2000, 5000));
- waveCount = 0;
- return;
+
+ events.ScheduleEvent(EVENT_BALCONY_TELEPORT, 3 * IN_MILLISECONDS, 0, PHASE_BALCONY);
+ events.ScheduleEvent(EVENT_WAVE, urand(5 * IN_MILLISECONDS, 8 * IN_MILLISECONDS), 0, PHASE_BALCONY);
+
+ uint8 secondsBalcony;
+ switch (balconyCount)
+ {
+ case 0:
+ secondsBalcony = 70;
+ break;
+ case 1:
+ secondsBalcony = 97;
+ break;
+ case 2:
+ default:
+ secondsBalcony = 120;
+ break;
+ }
+ events.ScheduleEvent(EVENT_GROUND, secondsBalcony * IN_MILLISECONDS, 0, PHASE_BALCONY);
+ break;
+ case EVENT_BALCONY_TELEPORT:
+ Talk(EMOTE_TELEPORT_1);
+ DoCastAOE(SPELL_TELEPORT);
+ break;
case EVENT_WAVE:
- Talk(SAY_SUMMON);
+ Talk(EMOTE_SUMMON_WAVE);
switch (balconyCount)
{
case 0:
- SummonUndead(NPC_CHAMPION, RAID_MODE(2, 4));
+ CastSummon(0, RAID_MODE(2, 4), 0);
break;
case 1:
- SummonUndead(NPC_CHAMPION, RAID_MODE(1, 2));
- SummonUndead(NPC_GUARDIAN, RAID_MODE(1, 2));
+ CastSummon(0, RAID_MODE(1, 2), RAID_MODE(1, 2));
break;
case 2:
- SummonUndead(NPC_GUARDIAN, RAID_MODE(2, 4));
+ CastSummon(0, 0, RAID_MODE(2, 4));
break;
default:
- SummonUndead(NPC_CHAMPION, RAID_MODE(5, 10));
- SummonUndead(NPC_GUARDIAN, RAID_MODE(5, 10));
+ CastSummon(0, RAID_MODE(5, 10), RAID_MODE(5, 10));
break;
}
- ++waveCount;
- events.ScheduleEvent(waveCount < 2 ? EVENT_WAVE : EVENT_GROUND, urand(30000, 45000));
- return;
+ events.ScheduleEvent(EVENT_WAVE, urand(30, 45) * IN_MILLISECONDS, 0, PHASE_BALCONY);
+ break;
case EVENT_GROUND:
- {
++balconyCount;
- float x, y, z, o;
- me->GetHomePosition(x, y, z, o);
- me->NearTeleportTo(x, y, z, o);
- events.ScheduleEvent(EVENT_BALCONY, 110000);
+
+ DoCastAOE(SPELL_TELEPORT_BACK);
+ Talk(EMOTE_TELEPORT_2);
+
EnterPhaseGround();
- return;
- }
+ break;
+ case EVENT_GROUND_ATTACKABLE:
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ me->SetReactState(REACT_AGGRESSIVE);
+ break;
}
}
- if (me->HasReactState(REACT_AGGRESSIVE))
- DoMeleeAttackIfReady();
+ if (events.IsInPhase(PHASE_GROUND))
+ {
+ /* workaround for movechase breaking after blinking
+ without this noth would just stand there unless his current target moves */
+ if (justBlinked && me->GetVictim() && !me->IsWithinMeleeRange(me->EnsureVictim()))
+ {
+ me->GetMotionMaster()->Clear();
+ me->GetMotionMaster()->MoveChase(me->EnsureVictim());
+ justBlinked = false;
+ }
+ else
+ DoMeleeAttackIfReady();
+ }
}
private:
- uint32 waveCount;
uint32 balconyCount;
+
+ bool justBlinked;
+
+ uint32 _SummonWarriorSpells[N_WARRIOR_SPELLS];
+ uint32 _SummonChampionSpells[N_CHAMPION_SPELLS];
+ uint32 _SummonGuardianSpells[N_GUARDIAN_SPELLS];
};
CreatureAI* GetAI(Creature* creature) const override
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
index f5842181358..7c85c5f73b9 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
@@ -21,7 +21,7 @@
enum Spells
{
- SPELL_HATEFUL_STRIKE = 41926,
+ SPELL_HATEFUL_STRIKE = 28308,
SPELL_FRENZY = 28131,
SPELL_BERSERK = 26662,
SPELL_SLIME_BOLT = 32309
@@ -33,7 +33,7 @@ enum Yells
SAY_SLAY = 1,
SAY_DEATH = 2,
EMOTE_BERSERK = 3,
- EMOTE_ENRAGE = 4
+ EMOTE_FRENZY = 4
};
enum Events
@@ -49,6 +49,11 @@ enum Misc
ACHIEV_MAKE_QUICK_WERK_OF_HIM_STARTING_EVENT = 10286
};
+enum HatefulThreatAmounts
+{
+ HATEFUL_THREAT_AMT = 1000,
+};
+
class boss_patchwerk : public CreatureScript
{
public:
@@ -92,8 +97,8 @@ public:
_EnterCombat();
Enraged = false;
Talk(SAY_AGGRO);
- events.ScheduleEvent(EVENT_HATEFUL, 1000);
- events.ScheduleEvent(EVENT_BERSERK, 360000);
+ events.ScheduleEvent(EVENT_HATEFUL, 1 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_BERSERK, 6 * MINUTE * IN_MILLISECONDS);
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_MAKE_QUICK_WERK_OF_HIM_STARTING_EVENT);
}
@@ -111,37 +116,68 @@ public:
{
case EVENT_HATEFUL:
{
- //Cast Hateful strike on the player with the highest
- //amount of HP within melee distance
- uint32 MostHP = 0;
- Unit* pMostHPTarget = NULL;
+ // Hateful Strike targets the highest non-MT threat in melee range on 10man
+ // and the higher HP target out of the two highest non-MT threats in melee range on 25man
+ float MostThreat = 0.0f;
+ Unit* secondThreatTarget = NULL;
+ Unit* thirdThreatTarget = NULL;
+
std::list<HostileReference*>::const_iterator i = me->getThreatManager().getThreatList().begin();
for (; i != me->getThreatManager().getThreatList().end(); ++i)
- {
+ { // find second highest
Unit* target = (*i)->getTarget();
- if (target->IsAlive() && target != me->GetVictim() && target->GetHealth() > MostHP && me->IsWithinMeleeRange(target))
+ if (target->IsAlive() && target != me->GetVictim() && (*i)->getThreat() >= MostThreat && me->IsWithinMeleeRange(target))
+ {
+ MostThreat = (*i)->getThreat();
+ secondThreatTarget = target;
+ }
+ }
+
+ if (secondThreatTarget && Is25ManRaid())
+ { // find third highest
+ MostThreat = 0.0f;
+ i = me->getThreatManager().getThreatList().begin();
+ for (; i != me->getThreatManager().getThreatList().end(); ++i)
{
- MostHP = target->GetHealth();
- pMostHPTarget = target;
+ Unit* target = (*i)->getTarget();
+ if (target->IsAlive() && target != me->GetVictim() && target != secondThreatTarget && (*i)->getThreat() >= MostThreat && me->IsWithinMeleeRange(target))
+ {
+ MostThreat = (*i)->getThreat();
+ thirdThreatTarget = target;
+ }
}
}
- if (!pMostHPTarget)
- pMostHPTarget = me->GetVictim();
+ Unit* pHatefulTarget = NULL;
+ if (!thirdThreatTarget)
+ pHatefulTarget = secondThreatTarget;
+ else if (secondThreatTarget)
+ pHatefulTarget = (secondThreatTarget->GetHealth() < thirdThreatTarget->GetHealth()) ? thirdThreatTarget : secondThreatTarget;
+
+ if (!pHatefulTarget)
+ pHatefulTarget = me->GetVictim();
+
+ DoCast(pHatefulTarget, SPELL_HATEFUL_STRIKE, true);
- DoCast(pMostHPTarget, SPELL_HATEFUL_STRIKE, true);
+ // add threat to highest threat targets
+ if (me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim()))
+ me->getThreatManager().addThreat(me->GetVictim(), HATEFUL_THREAT_AMT);
+ if (secondThreatTarget)
+ me->getThreatManager().addThreat(secondThreatTarget, HATEFUL_THREAT_AMT);
+ if (thirdThreatTarget)
+ me->getThreatManager().addThreat(thirdThreatTarget, HATEFUL_THREAT_AMT); // this will only ever be used in 25m
- events.ScheduleEvent(EVENT_HATEFUL, 1000);
+ events.ScheduleEvent(EVENT_HATEFUL, 1 * IN_MILLISECONDS);
break;
}
case EVENT_BERSERK:
DoCast(me, SPELL_BERSERK, true);
Talk(EMOTE_BERSERK);
- events.ScheduleEvent(EVENT_SLIME, 2000);
+ events.ScheduleEvent(EVENT_SLIME, 2 * IN_MILLISECONDS);
break;
case EVENT_SLIME:
DoCastVictim(SPELL_SLIME_BOLT, true);
- events.ScheduleEvent(EVENT_SLIME, 2000);
+ events.ScheduleEvent(EVENT_SLIME, 2 * IN_MILLISECONDS);
break;
}
}
@@ -149,7 +185,7 @@ public:
if (!Enraged && HealthBelowPct(5))
{
DoCast(me, SPELL_FRENZY, true);
- Talk(EMOTE_ENRAGE);
+ Talk(EMOTE_FRENZY);
Enraged = true;
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
index ee482c23d1b..02a7aa570e5 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
@@ -43,6 +43,7 @@ enum Spells
SPELL_BERSERK = 26662,
SPELL_DIES = 29357,
SPELL_CHILL = 28547,
+ SPELL_CHECK_RESISTS = 60539,
};
enum Phases
@@ -67,7 +68,8 @@ enum Events
EVENT_EXPLOSION,
EVENT_LAND,
EVENT_GROUND,
- EVENT_BIRTH
+ EVENT_BIRTH,
+ EVENT_CHECK_RESISTS
};
enum Misc
@@ -90,10 +92,9 @@ class boss_sapphiron : public CreatureScript
struct boss_sapphironAI : public BossAI
{
boss_sapphironAI(Creature* creature) :
- BossAI(creature, BOSS_SAPPHIRON), _map(me->GetMap())
+ BossAI(creature, BOSS_SAPPHIRON), _iceboltCount(0), _map(me->GetMap())
{
Initialize();
- _iceboltCount = 0;
}
void Initialize()
@@ -101,7 +102,6 @@ class boss_sapphiron : public CreatureScript
_phase = PHASE_NULL;
_canTheHundredClub = true;
- _checkFrostResistTimer = 5 * IN_MILLISECONDS;
}
void InitializeAI() override
@@ -123,7 +123,16 @@ class boss_sapphiron : public CreatureScript
_Reset();
if (_phase == PHASE_FLIGHT)
+ {
ClearIceBlock();
+ me->SetReactState(REACT_AGGRESSIVE);
+ if (me->IsHovering())
+ {
+ me->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
+ me->SetHover(false);
+ }
+ me->SetDisableGravity(false);
+ }
Initialize();
}
@@ -134,22 +143,30 @@ class boss_sapphiron : public CreatureScript
me->CastSpell(me, SPELL_FROST_AURA, true);
+ DoCast(me, SPELL_CHECK_RESISTS);
+ events.ScheduleEvent(EVENT_CHECK_RESISTS, 30 * IN_MILLISECONDS);
events.ScheduleEvent(EVENT_BERSERK, 15 * MINUTE * IN_MILLISECONDS);
EnterPhaseGround();
-
- CheckPlayersFrostResist();
}
void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
- if (spell->Id == SPELL_ICEBOLT)
+ switch(spell->Id)
{
- IceBlockMap::iterator itr = _iceblocks.find(target->GetGUID());
- if (itr != _iceblocks.end() && !itr->second)
+ case SPELL_ICEBOLT:
{
- if (GameObject* iceblock = me->SummonGameObject(GO_ICEBLOCK, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, 0, 0, 0, 0, 25))
- itr->second = iceblock->GetGUID();
+ IceBlockMap::iterator itr = _iceblocks.find(target->GetGUID());
+ if (itr != _iceblocks.end() && !itr->second)
+ {
+ if (GameObject* iceblock = me->SummonGameObject(GO_ICEBLOCK, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, 0, 0, 0, 0, 25))
+ itr->second = iceblock->GetGUID();
+ }
+ break;
}
+ case SPELL_CHECK_RESISTS:
+ if (target && target->GetResistance(SPELL_SCHOOL_FROST) > MAX_FROST_RESISTANCE)
+ _canTheHundredClub = false;
+ break;
}
}
@@ -157,8 +174,6 @@ class boss_sapphiron : public CreatureScript
{
_JustDied();
me->CastSpell(me, SPELL_DIES, true);
-
- CheckPlayersFrostResist();
}
void MovementInform(uint32 /*type*/, uint32 id) override
@@ -176,22 +191,6 @@ class boss_sapphiron : public CreatureScript
}
}
- void CheckPlayersFrostResist()
- {
- if (_canTheHundredClub && _map && _map->IsRaid())
- {
- Map::PlayerList const &players = _map->GetPlayers();
- for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
- {
- if (itr->GetSource()->GetResistance(SPELL_SCHOOL_FROST) > MAX_FROST_RESISTANCE)
- {
- _canTheHundredClub = false;
- break;
- }
- }
- }
- }
-
void EnterPhaseGround()
{
_phase = PHASE_GROUND;
@@ -235,23 +234,16 @@ class boss_sapphiron : public CreatureScript
if ((_phase != PHASE_BIRTH && !UpdateVictim()) || !CheckInRoom())
return;
- if (_canTheHundredClub)
- {
- if (_checkFrostResistTimer <= diff)
- {
- CheckPlayersFrostResist();
- _checkFrostResistTimer = 5 * IN_MILLISECONDS;
- }
- else
- _checkFrostResistTimer -= diff;
- }
-
if (_phase == PHASE_GROUND)
{
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
+ case EVENT_CHECK_RESISTS:
+ DoCast(me, SPELL_CHECK_RESISTS);
+ events.ScheduleEvent(EVENT_CHECK_RESISTS, 30 * IN_MILLISECONDS);
+ return;
case EVENT_BERSERK:
Talk(EMOTE_ENRAGE);
DoCast(me, SPELL_BERSERK);
@@ -270,7 +262,6 @@ class boss_sapphiron : public CreatureScript
return;
case EVENT_BLIZZARD:
{
- //DoCastAOE(SPELL_SUMMON_BLIZZARD);
if (Creature* summon = DoSummon(NPC_BLIZZARD, me, 0.0f, urand(25, 30) * IN_MILLISECONDS, TEMPSUMMON_TIMED_DESPAWN))
summon->GetMotionMaster()->MoveRandom(40);
events.ScheduleEvent(EVENT_BLIZZARD, RAID_MODE(20, 7) * IN_MILLISECONDS, 0, PHASE_GROUND);
@@ -300,9 +291,14 @@ class boss_sapphiron : public CreatureScript
{
switch (eventId)
{
+ case EVENT_CHECK_RESISTS:
+ DoCast(me, SPELL_CHECK_RESISTS);
+ events.ScheduleEvent(EVENT_CHECK_RESISTS, 30 * IN_MILLISECONDS);
+ return;
case EVENT_LIFTOFF:
Talk(EMOTE_AIR_PHASE);
me->SetDisableGravity(true);
+ me->SetHover(true);
events.ScheduleEvent(EVENT_ICEBOLT, 1500);
_iceboltCount = RAID_MODE(2, 3);
return;
@@ -346,6 +342,7 @@ class boss_sapphiron : public CreatureScript
case EVENT_LAND:
me->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
Talk(EMOTE_GROUND_PHASE);
+ me->SetHover(false);
me->SetDisableGravity(false);
events.ScheduleEvent(EVENT_GROUND, 1500);
return;
@@ -406,7 +403,6 @@ class boss_sapphiron : public CreatureScript
uint32 _iceboltCount;
IceBlockMap _iceblocks;
bool _canTheHundredClub;
- uint32 _checkFrostResistTimer;
Map* _map;
};
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
index d74fd5a03f8..5d3b038d41d 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
@@ -19,48 +19,104 @@
#include "ScriptedCreature.h"
#include "SpellScript.h"
#include "Player.h"
+#include "ObjectGuid.h"
#include "naxxramas.h"
-//Stalagg
-enum StalaggYells
+
+enum Phases
+{
+ PHASE_NOT_ENGAGED = 1,
+ PHASE_PETS,
+ PHASE_TRANSITION,
+ PHASE_THADDIUS,
+ PHASE_RESETTING
+};
+
+enum AIActions
{
- SAY_STAL_AGGRO = 0,
- SAY_STAL_SLAY = 1,
- SAY_STAL_DEATH = 2
+ ACTION_RESET_ENCOUNTER_TIMER = -1, // sent from instance AI
+ ACTION_BEGIN_RESET_ENCOUNTER = 0, // sent from thaddius to pets to trigger despawn and encounter reset
+ ACTION_RESET_ENCOUNTER, // sent from thaddius to pets to trigger respawn and full reset
+ ACTION_FEUGEN_DIED, // sent from respective pet to thaddius to indicate death
+ ACTION_STALAGG_DIED, // ^
+ ACTION_FEUGEN_RESET, // pet to thaddius
+ ACTION_STALAGG_RESET, // ^
+ ACTION_FEUGEN_AGGRO, // pet to thaddius on combat start
+ ACTION_STALAGG_AGGRO, // ^
+ ACTION_FEUGEN_REVIVING_FX, // thaddius to pet when pet reports its death
+ ACTION_STALAGG_REVIVING_FX, // ^
+ ACTION_FEUGEN_REVIVED, // thaddius to pet when pet should revive
+ ACTION_STALAGG_REVIVED, // ^
+ ACTION_TRANSITION, // thaddius to pets when transition starts (coil overload anim)
+ ACTION_TRANSITION_2, // thaddius to pets to make the coils shock him
+ ACTION_TRANSITION_3, // thaddius to pets to disable coil GO after spawn
+
+ ACTION_POLARITY_CROSSED // triggers achievement failure, sent from spellscript
};
-enum StalagSpells
+enum Events
{
- SPELL_POWERSURGE = 28134,
- SPELL_MAGNETIC_PULL = 28338,
- SPELL_STALAGG_TESLA = 28097
+ EVENT_SHIFT = 1, // polarity shift
+ EVENT_SHIFT_TALK, // polarity shift yell (hack? couldn't find any event for cast finish)
+ EVENT_CHAIN, // chain lightning
+ EVENT_BERSERK, // enrage timer
+ EVENT_REVIVE_FEUGEN, // timer until feugen is revived (if stalagg still lives)
+ EVENT_REVIVE_STALAGG, // timer until stalagg is revived (if feugen still lives)
+ EVENT_TRANSITION_1, // timer until overload emote
+ EVENT_TRANSITION_2, // timer until thaddius gets zapped by the coils
+ EVENT_TRANSITION_3, // timer until thaddius engages
+ EVENT_ENABLE_BALL_LIGHTNING // grace period after thaddius aggro after which he starts being a baller (e.g. tossing ball lightning at out of range targets)
};
-//Feugen
-enum FeugenYells
+enum Misc
{
- SAY_FEUG_AGGRO = 0,
- SAY_FEUG_SLAY = 1,
- SAY_FEUG_DEATH = 2
+ MAX_POLARITY_10M = 5,
+ MAX_POLARITY_25M = 13,
+
+ DATA_POLARITY_CROSSED = 1,
+};
+
+// Feugen & Stalagg
+enum PetYells
+{
+ SAY_STALAGG_AGGRO = 0,
+ SAY_STALAGG_SLAY = 1,
+ SAY_STALAGG_DEATH = 2,
+
+ SAY_FEUGEN_AGGRO = 0,
+ SAY_FEUGEN_SLAY = 1,
+ SAY_FEUGEN_DEATH = 2,
+
+ EMOTE_FEIGN_DEATH = 3,
+ EMOTE_FEIGN_REVIVE = 4,
+
+ EMOTE_TESLA_LINK_BREAKS = 0,
+ EMOTE_TESLA_OVERLOAD = 1
};
-enum FeugenSpells
+enum PetSpells
{
- SPELL_STATICFIELD = 28135,
- SPELL_FEUGEN_TESLA = 28109
+ SPELL_STALAGG_POWERSURGE = 28134,
+ //SPELL_STALAGG_TESLA = 28097,
+ SPELL_STALAGG_TESLA_PERIODIC = 28098,
+ SPELL_STALAGG_CHAIN_VISUAL = 28096,
+
+ SPELL_FEUGEN_STATICFIELD = 28135,
+ //SPELL_FEUGEN_TESLA = 28109,
+ SPELL_FEUGEN_TESLA_PERIODIC = 28110,
+ SPELL_FEUGEN_CHAIN_VISUAL = 28111,
+
+ SPELL_MAGNETIC_PULL = 54517,
+ SPELL_MAGNETIC_PULL_EFFECT = 28337,
+
+ SPELL_TESLA_SHOCK = 28099
};
-// Thaddius DoAction
-enum ThaddiusActions
+enum PetMisc
{
- ACTION_FEUGEN_RESET,
- ACTION_FEUGEN_DIED,
- ACTION_STALAGG_RESET,
- ACTION_STALAGG_DIED
+ OVERLOAD_DISTANCE = 28
};
-//generic
-#define C_TESLA_COIL 16218 //the coils (emotes "Tesla Coil overloads!")
//Thaddius
enum ThaddiusYells
@@ -70,34 +126,31 @@ enum ThaddiusYells
SAY_SLAY = 2,
SAY_ELECT = 3,
SAY_DEATH = 4,
- SAY_SCREAM = 5
+ SAY_SCREAM = 5,
+
+ EMOTE_POLARITY_SHIFTED = 6
};
enum ThaddiusSpells
{
- SPELL_POLARITY_SHIFT = 28089,
- SPELL_BALL_LIGHTNING = 28299,
- SPELL_CHAIN_LIGHTNING = 28167,
- SPELL_BERSERK = 27680,
- SPELL_POSITIVE_CHARGE = 28062,
- SPELL_POSITIVE_CHARGE_STACK = 29659,
- SPELL_NEGATIVE_CHARGE = 28085,
- SPELL_NEGATIVE_CHARGE_STACK = 29660,
- SPELL_POSITIVE_POLARITY = 28059,
- SPELL_NEGATIVE_POLARITY = 28084,
-};
+ SPELL_THADDIUS_INACTIVE_VISUAL = 28160,
+ SPELL_THADDIUS_SPARK_VISUAL = 28136,
+ SPELL_SHOCK_VISUAL = 28159,
-enum Events
-{
- EVENT_NONE,
- EVENT_SHIFT,
- EVENT_CHAIN,
- EVENT_BERSERK,
-};
+ SPELL_BALL_LIGHTNING = 28299,
+ SPELL_CHAIN_LIGHTNING = 28167,
+ SPELL_BERSERK = 27680,
-enum Achievement
-{
- DATA_POLARITY_SWITCH = 76047605,
+ // polarity handling
+ SPELL_POLARITY_SHIFT = 28089,
+
+ SPELL_POSITIVE_CHARGE_APPLY = 28059,
+ SPELL_POSITIVE_CHARGE_TICK = 28062,
+ SPELL_POSITIVE_CHARGE_AMP = 29659,
+
+ SPELL_NEGATIVE_CHARGE_APPLY = 28084,
+ SPELL_NEGATIVE_CHARGE_TICK = 28085,
+ SPELL_NEGATIVE_CHARGE_AMP = 29660,
};
class boss_thaddius : public CreatureScript
@@ -112,166 +165,276 @@ public:
struct boss_thaddiusAI : public BossAI
{
- boss_thaddiusAI(Creature* creature) : BossAI(creature, BOSS_THADDIUS)
- {
- // init is a bit tricky because thaddius shall track the life of both adds, but not if there was a wipe
- // and, in particular, if there was a crash after both adds were killed (should not respawn)
-
- // Moreover, the adds may not yet be spawn. So just track down the status if mob is spawn
- // and each mob will send its status at reset (meaning that it is alive)
- checkFeugenAlive = false;
- if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
- checkFeugenAlive = pFeugen->IsAlive();
+ public:
+ boss_thaddiusAI(Creature* creature) : BossAI(creature, BOSS_THADDIUS), stalaggAlive(true), feugenAlive(true), ballLightningEnabled(false), shockingEligibility(true)
+ {
+ if (instance->GetBossState(BOSS_THADDIUS) != DONE)
+ {
+ events.SetPhase(PHASE_NOT_ENGAGED);
+ SetCombatMovement(false);
- checkStalaggAlive = false;
- if (Creature* pStalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))
- checkStalaggAlive = pStalagg->IsAlive();
+ // initialize everything properly, and ensure that the coils are loaded by the time we initialize
+ BeginResetEncounter(true);
+ }
+ }
- if (!checkFeugenAlive && !checkStalaggAlive)
+ void KilledUnit(Unit* victim) override
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
- me->SetReactState(REACT_AGGRESSIVE);
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
}
- else
+
+ void Reset() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
- me->SetReactState(REACT_PASSIVE);
+ if (events.IsInPhase(PHASE_TRANSITION) || (events.IsInPhase(PHASE_THADDIUS) && me->IsAlive()))
+ BeginResetEncounter();
}
- polaritySwitch = false;
- uiAddsTimer = 0;
- }
-
- bool checkStalaggAlive;
- bool checkFeugenAlive;
- bool polaritySwitch;
- uint32 uiAddsTimer;
-
- void KilledUnit(Unit* /*victim*/) override
- {
- if (!(rand32() % 5))
- Talk(SAY_SLAY);
- }
-
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- Talk(SAY_DEATH);
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ me->setActive(false);
+ if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))
+ stalagg->setActive(false);
+ if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
+ feugen->setActive(false);
+ Talk(SAY_DEATH);
+ }
- void DoAction(int32 action) override
- {
- switch (action)
+ void DoAction(int32 action) override
{
- case ACTION_FEUGEN_RESET:
- checkFeugenAlive = true;
- break;
- case ACTION_FEUGEN_DIED:
- checkFeugenAlive = false;
- break;
- case ACTION_STALAGG_RESET:
- checkStalaggAlive = true;
- break;
- case ACTION_STALAGG_DIED:
- checkStalaggAlive = false;
- break;
+ switch (action)
+ {
+ case ACTION_RESET_ENCOUNTER_TIMER:
+ if (events.IsInPhase(PHASE_RESETTING))
+ ResetEncounter();
+ break;
+ case ACTION_FEUGEN_RESET:
+ case ACTION_STALAGG_RESET:
+ if (!events.IsInPhase(PHASE_NOT_ENGAGED) && !events.IsInPhase(PHASE_RESETTING))
+ BeginResetEncounter();
+ break;
+ case ACTION_FEUGEN_AGGRO:
+ case ACTION_STALAGG_AGGRO:
+ if (events.IsInPhase(PHASE_RESETTING))
+ return BeginResetEncounter();
+ if (!events.IsInPhase(PHASE_NOT_ENGAGED))
+ return;
+ events.SetPhase(PHASE_PETS);
+
+ shockingEligibility = true;
+
+ if (!instance->CheckRequiredBosses(BOSS_THADDIUS))
+ return BeginResetEncounter();
+ instance->SetBossState(BOSS_THADDIUS, IN_PROGRESS);
+
+ me->setActive(true);
+ if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))
+ stalagg->setActive(true);
+ if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
+ feugen->setActive(true);
+ break;
+ case ACTION_FEUGEN_DIED:
+ if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
+ feugen->AI()->DoAction(ACTION_FEUGEN_REVIVING_FX);
+ feugenAlive = false;
+ if (stalaggAlive)
+ events.ScheduleEvent(EVENT_REVIVE_FEUGEN, 5 * IN_MILLISECONDS, 0, PHASE_PETS);
+ else
+ Transition();
+
+ break;
+ case ACTION_STALAGG_DIED:
+ if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))
+ stalagg->AI()->DoAction(ACTION_STALAGG_REVIVING_FX);
+ stalaggAlive = false;
+ if (feugenAlive)
+ events.ScheduleEvent(EVENT_REVIVE_STALAGG, 5 * IN_MILLISECONDS, 0, PHASE_PETS);
+ else
+ Transition();
+
+ break;
+
+ case ACTION_POLARITY_CROSSED:
+ shockingEligibility = false;
+ break;
+ default:
+ break;
+ }
}
- if (!checkFeugenAlive && !checkStalaggAlive)
+ uint32 GetData(uint32 id) const override
{
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
- // REACT_AGGRESSIVE only reset when he takes damage.
- DoZoneInCombat();
+ return (id == DATA_POLARITY_CROSSED && shockingEligibility) ? 1u : 0u;
}
- else
+
+ void Transition() // initiate transition between pet phase and thaddius phase
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
- me->SetReactState(REACT_PASSIVE);
+ events.SetPhase(PHASE_TRANSITION);
+
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+
+ events.ScheduleEvent(EVENT_TRANSITION_1, 10 * IN_MILLISECONDS, 0, PHASE_TRANSITION);
+ events.ScheduleEvent(EVENT_TRANSITION_2, 12 * IN_MILLISECONDS, 0, PHASE_TRANSITION);
+ events.ScheduleEvent(EVENT_TRANSITION_3, 14 * IN_MILLISECONDS, 0, PHASE_TRANSITION);
}
- }
- void EnterCombat(Unit* /*who*/) override
- {
- _EnterCombat();
- Talk(SAY_AGGRO);
- events.ScheduleEvent(EVENT_SHIFT, 30000);
- events.ScheduleEvent(EVENT_CHAIN, urand(10000, 20000));
- events.ScheduleEvent(EVENT_BERSERK, 360000);
- }
+ void BeginResetEncounter(bool initial = false)
+ {
+ if (instance->GetBossState(BOSS_THADDIUS) == DONE)
+ return;
+ if (events.IsInPhase(PHASE_RESETTING))
+ return;
- void DamageTaken(Unit* /*pDoneBy*/, uint32 & /*uiDamage*/) override
- {
- me->SetReactState(REACT_AGGRESSIVE);
- }
+ if (initial) // signal shorter spawn timer to instance script
+ instance->SetBossState(BOSS_THADDIUS, SPECIAL);
+ instance->ProcessEvent(me, EVENT_THADDIUS_BEGIN_RESET);
+ instance->SetBossState(BOSS_THADDIUS, NOT_STARTED);
- void SetData(uint32 id, uint32 data) override
- {
- if (id == DATA_POLARITY_SWITCH)
- polaritySwitch = data ? true : false;
- }
+ // remove polarity shift debuffs on reset
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POSITIVE_CHARGE_APPLY);
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_NEGATIVE_CHARGE_APPLY);
- uint32 GetData(uint32 id) const override
- {
- if (id != DATA_POLARITY_SWITCH)
- return 0;
+ me->DespawnOrUnsummon();
- return uint32(polaritySwitch);
- }
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
+ events.SetPhase(PHASE_RESETTING);
+ if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
+ feugen->AI()->DoAction(ACTION_BEGIN_RESET_ENCOUNTER);
+ if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))
+ stalagg->AI()->DoAction(ACTION_BEGIN_RESET_ENCOUNTER);
- void UpdateAI(uint32 diff) override
- {
- if (checkFeugenAlive && checkStalaggAlive)
- uiAddsTimer = 0;
+ me->setActive(false);
+ }
- if (checkStalaggAlive != checkFeugenAlive)
+ void ResetEncounter()
{
- uiAddsTimer += diff;
- if (uiAddsTimer > 5000)
- {
- if (!checkStalaggAlive)
- {
- if (Creature* pStalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))
- pStalagg->Respawn();
- }
- else
- {
- if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
- pFeugen->Respawn();
- }
- }
- }
+ feugenAlive = true;
+ stalaggAlive = true;
- if (!UpdateVictim())
- return;
+ me->Respawn(true);
+ _Reset();
+ events.SetPhase(PHASE_NOT_ENGAGED);
- events.Update(diff);
+ me->CastSpell(me, SPELL_THADDIUS_INACTIVE_VISUAL, true);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
+ feugen->AI()->DoAction(ACTION_RESET_ENCOUNTER);
+ if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))
+ stalagg->AI()->DoAction(ACTION_RESET_ENCOUNTER);
+ }
- while (uint32 eventId = events.ExecuteEvent())
+ void UpdateAI(uint32 diff) override
{
- switch (eventId)
+ if (events.IsInPhase(PHASE_NOT_ENGAGED))
+ return;
+ if (events.IsInPhase(PHASE_THADDIUS) && !UpdateVictim())
+ return;
+
+ events.Update(diff);
+ while (uint32 eventId = events.ExecuteEvent())
{
- case EVENT_SHIFT:
- DoCastAOE(SPELL_POLARITY_SHIFT);
- events.ScheduleEvent(EVENT_SHIFT, 30000);
- return;
- case EVENT_CHAIN:
- DoCastVictim(SPELL_CHAIN_LIGHTNING);
- events.ScheduleEvent(EVENT_CHAIN, urand(10000, 20000));
- return;
- case EVENT_BERSERK:
- DoCast(me, SPELL_BERSERK);
- return;
+ switch (eventId)
+ {
+ case EVENT_REVIVE_FEUGEN:
+ feugenAlive = true;
+ if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
+ feugen->AI()->DoAction(ACTION_FEUGEN_REVIVED);
+ break;
+ case EVENT_REVIVE_STALAGG:
+ stalaggAlive = true;
+ if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))
+ stalagg->AI()->DoAction(ACTION_STALAGG_REVIVED);
+ break;
+ case EVENT_TRANSITION_1: // tesla coils overload
+ if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
+ feugen->AI()->DoAction(ACTION_TRANSITION);
+ if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))
+ stalagg->AI()->DoAction(ACTION_TRANSITION);
+ break;
+ case EVENT_TRANSITION_2: // tesla coils shock thaddius
+ me->CastSpell(me, SPELL_THADDIUS_SPARK_VISUAL, true);
+ if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
+ feugen->AI()->DoAction(ACTION_TRANSITION_2);
+ if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))
+ stalagg->AI()->DoAction(ACTION_TRANSITION_2);
+ break;
+ case EVENT_TRANSITION_3: // thaddius becomes active
+ me->CastSpell(me, SPELL_THADDIUS_SPARK_VISUAL, true);
+ ballLightningEnabled = false;
+ me->RemoveAura(SPELL_THADDIUS_INACTIVE_VISUAL);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+
+ DoZoneInCombat();
+ if (Unit* closest = SelectTarget(SELECT_TARGET_NEAREST, 0, 500.0f))
+ AttackStart(closest);
+ else // if there is no nearest target, then there is no target, meaning we should reset
+ return BeginResetEncounter();
+
+ if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
+ feugen->AI()->DoAction(ACTION_TRANSITION_3);
+ if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))
+ stalagg->AI()->DoAction(ACTION_TRANSITION_3);
+
+ events.SetPhase(PHASE_THADDIUS);
+
+ Talk(SAY_AGGRO);
+
+ events.ScheduleEvent(EVENT_ENABLE_BALL_LIGHTNING, 5 * IN_MILLISECONDS, 0, PHASE_THADDIUS);
+ events.ScheduleEvent(EVENT_SHIFT, 10 * IN_MILLISECONDS, 0, PHASE_THADDIUS);
+ events.ScheduleEvent(EVENT_CHAIN, urand(10, 20) * IN_MILLISECONDS, 0, PHASE_THADDIUS);
+ events.ScheduleEvent(EVENT_BERSERK, 6 * MINUTE * IN_MILLISECONDS, 0, PHASE_THADDIUS);
+
+ break;
+ case EVENT_ENABLE_BALL_LIGHTNING:
+ ballLightningEnabled = true;
+ break;
+ case EVENT_SHIFT:
+ me->CastStop(); // shift overrides all other spells
+ DoCastAOE(SPELL_POLARITY_SHIFT);
+ events.ScheduleEvent(EVENT_SHIFT_TALK, 3 * IN_MILLISECONDS, PHASE_THADDIUS);
+ events.ScheduleEvent(EVENT_SHIFT, 30 * IN_MILLISECONDS, PHASE_THADDIUS);
+ break;
+ case EVENT_SHIFT_TALK:
+ Talk(SAY_ELECT);
+ Talk(EMOTE_POLARITY_SHIFTED);
+ break;
+ case EVENT_CHAIN:
+ if (me->FindCurrentSpellBySpellId(SPELL_POLARITY_SHIFT)) // delay until shift is over
+ events.ScheduleEvent(EVENT_CHAIN, 3 * IN_MILLISECONDS, 0, PHASE_THADDIUS);
+ else
+ {
+ me->CastStop();
+ DoCastVictim(SPELL_CHAIN_LIGHTNING);
+ events.ScheduleEvent(EVENT_CHAIN, urand(10, 20) * IN_MILLISECONDS, PHASE_THADDIUS);
+ }
+ break;
+ case EVENT_BERSERK:
+ me->CastStop();
+ DoCast(me, SPELL_BERSERK);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (events.IsInPhase(PHASE_THADDIUS))
+ {
+ if (me->IsWithinMeleeRange(me->GetVictim()))
+ DoMeleeAttackIfReady();
+ else
+ if (ballLightningEnabled)
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
+ DoCast(target, SPELL_BALL_LIGHTNING);
}
}
- if (events.GetTimer() > 15000 && !me->IsWithinMeleeRange(me->GetVictim()))
- DoCastVictim(SPELL_BALL_LIGHTNING);
- else
- DoMeleeAttackIfReady();
- }
+ private:
+ bool stalaggAlive;
+ bool feugenAlive;
+ bool ballLightningEnabled;
+ bool shockingEligibility;
};
};
@@ -288,88 +451,257 @@ public:
struct npc_stalaggAI : public ScriptedAI
{
- npc_stalaggAI(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- instance = creature->GetInstanceScript();
- }
+ public:
+ npc_stalaggAI(Creature* creature) : ScriptedAI(creature), _myCoil(ObjectGuid::Empty), _myCoilGO(ObjectGuid::Empty), isOverloading(false), refreshBeam(false), isFeignDeath(false)
+ {
+ Initialize();
+ instance = creature->GetInstanceScript();
+ }
- void Initialize()
- {
- powerSurgeTimer = urand(20000, 25000);
- magneticPullTimer = 20000;
- }
+ void Initialize()
+ {
+ if (GameObject* coil = myCoilGO())
+ coil->SetGoState(GO_STATE_ACTIVE);
- InstanceScript* instance;
+ // if the encounter reset while feigning death
+ me->SetStandState(UNIT_STAND_STATE_STAND);
+ me->SetReactState(REACT_AGGRESSIVE);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ isOverloading = false;
+ isFeignDeath = false;
- uint32 powerSurgeTimer;
- uint32 magneticPullTimer;
+ // force tesla coil state refresh
+ refreshBeam = true;
- void Reset() override
- {
- if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS)))
- if (pThaddius->AI())
- pThaddius->AI()->DoAction(ACTION_STALAGG_RESET);
- Initialize();
- }
+ powerSurgeTimer = 10 * IN_MILLISECONDS;
+ }
- void KilledUnit(Unit* /*victim*/) override
- {
- if (!(rand32() % 5))
- Talk(SAY_STAL_SLAY);
- }
+ void Reset() override
+ {
+ if (isFeignDeath || !me->IsAlive())
+ return;
+ if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS)))
+ thaddius->AI()->DoAction(ACTION_STALAGG_RESET);
+ }
- void EnterCombat(Unit* /*who*/) override
- {
- Talk(SAY_STAL_AGGRO);
- DoCast(SPELL_STALAGG_TESLA);
- }
+ void BeginResetEncounter()
+ {
+ if (GameObject* coil = myCoilGO())
+ coil->SetGoState(GO_STATE_READY);
+ me->DespawnOrUnsummon();
+ me->setActive(false);
+ }
- void JustDied(Unit* /*killer*/) override
- {
- Talk(SAY_STAL_DEATH);
- if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS)))
- if (pThaddius->AI())
- pThaddius->AI()->DoAction(ACTION_STALAGG_DIED);
- }
+ void ResetEncounter()
+ {
+ me->Respawn(true);
+ Initialize();
+ }
- void UpdateAI(uint32 uiDiff) override
- {
- if (!UpdateVictim())
- return;
+ void DoAction(int32 action) override
+ {
+ switch (action)
+ {
+ case ACTION_BEGIN_RESET_ENCOUNTER:
+ BeginResetEncounter();
+ break;
+ case ACTION_RESET_ENCOUNTER:
+ ResetEncounter();
+ break;
+ case ACTION_STALAGG_REVIVING_FX:
+ break;
+ case ACTION_STALAGG_REVIVED:
+ if (!isFeignDeath)
+ break;
+
+ me->SetFullHealth();
+ me->SetStandState(UNIT_STAND_STATE_STAND);
+ me->SetReactState(REACT_AGGRESSIVE);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ Talk(EMOTE_FEIGN_REVIVE);
+ isFeignDeath = false;
+
+ refreshBeam = true; // force beam refresh
+
+ if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
+ if (feugen->GetVictim())
+ {
+ me->AddThreat(feugen->EnsureVictim(), 0.0f);
+ me->SetInCombatWith(feugen->EnsureVictim());
+ }
+ break;
+ case ACTION_TRANSITION:
+ me->KillSelf(); // true death
+ me->DespawnOrUnsummon();
+
+ if (Creature* coil = myCoil())
+ {
+ coil->CastStop();
+ coil->AI()->Talk(EMOTE_TESLA_OVERLOAD);
+ }
+ break;
+ case ACTION_TRANSITION_2:
+ if (Creature* coil = myCoil())
+ if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS)))
+ coil->CastSpell(thaddius, SPELL_SHOCK_VISUAL);
+ break;
+ case ACTION_TRANSITION_3:
+ if (GameObject* coil = myCoilGO())
+ coil->SetGoState(GO_STATE_READY);
+ break;
+ default:
+ break;
+ }
+ }
- if (magneticPullTimer <= uiDiff)
+ void KilledUnit(Unit* victim) override
{
- if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_STALAGG_SLAY);
+ }
+
+ void EnterCombat(Unit* who) override
+ {
+ Talk(SAY_STALAGG_AGGRO);
+
+ if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS)))
+ thaddius->AI()->DoAction(ACTION_STALAGG_AGGRO);
+
+ if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
+ if (!feugen->IsInCombat())
+ {
+ feugen->AddThreat(who, 0.0f);
+ feugen->SetInCombatWith(who);
+ }
+ }
+
+ void DamageTaken(Unit* /*who*/, uint32& damage) override
+ {
+ if (damage < me->GetHealth())
+ return;
+
+ if (isFeignDeath) // don't take damage while feigning death
{
- Unit* pStalaggVictim = me->GetVictim();
- Unit* pFeugenVictim = pFeugen->GetVictim();
+ damage = 0;
+ return;
+ }
+
+ isFeignDeath = true;
+ isOverloading = false;
+
+ Talk(EMOTE_FEIGN_DEATH);
+ if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS)))
+ thaddius->AI()->DoAction(ACTION_STALAGG_DIED);
+
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveAllAuras();
+ me->SetReactState(REACT_PASSIVE);
+ me->AttackStop();
+ me->StopMoving();
+ me->SetStandState(UNIT_STAND_STATE_DEAD);
- if (pFeugenVictim && pStalaggVictim)
+ damage = 0;
+
+ // force beam refresh as we just removed auras
+ refreshBeam = true;
+ }
+
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
+ {
+ if (!caster)
+ return;
+ if (spell->Id != SPELL_STALAGG_TESLA_PERIODIC)
+ return;
+ if (!isFeignDeath && me->IsInCombat() && !me->GetHomePosition().IsInDist(me, OVERLOAD_DISTANCE))
+ {
+ if (!isOverloading)
{
- // magnetic pull is not working. So just jump.
+ isOverloading = true;
+ caster->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ if (Creature* creatureCaster = caster->ToCreature())
+ creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS);
+ me->RemoveAura(SPELL_STALAGG_CHAIN_VISUAL);
+ }
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
+ {
+ caster->CastStop(SPELL_TESLA_SHOCK);
+ caster->CastSpell(target, SPELL_TESLA_SHOCK,true);
+ }
+ }
+ else if (isOverloading || refreshBeam)
+ {
+ isOverloading = false;
+ refreshBeam = false;
+ caster->CastStop();
+ caster->CastSpell(me, SPELL_STALAGG_CHAIN_VISUAL, true);
+ caster->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ }
+ }
- // reset aggro to be sure that feugen will not follow the jump
- pFeugen->getThreatManager().modifyThreatPercent(pFeugenVictim, -100);
- pFeugenVictim->JumpTo(me, 0.3f);
+ void UpdateAI(uint32 uiDiff) override
+ {
+ if (!isFeignDeath)
+ if (!UpdateVictim())
+ return;
- me->getThreatManager().modifyThreatPercent(pStalaggVictim, -100);
- pStalaggVictim->JumpTo(pFeugen, 0.3f);
+ if (powerSurgeTimer <= uiDiff)
+ {
+ if (isFeignDeath) // delay until potential revive
+ powerSurgeTimer = 0u;
+ else
+ {
+ DoCast(me, SPELL_STALAGG_POWERSURGE);
+ powerSurgeTimer = urand(25, 30) * IN_MILLISECONDS;
}
}
+ else
+ powerSurgeTimer -= uiDiff;
- magneticPullTimer = 20000;
+ if (!isFeignDeath)
+ DoMeleeAttackIfReady();
}
- else magneticPullTimer -= uiDiff;
- if (powerSurgeTimer <= uiDiff)
+ private:
+ Creature* myCoil()
{
- DoCast(me, SPELL_POWERSURGE);
- powerSurgeTimer = urand(15000, 20000);
- } else powerSurgeTimer -= uiDiff;
+ Creature* coil = nullptr;
+ if (_myCoil)
+ coil = ObjectAccessor::GetCreature(*me, _myCoil);
+ if (!coil)
+ {
+ coil = me->FindNearestCreature(NPC_TESLA, 1000.0f, true);
+ if (coil)
+ {
+ _myCoil = coil->GetGUID();
+ coil->SetReactState(REACT_PASSIVE);
+ }
+ }
+ return coil;
+ }
- DoMeleeAttackIfReady();
- }
+ GameObject* myCoilGO()
+ {
+ GameObject* coil = nullptr;
+ if (_myCoilGO)
+ coil = ObjectAccessor::GetGameObject(*me, _myCoilGO);
+ if (!coil)
+ {
+ coil = me->FindNearestGameObject(GO_CONS_NOX_TESLA_STALAGG, 1000.0f);
+ if (coil)
+ _myCoilGO = coil->GetGUID();
+ }
+ return coil;
+ }
+
+ InstanceScript* instance;
+
+ uint32 powerSurgeTimer;
+
+ ObjectGuid _myCoil;
+ ObjectGuid _myCoilGO;
+ bool isOverloading;
+ bool refreshBeam;
+ bool isFeignDeath;
};
};
@@ -386,142 +718,381 @@ public:
struct npc_feugenAI : public ScriptedAI
{
- npc_feugenAI(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- instance = creature->GetInstanceScript();
- }
-
- void Initialize()
- {
- staticFieldTimer = 5000;
- }
+ public:
+ npc_feugenAI(Creature* creature) : ScriptedAI(creature), _myCoil(ObjectGuid::Empty), _myCoilGO(ObjectGuid::Empty), isOverloading(false), refreshBeam(false), isFeignDeath(false)
+ {
+ Initialize();
+ instance = creature->GetInstanceScript();
+ }
- InstanceScript* instance;
+ void Initialize()
+ {
+ if (GameObject* coil = myCoilGO())
+ coil->SetGoState(GO_STATE_ACTIVE);
- uint32 staticFieldTimer;
+ // if the encounter reset while feigning death
+ me->SetStandState(UNIT_STAND_STATE_STAND);
+ me->SetReactState(REACT_AGGRESSIVE);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ isOverloading = false;
+ isFeignDeath = false;
- void Reset() override
- {
- if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS)))
- if (pThaddius->AI())
- pThaddius->AI()->DoAction(ACTION_FEUGEN_RESET);
- Initialize();
- }
+ // force coil state to refresh
+ refreshBeam = true;
- void KilledUnit(Unit* /*victim*/) override
- {
- if (!(rand32() % 5))
- Talk(SAY_FEUG_SLAY);
- }
+ staticFieldTimer = 6 * IN_MILLISECONDS;
+ magneticPullTimer = 20 * IN_MILLISECONDS;
+ }
- void EnterCombat(Unit* /*who*/) override
- {
- Talk(SAY_FEUG_AGGRO);
- DoCast(SPELL_FEUGEN_TESLA);
- }
+ void Reset() override
+ {
+ if (isFeignDeath || !me->IsAlive())
+ return;
+ if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS)))
+ thaddius->AI()->DoAction(ACTION_FEUGEN_RESET);
+ }
- void JustDied(Unit* /*killer*/) override
- {
- Talk(SAY_FEUG_DEATH);
- if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS)))
- if (pThaddius->AI())
- pThaddius->AI()->DoAction(ACTION_FEUGEN_DIED);
- }
+ void BeginResetEncounter()
+ {
+ if (GameObject* coil = myCoilGO())
+ coil->SetGoState(GO_STATE_READY);
+ me->DespawnOrUnsummon();
+ me->setActive(false);
+ }
- void UpdateAI(uint32 uiDiff) override
- {
- if (!UpdateVictim())
- return;
+ void ResetEncounter()
+ {
+ me->Respawn(true);
+ Initialize();
+ }
- if (staticFieldTimer <= uiDiff)
+ void DoAction(int32 action) override
{
- DoCast(me, SPELL_STATICFIELD);
- staticFieldTimer = 5000;
- } else staticFieldTimer -= uiDiff;
+ switch (action)
+ {
+ case ACTION_BEGIN_RESET_ENCOUNTER:
+ BeginResetEncounter();
+ break;
+ case ACTION_RESET_ENCOUNTER:
+ ResetEncounter();
+ break;
+ case ACTION_FEUGEN_REVIVING_FX:
+ break;
+ case ACTION_FEUGEN_REVIVED:
+ if (!isFeignDeath)
+ break;
+
+ me->SetFullHealth();
+ me->SetStandState(UNIT_STAND_STATE_STAND);
+ me->SetReactState(REACT_AGGRESSIVE);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ Talk(EMOTE_FEIGN_REVIVE);
+ isFeignDeath = false;
+
+ refreshBeam = true; // force beam refresh
+
+ if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))
+ if (stalagg->GetVictim())
+ {
+ me->AddThreat(stalagg->EnsureVictim(), 0.0f);
+ me->SetInCombatWith(stalagg->EnsureVictim());
+ }
+ staticFieldTimer = 6 * IN_MILLISECONDS;
+ magneticPullTimer = 30 * IN_MILLISECONDS;
+ break;
+ case ACTION_TRANSITION:
+ me->KillSelf(); // true death this time around
+ me->DespawnOrUnsummon();
+
+ if (Creature* coil = myCoil())
+ {
+ coil->CastStop();
+ coil->AI()->Talk(EMOTE_TESLA_OVERLOAD);
+ }
+ break;
+ case ACTION_TRANSITION_2:
+ if (Creature* coil = myCoil())
+ if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS)))
+ coil->CastSpell(thaddius, SPELL_SHOCK_VISUAL);
+ break;
+ case ACTION_TRANSITION_3:
+ if (GameObject* coil = myCoilGO())
+ coil->SetGoState(GO_STATE_READY);
+ default:
+ break;
+ }
+ }
- DoMeleeAttackIfReady();
- }
- };
+ void KilledUnit(Unit* victim) override
+ {
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_FEUGEN_SLAY);
+ }
-};
+ void EnterCombat(Unit* who) override
+ {
+ Talk(SAY_FEUGEN_AGGRO);
-class spell_thaddius_pos_neg_charge : public SpellScriptLoader
-{
- public:
- spell_thaddius_pos_neg_charge() : SpellScriptLoader("spell_thaddius_pos_neg_charge") { }
+ if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS)))
+ thaddius->AI()->DoAction(ACTION_STALAGG_AGGRO);
- class spell_thaddius_pos_neg_charge_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_thaddius_pos_neg_charge_SpellScript);
+ if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))
+ if (!stalagg->IsInCombat())
+ {
+ stalagg->AddThreat(who, 0.0f);
+ stalagg->SetInCombatWith(who);
+ }
+ }
- bool Validate(SpellInfo const* /*spell*/) override
+ void DamageTaken(Unit* /*who*/, uint32& damage) override
{
- if (!sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE))
- return false;
- if (!sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE_STACK))
- return false;
- if (!sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE))
- return false;
- if (!sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE_STACK))
- return false;
- return true;
+ if (damage < me->GetHealth())
+ return;
+
+ if (isFeignDeath) // don't take damage while feigning death
+ {
+ damage = 0;
+ return;
+ }
+
+ isFeignDeath = true;
+ isOverloading = false;
+
+ Talk(EMOTE_FEIGN_DEATH);
+ if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS)))
+ thaddius->AI()->DoAction(ACTION_FEUGEN_DIED);
+
+ me->RemoveAllAuras();
+ me->SetReactState(REACT_PASSIVE);
+ me->AttackStop();
+ me->StopMoving();
+ me->SetStandState(UNIT_STAND_STATE_DEAD);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+
+ damage = 0;
+
+ // force beam refresh as we just removed auras
+ refreshBeam = true;
}
- bool Load() override
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
{
- return GetCaster()->GetTypeId() == TYPEID_UNIT;
+ if (!caster)
+ return;
+ if (spell->Id != SPELL_FEUGEN_TESLA_PERIODIC)
+ return;
+ if (!isFeignDeath && me->IsInCombat() && !me->GetHomePosition().IsInDist(me, OVERLOAD_DISTANCE))
+ {
+ if (!isOverloading)
+ {
+ isOverloading = true;
+ caster->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ if (Creature* creatureCaster = caster->ToCreature())
+ creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS);
+ me->RemoveAura(SPELL_STALAGG_CHAIN_VISUAL);
+ }
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ {
+ caster->CastStop(SPELL_TESLA_SHOCK);
+ caster->CastSpell(target, SPELL_TESLA_SHOCK,true);
+ }
+ }
+ else if (isOverloading || refreshBeam)
+ {
+ isOverloading = false;
+ refreshBeam = false;
+ caster->CastStop();
+ caster->CastSpell(me, SPELL_FEUGEN_CHAIN_VISUAL, true);
+ caster->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ }
}
- void HandleTargets(std::list<WorldObject*>& targets)
+ void UpdateAI(uint32 uiDiff) override
{
- uint8 count = 0;
- for (std::list<WorldObject*>::iterator ihit = targets.begin(); ihit != targets.end(); ++ihit)
- if ((*ihit)->GetGUID() != GetCaster()->GetGUID())
- if (Player* target = (*ihit)->ToPlayer())
- if (target->HasAura(GetTriggeringSpell()->Id))
- ++count;
+ if (isFeignDeath)
+ return;
+ if (!UpdateVictim())
+ return;
- if (count)
+ if (magneticPullTimer <= uiDiff)
+ {
+ DoCast(me, SPELL_MAGNETIC_PULL);
+ magneticPullTimer = 20 * IN_MILLISECONDS;
+ }
+ else magneticPullTimer -= uiDiff;
+
+ if (staticFieldTimer <= uiDiff)
{
- uint32 spellId = 0;
+ DoCast(me, SPELL_FEUGEN_STATICFIELD);
+ staticFieldTimer = 6 * IN_MILLISECONDS;
+ }
+ else staticFieldTimer -= uiDiff;
- if (GetSpellInfo()->Id == SPELL_POSITIVE_CHARGE)
- spellId = SPELL_POSITIVE_CHARGE_STACK;
- else // if (GetSpellInfo()->Id == SPELL_NEGATIVE_CHARGE)
- spellId = SPELL_NEGATIVE_CHARGE_STACK;
+ DoMeleeAttackIfReady();
+ }
- GetCaster()->SetAuraStack(spellId, GetCaster(), count);
+ private:
+ Creature* myCoil()
+ {
+ Creature* coil = nullptr;
+ if (_myCoil)
+ coil = ObjectAccessor::GetCreature(*me, _myCoil);
+ if (!coil)
+ {
+ coil = me->FindNearestCreature(NPC_TESLA, 1000.0f, true);
+ if (coil)
+ {
+ _myCoil = coil->GetGUID();
+ coil->SetReactState(REACT_PASSIVE);
+ }
}
+ return coil;
+ }
+
+ GameObject* myCoilGO()
+ {
+ GameObject* coil = nullptr;
+ if (_myCoilGO)
+ coil = ObjectAccessor::GetGameObject(*me, _myCoilGO);
+ if (!coil)
+ {
+ coil = me->FindNearestGameObject(GO_CONS_NOX_TESLA_FEUGEN, 1000.0f);
+ if (coil)
+ _myCoilGO = coil->GetGUID();
+ }
+ return coil;
+ }
+ InstanceScript* instance;
+
+ uint32 magneticPullTimer;
+ uint32 staticFieldTimer;
+
+ ObjectGuid _myCoil;
+ ObjectGuid _myCoilGO;
+
+ bool isOverloading;
+ bool refreshBeam;
+ bool isFeignDeath;
+ };
+};
+
+class npc_tesla : public CreatureScript
+{
+public:
+ npc_tesla() : CreatureScript("npc_tesla") { }
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_teslaAI>(creature);
+ }
+
+ struct npc_teslaAI : public ScriptedAI
+ {
+ npc_teslaAI(Creature* creature) : ScriptedAI(creature) { }
+
+ void EnterEvadeMode() override { } // never stop casting due to evade
+ void UpdateAI(uint32 /*diff*/) override { } // never do anything unless told
+ void EnterCombat(Unit* /*who*/) override { }
+ void DamageTaken(Unit* /*who*/, uint32& damage) override { damage = 0; } // no, you can't kill it
+ };
+};
+
+class spell_thaddius_polarity_charge : public SpellScriptLoader
+{
+ public:
+ spell_thaddius_polarity_charge() : SpellScriptLoader("spell_thaddius_polarity_charge") { }
+
+ class spell_thaddius_polarity_charge_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_thaddius_polarity_charge_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ return (
+ sSpellMgr->GetSpellInfo(SPELL_POLARITY_SHIFT) &&
+ sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE_APPLY) &&
+ sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE_TICK) &&
+ sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE_AMP) &&
+ sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE_APPLY) &&
+ sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE_TICK) &&
+ sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE_AMP)
+ );
}
- void HandleDamage(SpellEffIndex /*effIndex*/)
+ void HandleTargets(std::list<WorldObject*>& targetList)
{
if (!GetTriggeringSpell())
return;
- Unit* target = GetHitUnit();
- Unit* caster = GetCaster();
+ uint32 triggeringId = GetTriggeringSpell()->Id;
+ uint32 ampId;
+ switch (triggeringId)
+ {
+ case SPELL_POSITIVE_CHARGE_APPLY:
+ ampId = SPELL_POSITIVE_CHARGE_AMP;
+ break;
+ case SPELL_NEGATIVE_CHARGE_APPLY:
+ ampId = SPELL_NEGATIVE_CHARGE_AMP;
+ break;
+ default:
+ return;
+ }
- if (target->HasAura(GetTriggeringSpell()->Id))
- SetHitDamage(0);
- else
+ uint8 maxStacks = 0;
+ if (GetCaster())
+ switch (GetCaster()->GetMap()->GetDifficulty())
+ {
+ case RAID_DIFFICULTY_10MAN_NORMAL:
+ maxStacks = MAX_POLARITY_10M;
+ break;
+ case RAID_DIFFICULTY_25MAN_NORMAL:
+ maxStacks = MAX_POLARITY_25M;
+ break;
+ default:
+ break;
+ }
+
+ uint8 stacksCount = 1; // do we get a stack for our own debuff?
+ std::list<WorldObject*>::iterator it = targetList.begin();
+ while(it != targetList.end())
+ {
+ if ((*it)->GetTypeId() != TYPEID_PLAYER)
+ {
+ it = targetList.erase(it);
+ continue;
+ }
+ if ((*it)->ToPlayer()->HasAura(triggeringId))
+ {
+ it = targetList.erase(it);
+ if (stacksCount < maxStacks)
+ stacksCount++;
+ continue;
+ }
+
+ // this guy will get hit - achievement failure trigger
+ if (Creature* thaddius = (*it)->FindNearestCreature(NPC_THADDIUS,200.0f))
+ thaddius->AI()->DoAction(ACTION_POLARITY_CROSSED);
+
+ ++it;
+ }
+
+ if (GetCaster() && GetCaster()->ToPlayer())
{
- if (target->GetTypeId() == TYPEID_PLAYER && caster->IsAIEnabled)
- caster->ToCreature()->AI()->SetData(DATA_POLARITY_SWITCH, 1);
+ if (!GetCaster()->ToPlayer()->HasAura(ampId))
+ GetCaster()->ToPlayer()->AddAura(ampId, GetCaster());
+ GetCaster()->ToPlayer()->SetAuraStack(ampId, GetCaster(), stacksCount);
}
}
void Register() override
{
- OnEffectHitTarget += SpellEffectFn(spell_thaddius_pos_neg_charge_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_thaddius_pos_neg_charge_SpellScript::HandleTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_thaddius_polarity_charge_SpellScript::HandleTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
}
};
SpellScript* GetSpellScript() const override
{
- return new spell_thaddius_pos_neg_charge_SpellScript();
+ return new spell_thaddius_polarity_charge_SpellScript;
}
};
@@ -536,16 +1107,33 @@ class spell_thaddius_polarity_shift : public SpellScriptLoader
bool Validate(SpellInfo const* /*spell*/) override
{
- if (!sSpellMgr->GetSpellInfo(SPELL_POSITIVE_POLARITY) || !sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_POLARITY))
- return false;
- return true;
+ return (
+ sSpellMgr->GetSpellInfo(SPELL_POLARITY_SHIFT) &&
+ sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE_APPLY) &&
+ sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE_TICK) &&
+ sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE_AMP) &&
+ sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE_APPLY) &&
+ sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE_TICK) &&
+ sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE_AMP)
+ );
}
- void HandleDummy(SpellEffIndex /* effIndex */)
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
- Unit* caster = GetCaster();
if (Unit* target = GetHitUnit())
- target->CastSpell(target, roll_chance_i(50) ? SPELL_POSITIVE_POLARITY : SPELL_NEGATIVE_POLARITY, true, NULL, NULL, caster->GetGUID());
+ if (target->GetTypeId() == TYPEID_PLAYER)
+ {
+ if (roll_chance_i(50))
+ { // positive
+ target->CastSpell(target, SPELL_POSITIVE_CHARGE_APPLY, true);
+ target->RemoveAura(SPELL_POSITIVE_CHARGE_AMP);
+ }
+ else
+ { // negative
+ target->CastSpell(target, SPELL_NEGATIVE_CHARGE_APPLY, true);
+ target->RemoveAura(SPELL_NEGATIVE_CHARGE_AMP);
+ }
+ }
}
void Register() override
@@ -560,23 +1148,131 @@ class spell_thaddius_polarity_shift : public SpellScriptLoader
}
};
-class achievement_polarity_switch : public AchievementCriteriaScript
+class spell_thaddius_magnetic_pull : public SpellScriptLoader
{
public:
- achievement_polarity_switch() : AchievementCriteriaScript("achievement_polarity_switch") { }
+ spell_thaddius_magnetic_pull() : SpellScriptLoader("spell_thaddius_magnetic_pull") { };
+
+ class spell_thaddius_magnetic_pull_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_thaddius_magnetic_pull_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ return sSpellMgr->GetSpellInfo(SPELL_MAGNETIC_PULL) ? true : false;
+ }
+
+ void HandleCast() // only feugen ever casts this according to wowhead data
+ {
+ Unit* feugen = GetCaster();
+ if (!feugen || feugen->GetEntry() != NPC_FEUGEN)
+ return;
+
+ Unit* stalagg = ObjectAccessor::GetCreature(*feugen, feugen->GetInstanceScript()->GetGuidData(DATA_STALAGG));
+ if (!stalagg)
+ return;
+
+ Unit* feugenTank = feugen->GetVictim();
+ Unit* stalaggTank = stalagg->GetVictim();
+
+ if (!feugenTank || !stalaggTank)
+ return;
+
+ ThreatManager& feugenThreat = feugen->getThreatManager();
+ ThreatManager& stalaggThreat = stalagg->getThreatManager();
+
+ if (feugenTank == stalaggTank) // special behavior if the tanks are the same (taken from retail)
+ {
+ float feugenTankThreat = feugenThreat.getThreat(feugenTank);
+ float stalaggTankThreat = stalaggThreat.getThreat(stalaggTank);
+
+ feugenThreat.addThreat(feugenTank, stalaggTankThreat - feugenTankThreat);
+ stalaggThreat.addThreat(stalaggTank, feugenTankThreat - stalaggTankThreat);
+
+ feugen->CastSpell(stalaggTank, SPELL_MAGNETIC_PULL_EFFECT, true);
+ }
+ else // normal case, two tanks
+ {
+ float feugenTankThreat = feugenThreat.getThreat(feugenTank);
+ float feugenOtherThreat = feugenThreat.getThreat(stalaggTank);
+ float stalaggTankThreat = stalaggThreat.getThreat(stalaggTank);
+ float stalaggOtherThreat = stalaggThreat.getThreat(feugenTank);
+
+ // set the two entries in feugen's threat table to be equal to the ones in stalagg's
+ feugenThreat.addThreat(stalaggTank, stalaggTankThreat - feugenOtherThreat);
+ feugenThreat.addThreat(feugenTank, stalaggOtherThreat - feugenTankThreat);
+
+ // set the two entries in stalagg's threat table to be equal to the ones in feugen's
+ stalaggThreat.addThreat(feugenTank, feugenTankThreat - stalaggOtherThreat);
+ stalaggThreat.addThreat(stalaggTank, feugenOtherThreat - stalaggTankThreat);
+
+ // pull the two tanks across
+ feugenTank->CastSpell(stalaggTank, SPELL_MAGNETIC_PULL_EFFECT, true);
+ stalaggTank->CastSpell(feugenTank, SPELL_MAGNETIC_PULL_EFFECT, true);
+
+ // and make both attack their respective new tanks
+ if (feugen->GetAI())
+ feugen->GetAI()->AttackStart(stalaggTank);
+ if (stalagg->GetAI())
+ stalagg->GetAI()->AttackStart(feugenTank);
+ }
+ }
+
+ void Register() override
+ {
+ OnCast += SpellCastFn(spell_thaddius_magnetic_pull_SpellScript::HandleCast);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_thaddius_magnetic_pull_SpellScript();
+ }
+};
+
+class at_thaddius_entrance : public AreaTriggerScript
+{
+ public:
+ at_thaddius_entrance() : AreaTriggerScript("at_thaddius_entrance") { }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
+ {
+ InstanceScript* instance = player->GetInstanceScript();
+ if (!instance || instance->GetData(DATA_HAD_THADDIUS_GREET) || instance->GetBossState(BOSS_THADDIUS) == DONE)
+ return true;
+
+ if (Creature* thaddius = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_THADDIUS)))
+ thaddius->AI()->Talk(SAY_GREET);
+ instance->SetData(DATA_HAD_THADDIUS_GREET, 1u);
+
+ return true;
+ }
+};
+
+class achievement_thaddius_shocking : public AchievementCriteriaScript
+{
+ public:
+ achievement_thaddius_shocking() : AchievementCriteriaScript("achievement_thaddius_shocking") { }
bool OnCheck(Player* /*source*/, Unit* target) override
{
- return target && target->GetAI()->GetData(DATA_POLARITY_SWITCH);
+ return target && target->GetAI() && target->GetAI()->GetData(DATA_POLARITY_CROSSED);
}
};
+
void AddSC_boss_thaddius()
{
new boss_thaddius();
new npc_stalagg();
new npc_feugen();
- new spell_thaddius_pos_neg_charge();
+ new npc_tesla();
+
+ new spell_thaddius_polarity_charge();
new spell_thaddius_polarity_shift();
- new achievement_polarity_switch();
+ new spell_thaddius_magnetic_pull();
+
+ new at_thaddius_entrance();
+
+ new achievement_thaddius_shocking();
}
diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
index 3a431ab3ac0..53ce68d3efc 100644
--- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
@@ -60,7 +60,6 @@ DoorData const doorData[] =
MinionData const minionData[] =
{
- { NPC_FOLLOWER_WORSHIPPER, BOSS_FAERLINA },
{ NPC_DK_UNDERSTUDY, BOSS_RAZUVIOUS },
{ NPC_SIR, BOSS_HORSEMEN },
{ NPC_THANE, BOSS_HORSEMEN },
@@ -78,12 +77,13 @@ ObjectData const objectData[] =
{ 0, 0, }
};
-float const HeiganPos[2] = { 2796.0f, -3707.0f };
+// from P2 teleport spell stored target
+float const HeiganPos[2] = { 2793.86f, -3707.38f };
float const HeiganEruptionSlope[3] =
{
- (-3685.0f - HeiganPos[1]) / (2724.0f - HeiganPos[0]),
- (-3647.0f - HeiganPos[1]) / (2749.0f - HeiganPos[0]),
- (-3637.0f - HeiganPos[1]) / (2771.0f - HeiganPos[0])
+ (-3703.303223f - HeiganPos[1]) / (2777.494141f - HeiganPos[0]), // between right center and far right
+ (-3696.948242f - HeiganPos[1]) / (2785.624268f - HeiganPos[0]), // between left and right halves
+ (-3691.880615f - HeiganPos[1]) / (2790.280029f - HeiganPos[0]) // between far left and left center
};
// 0 H x
@@ -125,6 +125,9 @@ class instance_naxxramas : public InstanceMapScript
minHorsemenDiedTime = 0;
maxHorsemenDiedTime = 0;
AbominationCount = 0;
+ hadAnubRekhanGreet = false;
+ hadFaerlinaGreet = false;
+ hadThaddiusGreet = false;
CurrentWingTaunt = SAY_KELTHUZAD_FIRST_WING_TAUNT;
playerDied = 0;
@@ -134,6 +137,9 @@ class instance_naxxramas : public InstanceMapScript
{
switch (creature->GetEntry())
{
+ case NPC_ANUBREKHAN:
+ AnubRekhanGUID = creature->GetGUID();
+ break;
case NPC_FAERLINA:
FaerlinaGUID = creature->GetGUID();
break;
@@ -149,12 +155,12 @@ class instance_naxxramas : public InstanceMapScript
case NPC_SIR:
SirGUID = creature->GetGUID();
break;
- case NPC_THADDIUS:
- ThaddiusGUID = creature->GetGUID();
- break;
case NPC_HEIGAN:
HeiganGUID = creature->GetGUID();
break;
+ case NPC_THADDIUS:
+ ThaddiusGUID = creature->GetGUID();
+ break;
case NPC_FEUGEN:
FeugenGUID = creature->GetGUID();
break;
@@ -182,6 +188,19 @@ class instance_naxxramas : public InstanceMapScript
AddMinion(creature, false);
}
+ void ProcessEvent(WorldObject* /*source*/, uint32 eventId) override
+ {
+ switch (eventId)
+ {
+ case EVENT_THADDIUS_BEGIN_RESET:
+ if (GetBossState(BOSS_THADDIUS) == SPECIAL) // this is the initial spawn, we want a shorter spawn time
+ events.ScheduleEvent(EVENT_THADDIUS_RESET, 5 * IN_MILLISECONDS);
+ else
+ events.ScheduleEvent(EVENT_THADDIUS_RESET, 30 * IN_MILLISECONDS);
+ break;
+ }
+ }
+
void OnGameObjectCreate(GameObject* go) override
{
if (go->GetGOInfo()->displayId == 6785 || go->GetGOInfo()->displayId == 1287)
@@ -246,7 +265,6 @@ class instance_naxxramas : public InstanceMapScript
if (go->GetGOInfo()->displayId == 6785 || go->GetGOInfo()->displayId == 1287)
{
uint32 section = GetEruptionSection(go->GetPositionX(), go->GetPositionY());
-
HeiganEruptionGUID[section].erase(go->GetGUID());
return;
}
@@ -319,6 +337,17 @@ class instance_naxxramas : public InstanceMapScript
case DATA_ABOMINATION_KILLED:
AbominationCount = value;
break;
+ case DATA_HAD_ANUBREKHAN_GREET:
+ hadAnubRekhanGreet = (value == 1u);
+ break;
+ case DATA_HAD_FAERLINA_GREET:
+ hadFaerlinaGreet = (value == 1u);
+ break;
+ case DATA_HAD_THADDIUS_GREET:
+ hadThaddiusGreet = (value == 1u);
+ break;
+ default:
+ break;
}
}
@@ -328,6 +357,12 @@ class instance_naxxramas : public InstanceMapScript
{
case DATA_ABOMINATION_KILLED:
return AbominationCount;
+ case DATA_HAD_ANUBREKHAN_GREET:
+ return hadAnubRekhanGreet ? 1u : 0u;
+ case DATA_HAD_FAERLINA_GREET:
+ return hadFaerlinaGreet ? 1u : 0u;
+ case DATA_HAD_THADDIUS_GREET:
+ return hadThaddiusGreet ? 1u : 0u;
default:
break;
}
@@ -339,6 +374,8 @@ class instance_naxxramas : public InstanceMapScript
{
switch (id)
{
+ case DATA_ANUBREKHAN:
+ return AnubRekhanGUID;
case DATA_FAERLINA:
return FaerlinaGUID;
case DATA_THANE:
@@ -349,14 +386,14 @@ class instance_naxxramas : public InstanceMapScript
return BaronGUID;
case DATA_SIR:
return SirGUID;
- case DATA_THADDIUS:
- return ThaddiusGUID;
case DATA_HEIGAN:
return HeiganGUID;
case DATA_FEUGEN:
return FeugenGUID;
case DATA_STALAGG:
return StalaggGUID;
+ case DATA_THADDIUS:
+ return ThaddiusGUID;
case DATA_KELTHUZAD:
return KelthuzadGUID;
case DATA_KELTHUZAD_PORTAL01:
@@ -525,6 +562,11 @@ class instance_naxxramas : public InstanceMapScript
kelthuzad->AI()->Talk(SAY_DIALOGUE_SAPPHIRON_KELTHUZAD4);
HandleGameObject(KelthuzadDoorGUID, true);
break;
+ case EVENT_THADDIUS_RESET:
+ if (GetBossState(BOSS_THADDIUS) != DONE)
+ if (Creature* thaddius = instance->GetCreature(ThaddiusGUID))
+ thaddius->AI()->DoAction(-1);
+ break;
default:
break;
}
@@ -552,7 +594,7 @@ class instance_naxxramas : public InstanceMapScript
// This Function is called in CheckAchievementCriteriaMeet and CheckAchievementCriteriaMeet is called before SetBossState(bossId, DONE),
// so to check if all bosses are done the checker must exclude 1 boss, the last done, if there is at most 1 encouter in progress when is
// called this function then all bosses are done. The one boss that check is the boss that calls this function, so it is dead.
- bool AreAllEncoutersDone()
+ bool AreAllEncountersDone()
{
uint32 numBossAlive = 0;
for (uint32 i = 0; i < EncounterCount; ++i)
@@ -589,7 +631,7 @@ class instance_naxxramas : public InstanceMapScript
case 13239: // Loatheb
case 13240: // Thaddius
case 7617: // Kel'Thuzad
- if (AreAllEncoutersDone() && !playerDied)
+ if (AreAllEncountersDone() && !playerDied)
return true;
return false;
}
@@ -599,6 +641,8 @@ class instance_naxxramas : public InstanceMapScript
protected:
/* The Arachnid Quarter */
+ // Anub'rekhan
+ ObjectGuid AnubRekhanGUID;
// Grand Widow Faerlina
ObjectGuid FaerlinaGUID;
@@ -635,6 +679,9 @@ class instance_naxxramas : public InstanceMapScript
ObjectGuid KelthuzadDoorGUID;
ObjectGuid LichKingGUID;
uint8 AbominationCount;
+ bool hadAnubRekhanGreet;
+ bool hadFaerlinaGreet;
+ bool hadThaddiusGreet;
uint8 CurrentWingTaunt;
/* The Immortal / The Undying */
diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
index 459903c4c86..d2b99784953 100644
--- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h
+++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
@@ -46,6 +46,9 @@ enum Data
DATA_HEIGAN_ERUPT,
DATA_GOTHIK_GATE,
DATA_SAPPHIRON_BIRTH,
+ DATA_HAD_ANUBREKHAN_GREET,
+ DATA_HAD_FAERLINA_GREET,
+ DATA_HAD_THADDIUS_GREET,
DATA_HORSEMEN0,
DATA_HORSEMEN1,
@@ -61,6 +64,7 @@ enum Data
enum Data64
{
+ DATA_ANUBREKHAN,
DATA_FAERLINA,
DATA_THANE,
DATA_LADY,
@@ -81,15 +85,17 @@ enum Data64
enum CreaturesIds
{
+ NPC_ANUBREKHAN = 15956,
NPC_FAERLINA = 15953,
NPC_THANE = 16064,
NPC_LADY = 16065,
NPC_BARON = 30549,
NPC_SIR = 16063,
- NPC_THADDIUS = 15928,
NPC_HEIGAN = 15936,
+ NPC_THADDIUS = 15928,
NPC_FEUGEN = 15930,
NPC_STALAGG = 15929,
+ NPC_TESLA = 16218,
NPC_SAPPHIRON = 15989,
NPC_KEL_THUZAD = 15990,
NPC_CRYPT_GUARD = 16573,
@@ -169,6 +175,10 @@ enum InstanceEvents
EVENT_DIALOGUE_GOTHIK_KORTHAZZ2,
EVENT_DIALOGUE_GOTHIK_RIVENDARE2,
+ // Thaddius AI requesting timed encounter (re-)spawn
+ EVENT_THADDIUS_BEGIN_RESET,
+ EVENT_THADDIUS_RESET,
+
// Dialogue that happens after each wing.
EVENT_KELTHUZAD_WING_TAUNT,
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index cc9af9413e5..33ffea4993b 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -1244,8 +1244,9 @@ public:
++_wpCount;
}
else if (Vehicle* hoverDisk = me->GetVehicleKit())
- if (Unit* lordPassenger = hoverDisk->GetPassenger(0))
- lordPassenger->ToCreature()->AI()->DoAction(ACTION_SET_DISK_VICTIM_CHASE);
+ if (Unit* passenger = hoverDisk->GetPassenger(0))
+ if (Creature* lordPassenger = passenger->ToCreature())
+ lordPassenger->AI()->DoAction(ACTION_SET_DISK_VICTIM_CHASE);
}
private:
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
index 7c99fe40e32..d1f2be5525d 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
@@ -80,7 +80,7 @@ public:
void SpawnGameObject(uint32 entry, Position const& pos)
{
GameObject* go = new GameObject();
- if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), entry, instance,
+ if (!go->Create(instance->GenerateLowGuid<HighGuid::GameObject>(), entry, instance,
PHASEMASK_NORMAL, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(),
0, 0, 0, 0, 120, GO_STATE_READY))
{
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
index 25d1e214260..7618a0b9156 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
@@ -242,7 +242,7 @@ class ActivateLivingConstellation : public BasicEvent
{
}
- bool Execute(uint64 execTime, uint32 /*diff*/)
+ bool Execute(uint64 execTime, uint32 /*diff*/) override
{
if (!_instance || _instance->GetBossState(BOSS_ALGALON) != IN_PROGRESS)
return true; // delete event
@@ -264,7 +264,7 @@ class CosmicSmashDamageEvent : public BasicEvent
{
}
- bool Execute(uint64 /*execTime*/, uint32 /*diff*/)
+ bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override
{
_caster->CastSpell((Unit*)NULL, SPELL_COSMIC_SMASH_TRIGGERED, TRIGGERED_FULL_MASK);
return true;
@@ -281,7 +281,7 @@ class SummonUnleashedDarkMatter : public BasicEvent
{
}
- bool Execute(uint64 execTime, uint32 /*diff*/)
+ bool Execute(uint64 execTime, uint32 /*diff*/) override
{
_caster->CastSpell((Unit*)NULL, SPELL_SUMMON_UNLEASHED_DARK_MATTER, TRIGGERED_FULL_MASK);
_caster->m_Events.AddEvent(this, execTime + 30000);
@@ -322,7 +322,7 @@ class boss_algalon_the_observer : public CreatureScript
void KilledUnit(Unit* victim) override
{
- if (victim->GetTypeId() == TYPEID_UNIT)
+ if (victim->GetTypeId() == TYPEID_PLAYER)
{
_fedOnTears = true;
if (!_hasYelled)
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
index 61d64413178..b31436f656a 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
@@ -97,9 +97,6 @@ enum Creatures
NPC_MIMIRON_TARGET_BEACON = 33369,
NPC_HODIR_TARGET_BEACON = 33108,
NPC_FREYA_TARGET_BEACON = 33366,
- NPC_LOREKEEPER = 33686, // Hard mode starter
- NPC_BRANZ_BRONZBEARD = 33579,
- NPC_DELORAH = 33701,
NPC_ULDUAR_GAUNTLET_GENERATOR = 33571, // Trigger tied to towers
};
@@ -1167,9 +1164,49 @@ class npc_freya_ward_summon : public CreatureScript
}
};
-//npc lore keeper
-#define GOSSIP_ITEM_1 "Activate secondary defensive systems"
-#define GOSSIP_ITEM_2 "Confirmed"
+enum BrannBronzebeardGossips
+{
+ GOSSIP_MENU_BRANN_BRONZEBEARD = 10355,
+ GOSSIP_OPTION_BRANN_BRONZEBEARD = 0
+};
+
+class npc_brann_bronzebeard_ulduar_intro : public CreatureScript
+{
+ public:
+ npc_brann_bronzebeard_ulduar_intro() : CreatureScript("npc_brann_bronzebeard_ulduar_intro") { }
+
+ struct npc_brann_bronzebeard_ulduar_introAI : public ScriptedAI
+ {
+ npc_brann_bronzebeard_ulduar_introAI(Creature* creature) : ScriptedAI(creature)
+ {
+ _instance = creature->GetInstanceScript();
+ }
+
+ void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ {
+ if (menuId == GOSSIP_MENU_BRANN_BRONZEBEARD && gossipListId == GOSSIP_OPTION_BRANN_BRONZEBEARD)
+ {
+ player->PlayerTalkClass->SendCloseGossip();
+ if (Creature* loreKeeper = _instance->GetCreature(DATA_LORE_KEEPER_OF_NORGANNON))
+ loreKeeper->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ }
+ }
+
+ private:
+ InstanceScript* _instance;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetUlduarAI<npc_brann_bronzebeard_ulduar_introAI>(creature);
+ }
+};
+
+enum LoreKeeperGossips
+{
+ GOSSIP_MENU_LORE_KEEPER = 10477,
+ GOSSIP_OPTION_LORE_KEEPER = 0
+};
class npc_lorekeeper : public CreatureScript
{
@@ -1180,6 +1217,7 @@ class npc_lorekeeper : public CreatureScript
{
npc_lorekeeperAI(Creature* creature) : ScriptedAI(creature)
{
+ _instance = creature->GetInstanceScript();
}
void DoAction(int32 action) override
@@ -1187,66 +1225,42 @@ class npc_lorekeeper : public CreatureScript
// Start encounter
if (action == ACTION_SPAWN_VEHICLES)
{
- for (int32 i = 0; i < RAID_MODE(2, 5); ++i)
+ for (uint8 i = 0; i < RAID_MODE(2, 5); ++i)
DoSummon(VEHICLE_SIEGE, PosSiege[i], 3000, TEMPSUMMON_CORPSE_TIMED_DESPAWN);
- for (int32 i = 0; i < RAID_MODE(2, 5); ++i)
+ for (uint8 i = 0; i < RAID_MODE(2, 5); ++i)
DoSummon(VEHICLE_CHOPPER, PosChopper[i], 3000, TEMPSUMMON_CORPSE_TIMED_DESPAWN);
- for (int32 i = 0; i < RAID_MODE(2, 5); ++i)
+ for (uint8 i = 0; i < RAID_MODE(2, 5); ++i)
DoSummon(VEHICLE_DEMOLISHER, PosDemolisher[i], 3000, TEMPSUMMON_CORPSE_TIMED_DESPAWN);
- return;
}
}
- };
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- player->CLOSE_GOSSIP_MENU();
- InstanceScript* instance = creature->GetInstanceScript();
- if (!instance)
- return true;
- switch (action)
+ void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
- case GOSSIP_ACTION_INFO_DEF+1:
- player->PrepareGossipMenu(creature);
- instance->instance->LoadGrid(364, -16); //make sure leviathan is loaded
+ if (menuId == GOSSIP_MENU_LORE_KEEPER && gossipListId == GOSSIP_OPTION_LORE_KEEPER)
+ {
+ player->PlayerTalkClass->SendCloseGossip();
+ _instance->instance->LoadGrid(364, -16); // make sure leviathan is loaded
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
- player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+2:
- if (Creature* leviathan = instance->instance->GetCreature(instance->GetGuidData(BOSS_LEVIATHAN)))
+ if (Creature* leviathan = _instance->instance->GetCreature(_instance->GetGuidData(BOSS_LEVIATHAN)))
{
leviathan->AI()->DoAction(ACTION_START_HARD_MODE);
- creature->SetVisible(false);
- creature->AI()->DoAction(ACTION_SPAWN_VEHICLES); // spawn the vehicles
- if (Creature* Delorah = creature->FindNearestCreature(NPC_DELORAH, 1000, true))
+ me->SetVisible(false);
+ DoAction(ACTION_SPAWN_VEHICLES); // spawn the vehicles
+ if (Creature* delorah = _instance->GetCreature(DATA_DELLORAH))
{
- if (Creature* Branz = creature->FindNearestCreature(NPC_BRANZ_BRONZBEARD, 1000, true))
+ if (Creature* brann = _instance->GetCreature(DATA_BRANN_BRONZEBEARD_INTRO))
{
- Delorah->GetMotionMaster()->MovePoint(0, Branz->GetPositionX()-4, Branz->GetPositionY(), Branz->GetPositionZ());
- /// @todo Delorah->AI()->Talk(xxxx, Branz->GetGUID()); when reached at branz
+ delorah->GetMotionMaster()->MovePoint(0, brann->GetPositionX() - 4, brann->GetPositionY(), brann->GetPositionZ());
+ /// @todo delorah->AI()->Talk(xxxx, brann->GetGUID()); when reached at branz
}
}
}
- break;
+ }
}
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- InstanceScript* instance = creature->GetInstanceScript();
- if (instance && instance->GetData(BOSS_LEVIATHAN) != DONE && player)
- {
- player->PrepareGossipMenu(creature);
-
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
- }
- return true;
- }
+ private:
+ InstanceScript* _instance;
+ };
CreatureAI* GetAI(Creature* creature) const override
{
@@ -1254,56 +1268,6 @@ class npc_lorekeeper : public CreatureScript
}
};
-//enable hardmode
-////npc_brann_bronzebeard this requires more work involving area triggers. if reached this guy speaks through his radio..
-//#define GOSSIP_ITEM_1 "xxxxx"
-//#define GOSSIP_ITEM_2 "xxxxx"
-//
-/*
-class npc_brann_bronzebeard : public CreatureScript
-{
-public:
- npc_brann_bronzebeard() : CreatureScript("npc_brann_bronzebeard") { }
-
- //bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
- //{
- // player->PlayerTalkClass->ClearMenus();
- // switch (action)
- // {
- // case GOSSIP_ACTION_INFO_DEF+1:
- // if (player)
- // {
- // player->PrepareGossipMenu(creature);
- //
- // player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
- // player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
- // }
- // break;
- // case GOSSIP_ACTION_INFO_DEF+2:
- // if (player)
- // player->CLOSE_GOSSIP_MENU();
- // if (Creature* Lorekeeper = creature->FindNearestCreature(NPC_LOREKEEPER, 1000, true)) //lore keeper of lorgannon
- // Lorekeeper->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- // break;
- // }
- // return true;
- //}
- //bool OnGossipHello(Player* player, Creature* creature) override
- //{
- // InstanceScript* instance = creature->GetInstanceScript();
- // if (instance && instance->GetData(BOSS_LEVIATHAN) !=DONE)
- // {
- // player->PrepareGossipMenu(creature);
- //
- // player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- // player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
- // }
- // return true;
- //}
- //
-}
-*/
-
class go_ulduar_tower : public GameObjectScript
{
public:
@@ -1836,8 +1800,8 @@ void AddSC_boss_flame_leviathan()
new npc_hodirs_fury();
new npc_freyas_ward();
new npc_freya_ward_summon();
+ new npc_brann_bronzebeard_ulduar_intro();
new npc_lorekeeper();
- // new npc_brann_bronzebeard();
new go_ulduar_tower();
new achievement_three_car_garage_demolisher();
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
index 818bb0041a9..6958b5d78a5 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
@@ -749,8 +749,8 @@ class boss_elder_brightleaf : public CreatureScript
case EVENT_SOLAR_FLARE:
{
uint8 stackAmount = 0;
- if (me->GetAura(SPELL_FLUX_AURA))
- stackAmount = me->GetAura(SPELL_FLUX_AURA)->GetStackAmount();
+ if (Aura* aura = me->GetAura(SPELL_FLUX_AURA))
+ stackAmount = aura->GetStackAmount();
me->CastCustomSpell(SPELL_SOLAR_FLARE, SPELLVALUE_MAX_TARGETS, stackAmount, me, false);
events.ScheduleEvent(EVENT_SOLAR_FLARE, urand(5000, 10000));
break;
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
index 64403ad40ca..7e005eff303 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
@@ -234,16 +234,12 @@ class boss_general_vezax : public CreatureScript
void CheckShamanisticRage()
{
- Map* map = me->GetMap();
- if (map && map->IsDungeon())
- {
- // If Shaman has Shamanistic Rage and use it during the fight, it will cast Corrupted Rage on him
- Map::PlayerList const& Players = map->GetPlayers();
- for (Map::PlayerList::const_iterator itr = Players.begin(); itr != Players.end(); ++itr)
- if (Player* player = itr->GetSource())
- if (player->HasSpell(SPELL_SHAMANTIC_RAGE))
- player->CastSpell(player, SPELL_CORRUPTED_RAGE, false);
- }
+ // If Shaman has Shamanistic Rage and use it during the fight, it will cast Corrupted Rage on him
+ Map::PlayerList const& Players = me->GetMap()->GetPlayers();
+ for (Map::PlayerList::const_iterator itr = Players.begin(); itr != Players.end(); ++itr)
+ if (Player* player = itr->GetSource())
+ if (player->HasSpell(SPELL_SHAMANTIC_RAGE))
+ player->CastSpell(player, SPELL_CORRUPTED_RAGE, false);
}
uint32 GetData(uint32 type) const override
@@ -280,34 +276,28 @@ class boss_general_vezax : public CreatureScript
*/
Unit* CheckPlayersInRange(uint8 playersMin, float rangeMin, float rangeMax)
{
- Map* map = me->GetMap();
- if (map && map->IsDungeon())
+ std::list<Player*> PlayerList;
+ Map::PlayerList const& Players = me->GetMap()->GetPlayers();
+ for (Map::PlayerList::const_iterator itr = Players.begin(); itr != Players.end(); ++itr)
{
- std::list<Player*> PlayerList;
- Map::PlayerList const& Players = map->GetPlayers();
- for (Map::PlayerList::const_iterator itr = Players.begin(); itr != Players.end(); ++itr)
+ if (Player* player = itr->GetSource())
{
- if (Player* player = itr->GetSource())
- {
- float distance = player->GetDistance(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
- if (rangeMin > distance || distance > rangeMax)
- continue;
+ float distance = player->GetDistance(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
+ if (rangeMin > distance || distance > rangeMax)
+ continue;
- PlayerList.push_back(player);
- }
+ PlayerList.push_back(player);
}
+ }
- if (PlayerList.empty())
- return NULL;
-
- size_t size = PlayerList.size();
- if (size < playersMin)
- return NULL;
+ if (PlayerList.empty())
+ return NULL;
- return Trinity::Containers::SelectRandomContainerElement(PlayerList);
- }
+ size_t size = PlayerList.size();
+ if (size < playersMin)
+ return NULL;
- return NULL;
+ return Trinity::Containers::SelectRandomContainerElement(PlayerList);
}
};
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
index bd4fee60c42..5c852cd7f26 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
@@ -701,7 +701,7 @@ class boss_leviathan_mk_ii : public CreatureScript
{
me->CastStop();
if (Unit* turret = me->GetVehicleKit()->GetPassenger(3))
- turret->Kill(turret);
+ turret->KillSelf();
me->SetSpeed(MOVE_RUN, 1.5f, true);
me->GetMotionMaster()->MovePoint(WP_MKII_P1_IDLE, VehicleRelocation[WP_MKII_P1_IDLE]);
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 59c28cd3a5a..8545d5b21eb 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
@@ -1508,9 +1508,9 @@ class npc_observation_ring_keeper : public CreatureScript
DoCast(SPELL_KEEPER_ACTIVE);
}
- void sGossipSelect(Player* player, uint32 sender, uint32 /*action*/) override
+ void sGossipSelect(Player* player, uint32 menuId, uint32 /*gossipListId*/) override
{
- if (sender != 10333)
+ if (menuId != 10333)
return;
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
@@ -2423,7 +2423,7 @@ class spell_yogg_saron_squeeze : public SpellScriptLoader // 64125
{
if (Unit* vehicle = GetTarget()->GetVehicleBase())
if (vehicle->IsAlive())
- vehicle->Kill(vehicle); // should tentacle die or just release its target?
+ vehicle->KillSelf(); // should tentacle die or just release its target?
}
void Register() override
@@ -2905,7 +2905,7 @@ class spell_yogg_saron_insane : public SpellScriptLoader // 63120
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (GetTarget()->IsAlive())
- GetTarget()->Kill(GetTarget());
+ GetTarget()->KillSelf();
}
void Register() override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
index 0c7df100f60..f2edfa816a0 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
@@ -54,6 +54,15 @@ MinionData const minionData[] =
{ 0, 0, }
};
+ObjectData const creatureData[] =
+{
+ { NPC_BRANN_BRONZEBEARD_INTRO, DATA_BRANN_BRONZEBEARD_INTRO },
+ { NPC_LORE_KEEPER_OF_NORGANNON, DATA_LORE_KEEPER_OF_NORGANNON },
+ { NPC_HIGH_EXPLORER_DELLORAH, DATA_DELLORAH },
+ { NPC_BRONZEBEARD_RADIO, DATA_BRONZEBEARD_RADIO },
+ { 0, 0, }
+};
+
class instance_ulduar : public InstanceMapScript
{
public:
@@ -68,6 +77,7 @@ class instance_ulduar : public InstanceMapScript
LoadDoorData(doorData);
LoadMinionData(minionData);
+ LoadObjectData(creatureData, nullptr);
_algalonTimer = 61;
_maxArmorItemLevel = 0;
@@ -420,6 +430,8 @@ class instance_ulduar : public InstanceMapScript
algalon->AI()->JustSummoned(creature);
break;
}
+
+ InstanceScript::OnCreatureCreate(creature);
}
void OnCreatureRemove(Creature* creature) override
@@ -446,6 +458,8 @@ class instance_ulduar : public InstanceMapScript
default:
break;
}
+
+ InstanceScript::OnCreatureRemove(creature);
}
void OnGameObjectCreate(GameObject* gameObject) override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
index 9f640c410ef..834ab32864f 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
@@ -80,6 +80,23 @@ enum UlduarNPCs
NPC_YOGG_SARON = 33288,
NPC_ALGALON = 32871,
+ // Flame Leviathan
+ NPC_ULDUAR_COLOSSUS = 33237,
+ NPC_BRANN_BRONZEBEARD_INTRO = 33579,
+ NPC_BRANN_BRONZEBEARD_FLYING_MACHINE = 34119,
+ NPC_BRANN_S_FLYING_MACHINE = 34120,
+ NPC_ARCHMAGE_PENTARUS = 33624,
+ NPC_ARCHMAGE_RHYDIAN = 33696,
+ NPC_LORE_KEEPER_OF_NORGANNON = 33686,
+ NPC_HIGH_EXPLORER_DELLORAH = 33701,
+ NPC_BRONZEBEARD_RADIO = 34054,
+ NPC_FLAME_LEVIATHAN = 33113,
+ NPC_FLAME_LEVIATHAN_SEAT = 33114,
+ NPC_FLAME_LEVIATHAN_TURRET = 33139,
+ NPC_LEVIATHAN_DEFENSE_TURRET = 33142,
+ NPC_OVERLOAD_CONTROL_DEVICE = 33143,
+ NPC_ORBITAL_SUPPORT = 34286,
+
// Mimiron
NPC_LEVIATHAN_MKII = 33432,
NPC_VX_001 = 33651,
@@ -382,6 +399,12 @@ enum UlduarData
DATA_UNIVERSE_GLOBE,
DATA_ALGALON_TRAPDOOR,
DATA_BRANN_BRONZEBEARD_ALG,
+
+ // Misc
+ DATA_BRANN_BRONZEBEARD_INTRO,
+ DATA_LORE_KEEPER_OF_NORGANNON,
+ DATA_DELLORAH,
+ DATA_BRONZEBEARD_RADIO
};
enum UlduarWorldStates
diff --git a/src/server/scripts/Northrend/isle_of_conquest.cpp b/src/server/scripts/Northrend/isle_of_conquest.cpp
index f5514cc51a5..fccdc8098b6 100644
--- a/src/server/scripts/Northrend/isle_of_conquest.cpp
+++ b/src/server/scripts/Northrend/isle_of_conquest.cpp
@@ -206,7 +206,7 @@ class spell_ioc_parachute_ic : public SpellScriptLoader
class StartLaunchEvent : public BasicEvent
{
public:
- StartLaunchEvent(float x, float y, float z, uint32 lowGuid) : _x(x), _y(y), _z(z), _lowGuid(lowGuid)
+ StartLaunchEvent(float x, float y, float z, ObjectGuid::LowType lowGuid) : _x(x), _y(y), _z(z), _lowGuid(lowGuid)
{
}
@@ -227,7 +227,7 @@ class StartLaunchEvent : public BasicEvent
private:
float _x, _y, _z;
- uint32 _lowGuid;
+ ObjectGuid::LowType _lowGuid;
};
class spell_ioc_launch : public SpellScriptLoader
@@ -248,7 +248,7 @@ class spell_ioc_launch : public SpellScriptLoader
x = GetExplTargetDest()->GetPositionX();
y = GetExplTargetDest()->GetPositionY();
z = GetExplTargetDest()->GetPositionZ();
- GetCaster()->ToCreature()->m_Events.AddEvent(new StartLaunchEvent(x, y, z, GetHitPlayer()->GetGUIDLow()), GetCaster()->ToCreature()->m_Events.CalculateTime(2500));
+ GetCaster()->ToCreature()->m_Events.AddEvent(new StartLaunchEvent(x, y, z, GetHitPlayer()->GetGUID().GetCounter()), GetCaster()->ToCreature()->m_Events.CalculateTime(2500));
}
void Register() override
diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp
index 6069c0d8be7..6ef9abe2267 100644
--- a/src/server/scripts/Northrend/zone_borean_tundra.cpp
+++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp
@@ -596,12 +596,13 @@ public:
switch (IntroPhase)
{
case 1:
- Talk(SAY_START_1);
+ if (Player* player = GetPlayerForEscort())
+ Talk(SAY_START_1, player);
IntroPhase = 2;
IntroTimer = 7500;
break;
case 2:
- Talk(SAY_END_1);
+ Talk(SAY_START_2);
IntroPhase = 3;
IntroTimer = 7500;
break;
@@ -611,12 +612,13 @@ public:
IntroTimer = 0;
break;
case 4:
- Talk(SAY_START_2);
+ Talk(SAY_END_1);
IntroPhase = 5;
IntroTimer = 8000;
break;
case 5:
- Talk(SAY_END_2);
+ if (Player* player = GetPlayerForEscort())
+ Talk(SAY_END_2, player);
IntroPhase = 6;
IntroTimer = 2500;
break;
@@ -1324,7 +1326,7 @@ public:
arlos->AI()->Talk(SAY_ARLOS_1);
arlos->AI()->Talk(SAY_ARLOS_2);
leryssa->AI()->Talk(SAY_LERYSSA_1);
- arlos->Kill(arlos, false);
+ arlos->KillSelf(false);
leryssa->RemoveAura(SPELL_STUN);
leryssa->ClearUnitState(UNIT_STATE_STUNNED);
leryssa->SetWalk(false);
diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
index 83fd3859716..54b06260e78 100644
--- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp
+++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
@@ -762,7 +762,7 @@ public:
}
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
DoCast(player, SPELL_SUMMON_ASHWOOD_BRAND);
}
diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
index d5d2eebda38..5d47e7fa4ec 100644
--- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp
+++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
@@ -622,17 +622,17 @@ public:
enum MiscLifewarden
{
- NPC_PRESENCE = 28563, // Freya's Presence
- NPC_SABOTEUR = 28538, // Cultist Saboteur
- NPC_SERVANT = 28320, // Servant of Freya
+ NPC_PRESENCE = 28563, // Freya's Presence
+ NPC_SABOTEUR = 28538, // Cultist Saboteur
+ NPC_SERVANT = 28320, // Servant of Freya
- WHISPER_ACTIVATE = 0,
+ WHISPER_ACTIVATE = 0,
- SPELL_FREYA_DUMMY = 51318,
- SPELL_LIFEFORCE = 51395,
- SPELL_FREYA_DUMMY_TRIGGER = 51335,
- SPELL_LASHER_EMERGE = 48195,
- SPELL_WILD_GROWTH = 52948,
+ SPELL_FREYA_DUMMY = 51318,
+ SPELL_LIFEFORCE = 51395,
+ SPELL_FREYA_DUMMY_TRIGGER = 51335,
+ SPELL_LASHER_EMERGE = 48195,
+ SPELL_WILD_GROWTH = 52948,
};
class spell_q12620_the_lifewarden_wrath : public SpellScriptLoader
@@ -702,25 +702,25 @@ public:
enum KickWhatKick
{
- NPC_LUCKY_WILHELM = 28054,
- NPC_APPLE = 28053,
- NPC_DROSTAN = 28328,
- NPC_CRUNCHY = 28346,
- NPC_THICKBIRD = 28093,
-
- SPELL_HIT_APPLE = 51331,
- SPELL_MISS_APPLE = 51332,
- SPELL_MISS_BIRD_APPLE = 51366,
- SPELL_APPLE_FALL = 51371,
- SPELL_BIRD_FALL = 51369,
-
- EVENT_MISS = 0,
- EVENT_HIT = 1,
- EVENT_MISS_BIRD = 2,
-
- SAY_WILHELM_MISS = 0,
- SAY_WILHELM_HIT = 1,
- SAY_DROSTAN_REPLY_MISS = 0,
+ NPC_LUCKY_WILHELM = 28054,
+ NPC_APPLE = 28053,
+ NPC_DROSTAN = 28328,
+ NPC_CRUNCHY = 28346,
+ NPC_THICKBIRD = 28093,
+
+ SPELL_HIT_APPLE = 51331,
+ SPELL_MISS_APPLE = 51332,
+ SPELL_MISS_BIRD_APPLE = 51366,
+ SPELL_APPLE_FALL = 51371,
+ SPELL_BIRD_FALL = 51369,
+
+ EVENT_MISS = 0,
+ EVENT_HIT = 1,
+ EVENT_MISS_BIRD = 2,
+
+ SAY_WILHELM_MISS = 0,
+ SAY_WILHELM_HIT = 1,
+ SAY_DROSTAN_REPLY_MISS = 0,
};
class spell_q12589_shoot_rjr : public SpellScriptLoader
@@ -778,7 +778,7 @@ public:
wilhelm->AI()->Talk(SAY_WILHELM_MISS);
drostan->AI()->Talk(SAY_DROSTAN_REPLY_MISS);
- bird->Kill(bird);
+ bird->KillSelf();
crunchy->GetMotionMaster()->MovePoint(0, bird->GetPositionX(), bird->GetPositionY(),
bird->GetMap()->GetWaterOrGroundLevel(bird->GetPositionX(), bird->GetPositionY(), bird->GetPositionZ()));
/// @todo Make crunchy perform emote eat when he reaches the bird
@@ -800,8 +800,6 @@ public:
wilhelm->AI()->Talk(SAY_WILHELM_HIT);
if (Player* player = shooter->ToPlayer())
player->KilledMonsterCredit(NPC_APPLE);
- apple->DespawnOrUnsummon();
-
break;
}
}
@@ -828,11 +826,11 @@ may be easily converted to SAI when they get.*/
enum SongOfWindAndWater
{
// Spells
- SPELL_DEVOUR_WIND = 52862,
- SPELL_DEVOUR_WATER = 52864,
+ SPELL_DEVOUR_WIND = 52862,
+ SPELL_DEVOUR_WATER = 52864,
// NPCs
- NPC_HAIPHOON_WATER = 28999,
- NPC_HAIPHOON_AIR = 28985
+ NPC_HAIPHOON_WATER = 28999,
+ NPC_HAIPHOON_AIR = 28985
};
class npc_haiphoon : public CreatureScript
@@ -883,7 +881,7 @@ enum ReconnaissanceFlight
VIC_SAY_6 = 6,
PLANE_EMOTE = 0,
- SPELL_ENGINE = 52255, // Engine on Fire
+ SPELL_ENGINE = 52255, // Engine on Fire
SPELL_LAND = 52226, // Land Flying Machine
SPELL_CREDIT = 53328 // Land Flying Machine Credit
diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp
index 25bf4826000..e86e907b550 100644
--- a/src/server/scripts/Northrend/zone_storm_peaks.cpp
+++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp
@@ -85,13 +85,13 @@ public:
DoMeleeAttackIfReady();
}
- void sGossipSelect(Player* player, uint32 sender, uint32 action) override
+ void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
- if (sender == GOSSIP_ID && action == GOSSIP_OPTION_ID)
+ if (menuId == GOSSIP_ID && gossipListId == GOSSIP_OPTION_ID)
{
player->CLOSE_GOSSIP_MENU();
me->setFaction(113);
- npc_escortAI::Start(true, true, player->GetGUID());
+ Start(true, true, player->GetGUID());
}
}
};
@@ -476,7 +476,7 @@ public:
objectCounter = 0;
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
player->CLOSE_GOSSIP_MENU();
playerGUID = player->GetGUID();
diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp
index 91c796a6e69..e36930f5745 100644
--- a/src/server/scripts/Northrend/zone_zuldrak.cpp
+++ b/src/server/scripts/Northrend/zone_zuldrak.cpp
@@ -267,7 +267,7 @@ public:
return;
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
_events.ScheduleEvent(EVENT_RECRUIT_1, 100);
player->CLOSE_GOSSIP_MENU();
@@ -552,7 +552,7 @@ public:
}
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
player->CLOSE_GOSSIP_MENU();
DoCast(player, SPELL_ALCHEMIST_APPRENTICE_INVISBUFF);
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp
index dec236e5f33..89f35457a44 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp
@@ -15,6 +15,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "MapManager.h"
#include "ScriptMgr.h"
#include "OutdoorPvPEP.h"
#include "WorldPacket.h"
@@ -70,16 +71,14 @@ void OPvPCapturePointEP_EWT::ChangeState()
break;
}
- GameObject* flag = HashMapHolder<GameObject>::Find(m_capturePointGUID);
- GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[EP_EWT_FLAGS]);
- if (flag)
- {
- flag->SetGoArtKit(artkit);
- }
- if (flag2)
- {
- flag2->SetGoArtKit(artkit);
- }
+ Map* map = sMapMgr->FindMap(0, 0);
+ auto bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId);
+ for (auto itr = bounds.first; itr != bounds.second; ++itr)
+ itr->second->SetGoArtKit(artkit);
+
+ bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_Objects[EP_EWT_FLAGS]);
+ for (auto itr = bounds.first; itr != bounds.second; ++itr)
+ itr->second->SetGoArtKit(artkit);
UpdateTowerState();
@@ -180,16 +179,14 @@ void OPvPCapturePointEP_NPT::ChangeState()
break;
}
- GameObject* flag = HashMapHolder<GameObject>::Find(m_capturePointGUID);
- GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[EP_NPT_FLAGS]);
- if (flag)
- {
- flag->SetGoArtKit(artkit);
- }
- if (flag2)
- {
- flag2->SetGoArtKit(artkit);
- }
+ Map* map = sMapMgr->FindMap(0, 0);
+ auto bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId);
+ for (auto itr = bounds.first; itr != bounds.second; ++itr)
+ itr->second->SetGoArtKit(artkit);
+
+ bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_Objects[EP_NPT_FLAGS]);
+ for (auto itr = bounds.first; itr != bounds.second; ++itr)
+ itr->second->SetGoArtKit(artkit);
UpdateTowerState();
@@ -223,9 +220,12 @@ void OPvPCapturePointEP_NPT::SummonGO(uint32 team)
m_SummonedGOSide = team;
DelObject(EP_NPT_BUFF);
AddObject(EP_NPT_BUFF, EP_NPT_LordaeronShrine.entry, EP_NPT_LordaeronShrine.map, EP_NPT_LordaeronShrine.x, EP_NPT_LordaeronShrine.y, EP_NPT_LordaeronShrine.z, EP_NPT_LordaeronShrine.o, EP_NPT_LordaeronShrine.rot0, EP_NPT_LordaeronShrine.rot1, EP_NPT_LordaeronShrine.rot2, EP_NPT_LordaeronShrine.rot3);
- GameObject* go = HashMapHolder<GameObject>::Find(m_Objects[EP_NPT_BUFF]);
- if (go)
- go->SetUInt32Value(GAMEOBJECT_FACTION, (team == ALLIANCE ? 84 : 83));
+
+ Map* map = sMapMgr->FindMap(0, 0);
+ auto bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_Objects[EP_NPT_BUFF]);
+ for (auto itr = bounds.first; itr != bounds.second; ++itr)
+ if (GameObject* go = itr->second)
+ go->SetUInt32Value(GAMEOBJECT_FACTION, (team == ALLIANCE ? 84 : 83));
}
}
@@ -274,16 +274,14 @@ void OPvPCapturePointEP_CGT::ChangeState()
break;
}
- GameObject* flag = HashMapHolder<GameObject>::Find(m_capturePointGUID);
- GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[EP_CGT_FLAGS]);
- if (flag)
- {
- flag->SetGoArtKit(artkit);
- }
- if (flag2)
- {
- flag2->SetGoArtKit(artkit);
- }
+ Map* map = sMapMgr->FindMap(0, 0);
+ auto bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId);
+ for (auto itr = bounds.first; itr != bounds.second; ++itr)
+ itr->second->SetGoArtKit(artkit);
+
+ bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_Objects[EP_CGT_FLAGS]);
+ for (auto itr = bounds.first; itr != bounds.second; ++itr)
+ itr->second->SetGoArtKit(artkit);
UpdateTowerState();
@@ -375,16 +373,14 @@ void OPvPCapturePointEP_PWT::ChangeState()
break;
}
- GameObject* flag = HashMapHolder<GameObject>::Find(m_capturePointGUID);
- GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[EP_PWT_FLAGS]);
- if (flag)
- {
- flag->SetGoArtKit(artkit);
- }
- if (flag2)
- {
- flag2->SetGoArtKit(artkit);
- }
+ Map* map = sMapMgr->FindMap(0, 0);
+ auto bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId);
+ for (auto itr = bounds.first; itr != bounds.second; ++itr)
+ itr->second->SetGoArtKit(artkit);
+
+ bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_Objects[EP_PWT_FLAGS]);
+ for (auto itr = bounds.first; itr != bounds.second; ++itr)
+ itr->second->SetGoArtKit(artkit);
UpdateTowerState();
@@ -479,6 +475,7 @@ bool OutdoorPvPEP::SetupOutdoorPvP()
AddCapturePoint(new OPvPCapturePointEP_PWT(this));
AddCapturePoint(new OPvPCapturePointEP_CGT(this));
AddCapturePoint(new OPvPCapturePointEP_NPT(this));
+ SetMapFromZone(EPBuffZones[0]);
return true;
}
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp
index f8a7647a1d5..a639962efde 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp
@@ -15,6 +15,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "MapManager.h"
#include "ScriptMgr.h"
#include "OutdoorPvPHP.h"
#include "OutdoorPvP.h"
@@ -58,6 +59,7 @@ OutdoorPvPHP::OutdoorPvPHP()
m_TypeId = OUTDOOR_PVP_HP;
m_AllianceTowersControlled = 0;
m_HordeTowersControlled = 0;
+ SetMapFromZone(OutdoorPvPHPBuffZones[0]);
}
bool OutdoorPvPHP::SetupOutdoorPvP()
@@ -238,16 +240,14 @@ void OPvPCapturePointHP::ChangeState()
break;
}
- GameObject* flag = HashMapHolder<GameObject>::Find(m_capturePointGUID);
- GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[m_TowerType]);
- if (flag)
- {
- flag->SetGoArtKit(artkit);
- }
- if (flag2)
- {
- flag2->SetGoArtKit(artkit2);
- }
+ Map* map = sMapMgr->FindMap(530, 0);
+ auto bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId);
+ for (auto itr = bounds.first; itr != bounds.second; ++itr)
+ itr->second->SetGoArtKit(artkit);
+
+ bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_Objects[m_TowerType]);
+ for (auto itr = bounds.first; itr != bounds.second; ++itr)
+ itr->second->SetGoArtKit(artkit2);
// send world state update
if (field)
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
index 761e12b226c..8664acdfc57 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
@@ -15,6 +15,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "MapManager.h"
#include "ScriptMgr.h"
#include "OutdoorPvPNA.h"
#include "Player.h"
@@ -43,7 +44,7 @@ void OutdoorPvPNA::HandleKillImpl(Player* player, Unit* killed)
uint32 OPvPCapturePointNA::GetAliveGuardsCount()
{
uint32 cnt = 0;
- for (std::map<uint32, ObjectGuid>::iterator itr = m_Creatures.begin(); itr != m_Creatures.end(); ++itr)
+ for (std::map<uint32, uint32>::iterator itr = m_Creatures.begin(); itr != m_Creatures.end(); ++itr)
{
switch (itr->first)
{
@@ -62,10 +63,13 @@ uint32 OPvPCapturePointNA::GetAliveGuardsCount()
case NA_NPC_GUARD_13:
case NA_NPC_GUARD_14:
case NA_NPC_GUARD_15:
- if (Creature const* const cr = HashMapHolder<Creature>::Find(itr->second))
- if (cr->IsAlive())
+ {
+ auto bounds = m_PvP->GetMap()->GetCreatureBySpawnIdStore().equal_range(itr->second);
+ for (auto itr2 = bounds.first; itr2 != bounds.second; ++itr2)
+ if (itr2->second->IsAlive())
++cnt;
break;
+ }
default:
break;
}
@@ -186,6 +190,7 @@ bool OutdoorPvPNA::SetupOutdoorPvP()
{
// m_TypeId = OUTDOOR_PVP_NA; _MUST_ be set in ctor, because of spawns cleanup
// add the zones affected by the pvp buff
+ SetMapFromZone(NA_BUFF_ZONE);
RegisterZone(NA_BUFF_ZONE);
// halaa
@@ -372,9 +377,9 @@ bool OPvPCapturePointNA::HandleCustomSpell(Player* player, uint32 spellId, GameO
return false;
}
-int32 OPvPCapturePointNA::HandleOpenGo(Player* player, ObjectGuid guid)
+int32 OPvPCapturePointNA::HandleOpenGo(Player* player, GameObject* go)
{
- int32 retval = OPvPCapturePoint::HandleOpenGo(player, guid);
+ int32 retval = OPvPCapturePoint::HandleOpenGo(player, go);
if (retval >= 0)
{
const go_type * gos = NULL;
@@ -567,11 +572,9 @@ void OPvPCapturePointNA::ChangeState()
break;
}
- GameObject* flag = HashMapHolder<GameObject>::Find(m_capturePointGUID);
- if (flag)
- {
- flag->SetGoArtKit(artkit);
- }
+ auto bounds = sMapMgr->FindMap(530, 0)->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId);
+ for (auto itr = bounds.first; itr != bounds.second; ++itr)
+ itr->second->SetGoArtKit(artkit);
UpdateHalaaWorldState();
}
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h
index fac9d8fa357..07bf6919b7a 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h
@@ -269,7 +269,7 @@ class OPvPCapturePointNA : public OPvPCapturePoint
bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go) override;
- int32 HandleOpenGo(Player* player, ObjectGuid guid) override;
+ int32 HandleOpenGo(Player* player, GameObject* go) override;
uint32 GetAliveGuardsCount();
uint32 GetControllingFaction() const;
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
index f052824538e..d2892541373 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
@@ -58,6 +58,8 @@ void OutdoorPvPSI::UpdateWorldState()
bool OutdoorPvPSI::SetupOutdoorPvP()
{
+ SetMapFromZone(OutdoorPvPSIBuffZones[0]);
+
for (uint8 i = 0; i < OutdoorPvPSIBuffZonesNum; ++i)
RegisterZone(OutdoorPvPSIBuffZones[i]);
return true;
@@ -160,13 +162,8 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId)
// he dropped it further, summon mound
GameObject* go = new GameObject;
Map* map = player->GetMap();
- if (!map)
- {
- delete go;
- return true;
- }
- if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY))
+ if (!go->Create(map->GenerateLowGuid<HighGuid::GameObject>(), SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY))
{
delete go;
return true;
@@ -194,13 +191,8 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId)
// he dropped it further, summon mound
GameObject* go = new GameObject;
Map* map = player->GetMap();
- if (!map)
- {
- delete go;
- return true;
- }
- if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY))
+ if (!go->Create(map->GenerateLowGuid<HighGuid::GameObject>(), SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY))
{
delete go;
return true;
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp
index 17736c7747b..0b68a45f8a5 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp
@@ -15,6 +15,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "MapManager.h"
#include "ScriptMgr.h"
#include "OutdoorPvPTF.h"
#include "OutdoorPvPMgr.h"
@@ -227,6 +228,8 @@ bool OutdoorPvPTF::SetupOutdoorPvP()
second_digit = 0;
first_digit = 0;
+ SetMapFromZone(OutdoorPvPTFBuffZones[0]);
+
// add the zones affected by the pvp buff
for (uint8 i = 0; i < OutdoorPvPTFBuffZonesNum; ++i)
RegisterZone(OutdoorPvPTFBuffZones[i]);
@@ -310,9 +313,9 @@ void OPvPCapturePointTF::ChangeState()
break;
}
- GameObject* flag = HashMapHolder<GameObject>::Find(m_capturePointGUID);
- if (flag)
- flag->SetGoArtKit(artkit);
+ auto bounds = sMapMgr->FindMap(530, 0)->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId);
+ for (auto itr = bounds.first; itr != bounds.second; ++itr)
+ itr->second->SetGoArtKit(artkit);
UpdateTowerState();
}
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp
index ee86d8efc90..54aa815617e 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp
@@ -15,6 +15,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "MapManager.h"
#include "ScriptMgr.h"
#include "OutdoorPvPZM.h"
#include "ObjectMgr.h"
@@ -151,6 +152,8 @@ bool OutdoorPvPZM::SetupOutdoorPvP()
m_AllianceTowersControlled = 0;
m_HordeTowersControlled = 0;
+ SetMapFromZone(OutdoorPvPZMBuffZones[0]);
+
// add the zones affected by the pvp buff
for (uint8 i = 0; i < OutdoorPvPZMBuffZonesNum; ++i)
RegisterZone(OutdoorPvPZMBuffZones[i]);
@@ -181,9 +184,9 @@ bool OPvPCapturePointZM_GraveYard::Update(uint32 /*diff*/)
return retval;
}
-int32 OPvPCapturePointZM_GraveYard::HandleOpenGo(Player* player, ObjectGuid guid)
+int32 OPvPCapturePointZM_GraveYard::HandleOpenGo(Player* player, GameObject* go)
{
- int32 retval = OPvPCapturePoint::HandleOpenGo(player, guid);
+ int32 retval = OPvPCapturePoint::HandleOpenGo(player, go);
if (retval >= 0)
{
if (player->HasAura(ZM_BATTLE_STANDARD_A) && m_GraveYardState != ZM_GRAVEYARD_A)
@@ -297,8 +300,8 @@ void OPvPCapturePointZM_GraveYard::SetBeaconState(uint32 controlling_faction)
bool OPvPCapturePointZM_GraveYard::CanTalkTo(Player* player, Creature* c, GossipMenuItems const& /*gso*/)
{
- ObjectGuid guid = c->GetGUID();
- std::map<ObjectGuid, uint32>::iterator itr = m_CreatureTypes.find(guid);
+ std::map<uint32, uint32>::iterator itr = m_CreatureTypes.find(c->GetSpawnId());
+
if (itr != m_CreatureTypes.end())
{
if (itr->second == ZM_ALLIANCE_FIELD_SCOUT && player->GetTeam() == ALLIANCE && m_BothControllingFaction == ALLIANCE && !m_FlagCarrierGUID && m_GraveYardState != ZM_GRAVEYARD_A)
@@ -309,25 +312,23 @@ bool OPvPCapturePointZM_GraveYard::CanTalkTo(Player* player, Creature* c, Gossip
return false;
}
-bool OPvPCapturePointZM_GraveYard::HandleGossipOption(Player* player, ObjectGuid guid, uint32 /*gossipid*/)
+bool OPvPCapturePointZM_GraveYard::HandleGossipOption(Player* player, Creature* creature, uint32 /*gossipid*/)
{
- std::map<ObjectGuid, uint32>::iterator itr = m_CreatureTypes.find(guid);
+ std::map<uint32, uint32>::iterator itr = m_CreatureTypes.find(creature->GetSpawnId());
+
if (itr != m_CreatureTypes.end())
{
- Creature* cr = HashMapHolder<Creature>::Find(guid);
- if (!cr)
- return true;
// if the flag is already taken, then return
if (m_FlagCarrierGUID)
return true;
if (itr->second == ZM_ALLIANCE_FIELD_SCOUT)
{
- cr->CastSpell(player, ZM_BATTLE_STANDARD_A, true);
+ creature->CastSpell(player, ZM_BATTLE_STANDARD_A, true);
m_FlagCarrierGUID = player->GetGUID();
}
else if (itr->second == ZM_HORDE_FIELD_SCOUT)
{
- cr->CastSpell(player, ZM_BATTLE_STANDARD_H, true);
+ creature->CastSpell(player, ZM_BATTLE_STANDARD_H, true);
m_FlagCarrierGUID = player->GetGUID();
}
UpdateTowerState();
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h
index a07905b3ae6..4be0d0eedb7 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h
@@ -192,11 +192,11 @@ class OPvPCapturePointZM_GraveYard : public OPvPCapturePoint
void UpdateTowerState();
- int32 HandleOpenGo(Player* player, ObjectGuid guid) override;
+ int32 HandleOpenGo(Player* player, GameObject* go) override;
void SetBeaconState(uint32 controlling_team); // not good atm
- bool HandleGossipOption(Player* player, ObjectGuid guid, uint32 gossipid) override;
+ bool HandleGossipOption(Player* player, Creature* creature, uint32 gossipid) override;
bool HandleDropFlag(Player* player, uint32 spellId) override;
diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp
index 263fd8340b9..6e43cfa2d0f 100644
--- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp
+++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp
@@ -109,8 +109,7 @@ public:
if (Inhibitmagic_Timer <= diff)
{
float dist;
- Map* map = me->GetMap();
- Map::PlayerList const &PlayerList = map->GetPlayers();
+ Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
if (Player* i_pl = i->GetSource())
if (i_pl->IsAlive() && (dist = i_pl->GetDistance(me)) < 45)
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
index d0e12c87a55..04d3a20d945 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
@@ -182,8 +182,7 @@ class boss_grandmaster_vorpil : public CreatureScript
break;
case EVENT_DRAW_SHADOWS:
{
- Map* map = me->GetMap();
- Map::PlayerList const &PlayerList = map->GetPlayers();
+ Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
if (Player* i_pl = i->GetSource())
if (i_pl->IsAlive() && !i_pl->HasAura(SPELL_BANISH))
@@ -258,7 +257,7 @@ class npc_voidtraveler : public CreatureScript
{
DoCastAOE(SPELL_EMPOWERING_SHADOWS, true);
DoCast(me, SPELL_SHADOW_NOVA, true);
- me->Kill(me);
+ me->KillSelf();
return;
}
me->GetMotionMaster()->MoveFollow(Vorpil, 0, 0);
diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.cpp b/src/server/scripts/Outland/BlackTemple/black_temple.cpp
index 764cd9594ea..f044fcef5c7 100644
--- a/src/server/scripts/Outland/BlackTemple/black_temple.cpp
+++ b/src/server/scripts/Outland/BlackTemple/black_temple.cpp
@@ -15,22 +15,12 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/*
-Name: Black_Temple
-Complete: 100%
-Comment: Spirit of Olum: Player Teleporter to Seer Kanai Teleport after defeating Naj'entus and Supremus.
-*/
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
-#include "ScriptedGossip.h"
#include "black_temple.h"
-#include "Player.h"
enum Spells
{
- // Spirit of Olum
- SPELL_TELEPORT = 41566,
// Wrathbone Flayer
SPELL_CLEAVE = 15496,
SPELL_IGNORED = 39544,
@@ -53,36 +43,6 @@ enum Events
};
// ########################################################
-// Spirit of Olum
-// ########################################################
-
-class npc_spirit_of_olum : public CreatureScript
-{
-public:
- npc_spirit_of_olum() : CreatureScript("npc_spirit_of_olum") { }
-
- struct npc_spirit_of_olumAI : public ScriptedAI
- {
- npc_spirit_of_olumAI(Creature* creature) : ScriptedAI(creature) { }
-
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override
- {
- if (action == 1)
- {
- player->CLOSE_GOSSIP_MENU();
- player->InterruptNonMeleeSpells(false);
- player->CastSpell(player, SPELL_TELEPORT, false);
- }
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_spirit_of_olumAI(creature);
- }
-};
-
-// ########################################################
// Wrathbone Flayer
// ########################################################
@@ -123,7 +83,6 @@ public:
void UpdateAI(uint32 diff) override
{
-
if (!_enteredCombat)
{
_events.Update(diff);
@@ -215,12 +174,11 @@ public:
CreatureAI* GetAI(Creature* creature) const override
{
- return GetInstanceAI<npc_wrathbone_flayerAI>(creature);
+ return GetBlackTempleAI<npc_wrathbone_flayerAI>(creature);
}
};
void AddSC_black_temple()
{
- new npc_spirit_of_olum();
new npc_wrathbone_flayer();
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
index 7cc460d4548..f8c031f69e7 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
@@ -1779,7 +1779,7 @@ public:
DoMeleeAttackIfReady();
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
player->CLOSE_GOSSIP_MENU();
EnterPhase(PHASE_CHANNEL);
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 e4369f0348d..25ff1bf9536 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
@@ -519,9 +519,9 @@ public:
DoMeleeAttackIfReady();
}
- void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- if (action == 0)
+ if (gossipListId == 0)
{
player->CLOSE_GOSSIP_MENU();
StartChannel = true;
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
index d817c08d7f2..0292ed65697 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
@@ -257,8 +257,7 @@ public:
void EnterCombat(Unit* who) override
{
// remove old tainted cores to prevent cheating in phase 2
- Map* map = me->GetMap();
- Map::PlayerList const &PlayerList = map->GetPlayers();
+ Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr)
if (Player* player = itr->GetSource())
player->DestroyItemCount(31088, 1, true);
@@ -634,7 +633,7 @@ public:
}
if (Creature* vashj = ObjectAccessor::GetCreature(*me, VashjGUID))
if (!vashj->IsInCombat() || ENSURE_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->Phase != 2 || vashj->isDead())
- me->Kill(me);
+ me->KillSelf();
Move = 1000;
} else Move -= diff;
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
index 5d967a3546f..253c601e228 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
@@ -788,8 +788,7 @@ public:
if (Earthshock_Timer <= diff)
{
- Map* map = me->GetMap();
- Map::PlayerList const &PlayerList = map->GetPlayers();
+ Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr)
{
if (Player* i_pl = itr->GetSource())
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
index 096777163a6..7c4dbdeaab1 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
@@ -259,8 +259,7 @@ public:
if (CheckTimer <= diff)//check if there are players in melee range
{
InRange = false;
- Map* map = me->GetMap();
- Map::PlayerList const &PlayerList = map->GetPlayers();
+ Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
if (!PlayerList.isEmpty())
{
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
@@ -274,15 +273,11 @@ public:
if (RotTimer)
{
- Map* map = me->GetMap();
- if (map->IsDungeon())
+ Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
+ for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
{
- Map::PlayerList const &PlayerList = map->GetPlayers();
- for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
- {
- if (i->GetSource() && i->GetSource()->IsAlive() && me->HasInArc(diff/20000.f*float(M_PI)*2.f, i->GetSource()) && me->IsWithinDist(i->GetSource(), SPOUT_DIST) && !i->GetSource()->IsInWater())
- DoCast(i->GetSource(), SPELL_SPOUT, true); // only knock back players in arc, in 100yards, not in water
- }
+ if (i->GetSource() && i->GetSource()->IsAlive() && me->HasInArc(diff/20000.f*float(M_PI)*2.f, i->GetSource()) && me->IsWithinDist(i->GetSource(), SPOUT_DIST) && !i->GetSource()->IsInWater())
+ DoCast(i->GetSource(), SPELL_SPOUT, true); // only knock back players in arc, in 100yards, not in water
}
if (SpoutAnimTimer <= diff)
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp
index 500b0ae4bcb..f47e191c118 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp
@@ -82,7 +82,7 @@ class boss_shattered_executioner : public CreatureScript
void Reset() override
{
_Reset();
-
+
// _Reset() resets the loot mode, so we add them again, if any
uint32 prisonersExecuted = instance->GetData(DATA_PRISONERS_EXECUTED);
if (prisonersExecuted == 0)
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
index 0dc75ff8efa..2d99fd9bacf 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
@@ -297,7 +297,7 @@ const float CAPERNIAN_DISTANCE = 20.0f; //she casts away fro
Position const afGravityPos = {795.0f, 0.0f, 70.0f};
-Position const TransitionPos[6] =
+Position const TransitionPos[6] =
{
// First two values are not static, they seem to differ on each sniff.
{ 794.0522f, -0.96732f, 48.97848f, 0.0f },
@@ -869,7 +869,7 @@ class boss_thaladred_the_darkener : public CreatureScript
public:
boss_thaladred_the_darkener() : CreatureScript("boss_thaladred_the_darkener") { }
-
+
struct boss_thaladred_the_darkenerAI : public advisorbase_ai
{
boss_thaladred_the_darkenerAI(Creature* creature) : advisorbase_ai(creature)
@@ -963,7 +963,7 @@ class boss_lord_sanguinar : public CreatureScript
public:
boss_lord_sanguinar() : CreatureScript("boss_lord_sanguinar") { }
-
+
struct boss_lord_sanguinarAI : public advisorbase_ai
{
boss_lord_sanguinarAI(Creature* creature) : advisorbase_ai(creature)
@@ -1027,7 +1027,7 @@ class boss_grand_astromancer_capernian : public CreatureScript
public:
boss_grand_astromancer_capernian() : CreatureScript("boss_grand_astromancer_capernian") { }
-
+
struct boss_grand_astromancer_capernianAI : public advisorbase_ai
{
boss_grand_astromancer_capernianAI(Creature* creature) : advisorbase_ai(creature)
@@ -1286,7 +1286,7 @@ class npc_kael_flamestrike : public CreatureScript
DoCast(me, SPELL_FLAME_STRIKE_DMG);
}
else
- me->Kill(me);
+ me->KillSelf();
KillSelf = true;
Timer = 1000;
@@ -1307,7 +1307,7 @@ class npc_phoenix_tk : public CreatureScript
public:
npc_phoenix_tk() : CreatureScript("npc_phoenix_tk") { }
-
+
struct npc_phoenix_tkAI : public ScriptedAI
{
npc_phoenix_tkAI(Creature* creature) : ScriptedAI(creature)
@@ -1366,7 +1366,7 @@ class npc_phoenix_egg_tk : public CreatureScript
public:
npc_phoenix_egg_tk() : CreatureScript("npc_phoenix_egg_tk") { }
-
+
struct npc_phoenix_egg_tkAI : public ScriptedAI
{
npc_phoenix_egg_tkAI(Creature* creature) : ScriptedAI(creature)
@@ -1464,7 +1464,7 @@ class spell_kael_gravity_lapse : public SpellScriptLoader
{
OnEffectHitTarget += SpellEffectFn(spell_kael_gravity_lapse_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
-
+
private:
uint8 _targetCount;
};
diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
index fcfa77bc2e0..0a9f8640ad2 100644
--- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
+++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
@@ -483,7 +483,7 @@ class npc_barada : public CreatureScript
{
public:
npc_barada() : CreatureScript("npc_barada") { }
-
+
struct npc_baradaAI : public ScriptedAI
{
npc_baradaAI(Creature* creature) : ScriptedAI(creature)
@@ -779,7 +779,7 @@ public:
me->SetCanFly(true);
me->SetSpeed(MOVE_RUN, 0.2f);
-
+
me->SetFacingTo(3.207566f);
me->GetMotionMaster()->MoveJump(exorcismPos[2], 2.0f, 2.0f);
@@ -860,14 +860,14 @@ public:
}
}
}
-
+
private:
EventMap events;
SummonList summons;
-
+
uint8 circleRounds;
uint8 point;
-
+
bool wpreached;
};
diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp
index cd0052c24bc..88271dc7139 100644
--- a/src/server/scripts/Spells/spell_dk.cpp
+++ b/src/server/scripts/Spells/spell_dk.cpp
@@ -1343,6 +1343,15 @@ class spell_dk_raise_dead : public SpellScriptLoader
GetCaster()->CastSpell(targets, spellInfo, NULL, TRIGGERED_FULL_MASK);
}
+ void OverrideCooldown()
+ {
+ // Because the ghoul is summoned by one of triggered spells SendCooldownEvent is not sent for this spell
+ // but the client has locked it by itself so we need some link between this spell and the real spell summoning.
+ // Luckily such link already exists - spell category
+ // This starts infinite category cooldown which can later be used by SendCooldownEvent to send packet for this spell
+ GetCaster()->GetSpellHistory()->StartCooldown(GetSpellInfo(), 0, nullptr, true);
+ }
+
void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_dk_raise_dead_SpellScript::CheckCast);
@@ -1351,6 +1360,7 @@ class spell_dk_raise_dead : public SpellScriptLoader
OnCast += SpellCastFn(spell_dk_raise_dead_SpellScript::ConsumeReagents);
OnEffectHitTarget += SpellEffectFn(spell_dk_raise_dead_SpellScript::HandleRaiseDead, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
OnEffectHitTarget += SpellEffectFn(spell_dk_raise_dead_SpellScript::HandleRaiseDead, EFFECT_2, SPELL_EFFECT_DUMMY);
+ AfterCast += SpellCastFn(spell_dk_raise_dead_SpellScript::OverrideCooldown);
}
private:
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 68c115f9faf..ca8c9a9ef93 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -614,6 +614,47 @@ class spell_gen_burn_brutallus : public SpellScriptLoader
}
};
+// 48750 - Burning Depths Necrolyte Image
+class spell_gen_burning_depths_necrolyte_image : public SpellScriptLoader
+{
+ public:
+ spell_gen_burning_depths_necrolyte_image() : SpellScriptLoader("spell_gen_burning_depths_necrolyte_image") { }
+
+ class spell_gen_burning_depths_necrolyte_image_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_gen_burning_depths_necrolyte_image_AuraScript);
+
+ bool Validate(SpellInfo const* spellInfo) override
+ {
+ if (!sSpellMgr->GetSpellInfo(uint32(spellInfo->Effects[EFFECT_2].CalcValue())))
+ return false;
+ return true;
+ }
+
+ void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (Unit* caster = GetCaster())
+ caster->CastSpell(GetTarget(), uint32(GetSpellInfo()->Effects[EFFECT_2].CalcValue()));
+ }
+
+ void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->RemoveAurasDueToSpell(uint32(GetSpellInfo()->Effects[EFFECT_2].CalcValue()), GetCasterGUID());
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_gen_burning_depths_necrolyte_image_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_gen_burning_depths_necrolyte_image_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_gen_burning_depths_necrolyte_image_AuraScript();
+ }
+};
+
enum CannibalizeSpells
{
SPELL_CANNIBALIZE_TRIGGERED = 20578
@@ -3383,7 +3424,7 @@ class spell_gen_turkey_marker : public SpellScriptLoader
void Register() override
{
- AfterEffectApply += AuraEffectApplyFn(spell_gen_turkey_marker_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectApply += AuraEffectApplyFn(spell_gen_turkey_marker_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_turkey_marker_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
@@ -4093,6 +4134,7 @@ void AddSC_generic_spell_scripts()
new spell_gen_break_shield("spell_gen_break_shield");
new spell_gen_break_shield("spell_gen_tournament_counterattack");
new spell_gen_burn_brutallus();
+ new spell_gen_burning_depths_necrolyte_image();
new spell_gen_cannibalize();
new spell_gen_chaos_blast();
new spell_gen_clone();
diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp
index a1b218010aa..e29f87a5ff9 100644
--- a/src/server/scripts/Spells/spell_holiday.cpp
+++ b/src/server/scripts/Spells/spell_holiday.cpp
@@ -277,6 +277,86 @@ class spell_hallow_end_tricky_treat : public SpellScriptLoader
}
};
+// Hallowed wands
+enum HallowendData
+{
+ //wand spells
+ SPELL_HALLOWED_WAND_PIRATE = 24717,
+ SPELL_HALLOWED_WAND_NINJA = 24718,
+ SPELL_HALLOWED_WAND_LEPER_GNOME = 24719,
+ SPELL_HALLOWED_WAND_RANDOM = 24720,
+ SPELL_HALLOWED_WAND_SKELETON = 24724,
+ SPELL_HALLOWED_WAND_WISP = 24733,
+ SPELL_HALLOWED_WAND_GHOST = 24737,
+ SPELL_HALLOWED_WAND_BAT = 24741
+};
+
+class spell_hallow_end_wand : public SpellScriptLoader
+{
+public:
+ spell_hallow_end_wand() : SpellScriptLoader("spell_hallow_end_wand") {}
+
+ class spell_hallow_end_wand_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_hallow_end_wand_SpellScript);
+
+ bool Validate(SpellInfo const* /*spellEntry*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_PIRATE_COSTUME_MALE) ||
+ !sSpellMgr->GetSpellInfo(SPELL_PIRATE_COSTUME_FEMALE) ||
+ !sSpellMgr->GetSpellInfo(SPELL_NINJA_COSTUME_MALE) ||
+ !sSpellMgr->GetSpellInfo(SPELL_NINJA_COSTUME_FEMALE) ||
+ !sSpellMgr->GetSpellInfo(SPELL_LEPER_GNOME_COSTUME_MALE) ||
+ !sSpellMgr->GetSpellInfo(SPELL_LEPER_GNOME_COSTUME_FEMALE) ||
+ !sSpellMgr->GetSpellInfo(SPELL_GHOST_COSTUME_MALE) ||
+ !sSpellMgr->GetSpellInfo(SPELL_GHOST_COSTUME_FEMALE))
+ return false;
+ return true;
+ }
+
+ void HandleScriptEffect()
+ {
+ Unit* caster = GetCaster();
+ Unit* target = GetHitUnit();
+
+ uint32 spellId = 0;
+ uint8 gender = target->getGender();
+
+ switch (GetSpellInfo()->Id)
+ {
+ case SPELL_HALLOWED_WAND_LEPER_GNOME:
+ spellId = gender ? SPELL_LEPER_GNOME_COSTUME_FEMALE : SPELL_LEPER_GNOME_COSTUME_MALE;
+ break;
+ case SPELL_HALLOWED_WAND_PIRATE:
+ spellId = gender ? SPELL_PIRATE_COSTUME_FEMALE : SPELL_PIRATE_COSTUME_MALE;
+ break;
+ case SPELL_HALLOWED_WAND_GHOST:
+ spellId = gender ? SPELL_GHOST_COSTUME_FEMALE : SPELL_GHOST_COSTUME_MALE;
+ break;
+ case SPELL_HALLOWED_WAND_NINJA:
+ spellId = gender ? SPELL_NINJA_COSTUME_FEMALE : SPELL_NINJA_COSTUME_MALE;
+ break;
+ case SPELL_HALLOWED_WAND_RANDOM:
+ spellId = RAND(SPELL_HALLOWED_WAND_PIRATE, SPELL_HALLOWED_WAND_NINJA, SPELL_HALLOWED_WAND_LEPER_GNOME, SPELL_HALLOWED_WAND_SKELETON, SPELL_HALLOWED_WAND_WISP, SPELL_HALLOWED_WAND_GHOST, SPELL_HALLOWED_WAND_BAT);
+ break;
+ default:
+ return;
+ }
+ caster->CastSpell(target, spellId, true);
+ }
+
+ void Register() override
+ {
+ AfterHit += SpellHitFn(spell_hallow_end_wand_SpellScript::HandleScriptEffect);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_hallow_end_wand_SpellScript();
+ }
+};
+
enum PilgrimsBountyBuffFood
{
// Pilgrims Bounty Buff Food
@@ -886,6 +966,7 @@ void AddSC_holiday_spell_scripts()
new spell_hallow_end_trick();
new spell_hallow_end_trick_or_treat();
new spell_hallow_end_tricky_treat();
+ new spell_hallow_end_wand();
// Pilgrims Bounty
new spell_pilgrims_bounty_buff_food("spell_gen_slow_roasted_turkey", SPELL_WELL_FED_AP_TRIGGER);
new spell_pilgrims_bounty_buff_food("spell_gen_cranberry_chutney", SPELL_WELL_FED_ZM_TRIGGER);
diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp
index f2871871c30..0ca4112b288 100644
--- a/src/server/scripts/Spells/spell_hunter.cpp
+++ b/src/server/scripts/Spells/spell_hunter.cpp
@@ -480,7 +480,7 @@ class spell_hun_misdirection : public SpellScriptLoader
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_DEFAULT)
+ if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_DEFAULT || !GetTarget()->HasAura(SPELL_HUNTER_MISDIRECTION_PROC))
GetTarget()->ResetRedirectThreat();
}
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index 717382a0e36..f0b6c0945c2 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -2509,7 +2509,7 @@ class spell_item_chicken_cover : public SpellScriptLoader
if (!target->HasAura(SPELL_CHICKEN_NET) && (caster->GetQuestStatus(QUEST_CHICKEN_PARTY) == QUEST_STATUS_INCOMPLETE || caster->GetQuestStatus(QUEST_FLOWN_THE_COOP) == QUEST_STATUS_INCOMPLETE))
{
caster->CastSpell(caster, SPELL_CAPTURE_CHICKEN_ESCAPE, true);
- target->Kill(target);
+ target->KillSelf();
}
}
}
diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp
index da50f471f1c..23a6cdee8a9 100644
--- a/src/server/scripts/Spells/spell_rogue.cpp
+++ b/src/server/scripts/Spells/spell_rogue.cpp
@@ -233,7 +233,7 @@ class spell_rog_deadly_poison : public SpellScriptLoader
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(enchant->spellid[s]);
if (!spellInfo)
{
- TC_LOG_ERROR("spells", "Player::CastItemCombatSpell Enchant %i, player (Name: %s, GUID: %u) cast unknown spell %i", enchant->ID, player->GetName().c_str(), player->GetGUIDLow(), enchant->spellid[s]);
+ TC_LOG_ERROR("spells", "Player::CastItemCombatSpell Enchant %i, player (Name: %s, GUID: %u) cast unknown spell %i", enchant->ID, player->GetName().c_str(), player->GetGUID().GetCounter(), enchant->spellid[s]);
continue;
}
diff --git a/src/server/scripts/World/action_ip_logger.cpp b/src/server/scripts/World/action_ip_logger.cpp
index 50195887ec2..f0ffbe1c7f3 100644
--- a/src/server/scripts/World/action_ip_logger.cpp
+++ b/src/server/scripts/World/action_ip_logger.cpp
@@ -96,7 +96,7 @@ class AccountActionIpLogger : public AccountScript
// We declare all the required variables
uint32 playerGuid = accountId;
- uint32 characterGuid = 0;
+ ObjectGuid::LowType characterGuid = 0;
std::string systemNote = "ERROR"; // "ERROR" is a placeholder here. We change it later.
// With this switch, we change systemNote so that we have a more accurate phrasing of what type it is.
@@ -201,7 +201,7 @@ class CharacterActionIpLogger : public PlayerScript
// We declare all the required variables
uint32 playerGuid = player->GetSession()->GetAccountId();
- uint32 characterGuid = player->GetGUIDLow();
+ ObjectGuid::LowType characterGuid = player->GetGUID().GetCounter();
const std::string currentIp = player->GetSession()->GetRemoteAddress();
std::string systemNote = "ERROR"; // "ERROR" is a placeholder here. We change it...
@@ -269,7 +269,7 @@ public:
// Else, this script isn't loaded in the first place: We require no config check.
// We declare all the required variables
- uint32 characterGuid = guid.GetCounter(); // We have no access to any member function of Player* or WorldSession*. So use old-fashioned way.
+ ObjectGuid::LowType characterGuid = guid.GetCounter(); // We have no access to any member function of Player* or WorldSession*. So use old-fashioned way.
// Query playerGuid/accountId, as we only have characterGuid
std::string systemNote = "ERROR"; // "ERROR" is a placeholder here. We change it later.
diff --git a/src/server/scripts/World/duel_reset.cpp b/src/server/scripts/World/duel_reset.cpp
new file mode 100644
index 00000000000..9e720455692
--- /dev/null
+++ b/src/server/scripts/World/duel_reset.cpp
@@ -0,0 +1,120 @@
+/*
+ * 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 "Player.h"
+#include "Pet.h"
+#include "SpellInfo.h"
+
+class DuelResetScript : public PlayerScript
+{
+ public:
+ DuelResetScript() : PlayerScript("DuelResetScript") { }
+
+ // Called when a duel starts (after 3s countdown)
+ void OnDuelStart(Player* player1, Player* player2) override
+ {
+ // Cooldowns reset
+ if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS))
+ {
+ player1->GetSpellHistory()->SaveCooldownStateBeforeDuel();
+ player2->GetSpellHistory()->SaveCooldownStateBeforeDuel();
+
+
+ ResetSpellCooldowns(player1);
+ ResetSpellCooldowns(player2);
+ }
+
+ // Health and mana reset
+ if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_HEALTH_MANA))
+ {
+ player1->SaveHealthBeforeDuel();
+ player1->SetHealth(player1->GetMaxHealth());
+
+ player2->SaveHealthBeforeDuel();
+ player2->SetHealth(player2->GetMaxHealth());
+
+ // check if player1 class uses mana
+ if (player1->getPowerType() == POWER_MANA || player1->getClass() == CLASS_DRUID)
+ {
+ player1->SaveManaBeforeDuel();
+ player1->SetPower(POWER_MANA, player1->GetMaxPower(POWER_MANA));
+ }
+
+ // check if player2 class uses mana
+ if (player2->getPowerType() == POWER_MANA || player2->getClass() == CLASS_DRUID)
+ {
+ player2->SaveManaBeforeDuel();
+ player2->SetPower(POWER_MANA, player2->GetMaxPower(POWER_MANA));
+ }
+ }
+ }
+
+ // Called when a duel ends
+ void OnDuelEnd(Player* winner, Player* loser, DuelCompleteType type) override
+ {
+ // do not reset anything if DUEL_INTERRUPTED or DUEL_FLED
+ if (type == DUEL_WON)
+ {
+ // Cooldown restore
+ if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS))
+ {
+
+ ResetSpellCooldowns(winner);
+ ResetSpellCooldowns(loser);
+
+ winner->GetSpellHistory()->RestoreCooldownStateAfterDuel();
+ loser->GetSpellHistory()->RestoreCooldownStateAfterDuel();
+ }
+
+ // Health and mana restore
+ if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_HEALTH_MANA))
+ {
+ winner->RestoreHealthAfterDuel();
+ loser->RestoreHealthAfterDuel();
+
+ // check if player1 class uses mana
+ if (winner->getPowerType() == POWER_MANA || winner->getClass() == CLASS_DRUID)
+ winner->RestoreManaAfterDuel();
+
+ // check if player2 class uses mana
+ if (loser->getPowerType() == POWER_MANA || loser->getClass() == CLASS_DRUID)
+ loser->RestoreManaAfterDuel();
+ }
+ }
+ }
+
+ static void ResetSpellCooldowns(Player* player)
+ {
+ // remove cooldowns on spells that have < 10 min CD and has no onHold
+ player->GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool
+ {
+ SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first);
+ return spellInfo->RecoveryTime < 10 * MINUTE * IN_MILLISECONDS && spellInfo->CategoryRecoveryTime < 10 * MINUTE * IN_MILLISECONDS && !itr->second.OnHold;
+ }, true);
+
+ // pet cooldowns
+ if (Pet* pet = player->GetPet())
+ pet->GetSpellHistory()->ResetAllCooldowns();
+ }
+};
+
+void AddSC_duel_reset()
+{
+ new DuelResetScript();
+}
+
diff --git a/src/server/scripts/World/npc_professions.cpp b/src/server/scripts/World/npc_professions.cpp
index 44411b20aaf..9c05e4e2c08 100644
--- a/src/server/scripts/World/npc_professions.cpp
+++ b/src/server/scripts/World/npc_professions.cpp
@@ -179,6 +179,52 @@ enum ProfessionSpells
};
/*###
+# specialization trainers
+###*/
+enum SpecializationTrainers
+{
+ /* Alchemy */
+ N_TRAINER_TRANSMUTE = 22427, // Zarevhi
+ N_TRAINER_ELIXIR = 19052, // Lorokeem
+ N_TRAINER_POTION = 17909, // Lauranna Thar'well
+
+ /* Blacksmithing */
+ N_TRAINER_SMITHOMNI1 = 11145, // Myolor Sunderfury
+ N_TRAINER_SMITHOMNI2 = 11176, // Krathok Moltenfist
+ N_TRAINER_WEAPON1 = 11146, // Ironus Coldsteel
+ N_TRAINER_WEAPON2 = 11178, // Borgosh Corebender
+ N_TRAINER_ARMOR1 = 5164, // Grumnus Steelshaper
+ N_TRAINER_ARMOR2 = 11177, // Okothos Ironrager
+ N_TRAINER_HAMMER = 11191, // Lilith the Lithe
+ N_TRAINER_AXE = 11192, // Kilram
+ N_TRAINER_SWORD = 11193, // Seril Scourgebane
+
+ /* Leatherworking */
+ N_TRAINER_DRAGON1 = 7866, // Peter Galen
+ N_TRAINER_DRAGON2 = 7867, // Thorkaf Dragoneye
+ N_TRAINER_ELEMENTAL1 = 7868, // Sarah Tanner
+ N_TRAINER_ELEMENTAL2 = 7869, // Brumn Winterhoof
+ N_TRAINER_TRIBAL1 = 7870, // Caryssia Moonhunter
+ N_TRAINER_TRIBAL2 = 7871, // Se'Jib
+
+ /* Tailoring */
+ N_TRAINER_SPELLFIRE = 22213, // Gidge Spellweaver
+ N_TRAINER_MOONCLOTH = 22208, // Nasmara Moonsong
+ N_TRAINER_SHADOWEAVE = 22212, // Andrion Darkspinner
+};
+
+/*###
+# specialization quests
+###*/
+enum SpecializationQuests
+{
+ /* Alchemy */
+ Q_MASTER_TRANSMUTE = 10899,
+ Q_MASTER_ELIXIR = 10902,
+ Q_MASTER_POTION = 10897,
+};
+
+/*###
# formulas to calculate unlearning cost
###*/
@@ -395,23 +441,23 @@ public:
if (player->HasSkill(SKILL_ALCHEMY) && player->GetBaseSkillValue(SKILL_ALCHEMY) >= 350 && player->getLevel() > 67)
{
- if (player->GetQuestRewardStatus(10899) || player->GetQuestRewardStatus(10902) || player->GetQuestRewardStatus(10897))
+ if (player->GetQuestRewardStatus(Q_MASTER_TRANSMUTE) || player->GetQuestRewardStatus(Q_MASTER_ELIXIR) || player->GetQuestRewardStatus(Q_MASTER_POTION))
{
switch (creature->GetEntry())
{
- case 22427: //Zarevhi
+ case N_TRAINER_TRANSMUTE: //Zarevhi
if (!HasAlchemySpell(player))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_TRANSMUTE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1);
if (player->HasSpell(S_TRANSMUTE))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_TRANSMUTE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4);
break;
- case 19052: //Lorokeem
+ case N_TRAINER_ELIXIR: //Lorokeem
if (!HasAlchemySpell(player))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_ELIXIR, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2);
if (player->HasSpell(S_ELIXIR))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_ELIXIR, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5);
break;
- case 17909: //Lauranna Thar'well
+ case N_TRAINER_POTION: //Lauranna Thar'well
if (!HasAlchemySpell(player))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_POTION, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3);
if (player->HasSpell(S_POTION))
@@ -464,17 +510,17 @@ public:
{
switch (creature->GetEntry())
{
- case 22427:
+ case N_TRAINER_TRANSMUTE:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, action);
//unknown textID ()
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
break;
- case 19052:
+ case N_TRAINER_ELIXIR:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_ELIXIR, GOSSIP_SENDER_CHECK, action);
//unknown textID ()
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
break;
- case 17909:
+ case N_TRAINER_POTION:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_POTION, GOSSIP_SENDER_CHECK, action);
//unknown textID ()
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
@@ -489,17 +535,17 @@ public:
{
switch (creature->GetEntry())
{
- case 22427: //Zarevhi
+ case N_TRAINER_TRANSMUTE:
player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(player), false);
//unknown textID ()
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
break;
- case 19052: //Lorokeem
+ case N_TRAINER_ELIXIR:
player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_ELIXIR, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(player), false);
//unknown textID ()
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
break;
- case 17909: //Lauranna Thar'well
+ case N_TRAINER_POTION:
player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_POTION, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(player), false);
//unknown textID ()
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
@@ -564,20 +610,20 @@ public:
{
switch (creatureId)
{
- case 11145: //Myolor Sunderfury
- case 11176: //Krathok Moltenfist
+ case N_TRAINER_SMITHOMNI1:
+ case N_TRAINER_SMITHOMNI2:
if (!player->HasSpell(S_ARMOR) && !player->HasSpell(S_WEAPON) && player->GetReputationRank(REP_ARMOR) >= REP_FRIENDLY)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARMOR_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
if (!player->HasSpell(S_WEAPON) && !player->HasSpell(S_ARMOR) && player->GetReputationRank(REP_WEAPON) >= REP_FRIENDLY)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WEAPON_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
break;
- case 11146: //Ironus Coldsteel
- case 11178: //Borgosh Corebender
+ case N_TRAINER_WEAPON1:
+ case N_TRAINER_WEAPON2:
if (player->HasSpell(S_WEAPON))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WEAPON_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3);
break;
- case 5164: //Grumnus Steelshaper
- case 11177: //Okothos Ironrager
+ case N_TRAINER_ARMOR1:
+ case N_TRAINER_ARMOR2:
if (player->HasSpell(S_ARMOR))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARMOR_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4);
break;
@@ -588,19 +634,19 @@ public:
{
switch (creatureId)
{
- case 11191: //Lilith the Lithe
+ case N_TRAINER_HAMMER:
if (!HasWeaponSub(player))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 5);
if (player->HasSpell(S_HAMMER))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 8);
break;
- case 11192: //Kilram
+ case N_TRAINER_AXE:
if (!HasWeaponSub(player))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_AXE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 6);
if (player->HasSpell(S_AXE))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 9);
break;
- case 11193: //Seril Scourgebane
+ case N_TRAINER_SWORD:
if (!HasWeaponSub(player))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 7);
if (player->HasSpell(S_SWORD))
@@ -685,17 +731,17 @@ public:
{
switch (creature->GetEntry())
{
- case 11191:
+ case N_TRAINER_HAMMER:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_CHECK, action);
//unknown textID (TALK_HAMMER_LEARN)
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
break;
- case 11192:
+ case N_TRAINER_AXE:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_AXE, GOSSIP_SENDER_CHECK, action);
//unknown textID (TALK_AXE_LEARN)
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
break;
- case 11193:
+ case N_TRAINER_SWORD:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_CHECK, action);
//unknown textID (TALK_SWORD_LEARN)
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
@@ -710,26 +756,26 @@ public:
{
switch (creature->GetEntry())
{
- case 11146: //Ironus Coldsteel
- case 11178: //Borgosh Corebender
- case 5164: //Grumnus Steelshaper
- case 11177: //Okothos Ironrager
+ case N_TRAINER_WEAPON1:
+ case N_TRAINER_WEAPON2:
+ case N_TRAINER_ARMOR1:
+ case N_TRAINER_ARMOR2:
player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SMITH_SPEC, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ARMORORWEAPON, DoLowUnlearnCost(player), false);
//unknown textID (TALK_UNLEARN_AXEORWEAPON)
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
break;
- case 11191:
+ case N_TRAINER_HAMMER:
player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player), false);
//unknown textID (TALK_HAMMER_UNLEARN)
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
break;
- case 11192:
+ case N_TRAINER_AXE:
player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player), false);
//unknown textID (TALK_AXE_UNLEARN)
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
break;
- case 11193:
+ case N_TRAINER_SWORD:
player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player), false);
//unknown textID (TALK_SWORD_UNLEARN)
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
@@ -901,18 +947,18 @@ public:
{
switch (creature->GetEntry())
{
- case 7866: //Peter Galen
- case 7867: //Thorkaf Dragoneye
+ case N_TRAINER_DRAGON1:
+ case N_TRAINER_DRAGON2:
if (player->HasSpell(S_DRAGON))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 1);
break;
- case 7868: //Sarah Tanner
- case 7869: //Brumn Winterhoof
+ case N_TRAINER_ELEMENTAL1:
+ case N_TRAINER_ELEMENTAL2:
if (player->HasSpell(S_ELEMENTAL))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 2);
break;
- case 7870: //Caryssia Moonhunter
- case 7871: //Se'Jib
+ case N_TRAINER_TRIBAL1:
+ case N_TRAINER_TRIBAL2:
if (player->HasSpell(S_TRIBAL))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3);
break;
@@ -952,20 +998,20 @@ public:
{
switch (creature->GetEntry())
{
- case 7866: //Peter Galen
- case 7867: //Thorkaf Dragoneye
+ case N_TRAINER_DRAGON1:
+ case N_TRAINER_DRAGON2:
player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player), false);
//unknown textID ()
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
break;
- case 7868: //Sarah Tanner
- case 7869: //Brumn Winterhoof
+ case N_TRAINER_ELEMENTAL1:
+ case N_TRAINER_ELEMENTAL2:
player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player), false);
//unknown textID ()
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
break;
- case 7870: //Caryssia Moonhunter
- case 7871: //Se'Jib
+ case N_TRAINER_TRIBAL1:
+ case N_TRAINER_TRIBAL2:
player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player), false);
//unknown textID ()
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
@@ -1027,19 +1073,19 @@ public:
{
switch (creature->GetEntry())
{
- case 22213: //Gidge Spellweaver
+ case N_TRAINER_SPELLFIRE:
if (!HasTailorSpell(player))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1);
if (player->HasSpell(S_SPELLFIRE))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4);
break;
- case 22208: //Nasmara Moonsong
+ case N_TRAINER_MOONCLOTH:
if (!HasTailorSpell(player))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2);
if (player->HasSpell(S_MOONCLOTH))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5);
break;
- case 22212: //Andrion Darkspinner
+ case N_TRAINER_SHADOWEAVE:
if (!HasTailorSpell(player))
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3);
if (player->HasSpell(S_SHADOWEAVE))
@@ -1092,17 +1138,17 @@ public:
{
switch (creature->GetEntry())
{
- case 22213:
+ case N_TRAINER_SPELLFIRE:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, action);
//unknown textID ()
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
break;
- case 22208:
+ case N_TRAINER_MOONCLOTH:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, action);
//unknown textID ()
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
break;
- case 22212:
+ case N_TRAINER_SHADOWEAVE:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, action);
//unknown textID ()
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
@@ -1117,17 +1163,17 @@ public:
{
switch (creature->GetEntry())
{
- case 22213: //Gidge Spellweaver
+ case N_TRAINER_SPELLFIRE:
player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player), false);
//unknown textID ()
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
break;
- case 22208: //Nasmara Moonsong
+ case N_TRAINER_MOONCLOTH:
player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player), false);
//unknown textID ()
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
break;
- case 22212: //Andrion Darkspinner
+ case N_TRAINER_SHADOWEAVE:
player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player), false);
//unknown textID ()
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index 57346443390..22eabd3dd65 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -57,6 +57,7 @@ EndContentData */
#include "SpellAuras.h"
#include "Pet.h"
#include "CreatureTextMgr.h"
+#include "SmartAI.h"
/*########
# npc_air_force_bots
@@ -2321,6 +2322,71 @@ public:
}
};
+enum StableMasters
+{
+ SPELL_MINIWING = 54573,
+ SPELL_JUBLING = 54611,
+ SPELL_DARTER = 54619,
+ SPELL_WORG = 54631,
+ SPELL_SMOLDERWEB = 54634,
+ SPELL_CHIKEN = 54677,
+ SPELL_WOLPERTINGER = 54688,
+
+ STABLE_MASTER_GOSSIP_SUB_MENU = 9820
+};
+
+class npc_stable_master : public CreatureScript
+{
+ public:
+ npc_stable_master() : CreatureScript("npc_stable_master") { }
+
+ struct npc_stable_masterAI : public SmartAI
+ {
+ npc_stable_masterAI(Creature* creature) : SmartAI(creature) { }
+
+ void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ {
+ SmartAI::sGossipSelect(player, menuId, gossipListId);
+ if (menuId != STABLE_MASTER_GOSSIP_SUB_MENU)
+ return;
+
+ switch (gossipListId)
+ {
+ case 0:
+ player->CastSpell(player, SPELL_MINIWING, false);
+ break;
+ case 1:
+ player->CastSpell(player, SPELL_JUBLING, false);
+ break;
+ case 2:
+ player->CastSpell(player, SPELL_DARTER, false);
+ break;
+ case 3:
+ player->CastSpell(player, SPELL_WORG, false);
+ break;
+ case 4:
+ player->CastSpell(player, SPELL_SMOLDERWEB, false);
+ break;
+ case 5:
+ player->CastSpell(player, SPELL_CHIKEN, false);
+ break;
+ case 6:
+ player->CastSpell(player, SPELL_WOLPERTINGER, false);
+ break;
+ default:
+ return;
+ }
+
+ player->PlayerTalkClass->SendCloseGossip();
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_stable_masterAI(creature);
+ }
+};
+
void AddSC_npcs_special()
{
new npc_air_force_bots();
@@ -2343,4 +2409,5 @@ void AddSC_npcs_special()
new npc_firework();
new npc_spring_rabbit();
new npc_imp_in_a_ball();
+ new npc_stable_master();
}
diff --git a/src/server/shared/Containers.h b/src/server/shared/Containers.h
index 58379e1fefa..0e5752ccd68 100644
--- a/src/server/shared/Containers.h
+++ b/src/server/shared/Containers.h
@@ -92,6 +92,20 @@ namespace Trinity
return false;
}
+
+ template<class K, class V, template<class, class, class...> class M, class... Rest>
+ void MultimapErasePair(M<K, V, Rest...>& multimap, K const& key, V const& value)
+ {
+ auto range = multimap.equal_range(key);
+ for (auto itr = range.first; itr != range.second;)
+ {
+ if (itr->second == value)
+ itr = multimap.erase(itr);
+ else
+ ++itr;
+ }
+ }
+
}
//! namespace Containers
}
diff --git a/src/server/shared/Dynamic/TypeContainer.h b/src/server/shared/Dynamic/TypeContainer.h
index 2165945d119..7addf8028bf 100644
--- a/src/server/shared/Dynamic/TypeContainer.h
+++ b/src/server/shared/Dynamic/TypeContainer.h
@@ -25,6 +25,7 @@
*/
#include <map>
+#include <unordered_map>
#include <vector>
#include "Define.h"
#include "Dynamic/TypeList.h"
@@ -35,37 +36,40 @@
* By itself its meaningless but collaborate along with TypeContainers,
* it become the most powerfully container in the whole system.
*/
-template<class OBJECT> struct ContainerMapList
+template<class OBJECT>
+struct ContainerMapList
{
//std::map<OBJECT_HANDLE, OBJECT *> _element;
GridRefManager<OBJECT> _element;
};
-template<> struct ContainerMapList<TypeNull> /* nothing is in type null */
+template<>
+struct ContainerMapList<TypeNull> /* nothing is in type null */
{
};
-template<class H, class T> struct ContainerMapList<TypeList<H, T> >
+template<class H, class T>
+struct ContainerMapList<TypeList<H, T> >
{
ContainerMapList<H> _elements;
ContainerMapList<T> _TailElements;
};
-/*
- * @class ContaierArrayList is a multi-type container for
- * array of elements.
- */
-template<class OBJECT> struct ContainerArrayList
+template<class OBJECT, class KEY_TYPE>
+struct ContainerUnorderedMap
+{
+ std::unordered_map<KEY_TYPE, OBJECT*> _element;
+};
+
+template<class KEY_TYPE>
+struct ContainerUnorderedMap<TypeNull, KEY_TYPE>
{
- std::vector<OBJECT> _element;
};
-// termination condition
-template<> struct ContainerArrayList<TypeNull> { };
-// recursion
-template<class H, class T> struct ContainerArrayList<TypeList<H, T> >
+template<class H, class T, class KEY_TYPE>
+struct ContainerUnorderedMap<TypeList<H, T>, KEY_TYPE>
{
- ContainerArrayList<H> _elements;
- ContainerArrayList<T> _TailElements;
+ ContainerUnorderedMap<H, KEY_TYPE> _elements;
+ ContainerUnorderedMap<T, KEY_TYPE> _TailElements;
};
/*
@@ -101,14 +105,16 @@ class TypeMapContainer
template<class SPECIFIC_TYPE> size_t Count() const { return Trinity::Count(i_elements, (SPECIFIC_TYPE*)NULL); }
/// inserts a specific object into the container
- template<class SPECIFIC_TYPE> bool insert(SPECIFIC_TYPE *obj)
+ template<class SPECIFIC_TYPE>
+ bool insert(SPECIFIC_TYPE *obj)
{
SPECIFIC_TYPE* t = Trinity::Insert(i_elements, obj);
return (t != NULL);
}
/// Removes the object from the container, and returns the removed object
- //template<class SPECIFIC_TYPE> bool remove(SPECIFIC_TYPE* obj)
+ //template<class SPECIFIC_TYPE>
+ //bool remove(SPECIFIC_TYPE* obj)
//{
// SPECIFIC_TYPE* t = Trinity::Remove(i_elements, obj);
// return (t != NULL);
@@ -120,5 +126,35 @@ class TypeMapContainer
private:
ContainerMapList<OBJECT_TYPES> i_elements;
};
+
+template<class OBJECT_TYPES, class KEY_TYPE>
+class TypeUnorderedMapContainer
+{
+public:
+ template<class SPECIFIC_TYPE>
+ bool Insert(KEY_TYPE const& handle, SPECIFIC_TYPE* obj)
+ {
+ return Trinity::Insert(_elements, handle, obj);
+ }
+
+ template<class SPECIFIC_TYPE>
+ bool Remove(KEY_TYPE const& handle)
+ {
+ return Trinity::Remove(_elements, handle, (SPECIFIC_TYPE*)NULL);
+ }
+
+ template<class SPECIFIC_TYPE>
+ SPECIFIC_TYPE* Find(KEY_TYPE const& handle)
+ {
+ return Trinity::Find(_elements, handle, (SPECIFIC_TYPE*)NULL);
+ }
+
+ ContainerUnorderedMap<OBJECT_TYPES, KEY_TYPE>& GetElements() { return _elements; }
+ ContainerUnorderedMap<OBJECT_TYPES, KEY_TYPE> const& GetElements() const { return _elements; }
+
+private:
+ ContainerUnorderedMap<OBJECT_TYPES, KEY_TYPE> _elements;
+};
+
#endif
diff --git a/src/server/shared/Dynamic/TypeContainerFunctions.h b/src/server/shared/Dynamic/TypeContainerFunctions.h
index a89f5bd10d4..bd6d4c348ba 100644
--- a/src/server/shared/Dynamic/TypeContainerFunctions.h
+++ b/src/server/shared/Dynamic/TypeContainerFunctions.h
@@ -28,60 +28,163 @@
#include "Define.h"
#include "Dynamic/TypeList.h"
#include <map>
+#include <unordered_map>
namespace Trinity
{
+ // Helpers
+ // Insert helpers
+ template<class SPECIFIC_TYPE, class KEY_TYPE>
+ bool Insert(ContainerUnorderedMap<SPECIFIC_TYPE, KEY_TYPE>& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* obj)
+ {
+ auto i = elements._element.find(handle);
+ if (i == elements._element.end())
+ {
+ elements._element[handle] = obj;
+ return true;
+ }
+ else
+ {
+ ASSERT(i->second == obj, "Object with certain key already in but objects are different!");
+ return false;
+ }
+ }
+
+ template<class SPECIFIC_TYPE, class KEY_TYPE>
+ bool Insert(ContainerUnorderedMap<TypeNull, KEY_TYPE>& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/)
+ {
+ return false;
+ }
+
+ template<class SPECIFIC_TYPE, class KEY_TYPE, class T>
+ bool Insert(ContainerUnorderedMap<T, KEY_TYPE>& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/)
+ {
+ return false;
+ }
+
+ template<class SPECIFIC_TYPE, class KEY_TYPE, class H, class T>
+ bool Insert(ContainerUnorderedMap<TypeList<H, T>, KEY_TYPE>& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* obj)
+ {
+ bool ret = Insert(elements._elements, handle, obj);
+ return ret ? ret : Insert(elements._TailElements, handle, obj);
+ }
+
+ // Find helpers
+ template<class SPECIFIC_TYPE, class KEY_TYPE>
+ SPECIFIC_TYPE* Find(ContainerUnorderedMap<SPECIFIC_TYPE, KEY_TYPE> const& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* /*obj*/)
+ {
+ auto i = elements._element.find(handle);
+ if (i == elements._element.end())
+ return nullptr;
+ else
+ return i->second;
+ }
+
+ template<class SPECIFIC_TYPE, class KEY_TYPE>
+ SPECIFIC_TYPE* Find(ContainerUnorderedMap<TypeNull, KEY_TYPE> const& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/)
+ {
+ return nullptr;
+ }
+
+ template<class SPECIFIC_TYPE, class KEY_TYPE, class T>
+ SPECIFIC_TYPE* Find(ContainerUnorderedMap<T, KEY_TYPE> const& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/)
+ {
+ return nullptr;
+ }
+
+ template<class SPECIFIC_TYPE, class KEY_TYPE, class H, class T>
+ SPECIFIC_TYPE* Find(ContainerUnorderedMap<TypeList<H, T>, KEY_TYPE> const& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* /*obj*/)
+ {
+ SPECIFIC_TYPE* ret = Find(elements._elements, handle, (SPECIFIC_TYPE*)nullptr);
+ return ret ? ret : Find(elements._TailElements, handle, (SPECIFIC_TYPE*)nullptr);
+ }
+
+ // Erase helpers
+ template<class SPECIFIC_TYPE, class KEY_TYPE>
+ bool Remove(ContainerUnorderedMap<SPECIFIC_TYPE, KEY_TYPE>& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* /*obj*/)
+ {
+ elements._element.erase(handle);
+ return true;
+ }
+
+ template<class SPECIFIC_TYPE, class KEY_TYPE>
+ bool Remove(ContainerUnorderedMap<TypeNull, KEY_TYPE>& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/)
+ {
+ return false;
+ }
+
+ template<class SPECIFIC_TYPE, class KEY_TYPE, class T>
+ bool Remove(ContainerUnorderedMap<T, KEY_TYPE>& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/)
+ {
+ return false;
+ }
+
+ template<class SPECIFIC_TYPE, class KEY_TYPE, class H, class T>
+ bool Remove(ContainerUnorderedMap<TypeList<H, T>, KEY_TYPE>& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* /*obj*/)
+ {
+ bool ret = Remove(elements._elements, handle, (SPECIFIC_TYPE*)nullptr);
+ return ret ? ret : Remove(elements._TailElements, handle, (SPECIFIC_TYPE*)nullptr);
+ }
+
/* ContainerMapList Helpers */
// count functions
- template<class SPECIFIC_TYPE> size_t Count(const ContainerMapList<SPECIFIC_TYPE> &elements, SPECIFIC_TYPE* /*fake*/)
+ template<class SPECIFIC_TYPE>
+ size_t Count(ContainerMapList<SPECIFIC_TYPE> const& elements, SPECIFIC_TYPE* /*fake*/)
{
return elements._element.getSize();
}
- template<class SPECIFIC_TYPE> size_t Count(const ContainerMapList<TypeNull> &/*elements*/, SPECIFIC_TYPE* /*fake*/)
+ template<class SPECIFIC_TYPE>
+ size_t Count(ContainerMapList<TypeNull> const& /*elements*/, SPECIFIC_TYPE* /*fake*/)
{
return 0;
}
- template<class SPECIFIC_TYPE, class T> size_t Count(const ContainerMapList<T> &/*elements*/, SPECIFIC_TYPE* /*fake*/)
+ template<class SPECIFIC_TYPE, class T>
+ size_t Count(ContainerMapList<T> const& /*elements*/, SPECIFIC_TYPE* /*fake*/)
{
return 0;
}
- template<class SPECIFIC_TYPE, class T> size_t Count(const ContainerMapList<TypeList<SPECIFIC_TYPE, T> >&elements, SPECIFIC_TYPE* fake)
+ template<class SPECIFIC_TYPE, class T>
+ size_t Count(ContainerMapList<TypeList<SPECIFIC_TYPE, T>> const& elements, SPECIFIC_TYPE* fake)
{
return Count(elements._elements, fake);
}
- template<class SPECIFIC_TYPE, class H, class T> size_t Count(const ContainerMapList<TypeList<H, T> >&elements, SPECIFIC_TYPE* fake)
+ template<class SPECIFIC_TYPE, class H, class T>
+ size_t Count(ContainerMapList<TypeList<H, T>> const& elements, SPECIFIC_TYPE* fake)
{
return Count(elements._TailElements, fake);
}
// non-const insert functions
- template<class SPECIFIC_TYPE> SPECIFIC_TYPE* Insert(ContainerMapList<SPECIFIC_TYPE> &elements, SPECIFIC_TYPE *obj)
- {
+ template<class SPECIFIC_TYPE>
+ SPECIFIC_TYPE* Insert(ContainerMapList<SPECIFIC_TYPE>& elements, SPECIFIC_TYPE* obj) {
//elements._element[hdl] = obj;
obj->AddToGrid(elements._element);
return obj;
}
- template<class SPECIFIC_TYPE> SPECIFIC_TYPE* Insert(ContainerMapList<TypeNull> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
+ template<class SPECIFIC_TYPE>
+ SPECIFIC_TYPE* Insert(ContainerMapList<TypeNull>& /*elements*/, SPECIFIC_TYPE* /*obj*/)
{
- return NULL;
+ return nullptr;
}
// this is a missed
- template<class SPECIFIC_TYPE, class T> SPECIFIC_TYPE* Insert(ContainerMapList<T> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
+ template<class SPECIFIC_TYPE, class T>
+ SPECIFIC_TYPE* Insert(ContainerMapList<T>& /*elements*/, SPECIFIC_TYPE* /*obj*/)
{
- return NULL; // a missed
+ return nullptr; // a missed
}
// Recursion
- template<class SPECIFIC_TYPE, class H, class T> SPECIFIC_TYPE* Insert(ContainerMapList<TypeList<H, T> >&elements, SPECIFIC_TYPE *obj)
+ template<class SPECIFIC_TYPE, class H, class T>
+ SPECIFIC_TYPE* Insert(ContainerMapList<TypeList<H, T>>& elements, SPECIFIC_TYPE* obj)
{
- SPECIFIC_TYPE* t= Insert(elements._elements, obj);
- return (t != NULL ? t : Insert(elements._TailElements, obj));
+ SPECIFIC_TYPE* t = Insert(elements._elements, obj);
+ return (t != nullptr ? t : Insert(elements._TailElements, obj));
}
//// non-const remove method
@@ -93,20 +196,20 @@ namespace Trinity
//template<class SPECIFIC_TYPE> SPECIFIC_TYPE* Remove(ContainerMapList<TypeNull> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
//{
- // return NULL;
+ // return nullptr;
//}
//// this is a missed
//template<class SPECIFIC_TYPE, class T> SPECIFIC_TYPE* Remove(ContainerMapList<T> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
//{
- // return NULL; // a missed
+ // return nullptr; // a missed
//}
//template<class SPECIFIC_TYPE, class T, class H> SPECIFIC_TYPE* Remove(ContainerMapList<TypeList<H, T> > &elements, SPECIFIC_TYPE *obj)
//{
// // The head element is bad
// SPECIFIC_TYPE* t = Remove(elements._elements, obj);
- // return ( t != NULL ? t : Remove(elements._TailElements, obj) );
+ // return ( t != nullptr ? t : Remove(elements._TailElements, obj) );
//}
}
#endif
diff --git a/src/server/shared/Dynamic/TypeContainerVisitor.h b/src/server/shared/Dynamic/TypeContainerVisitor.h
index 514b52d3dfe..e10a2331e25 100644
--- a/src/server/shared/Dynamic/TypeContainerVisitor.h
+++ b/src/server/shared/Dynamic/TypeContainerVisitor.h
@@ -37,21 +37,6 @@ template<class VISITOR, class TYPE_CONTAINER> void VisitorHelper(VISITOR &v, TYP
v.Visit(c);
}
-// terminate condition for container list
-template<class VISITOR> void VisitorHelper(VISITOR &/*v*/, ContainerList<TypeNull> &/*c*/) { }
-
-template<class VISITOR, class T> void VisitorHelper(VISITOR &v, ContainerList<T> &c)
-{
- v.Visit(c._element);
-}
-
-// recursion for container list
-template<class VISITOR, class H, class T> void VisitorHelper(VISITOR &v, ContainerList<TypeList<H, T> > &c)
-{
- VisitorHelper(v, c._elements);
- VisitorHelper(v, c._TailElements);
-}
-
// terminate condition container map list
template<class VISITOR> void VisitorHelper(VISITOR &/*v*/, ContainerMapList<TypeNull> &/*c*/) { }
@@ -67,23 +52,31 @@ template<class VISITOR, class H, class T> void VisitorHelper(VISITOR &v, Contain
VisitorHelper(v, c._TailElements);
}
-// array list
-template<class VISITOR, class T> void VisitorHelper(VISITOR &v, ContainerArrayList<T> &c)
+// for TypeMapContainer
+template<class VISITOR, class OBJECT_TYPES> void VisitorHelper(VISITOR &v, TypeMapContainer<OBJECT_TYPES> &c)
{
- v.Visit(c._element);
+ VisitorHelper(v, c.GetElements());
}
-template<class VISITOR> void VisitorHelper(VISITOR &/*v*/, ContainerArrayList<TypeNull> &/*c*/) { }
+// TypeUnorderedMapContainer
+template<class VISITOR, class KEY_TYPE>
+void VisitorHelper(VISITOR& /*v*/, ContainerUnorderedMap<TypeNull, KEY_TYPE>& /*c*/) { }
+
+template<class VISITOR, class KEY_TYPE, class T>
+void VisitorHelper(VISITOR& v, ContainerUnorderedMap<T, KEY_TYPE>& c)
+{
+ v.Visit(c._element);
+}
-// recursion
-template<class VISITOR, class H, class T> void VisitorHelper(VISITOR &v, ContainerArrayList<TypeList<H, T> > &c)
+template<class VISITOR, class KEY_TYPE, class H, class T>
+void VisitorHelper(VISITOR& v, ContainerUnorderedMap<TypeList<H, T>, KEY_TYPE>& c)
{
VisitorHelper(v, c._elements);
VisitorHelper(v, c._TailElements);
}
-// for TypeMapContainer
-template<class VISITOR, class OBJECT_TYPES> void VisitorHelper(VISITOR &v, TypeMapContainer<OBJECT_TYPES> &c)
+template<class VISITOR, class OBJECT_TYPES, class KEY_TYPE>
+void VisitorHelper(VISITOR& v, TypeUnorderedMapContainer<OBJECT_TYPES, KEY_TYPE>& c)
{
VisitorHelper(v, c.GetElements());
}
diff --git a/src/server/shared/Dynamic/TypeList.h b/src/server/shared/Dynamic/TypeList.h
index f1ccca9b043..f0355929700 100644
--- a/src/server/shared/Dynamic/TypeList.h
+++ b/src/server/shared/Dynamic/TypeList.h
@@ -40,5 +40,6 @@ struct TypeList
#define TYPELIST_3(T1, T2, T3) TypeList<T1, TYPELIST_2(T2, T3) >
#define TYPELIST_4(T1, T2, T3, T4) TypeList<T1, TYPELIST_3(T2, T3, T4) >
#define TYPELIST_5(T1, T2, T3, T4, T5) TypeList<T1, TYPELIST_4(T2, T3, T4, T5) >
+#define TYPELIST_6(T1, T2, T3, T4, T5, T6) TypeList<T1, TYPELIST_5(T2, T3, T4, T5, T6) >
#endif
diff --git a/src/server/shared/Networking/MessageBuffer.h b/src/server/shared/Networking/MessageBuffer.h
index 95e26974626..5f9af33a45d 100644
--- a/src/server/shared/Networking/MessageBuffer.h
+++ b/src/server/shared/Networking/MessageBuffer.h
@@ -84,9 +84,9 @@ public:
// Ensures there's "some" free space, make sure to call Normalize() before this
void EnsureFreeSpace()
{
- // Double the size of the buffer if it's already full
+ // resize buffer if it's already full
if (GetRemainingSpace() == 0)
- _storage.resize(_storage.size() * 2);
+ _storage.resize(_storage.size() * 3 / 2);
}
void Write(void const* data, std::size_t size)
diff --git a/src/server/shared/Networking/Socket.h b/src/server/shared/Networking/Socket.h
index 1989411bccb..3f588298617 100644
--- a/src/server/shared/Networking/Socket.h
+++ b/src/server/shared/Networking/Socket.h
@@ -160,6 +160,8 @@ protected:
MessageBuffer _writeBuffer;
#endif
+ boost::asio::io_service& io_service() { return _socket.get_io_service(); }
+
private:
void ReadHandlerInternal(boost::system::error_code error, size_t transferredBytes)
{
diff --git a/src/server/worldserver/CommandLine/CliRunnable.cpp b/src/server/worldserver/CommandLine/CliRunnable.cpp
index ad9ae28f712..3901e17f9c2 100644
--- a/src/server/worldserver/CommandLine/CliRunnable.cpp
+++ b/src/server/worldserver/CommandLine/CliRunnable.cpp
@@ -36,9 +36,9 @@
char* command_finder(const char* text, int state)
{
- static int idx, len;
+ static size_t idx, len;
const char* ret;
- ChatCommand* cmd = ChatHandler::getCommandTable();
+ std::vector<ChatCommand> const& cmd = ChatHandler::getCommandTable();
if (!state)
{
@@ -46,20 +46,19 @@ char* command_finder(const char* text, int state)
len = strlen(text);
}
- while ((ret = cmd[idx].Name))
+ while (idx < cmd.size())
{
+ ret = cmd[idx].Name;
if (!cmd[idx].AllowConsole)
{
- idx++;
+ ++idx;
continue;
}
- idx++;
+ ++idx;
//printf("Checking %s \n", cmd[idx].Name);
if (strncmp(ret, text, len) == 0)
return strdup(ret);
- if (cmd[idx].Name == NULL)
- break;
}
return ((char*)NULL);
diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp
index 10c41835a9f..ab132621437 100644
--- a/src/server/worldserver/Main.cpp
+++ b/src/server/worldserver/Main.cpp
@@ -254,10 +254,9 @@ extern int main(int argc, char** argv)
sWorldSocketMgr.StopNetwork();
sInstanceSaveMgr->Unload();
+ sOutdoorPvPMgr->Die();
sMapMgr->UnloadAll(); // unload all grids (including locked in memory)
- sObjectAccessor->UnloadAll(); // unload 'i_player2corpse' storage and remove from world
sScriptMgr->Unload();
- sOutdoorPvPMgr->Die();
// set server offline
LoginDatabase.DirectPExecute("UPDATE realmlist SET flag = flag | %u WHERE id = '%d'", REALM_FLAG_OFFLINE, realmID);
@@ -424,7 +423,7 @@ void FreezeDetectorHandler(const boost::system::error_code& error)
else if (getMSTimeDiff(_lastChangeMsTime, curtime) > _maxCoreStuckTimeInMs)
{
TC_LOG_ERROR("server.worldserver", "World Thread hangs, kicking out server!");
- ASSERT(false);
+ ABORT();
}
_freezeCheckTimer.expires_from_now(boost::posix_time::seconds(1));
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index 8e06c1c9ca4..8619a864998 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -118,9 +118,9 @@ CharacterDatabase.WorkerThreads = 1
# WorldDatabase.SynchThreads
# CharacterDatabase.SynchThreads
# Description: The amount of MySQL connections spawned to handle.
-# Default: 1 - (LoginDatabase.WorkerThreads)
-# 1 - (WorldDatabase.WorkerThreads)
-# 2 - (CharacterDatabase.WorkerThreads)
+# Default: 1 - (LoginDatabase.SynchThreads)
+# 1 - (WorldDatabase.SynchThreads)
+# 2 - (CharacterDatabase.SynchThreads)
LoginDatabase.SynchThreads = 1
WorldDatabase.SynchThreads = 1
@@ -956,7 +956,7 @@ Guild.BankEventLogRecordsCount = 25
#
# MaxPrimaryTradeSkill
# Description: Maximum number of primary professions a character can learn.
-# Range: 0-10
+# Range: 0-11
# Default: 2
MaxPrimaryTradeSkill = 2
@@ -1074,6 +1074,16 @@ Command.LookupMaxResults = 0
AllowTickets = 1
#
+# DeletedCharacterTicketTrace
+# Description: Keep trace of tickets opened by deleted characters
+# gm_ticket.playerGuid will be 0, old GUID and character name
+# will be included in gm_ticket.comment
+# Default: 0 - (Disabled)
+# 1 - (Enabled)
+
+DeletedCharacterTicketTrace = 0
+
+#
# DungeonFinder.OptionsMask
# Description: Dungeon and raid finder system.
# Value is a bitmask consisting of:
@@ -1132,11 +1142,11 @@ BirthdayTime = 1222964635
# DATABASE_CHARACTER = 2, // Character database
# DATABASE_WORLD = 4, // World database
#
-# Default: 0 - (All Disabled)
+# Default: 7 - (All enabled)
# 4 - (Enable world only)
-# 7 - (All enabled)
+# 0 - (All disabled)
-Updates.EnableDatabases = 0
+Updates.EnableDatabases = 7
#
# Updates.SourcePath
@@ -1148,7 +1158,7 @@ Updates.EnableDatabases = 0
Updates.SourcePath = ""
#
-# Updates.SourcePath
+# Updates.MySqlCLIPath
# 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"
@@ -1667,6 +1677,7 @@ GM.WhisperingTo = 2
# applied on players when using the .freeze command
# Default: 0 - (Original aura duration. Lasts until the .unfreeze command is used)
# N - (Aura duration if unspecified in .freeze command, in seconds)
+
GM.FreezeAuraDuration = 0
#
@@ -1854,7 +1865,7 @@ Rate.Drop.Item.ReferencedAmount = 1
# Rate.XP.Quest
# Rate.XP.Explore
# Description: Experience rates.
-# Default: 1 - (Rate.XP.Kill)
+# Default: 1 - (Rate.XP.Kill, affects only kills outside of Battlegrounds)
# 1 - (Rate.XP.Quest)
# 1 - (Rate.XP.Explore)
@@ -1863,6 +1874,14 @@ Rate.XP.Quest = 1
Rate.XP.Explore = 1
#
+# Rate.XP.BattlegroundKill
+# Description: Experience rate for honorable kills in battlegrounds,
+# it works when Battleground.GiveXPForKills = 1
+# Default: 1
+
+Rate.XP.BattlegroundKill = 1
+
+#
# Rate.Quest.Money.Reward
# Rate.Quest.Money.Max.Level.Reward
# Description: Multiplier for money quest rewards. Can not be below 0.
@@ -2148,7 +2167,7 @@ AutoBroadcast.Center = 0
#
# AutoBroadcast.Timer
# Description: Timer (in milliseconds) for auto broadcasts.
-# Default: 60000 - (10 minutes)
+# Default: 600000 - (10 minutes)
AutoBroadcast.Timer = 600000
@@ -2190,12 +2209,21 @@ Battleground.QueueAnnouncer.PlayerOnly = 0
Battleground.StoreStatistics.Enable = 0
#
+# Battleground.TrackDeserters.Enable
+# Description: Track deserters of Battlegrounds.
+# Default: 0 - (Disabled)
+# 1 - (Enabled)
+
+Battleground.TrackDeserters.Enable = 0
+
+#
# Battleground.InvitationType
# Description: Set Battleground invitation type.
# Default: 0 - (Normal, Invite as much players to battlegrounds as queued,
# Don't bother with balance)
# 1 - (Experimental, Don't allow to invite much more players
# of one faction)
+# 2 - (Experimental, Try to have even teams)
Battleground.InvitationType = 0
@@ -2219,7 +2247,8 @@ BattleGround.PremadeGroupWaitForMatch = 1800000
#
# Battleground.GiveXPForKills
-# Description: Give experience for honorable kills in battlegrounds.
+# Description: Give experience for honorable kills in battlegrounds,
+# the rate can be changed in the Rate.XP.BattlegroundKill setting.
# Default: 0 - (Disabled)
# 1 - (Enabled)
@@ -2556,14 +2585,14 @@ CharDelete.KeepDays = 30
#
# AllowTrackBothResources
# Description: Allows players to track herbs and minerals at the same time (if they have the skills)
-# Default: 0 (do not allow)
-# 1 (allow)
+# Default: 0 - (Do not allow)
+# 1 - (Allow)
#
-# Note: The following are client limitations and cannot be coded for:
-# * The minimap tracking icon will display whichever skill is activated second
-# * The minimap tracking list will only show a check mark next to the last skill activated (sometimes this
-# bugs out and doesn't switch the check mark. It has no effect on the actual tracking though).
-# * The minimap dots are yellow for both resources
+# Note: The following are client limitations and cannot be coded for:
+# * The minimap tracking icon will display whichever skill is activated second.
+# * The minimap tracking list will only show a check mark next to the last skill activated (sometimes this
+# bugs out and doesn't switch the check mark. It has no effect on the actual tracking though).
+# * The minimap dots are yellow for both resources.
AllowTrackBothResources = 0
@@ -2604,6 +2633,21 @@ PlayerStart.MapsExplored = 0
HonorPointsAfterDuel = 0
#
+# ResetDuelCooldowns
+# Description: Reset all cooldowns before duel starts and restore them when duel ends.
+# Default: 0 - (Disabled)
+# 1 - (Enabled)
+
+ResetDuelCooldowns = 0
+
+# ResetDuelHealthMana
+# Description: Reset health and mana before duel starts and restore them when duel ends.
+# Default: 0 - (Disabled)
+# 1 - (Enabled)
+
+ResetDuelHealthMana = 0
+
+#
# AlwaysMaxWeaponSkill
# Description: Players will automatically gain max weapon/defense skill when logging in,
# or leveling.
@@ -2965,8 +3009,8 @@ AuctionHouseBot.Items.ItemLevel.Max = 0
#
# AuctionHouseBot.Items.ReqLevel.*
-# Prevent seller from listing items below/above this required level
-# Default: - 0 (Disabled)
+# Description: Prevent seller from listing items below/above this required level
+# Default: 0 - (Disabled)
AuctionHouseBot.Items.ReqLevel.Min = 0
AuctionHouseBot.Items.ReqLevel.Max = 0
@@ -2996,7 +3040,7 @@ AuctionHouseBot.Items.Amount.Orange = 0
AuctionHouseBot.Items.Amount.Yellow = 0
#
-# AustionHouseBot.Class.*
+# AuctionHouseBot.Class.*
# Description: Here you can set the class of items you prefer to be show on AH
# These value are sorted by preference, from 0 (disabled) to 10 (max. preference)
# Default: Consumable: 6
diff --git a/src/tools/map_extractor/CMakeLists.txt b/src/tools/map_extractor/CMakeLists.txt
index 87d68cc7a2f..b10956b3264 100644
--- a/src/tools/map_extractor/CMakeLists.txt
+++ b/src/tools/map_extractor/CMakeLists.txt
@@ -9,13 +9,16 @@
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-file(GLOB_RECURSE sources *.cpp *.h)
+file(GLOB_RECURSE mapextractor_SRCS *.cpp *.h)
set(include_Dirs
- ${CMAKE_SOURCE_DIR}/src/server/shared
- ${CMAKE_SOURCE_DIR}/dep/libmpq
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}/loadlib
+ ${CMAKE_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/dep/cppformat
+ ${CMAKE_SOURCE_DIR}/dep/libmpq
+ ${CMAKE_SOURCE_DIR}/src/common
+ ${CMAKE_SOURCE_DIR}/src/common/Utilities
+ ${CMAKE_SOURCE_DIR}/src/server/shared
+ ${CMAKE_CURRENT_SOURCE_DIR}/loadlib
)
if( WIN32 )
@@ -28,13 +31,16 @@ endif()
include_directories(${include_Dirs})
add_executable(mapextractor
- ${sources}
+ ${mapextractor_SRCS}
)
target_link_libraries(mapextractor
+ common
+ format
mpq
${BZIP2_LIBRARIES}
${ZLIB_LIBRARIES}
+ ${Boost_LIBRARIES}
)
if( UNIX )
diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp
index dcaa3ba0a76..c0497a1cefb 100644
--- a/src/tools/map_extractor/System.cpp
+++ b/src/tools/map_extractor/System.cpp
@@ -22,36 +22,17 @@
#include <deque>
#include <set>
#include <cstdlib>
-
-#ifdef _WIN32
-#include "direct.h"
-#else
-#include <sys/stat.h>
-#include <unistd.h>
-#endif
+#include <fstream>
#include "dbcfile.h"
#include "mpq_libmpq04.h"
+#include "StringFormat.h"
#include "adt.h"
#include "wdt.h"
-#include <fcntl.h>
-
-#if defined( __GNUC__ )
- #define _open open
- #define _close close
- #ifndef O_BINARY
- #define O_BINARY 0
- #endif
-#else
- #include <io.h>
-#endif
-
-#ifdef O_LARGEFILE
- #define OPEN_FLAGS (O_RDONLY | O_BINARY | O_LARGEFILE)
-#else
- #define OPEN_FLAGS (O_RDONLY | O_BINARY)
-#endif
+
+#include <boost/filesystem.hpp>
+
extern ArchiveSet gOpenArchives;
typedef struct
@@ -106,37 +87,14 @@ const char *CONF_mpq_list[]={
static const char* const langs[] = {"enGB", "enUS", "deDE", "esES", "frFR", "koKR", "zhCN", "zhTW", "enCN", "enTW", "esMX", "ruRU" };
#define LANG_COUNT 12
-void CreateDir( const std::string& Path )
-{
- if(chdir(Path.c_str()) == 0)
- {
- chdir("../");
- return;
- }
-
- int ret;
- #ifdef _WIN32
- ret = _mkdir( Path.c_str());
- #else
- ret = mkdir( Path.c_str(), 0777 );
- #endif
- if (ret != 0)
- {
- printf("Fatal Error: Could not create directory %s check your permissions", Path.c_str());
- exit(1);
- }
-}
-
-bool FileExists( const char* FileName )
+void CreateDir(boost::filesystem::path const& path)
{
- int fp = _open(FileName, OPEN_FLAGS);
- if(fp != -1)
- {
- _close(fp);
- return true;
- }
+ namespace fs = boost::filesystem;
+ if (fs::exists(path))
+ return;
- return false;
+ if (!fs::create_directory(path))
+ throw new std::runtime_error("Unable to create directory" + path.string());
}
void Usage(char* prg)
@@ -207,7 +165,7 @@ void HandleArgs(int argc, char * arg[])
uint32 ReadBuild(int locale)
{
// include build info file also
- std::string filename = std::string("component.wow-")+langs[locale]+".txt";
+ std::string filename = Trinity::StringFormat("component.wow-%s.txt", langs[locale]);
//printf("Read %s file... ", filename.c_str());
MPQFile m(filename.c_str());
@@ -269,7 +227,7 @@ uint32 ReadMapDBC()
strncpy(map_ids[x].name, map_name, max_map_name_length);
map_ids[x].name[max_map_name_length - 1] = '\0';
}
- printf("Done! (%u maps loaded)\n", (uint32)map_count);
+ printf("Done! (" SZFMTD "maps loaded)\n", map_count);
return map_count;
}
@@ -294,7 +252,7 @@ void ReadAreaTableDBC()
maxAreaId = dbc.getMaxId();
- printf("Done! (%u areas loaded)\n", (uint32)area_count);
+ printf("Done! (" SZFMTD " areas loaded)\n", area_count);
}
void ReadLiquidTypeTableDBC()
@@ -315,7 +273,7 @@ void ReadLiquidTypeTableDBC()
for(uint32 x = 0; x < liqTypeCount; ++x)
LiqType[dbc.getRecord(x).getUInt(0)] = dbc.getRecord(x).getUInt(3);
- printf("Done! (%u LiqTypes loaded)\n", (uint32)liqTypeCount);
+ printf("Done! (" SZFMTD " LiqTypes loaded)\n", liqTypeCount);
}
//
@@ -414,17 +372,17 @@ uint8 liquid_flags[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID];
bool liquid_show[ADT_GRID_SIZE][ADT_GRID_SIZE];
float liquid_height[ADT_GRID_SIZE+1][ADT_GRID_SIZE+1];
-bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, uint32 build)
+bool ConvertADT(std::string const& inputPath, std::string const& outputPath, int /*cell_y*/, int /*cell_x*/, uint32 build)
{
ADT_file adt;
- if (!adt.loadFile(filename))
+ if (!adt.loadFile(inputPath))
return false;
adt_MCIN *cells = adt.a_grid->getMCIN();
if (!cells)
{
- printf("Can't find cells in '%s'\n", filename);
+ printf("Can't find cells in '%s'\n", inputPath.c_str());
return false;
}
@@ -434,8 +392,8 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/,
// Prepare map header
map_fileheader map;
- map.mapMagic = *(uint32 const*)MAP_MAGIC;
- map.versionMagic = *(uint32 const*)MAP_VERSION_MAGIC;
+ map.mapMagic = *reinterpret_cast<uint32 const*>(MAP_MAGIC);
+ map.versionMagic = *reinterpret_cast<uint32 const*>(MAP_VERSION_MAGIC);
map.buildMagic = build;
// Get area flags data
@@ -452,7 +410,7 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/,
area_flags[i][j] = areas[areaid];
continue;
}
- printf("File: %s\nCan't find area flag for areaid %u [%d, %d].\n", filename, areaid, cell->ix, cell->iy);
+ printf("File: %s\nCan't find area flag for areaid %u [%d, %d].\n", inputPath.c_str(), areaid, cell->ix, cell->iy);
}
area_flags[i][j] = 0xffff;
}
@@ -478,7 +436,7 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/,
map.areaMapSize = sizeof(map_areaHeader);
map_areaHeader areaHeader;
- areaHeader.fourcc = *(uint32 const*)MAP_AREA_MAGIC;
+ areaHeader.fourcc = *reinterpret_cast<uint32 const*>(MAP_AREA_MAGIC);
areaHeader.flags = 0;
if (fullAreaData)
{
@@ -488,7 +446,7 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/,
else
{
areaHeader.flags |= MAP_AREA_NO_AREA;
- areaHeader.gridArea = (uint16)areaflag;
+ areaHeader.gridArea = static_cast<uint16>(areaflag);
}
//
@@ -607,7 +565,7 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/,
map.heightMapSize = sizeof(map_heightHeader);
map_heightHeader heightHeader;
- heightHeader.fourcc = *(uint32 const*)MAP_HEIGHT_MAGIC;
+ heightHeader.fourcc = *reinterpret_cast<uint32 const*>(MAP_HEIGHT_MAGIC);
heightHeader.flags = 0;
heightHeader.gridHeight = minHeight;
heightHeader.gridMaxHeight = maxHeight;
@@ -763,7 +721,7 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/,
case LIQUID_TYPE_MAGMA: liquid_flags[i][j] |= MAP_LIQUID_TYPE_MAGMA; break;
case LIQUID_TYPE_SLIME: liquid_flags[i][j] |= MAP_LIQUID_TYPE_SLIME; break;
default:
- printf("\nCan't find Liquid type %u for map %s\nchunk %d,%d\n", h->liquidType, filename, i, j);
+ printf("\nCan't find Liquid type %u for map %s\nchunk %d,%d\n", h->liquidType, inputPath.c_str(), i, j);
break;
}
// Dark water detect
@@ -848,7 +806,7 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/,
}
map.liquidMapOffset = map.heightMapOffset + map.heightMapSize;
map.liquidMapSize = sizeof(map_liquidHeader);
- liquidHeader.fourcc = *(uint32 const*)MAP_LIQUID_MAGIC;
+ liquidHeader.fourcc = *reinterpret_cast<uint32 const*>(MAP_LIQUID_MAGIC);
liquidHeader.flags = 0;
liquidHeader.liquidType = 0;
liquidHeader.offsetX = minX;
@@ -906,69 +864,72 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/,
map.holesSize = 0;
// Ok all data prepared - store it
- FILE* output = fopen(filename2, "wb");
- if (!output)
+
+ std::ofstream outFile(outputPath, std::ofstream::out | std::ofstream::binary);
+ if (!outFile)
{
- printf("Can't create the output file '%s'\n", filename2);
+ printf("Can't create the output file '%s'\n", outputPath.c_str());
return false;
}
- fwrite(&map, sizeof(map), 1, output);
+
+ outFile.write(reinterpret_cast<const char*>(&map), sizeof(map));
// Store area data
- fwrite(&areaHeader, sizeof(areaHeader), 1, output);
+ outFile.write(reinterpret_cast<const char*>(&areaHeader), sizeof(areaHeader));
if (!(areaHeader.flags&MAP_AREA_NO_AREA))
- fwrite(area_flags, sizeof(area_flags), 1, output);
+ outFile.write(reinterpret_cast<const char*>(area_flags), sizeof(area_flags));
// Store height data
- fwrite(&heightHeader, sizeof(heightHeader), 1, output);
+ outFile.write(reinterpret_cast<const char*>(&heightHeader), sizeof(heightHeader));
if (!(heightHeader.flags & MAP_HEIGHT_NO_HEIGHT))
{
if (heightHeader.flags & MAP_HEIGHT_AS_INT16)
{
- fwrite(uint16_V9, sizeof(uint16_V9), 1, output);
- fwrite(uint16_V8, sizeof(uint16_V8), 1, output);
+ outFile.write(reinterpret_cast<const char*>(uint16_V9), sizeof(uint16_V9));
+ outFile.write(reinterpret_cast<const char*>(uint16_V8), sizeof(uint16_V8));
}
else if (heightHeader.flags & MAP_HEIGHT_AS_INT8)
{
- fwrite(uint8_V9, sizeof(uint8_V9), 1, output);
- fwrite(uint8_V8, sizeof(uint8_V8), 1, output);
+ outFile.write(reinterpret_cast<const char*>(uint8_V9), sizeof(uint8_V9));
+ outFile.write(reinterpret_cast<const char*>(uint8_V8), sizeof(uint8_V8));
}
else
{
- fwrite(V9, sizeof(V9), 1, output);
- fwrite(V8, sizeof(V8), 1, output);
+ outFile.write(reinterpret_cast<const char*>(V9), sizeof(V9));
+ outFile.write(reinterpret_cast<const char*>(V8), sizeof(V8));
}
}
// Store liquid data if need
if (map.liquidMapOffset)
{
- fwrite(&liquidHeader, sizeof(liquidHeader), 1, output);
+ outFile.write(reinterpret_cast<const char*>(&liquidHeader), sizeof(liquidHeader));
+
if (!(liquidHeader.flags&MAP_LIQUID_NO_TYPE))
{
- fwrite(liquid_entry, sizeof(liquid_entry), 1, output);
- fwrite(liquid_flags, sizeof(liquid_flags), 1, output);
+ outFile.write(reinterpret_cast<const char*>(liquid_entry), sizeof(liquid_entry));
+ outFile.write(reinterpret_cast<const char*>(liquid_flags), sizeof(liquid_flags));
}
+
if (!(liquidHeader.flags&MAP_LIQUID_NO_HEIGHT))
{
- for (int y=0; y<liquidHeader.height;y++)
- fwrite(&liquid_height[y+liquidHeader.offsetY][liquidHeader.offsetX], sizeof(float), liquidHeader.width, output);
+ for (int y = 0; y < liquidHeader.height; y++)
+ outFile.write(reinterpret_cast<const char*>(&liquid_height[y + liquidHeader.offsetY][liquidHeader.offsetX]), sizeof(float) * liquidHeader.width);
}
}
// store hole data
if (hasHoles)
- fwrite(holes, map.holesSize, 1, output);
-
- fclose(output);
+ outFile.write(reinterpret_cast<const char*>(holes), map.holesSize);
+ outFile.close();
return true;
}
void ExtractMapsFromMpq(uint32 build)
{
- char mpq_filename[1024];
- char output_filename[1024];
- char mpq_map_name[1024];
+ std::string mpqFileName;
+ std::string outputFileName;
+ std::string mpqMapName;
printf("Extracting maps...\n");
@@ -986,9 +947,10 @@ void ExtractMapsFromMpq(uint32 build)
{
printf("Extract %s (%d/%u) \n", map_ids[z].name, z+1, map_count);
// Loadup map grid data
- sprintf(mpq_map_name, "World\\Maps\\%s\\%s.wdt", map_ids[z].name, map_ids[z].name);
+
+ mpqMapName = Trinity::StringFormat("World\\Maps\\%s\\%s.wdt", map_ids[z].name, map_ids[z].name);
WDT_file wdt;
- if (!wdt.loadFile(mpq_map_name, false))
+ if (!wdt.loadFile(mpqMapName, false))
{
// printf("Error loading %s map wdt data\n", map_ids[z].name);
continue;
@@ -1000,9 +962,10 @@ void ExtractMapsFromMpq(uint32 build)
{
if (!wdt.main->adt_list[y][x].exist)
continue;
- sprintf(mpq_filename, "World\\Maps\\%s\\%s_%u_%u.adt", map_ids[z].name, map_ids[z].name, x, y);
- sprintf(output_filename, "%s/maps/%03u%02u%02u.map", output_path, map_ids[z].id, y, x);
- ConvertADT(mpq_filename, output_filename, y, x, build);
+
+ mpqFileName = Trinity::StringFormat("World\\Maps\\%s\\%s_%u_%u.adt", map_ids[z].name, map_ids[z].name, x, y);
+ outputFileName = Trinity::StringFormat("%s/maps/%03u%02u%02u.map", output_path, map_ids[z].id, y, x);
+ ConvertADT(mpqFileName, outputFileName, y, x, build);
}
// draw progress bar
printf("Processing........................%d%%\r", (100 * (y+1)) / WDT_MAP_SIZE);
@@ -1038,9 +1001,9 @@ void ExtractDBCFiles(int locale, bool basicLocale)
// get DBC file list
for(ArchiveSet::iterator i = gOpenArchives.begin(); i != gOpenArchives.end();++i)
{
- vector<string> files;
+ std::vector<std::string> files;
(*i)->GetFileListTo(files);
- for (vector<string>::iterator iter = files.begin(); iter != files.end(); ++iter)
+ for (std::vector<std::string>::iterator iter = files.begin(); iter != files.end(); ++iter)
if (iter->rfind(".dbc") == iter->length() - strlen(".dbc"))
dbcfiles.insert(*iter);
}
@@ -1057,20 +1020,20 @@ void ExtractDBCFiles(int locale, bool basicLocale)
// extract Build info file
{
- string mpq_name = std::string("component.wow-") + langs[locale] + ".txt";
- string filename = path + mpq_name;
+ std::string mpq_name = std::string("component.wow-") + langs[locale] + ".txt";
+ std::string filename = path + mpq_name;
ExtractFile(mpq_name.c_str(), filename);
}
// extract DBCs
uint32 count = 0;
- for (set<string>::iterator iter = dbcfiles.begin(); iter != dbcfiles.end(); ++iter)
+ for (std::set<std::string>::iterator iter = dbcfiles.begin(); iter != dbcfiles.end(); ++iter)
{
- string filename = path;
+ std::string filename = path;
filename += (iter->c_str() + strlen("DBFilesClient\\"));
- if(FileExists(filename.c_str()))
+ if (boost::filesystem::exists(filename))
continue;
if (ExtractFile(iter->c_str(), filename))
@@ -1081,32 +1044,31 @@ void ExtractDBCFiles(int locale, bool basicLocale)
void LoadLocaleMPQFiles(int const locale)
{
- char filename[512];
+ std::string fileName = Trinity::StringFormat("%s/Data/%s/locale-%s.MPQ", input_path, langs[locale], langs[locale]);
- sprintf(filename,"%s/Data/%s/locale-%s.MPQ", input_path, langs[locale], langs[locale]);
- new MPQArchive(filename);
+ new MPQArchive(fileName.c_str());
for(int i = 1; i < 5; ++i)
{
- char ext[3] = "";
- if(i > 1)
- sprintf(ext, "-%i", i);
+ std::string ext;
+ if (i > 1)
+ ext = Trinity::StringFormat("-%i", i);
- sprintf(filename,"%s/Data/%s/patch-%s%s.MPQ", input_path, langs[locale], langs[locale], ext);
- if(FileExists(filename))
- new MPQArchive(filename);
+ fileName = Trinity::StringFormat("%s/Data/%s/patch-%s%s.MPQ", input_path, langs[locale], langs[locale], ext.c_str());
+ if (boost::filesystem::exists(fileName))
+ new MPQArchive(fileName.c_str());
}
}
void LoadCommonMPQFiles()
{
- char filename[512];
+ std::string fileName;
int count = sizeof(CONF_mpq_list)/sizeof(char*);
for(int i = 0; i < count; ++i)
{
- sprintf(filename, "%s/Data/%s", input_path, CONF_mpq_list[i]);
- if(FileExists(filename))
- new MPQArchive(filename);
+ fileName = Trinity::StringFormat("%s/Data/%s", input_path, CONF_mpq_list[i]);
+ if (boost::filesystem::exists(fileName))
+ new MPQArchive(fileName.c_str());
}
}
@@ -1128,9 +1090,8 @@ int main(int argc, char * arg[])
for (int i = 0; i < LANG_COUNT; i++)
{
- char tmp1[512];
- sprintf(tmp1, "%s/Data/%s/locale-%s.MPQ", input_path, langs[i], langs[i]);
- if (FileExists(tmp1))
+ std::string filename = Trinity::StringFormat("%s/Data/%s/locale-%s.MPQ", input_path, langs[i], langs[i]);
+ if (boost::filesystem::exists(filename))
{
printf("Detected locale: %s\n", langs[i]);
diff --git a/src/tools/map_extractor/loadlib.cpp b/src/tools/map_extractor/loadlib.cpp
index 936cdb72cfd..2f31b472b56 100644
--- a/src/tools/map_extractor/loadlib.cpp
+++ b/src/tools/map_extractor/loadlib.cpp
@@ -38,14 +38,14 @@ FileLoader::~FileLoader()
free();
}
-bool FileLoader::loadFile(char *filename, bool log)
+bool FileLoader::loadFile(std::string const& fileName, bool log)
{
free();
- MPQFile mf(filename);
+ MPQFile mf(fileName.c_str());
if(mf.isEof())
{
if (log)
- printf("No such file %s\n", filename);
+ printf("No such file %s\n", fileName.c_str());
return false;
}
@@ -57,7 +57,7 @@ bool FileLoader::loadFile(char *filename, bool log)
if (prepareLoadedData())
return true;
- printf("Error loading %s", filename);
+ printf("Error loading %s", fileName.c_str());
mf.close();
free();
return false;
diff --git a/src/tools/map_extractor/loadlib/loadlib.h b/src/tools/map_extractor/loadlib/loadlib.h
index a0b62a85983..6547704d885 100644
--- a/src/tools/map_extractor/loadlib/loadlib.h
+++ b/src/tools/map_extractor/loadlib/loadlib.h
@@ -19,31 +19,9 @@
#ifndef LOAD_LIB_H
#define LOAD_LIB_H
-#ifdef _WIN32
-typedef __int64 int64;
-typedef __int32 int32;
-typedef __int16 int16;
-typedef __int8 int8;
-typedef unsigned __int64 uint64;
-typedef unsigned __int32 uint32;
-typedef unsigned __int16 uint16;
-typedef unsigned __int8 uint8;
-#else
-#include <stdint.h>
-#ifndef uint64_t
-#ifdef __linux__
-#include <linux/types.h>
-#endif
-#endif
-typedef int64_t int64;
-typedef int32_t int32;
-typedef int16_t int16;
-typedef int8_t int8;
-typedef uint64_t uint64;
-typedef uint32_t uint32;
-typedef uint16_t uint16;
-typedef uint8_t uint8;
-#endif
+#include "Define.h"
+
+#include <string>
#define FILE_FORMAT_VERSION 18
@@ -79,7 +57,7 @@ public:
file_MVER *version;
FileLoader();
~FileLoader();
- bool loadFile(char *filename, bool log = true);
+ bool loadFile(std::string const& fileName, bool log = true);
virtual void free();
};
diff --git a/src/tools/map_extractor/mpq_libmpq04.h b/src/tools/map_extractor/mpq_libmpq04.h
index c6fe36a8221..b9b332f95b0 100644
--- a/src/tools/map_extractor/mpq_libmpq04.h
+++ b/src/tools/map_extractor/mpq_libmpq04.h
@@ -27,8 +27,6 @@
#include <iostream>
#include <deque>
-using namespace std;
-
class MPQArchive
{
@@ -39,7 +37,7 @@ public:
~MPQArchive() { close(); }
void close();
- void GetFileListTo(vector<string>& filelist) {
+ void GetFileListTo(std::vector<std::string>& filelist) {
uint32_t filenum;
if(libmpq__file_number(mpq_a, "(listfile)", &filenum)) return;
libmpq__off_t size, transferred;
@@ -58,7 +56,7 @@ public:
while ((token != NULL) && (counter < size)) {
//cout << token << endl;
token[strlen(token) - 1] = 0;
- string s = token;
+ std::string s = token;
filelist.push_back(s);
counter += strlen(token) + 2;
token = strtok(NULL, seps);
diff --git a/src/tools/mmaps_generator/IntermediateValues.h b/src/tools/mmaps_generator/IntermediateValues.h
index 95a651a2df8..580e9e43139 100644
--- a/src/tools/mmaps_generator/IntermediateValues.h
+++ b/src/tools/mmaps_generator/IntermediateValues.h
@@ -22,7 +22,6 @@
#include "PathCommon.h"
#include "TerrainBuilder.h"
#include "Recast.h"
-#include "DetourNavMesh.h"
namespace MMAP
{
diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp
index 69ca5297024..0c41be65cf7 100644
--- a/src/tools/mmaps_generator/MapBuilder.cpp
+++ b/src/tools/mmaps_generator/MapBuilder.cpp
@@ -15,17 +15,15 @@
* 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 <limits.h>
#include "PathCommon.h"
#include "MapBuilder.h"
-
#include "MapTree.h"
-#include "ModelInstance.h"
-
#include "DetourNavMeshBuilder.h"
#include "DetourNavMesh.h"
-#include "DetourCommon.h"
+#include "IntermediateValues.h"
+
+#include <limits.h>
#define MMAP_MAGIC 0x4d4d4150 // 'MMAP'
#define MMAP_VERSION 5
@@ -164,7 +162,7 @@ namespace MMAP
{
while (1)
{
- uint32 mapId;
+ uint32 mapId = 0;
_queue.WaitAndPop(mapId);
@@ -215,12 +213,14 @@ namespace MMAP
}
/**************************************************************************/
- void MapBuilder::getGridBounds(uint32 mapID, uint32 &minX, uint32 &minY, uint32 &maxX, uint32 &maxY)
+ void MapBuilder::getGridBounds(uint32 mapID, uint32 &minX, uint32 &minY, uint32 &maxX, uint32 &maxY) const
{
- maxX = INT_MAX;
- maxY = INT_MAX;
- minX = INT_MIN;
- minY = INT_MIN;
+ // min and max are initialized to invalid values so the caller iterating the [min, max] range
+ // will never enter the loop unless valid min/max values are found
+ maxX = 0;
+ maxY = 0;
+ minX = std::numeric_limits<uint32>::max();
+ minY = std::numeric_limits<uint32>::max();
float bmin[3] = { 0, 0, 0 };
float bmax[3] = { 0, 0, 0 };
diff --git a/src/tools/mmaps_generator/MapBuilder.h b/src/tools/mmaps_generator/MapBuilder.h
index ced03d1dde8..432a0ee7489 100644
--- a/src/tools/mmaps_generator/MapBuilder.h
+++ b/src/tools/mmaps_generator/MapBuilder.h
@@ -19,20 +19,18 @@
#ifndef _MAP_BUILDER_H
#define _MAP_BUILDER_H
-#include <vector>
-#include <set>
-#include <map>
-#include <list>
-#include <atomic>
-#include <thread>
-
#include "TerrainBuilder.h"
-#include "IntermediateValues.h"
#include "Recast.h"
#include "DetourNavMesh.h"
#include "ProducerConsumerQueue.h"
+#include <vector>
+#include <set>
+#include <list>
+#include <atomic>
+#include <thread>
+
using namespace VMAP;
namespace MMAP
@@ -120,7 +118,7 @@ namespace MMAP
void getTileBounds(uint32 tileX, uint32 tileY,
float* verts, int vertCount,
float* bmin, float* bmax);
- void getGridBounds(uint32 mapID, uint32 &minX, uint32 &minY, uint32 &maxX, uint32 &maxY);
+ void getGridBounds(uint32 mapID, uint32 &minX, uint32 &minY, uint32 &maxX, uint32 &maxY) const;
bool shouldSkipMap(uint32 mapID);
bool isTransportMap(uint32 mapID);
diff --git a/src/tools/mmaps_generator/PathCommon.h b/src/tools/mmaps_generator/PathCommon.h
index 9451e9d03ba..aa9591fba22 100644
--- a/src/tools/mmaps_generator/PathCommon.h
+++ b/src/tools/mmaps_generator/PathCommon.h
@@ -19,11 +19,10 @@
#ifndef _MMAP_COMMON_H
#define _MMAP_COMMON_H
-#include <string>
-#include <vector>
-
#include "Common.h"
+#include <vector>
+
#ifndef _WIN32
#include <stddef.h>
#include <dirent.h>
diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp
index 9043627994b..e525f24fced 100644
--- a/src/tools/mmaps_generator/TerrainBuilder.cpp
+++ b/src/tools/mmaps_generator/TerrainBuilder.cpp
@@ -764,12 +764,12 @@ namespace MMAP
}
uint32 liqOffset = meshData.liquidVerts.size() / 3;
- for (uint32 i = 0; i < liqVerts.size(); ++i)
- meshData.liquidVerts.append(liqVerts[i].y, liqVerts[i].z, liqVerts[i].x);
+ for (uint32 j = 0; j < liqVerts.size(); ++j)
+ meshData.liquidVerts.append(liqVerts[j].y, liqVerts[j].z, liqVerts[j].x);
- for (uint32 i = 0; i < liqTris.size() / 3; ++i)
+ for (uint32 j = 0; j < liqTris.size() / 3; ++j)
{
- meshData.liquidTris.append(liqTris[i*3+1] + liqOffset, liqTris[i*3+2] + liqOffset, liqTris[i*3] + liqOffset);
+ meshData.liquidTris.append(liqTris[j*3+1] + liqOffset, liqTris[j*3+2] + liqOffset, liqTris[j*3] + liqOffset);
meshData.liquidType.append(type);
}
}
diff --git a/src/tools/mmaps_generator/TerrainBuilder.h b/src/tools/mmaps_generator/TerrainBuilder.h
index 6c66ae45f46..f305bf0bd48 100644
--- a/src/tools/mmaps_generator/TerrainBuilder.h
+++ b/src/tools/mmaps_generator/TerrainBuilder.h
@@ -81,11 +81,13 @@ namespace MMAP
TerrainBuilder(bool skipLiquid);
~TerrainBuilder();
+ TerrainBuilder(const TerrainBuilder &tb) = delete;
+
void loadMap(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData);
bool loadVMap(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData);
void loadOffMeshConnections(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData, const char* offMeshFilePath);
- bool usesLiquids() { return !m_skipLiquid; }
+ bool usesLiquids() const { return !m_skipLiquid; }
// vert and triangle methods
static void transform(std::vector<G3D::Vector3> &original, std::vector<G3D::Vector3> &transformed,
@@ -104,9 +106,6 @@ namespace MMAP
/// Controls whether liquids are loaded
bool m_skipLiquid;
- /// Load the map terrain from file
- bool loadHeightMap(uint32 mapID, uint32 tileX, uint32 tileY, G3D::Array<float> &vertices, G3D::Array<int> &triangles, Spot portion);
-
/// Get the vector coordinate for a specific position
void getHeightCoord(int index, Grid grid, float xOffset, float yOffset, float* coord, float* v);
@@ -121,10 +120,6 @@ namespace MMAP
/// Get the liquid type for a specific position
uint8 getLiquidType(int square, const uint8 liquid_type[16][16]);
-
- // hide parameterless and copy constructor
- TerrainBuilder();
- TerrainBuilder(const TerrainBuilder &tb);
};
}
diff --git a/src/tools/mmaps_generator/VMapExtensions.cpp b/src/tools/mmaps_generator/VMapExtensions.cpp
deleted file mode 100644
index 63c8e524542..00000000000
--- a/src/tools/mmaps_generator/VMapExtensions.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2005-2011 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/>.
- */
-
-#include <vector>
-#include "MapTree.h"
-#include "VMapManager2.h"
-#include "WorldModel.h"
-#include "ModelInstance.h"
-
-namespace VMAP
-{
- // Need direct access to encapsulated VMAP data, so we add functions for MMAP generator
- // maybe add MapBuilder as friend to all of the below classes would be better?
-
- // declared in src/shared/vmap/MapTree.h
- void StaticMapTree::getModelInstances(ModelInstance* &models, uint32 &count)
- {
- models = iTreeValues;
- count = iNTreeValues;
- }
-
- // declared in src/shared/vmap/VMapManager2.h
- void VMapManager2::getInstanceMapTree(InstanceTreeMap &instanceMapTree)
- {
- instanceMapTree = iInstanceMapTrees;
- }
-
- // declared in src/shared/vmap/WorldModel.h
- void WorldModel::getGroupModels(std::vector<GroupModel> &groupModels)
- {
- groupModels = this->groupModels;
- }
-
- // declared in src/shared/vmap/WorldModel.h
- void GroupModel::getMeshData(std::vector<G3D::Vector3> &vertices, std::vector<MeshTriangle> &triangles, WmoLiquid* &liquid)
- {
- vertices = this->vertices;
- triangles = this->triangles;
- liquid = iLiquid;
- }
-
- // declared in src/shared/vmap/ModelInstance.h
- WorldModel* ModelInstance::getWorldModel()
- {
- return iModel;
- }
-
- // declared in src/shared/vmap/WorldModel.h
- void WmoLiquid::getPosInfo(uint32 &tilesX, uint32 &tilesY, G3D::Vector3 &corner) const
- {
- tilesX = iTilesX;
- tilesY = iTilesY;
- corner = iCorner;
- }
-}
diff --git a/src/tools/vmap4_extractor/adtfile.cpp b/src/tools/vmap4_extractor/adtfile.cpp
index 557511f6d1e..3a8b3495655 100644
--- a/src/tools/vmap4_extractor/adtfile.cpp
+++ b/src/tools/vmap4_extractor/adtfile.cpp
@@ -86,11 +86,11 @@ bool ADTFile::init(uint32 map_num, uint32 tileX, uint32 tileY)
uint32 size;
- string xMap;
- string yMap;
+ std::string xMap;
+ std::string yMap;
Adtfilename.erase(Adtfilename.find(".adt"),4);
- string TempMapNumber;
+ std::string TempMapNumber;
TempMapNumber = Adtfilename.substr(Adtfilename.length()-6,6);
xMap = TempMapNumber.substr(TempMapNumber.find("_")+1,(TempMapNumber.find_last_of("_")-1) - (TempMapNumber.find("_")));
yMap = TempMapNumber.substr(TempMapNumber.find_last_of("_")+1,(TempMapNumber.length()) - (TempMapNumber.find_last_of("_")));
@@ -134,7 +134,7 @@ bool ADTFile::init(uint32 map_num, uint32 tileX, uint32 tileY)
ADT.read(buf, size);
char *p=buf;
int t=0;
- ModelInstansName = new string[size];
+ ModelInstansName = new std::string[size];
while (p<buf+size)
{
fixnamen(p,strlen(p));
@@ -143,7 +143,7 @@ bool ADTFile::init(uint32 map_num, uint32 tileX, uint32 tileY)
ModelInstansName[t++] = s;
- string path(p);
+ std::string path(p);
ExtractSingleModel(path);
p = p+strlen(p)+1;
diff --git a/src/tools/vmap4_extractor/mpq_libmpq04.h b/src/tools/vmap4_extractor/mpq_libmpq04.h
index 6196285627d..4c8b4d376ca 100644
--- a/src/tools/vmap4_extractor/mpq_libmpq04.h
+++ b/src/tools/vmap4_extractor/mpq_libmpq04.h
@@ -21,14 +21,12 @@
#include "loadlib/loadlib.h"
#include "libmpq/mpq.h"
+
#include <string.h>
-#include <ctype.h>
+#include <string>
#include <vector>
-#include <iostream>
#include <deque>
-using namespace std;
-
class MPQArchive
{
@@ -38,7 +36,7 @@ public:
MPQArchive(const char* filename);
~MPQArchive() { close(); }
- void GetFileListTo(vector<string>& filelist) {
+ void GetFileListTo(std::vector<std::string>& filelist) {
uint32_t filenum;
if(libmpq__file_number(mpq_a, "(listfile)", &filenum)) return;
libmpq__off_t size, transferred;
@@ -57,7 +55,7 @@ public:
while ((token != NULL) && (counter < size)) {
//cout << token << endl;
token[strlen(token) - 1] = 0;
- string s = token;
+ std::string s = token;
filelist.push_back(s);
counter += strlen(token) + 2;
token = strtok(NULL, seps);
@@ -78,9 +76,8 @@ class MPQFile
char *buffer;
libmpq__off_t pointer,size;
- // disable copying
- MPQFile(const MPQFile& /*f*/) {}
- void operator=(const MPQFile& /*f*/) {}
+ MPQFile(const MPQFile& /*f*/) = delete;
+ void operator=(const MPQFile& /*f*/) = delete;
public:
MPQFile(const char* filename); // filenames are not case sensitive
diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp
index 7a12897563e..78d6e86358f 100644
--- a/src/tools/vmap4_extractor/vmapexport.cpp
+++ b/src/tools/vmap4_extractor/vmapexport.cpp
@@ -17,14 +17,15 @@
*/
#define _CRT_SECURE_NO_DEPRECATE
-#include <cstdio>
-#include <iostream>
-#include <vector>
-#include <list>
-#include <errno.h>
+
+#include "adtfile.h"
+#include "wdtfile.h"
+#include "dbcfile.h"
+#include "wmo.h"
+#include "mpq_libmpq04.h"
+#include "vmapexport.h"
#ifdef WIN32
- #include <Windows.h>
#include <sys/stat.h>
#include <direct.h>
#define mkdir _mkdir
@@ -32,23 +33,14 @@
#include <sys/stat.h>
#endif
+#include <cstdio>
+#include <iostream>
+#include <vector>
+#include <errno.h>
+
#undef min
#undef max
-//#pragma warning(disable : 4505)
-//#pragma comment(lib, "Winmm.lib")
-
-#include <map>
-
-//From Extractor
-#include "adtfile.h"
-#include "wdtfile.h"
-#include "dbcfile.h"
-#include "wmo.h"
-#include "mpq_libmpq04.h"
-
-#include "vmapexport.h"
-
//------------------------------------------------------------------------------
// Defines
@@ -129,12 +121,12 @@ bool ExtractWmo()
for (ArchiveSet::const_iterator ar_itr = gOpenArchives.begin(); ar_itr != gOpenArchives.end() && success; ++ar_itr)
{
- vector<string> filelist;
+ std::vector<std::string> filelist;
(*ar_itr)->GetFileListTo(filelist);
- for (vector<string>::iterator fname = filelist.begin(); fname != filelist.end() && success; ++fname)
+ for (std::vector<std::string>::iterator fname = filelist.begin(); fname != filelist.end() && success; ++fname)
{
- if (fname->find(".wmo") != string::npos)
+ if (fname->find(".wmo") != std::string::npos)
success = ExtractSingleWmo(*fname);
}
}
@@ -203,7 +195,7 @@ bool ExtractSingleWmo(std::string& fname)
sprintf(groupFileName, "%s_%03u.wmo", temp, i);
//printf("Trying to open groupfile %s\n",groupFileName);
- string s = groupFileName;
+ std::string s = groupFileName;
WMOGroup fgroup(s);
if(!fgroup.open())
{
@@ -305,7 +297,7 @@ bool fillArchiveNameVector(std::vector<std::string>& pArchiveNames)
printf("\nGame path: %s\n", input_path);
char path[512];
- string in_path(input_path);
+ std::string in_path(input_path);
std::vector<std::string> locales, searchLocales;
searchLocales.push_back("enGB");
@@ -345,10 +337,10 @@ bool fillArchiveNameVector(std::vector<std::string>& pArchiveNames)
}
// open expansion and common files
- pArchiveNames.push_back(input_path + string("common.MPQ"));
- pArchiveNames.push_back(input_path + string("common-2.MPQ"));
- pArchiveNames.push_back(input_path + string("expansion.MPQ"));
- pArchiveNames.push_back(input_path + string("lichking.MPQ"));
+ pArchiveNames.push_back(input_path + std::string("common.MPQ"));
+ pArchiveNames.push_back(input_path + std::string("common-2.MPQ"));
+ pArchiveNames.push_back(input_path + std::string("expansion.MPQ"));
+ pArchiveNames.push_back(input_path + std::string("lichking.MPQ"));
// now, scan for the patch levels in the core dir
printf("Scanning patch levels from data directory.\n");
diff --git a/src/tools/vmap4_extractor/wdtfile.cpp b/src/tools/vmap4_extractor/wdtfile.cpp
index 877f49ce371..4e0b7b97705 100644
--- a/src/tools/vmap4_extractor/wdtfile.cpp
+++ b/src/tools/vmap4_extractor/wdtfile.cpp
@@ -19,6 +19,7 @@
#include "vmapexport.h"
#include "wdtfile.h"
#include "adtfile.h"
+
#include <cstdio>
char * wdtGetPlainName(char * FileName)
@@ -30,7 +31,7 @@ char * wdtGetPlainName(char * FileName)
return FileName;
}
-WDTFile::WDTFile(char* file_name, char* file_name1) : WDT(file_name), gWmoInstansName(NULL), gnWMO(0)
+WDTFile::WDTFile(char* file_name, char* file_name1) : gWmoInstansName(NULL), gnWMO(0), WDT(file_name)
{
filename.append(file_name1,strlen(file_name1));
}
@@ -77,7 +78,7 @@ bool WDTFile::init(char* /*map_id*/, unsigned int mapID)
WDT.read(buf, size);
char *p=buf;
int q = 0;
- gWmoInstansName = new string[size];
+ gWmoInstansName = new std::string[size];
while (p < buf + size)
{
char* s=wdtGetPlainName(p);
diff --git a/src/tools/vmap4_extractor/wdtfile.h b/src/tools/vmap4_extractor/wdtfile.h
index 22702133b95..81e84b36d1e 100644
--- a/src/tools/vmap4_extractor/wdtfile.h
+++ b/src/tools/vmap4_extractor/wdtfile.h
@@ -20,26 +20,25 @@
#define WDTFILE_H
#include "mpq_libmpq04.h"
-#include "wmo.h"
#include <string>
-#include "stdlib.h"
class ADTFile;
class WDTFile
{
-private:
- MPQFile WDT;
- string filename;
public:
WDTFile(char* file_name, char* file_name1);
~WDTFile(void);
+
bool init(char* map_id, unsigned int mapID);
+ ADTFile* GetMap(int x, int z);
- string* gWmoInstansName;
+ std::string* gWmoInstansName;
int gnWMO;
- ADTFile* GetMap(int x, int z);
+private:
+ MPQFile WDT;
+ std::string filename;
};
#endif
diff --git a/src/tools/vmap4_extractor/wmo.cpp b/src/tools/vmap4_extractor/wmo.cpp
index f6f59bbc475..80dfbb97c5a 100644
--- a/src/tools/vmap4_extractor/wmo.cpp
+++ b/src/tools/vmap4_extractor/wmo.cpp
@@ -19,16 +19,14 @@
#include "vmapexport.h"
#include "wmo.h"
#include "vec3d.h"
+#include "mpq_libmpq04.h"
+
#include <cstdio>
#include <cstdlib>
#include <cassert>
-#include <map>
-#include <fstream>
#undef min
#undef max
-#include "mpq_libmpq04.h"
-using namespace std;
extern uint16 *LiqType;
WMORoot::WMORoot(std::string &filename)