aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml8
-rw-r--r--CONTRIBUTING.md11
-rw-r--r--README.md14
-rw-r--r--cmake/compiler/msvc/settings.cmake2
-rw-r--r--cmake/macros/ConfigureBoost.cmake2
-rw-r--r--contrib/check_updates.sh12
-rw-r--r--dep/g3dlite/G3D-v9.0 hotfix5.diff28
-rw-r--r--dep/g3dlite/Readme.txt1
-rw-r--r--dep/g3dlite/include/G3D/Quat.h10
-rw-r--r--doc/UnixInstall.txt17
-rw-r--r--sql/base/characters_database.sql21
-rw-r--r--sql/updates/characters/2015_10_12_00_characters.sql17
-rw-r--r--sql/updates/characters/2015_10_28_00_characters.sql6
-rw-r--r--sql/updates/characters/2015_10_29_00_characters_335.sql7
-rw-r--r--sql/updates/world/2015_10_10_00_world.sql9
-rw-r--r--sql/updates/world/2015_10_10_01_world.sql7
-rw-r--r--sql/updates/world/2015_10_10_02_world.sql12
-rw-r--r--sql/updates/world/2015_10_10_03_world.sql2
-rw-r--r--sql/updates/world/2015_10_10_04_world.sql2
-rw-r--r--sql/updates/world/2015_10_10_05_world.sql4
-rw-r--r--sql/updates/world/2015_10_11_00_world.sql2
-rw-r--r--sql/updates/world/2015_10_11_01_world.sql96
-rw-r--r--sql/updates/world/2015_10_11_02_world.sql20
-rw-r--r--sql/updates/world/2015_10_11_03_world.sql786
-rw-r--r--sql/updates/world/2015_10_11_04_world.sql2
-rw-r--r--sql/updates/world/2015_10_12_00_world.sql16
-rw-r--r--sql/updates/world/2015_10_13_00_world_335.sql12
-rw-r--r--sql/updates/world/2015_10_14_00_world.sql990
-rw-r--r--sql/updates/world/2015_10_14_01_world.sql34
-rw-r--r--sql/updates/world/2015_10_14_02_world.sql5
-rw-r--r--sql/updates/world/2015_10_14_03_world.sql7
-rw-r--r--sql/updates/world/2015_10_14_04_world.sql778
-rw-r--r--sql/updates/world/2015_10_14_05_world.sql2
-rw-r--r--sql/updates/world/2015_10_14_06_world.sql8
-rw-r--r--sql/updates/world/2015_10_14_07_world.sql1839
-rw-r--r--sql/updates/world/2015_10_16_00_world.sql24
-rw-r--r--sql/updates/world/2015_10_16_01_world.sql21
-rw-r--r--sql/updates/world/2015_10_16_02_world.sql119
-rw-r--r--sql/updates/world/2015_10_17_00_world.sql2
-rw-r--r--sql/updates/world/2015_10_17_01_world.sql1
-rw-r--r--sql/updates/world/2015_10_17_02_world.sql15
-rw-r--r--sql/updates/world/2015_10_20_00_world.sql12
-rw-r--r--sql/updates/world/2015_10_20_01_world.sql5
-rw-r--r--sql/updates/world/2015_10_20_02_world.sql2
-rw-r--r--sql/updates/world/2015_10_20_03_world.sql6
-rw-r--r--sql/updates/world/2015_10_21_00_world.sql265
-rw-r--r--sql/updates/world/2015_10_21_01_world.sql11
-rw-r--r--sql/updates/world/2015_10_22_00_world.sql14
-rw-r--r--sql/updates/world/2015_10_22_01_world.sql1006
-rw-r--r--sql/updates/world/2015_10_23_00_world.sql28
-rw-r--r--sql/updates/world/2015_10_23_01_world.sql32
-rw-r--r--sql/updates/world/2015_10_23_02_world.sql394
-rw-r--r--sql/updates/world/2015_10_23_03_world.sql859
-rw-r--r--sql/updates/world/2015_10_27_00_world335.sql31
-rw-r--r--sql/updates/world/2015_10_27_01_world.sql25
-rw-r--r--sql/updates/world/2015_10_27_02_world.sql648
-rw-r--r--sql/updates/world/2015_10_28_00_world.sql29
-rw-r--r--sql/updates/world/2015_10_29_00_world.sql10
-rw-r--r--sql/updates/world/2015_10_30_00_world.sql16
-rw-r--r--sql/updates/world/2015_10_30_01_world_335.sql3
-rw-r--r--sql/updates/world/2015_10_30_02_world.sql8
-rw-r--r--sql/updates/world/2015_10_30_03_world.sql3
-rw-r--r--sql/updates/world/2015_10_31_00_world.sql7
-rw-r--r--sql/updates/world/2015_10_31_01_world.sql8
-rw-r--r--sql/updates/world/2015_10_31_02_world.sql2
-rw-r--r--sql/updates/world/2015_10_31_03_world_2015_08_01_01.sql43
-rw-r--r--sql/updates/world/2015_11_01_00_world.sql127
-rw-r--r--sql/updates/world/2015_11_01_01_world.sql779
-rw-r--r--sql/updates/world/2015_11_01_02_world.sql94
-rw-r--r--src/common/CMakeLists.txt2
-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.h26
-rw-r--r--src/common/Debugging/WheatyExceptionReport.cpp72
-rw-r--r--src/common/Debugging/WheatyExceptionReport.h4
-rw-r--r--src/server/database/Database/Field.h36
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp18
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.h3
-rw-r--r--src/server/database/Database/Implementation/LoginDatabase.cpp11
-rw-r--r--src/server/database/Database/Implementation/LoginDatabase.h3
-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/UnitAI.cpp8
-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.cpp30
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp2
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp36
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp12
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.h4
-rw-r--r--src/server/game/Accounts/RBAC.cpp23
-rw-r--r--src/server/game/Accounts/RBAC.h4
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.cpp6
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.h14
-rw-r--r--src/server/game/Battlefield/Battlefield.h4
-rw-r--r--src/server/game/Battlegrounds/ArenaTeam.cpp2
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp88
-rw-r--r--src/server/game/Battlegrounds/Battleground.h9
-rw-r--r--src/server/game/Battlegrounds/BattlegroundQueue.cpp45
-rw-r--r--src/server/game/Battlegrounds/BattlegroundQueue.h7
-rw-r--r--src/server/game/Calendar/CalendarMgr.cpp6
-rw-r--r--src/server/game/Calendar/CalendarMgr.h10
-rw-r--r--src/server/game/Chat/Chat.cpp90
-rw-r--r--src/server/game/Chat/Chat.h29
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp292
-rw-r--r--src/server/game/Conditions/ConditionMgr.h87
-rw-r--r--src/server/game/DataStores/DBCStores.cpp62
-rw-r--r--src/server/game/DataStores/DBCStores.h4
-rw-r--r--src/server/game/DataStores/DBCStructure.h23
-rw-r--r--src/server/game/DataStores/DBCfmt.h4
-rw-r--r--src/server/game/Entities/Corpse/Corpse.cpp33
-rw-r--r--src/server/game/Entities/Corpse/Corpse.h13
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp44
-rw-r--r--src/server/game/Entities/Creature/Creature.h31
-rw-r--r--src/server/game/Entities/Creature/CreatureGroups.cpp18
-rw-r--r--src/server/game/Entities/Creature/CreatureGroups.h4
-rw-r--r--src/server/game/Entities/DynamicObject/DynamicObject.cpp2
-rw-r--r--src/server/game/Entities/DynamicObject/DynamicObject.h2
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp6
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h22
-rw-r--r--src/server/game/Entities/Item/Container/Bag.cpp4
-rw-r--r--src/server/game/Entities/Item/Container/Bag.h4
-rw-r--r--src/server/game/Entities/Item/Item.cpp20
-rw-r--r--src/server/game/Entities/Item/Item.h12
-rw-r--r--src/server/game/Entities/Object/Object.cpp4
-rw-r--r--src/server/game/Entities/Object/Object.h4
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.h19
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp12
-rw-r--r--src/server/game/Entities/Pet/Pet.h4
-rw-r--r--src/server/game/Entities/Player/Player.cpp240
-rw-r--r--src/server/game/Entities/Player/Player.h21
-rw-r--r--src/server/game/Entities/Player/SocialMgr.cpp20
-rw-r--r--src/server/game/Entities/Player/SocialMgr.h31
-rw-r--r--src/server/game/Entities/Transport/Transport.cpp6
-rw-r--r--src/server/game/Entities/Transport/Transport.h8
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp32
-rw-r--r--src/server/game/Events/GameEventMgr.cpp16
-rw-r--r--src/server/game/Events/GameEventMgr.h11
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp109
-rw-r--r--src/server/game/Globals/ObjectMgr.h50
-rw-r--r--src/server/game/Grids/ObjectGridLoader.cpp11
-rw-r--r--src/server/game/Grids/ObjectGridLoader.h1
-rw-r--r--src/server/game/Groups/Group.cpp6
-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.cpp16
-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/AuctionHouseHandler.cpp4
-rw-r--r--src/server/game/Handlers/BattleGroundHandler.cpp10
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp43
-rw-r--r--src/server/game/Handlers/DuelHandler.cpp3
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp3
-rw-r--r--src/server/game/Handlers/PetHandler.cpp2
-rw-r--r--src/server/game/Handlers/PetitionsHandler.cpp10
-rw-r--r--src/server/game/Handlers/QueryHandler.cpp18
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp3
-rw-r--r--src/server/game/Instances/InstanceScript.cpp22
-rw-r--r--src/server/game/Instances/InstanceScript.h1
-rw-r--r--src/server/game/Loot/LootMgr.cpp10
-rw-r--r--src/server/game/Loot/LootMgr.h8
-rw-r--r--src/server/game/Mails/Mail.cpp4
-rw-r--r--src/server/game/Mails/Mail.h31
-rw-r--r--src/server/game/Maps/Map.cpp86
-rw-r--r--src/server/game/Maps/Map.h25
-rw-r--r--src/server/game/Maps/TransportMgr.cpp4
-rw-r--r--src/server/game/Maps/TransportMgr.h3
-rw-r--r--src/server/game/Miscellaneous/Formulas.h6
-rw-r--r--src/server/game/Miscellaneous/Language.h3
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvP.cpp8
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvP.h18
-rw-r--r--src/server/game/Pools/PoolMgr.cpp10
-rw-r--r--src/server/game/Pools/PoolMgr.h10
-rw-r--r--src/server/game/Scripting/MapScripts.cpp4
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp2
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp16
-rw-r--r--src/server/game/Scripting/ScriptMgr.h16
-rw-r--r--src/server/game/Server/WorldSession.cpp117
-rw-r--r--src/server/game/Server/WorldSession.h17
-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.cpp17
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp6
-rw-r--r--src/server/game/Spells/Spell.cpp32
-rw-r--r--src/server/game/Spells/Spell.h20
-rw-r--r--src/server/game/Spells/SpellEffects.cpp32
-rw-r--r--src/server/game/Spells/SpellHistory.cpp276
-rw-r--r--src/server/game/Spells/SpellHistory.h33
-rw-r--r--src/server/game/Spells/SpellInfo.cpp8
-rw-r--r--src/server/game/Spells/SpellInfo.h6
-rw-r--r--src/server/game/Spells/SpellMgr.cpp10
-rw-r--r--src/server/game/Tools/PlayerDump.cpp273
-rw-r--r--src/server/game/Tools/PlayerDump.h26
-rw-r--r--src/server/game/World/World.cpp112
-rw-r--r--src/server/game/World/World.h34
-rw-r--r--src/server/scripts/Commands/cs_account.cpp45
-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.cpp24
-rw-r--r--src/server/scripts/Commands/cs_ban.cpp47
-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.cpp54
-rw-r--r--src/server/scripts/Commands/cs_cheat.cpp25
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp100
-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.cpp30
-rw-r--r--src/server/scripts/Commands/cs_gobject.cpp57
-rw-r--r--src/server/scripts/Commands/cs_group.cpp20
-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.cpp54
-rw-r--r--src/server/scripts/Commands/cs_learn.cpp36
-rw-r--r--src/server/scripts/Commands/cs_lfg.cpp18
-rw-r--r--src/server/scripts/Commands/cs_list.cpp28
-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.cpp127
-rw-r--r--src/server/scripts/Commands/cs_mmaps.cpp20
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp67
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp206
-rw-r--r--src/server/scripts/Commands/cs_pet.cpp14
-rw-r--r--src/server/scripts/Commands/cs_quest.cpp16
-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.cpp16
-rw-r--r--src/server/scripts/Commands/cs_server.cpp57
-rw-r--r--src/server/scripts/Commands/cs_tele.cpp18
-rw-r--r--src/server/scripts/Commands/cs_ticket.cpp45
-rw-r--r--src/server/scripts/Commands/cs_titles.cpp19
-rw-r--r--src/server/scripts/Commands/cs_wp.cpp26
-rw-r--r--src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp28
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp40
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp28
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp31
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp3
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp16
-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.cpp17
-rw-r--r--src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp2
-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.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp52
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp8
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp18
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp18
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h1
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp66
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp147
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp84
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_noth.cpp284
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp14
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp52
-rw-r--r--src/server/scripts/Northrend/isle_of_conquest.cpp4
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp10
-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.cpp3
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp3
-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/Spells/spell_generic.cpp2
-rw-r--r--src/server/scripts/World/action_ip_logger.cpp6
-rw-r--r--src/server/scripts/World/duel_reset.cpp57
-rw-r--r--src/server/scripts/World/npc_professions.cpp146
-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/worldserver.conf.dist28
-rw-r--r--src/tools/mmaps_generator/VMapExtensions.cpp70
289 files changed, 13215 insertions, 3644 deletions
diff --git a/.travis.yml b/.travis.yml
index 17d703a2f8e..23c378a1169 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,10 +9,13 @@ 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;'
@@ -23,6 +26,7 @@ install:
- sudo chmod +x contrib/check_updates.sh
script:
+ - $CXX --version
- mysql -uroot < sql/create/create_mysql.sql
- mysql -utrinity -ptrinity auth < sql/base/auth_database.sql
- ./contrib/check_updates.sh auth auth
@@ -32,4 +36,4 @@ script:
- 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/CONTRIBUTING.md b/CONTRIBUTING.md
index 01e941cc465..660825c9d89 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://collab.kpsn.org/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..0c9199e8c70 100644
--- a/README.md
+++ b/README.md
@@ -28,14 +28,9 @@ 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://collab.kpsn.org/display/tc/Requirements) for
+Windows, Linux and Mac OSX.
## Install
@@ -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 2810434b3b2..be8028da024 100644
--- a/cmake/compiler/msvc/settings.cmake
+++ b/cmake/compiler/msvc/settings.cmake
@@ -78,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..022d84246ef 100644
--- a/cmake/macros/ConfigureBoost.cmake
+++ b/cmake/macros/ConfigureBoost.cmake
@@ -29,7 +29,7 @@ if(WIN32)
add_definitions(-D_WIN32_WINNT=${ver})
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
index 97aa3dff7a8..017542eb807 100644
--- a/contrib/check_updates.sh
+++ b/contrib/check_updates.sh
@@ -22,7 +22,7 @@ do
updates=$((updates+1))
else
# The update isn't listed in the updates table of the given database.
- echo "- \"sql/updates/${file}\" is missing in table '${name}'.'updates'"
+ echo "- \"sql/updates/${name}/${file}\" is missing in the '${name}'.'updates' table."
error=1
fi
done
@@ -31,14 +31,14 @@ if [ ${error} -ne 0 ]
then
echo
echo "Fatal error:"
- echo " The Database Updater is broken for database '${name}"
- echo " due to applied update which are missing in the '${name}'.'updates' table."
+ 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 sql updates which were applied already to"
- echo " the 'updates' table of the '${name}' base dump ('sql/base/${name}_database.sql')."
+ 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, checked ${updates} updates."
+ echo " Everything is OK, finished checking ${updates} updates."
exit 0
fi
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/Readme.txt b/dep/g3dlite/Readme.txt
index 682a2404d96..bcd418d1d0e 100644
--- a/dep/g3dlite/Readme.txt
+++ b/dep/g3dlite/Readme.txt
@@ -14,3 +14,4 @@ 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
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/doc/UnixInstall.txt b/doc/UnixInstall.txt
index d01ca041fe9..7c27e431495 100644
--- a/doc/UnixInstall.txt
+++ b/doc/UnixInstall.txt
@@ -14,23 +14,8 @@ using Windows refer to http://www.trinitycore.info/How-to:Win
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.
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql
index 9599070a6a8..5f4258a3aeb 100644
--- a/sql/base/characters_database.sql
+++ b/sql/base/characters_database.sql
@@ -240,6 +240,20 @@ 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 */;
+
+--
-- Table structure for table `bugreport`
--
@@ -1140,6 +1154,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 */;
@@ -2287,6 +2303,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 */;
@@ -2413,6 +2431,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,
@@ -2510,7 +2529,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),('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);
+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','RELEASED','2015-10-29 17:05:43',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/updates/characters/2015_10_12_00_characters.sql b/sql/updates/characters/2015_10_12_00_characters.sql
new file mode 100644
index 00000000000..d7d4fb90f02
--- /dev/null
+++ b/sql/updates/characters/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/updates/characters/2015_10_28_00_characters.sql b/sql/updates/characters/2015_10_28_00_characters.sql
new file mode 100644
index 00000000000..9d353773a33
--- /dev/null
+++ b/sql/updates/characters/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/updates/characters/2015_10_29_00_characters_335.sql b/sql/updates/characters/2015_10_29_00_characters_335.sql
new file mode 100644
index 00000000000..94c9066c6ae
--- /dev/null
+++ b/sql/updates/characters/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/updates/world/2015_10_10_00_world.sql b/sql/updates/world/2015_10_10_00_world.sql
new file mode 100644
index 00000000000..c26303006b7
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_10_01_world.sql b/sql/updates/world/2015_10_10_01_world.sql
new file mode 100644
index 00000000000..4088a33b837
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_10_02_world.sql b/sql/updates/world/2015_10_10_02_world.sql
new file mode 100644
index 00000000000..068255d4e0c
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_10_03_world.sql b/sql/updates/world/2015_10_10_03_world.sql
new file mode 100644
index 00000000000..57dc5a2f29b
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_10_04_world.sql b/sql/updates/world/2015_10_10_04_world.sql
new file mode 100644
index 00000000000..b1bab808d96
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_10_05_world.sql b/sql/updates/world/2015_10_10_05_world.sql
new file mode 100644
index 00000000000..5a552b76e64
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_11_00_world.sql b/sql/updates/world/2015_10_11_00_world.sql
new file mode 100644
index 00000000000..dbad0438ed3
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_11_01_world.sql b/sql/updates/world/2015_10_11_01_world.sql
new file mode 100644
index 00000000000..678e03a31e3
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_11_02_world.sql b/sql/updates/world/2015_10_11_02_world.sql
new file mode 100644
index 00000000000..0a9d014d762
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_11_03_world.sql b/sql/updates/world/2015_10_11_03_world.sql
new file mode 100644
index 00000000000..16306b08235
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_11_04_world.sql b/sql/updates/world/2015_10_11_04_world.sql
new file mode 100644
index 00000000000..17664992c98
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_12_00_world.sql b/sql/updates/world/2015_10_12_00_world.sql
new file mode 100644
index 00000000000..d169863a95b
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_13_00_world_335.sql b/sql/updates/world/2015_10_13_00_world_335.sql
new file mode 100644
index 00000000000..c861f4d1771
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_14_00_world.sql b/sql/updates/world/2015_10_14_00_world.sql
new file mode 100644
index 00000000000..0679dbd96a3
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_14_01_world.sql b/sql/updates/world/2015_10_14_01_world.sql
new file mode 100644
index 00000000000..5b72a9af236
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_14_02_world.sql b/sql/updates/world/2015_10_14_02_world.sql
new file mode 100644
index 00000000000..44b00fceb04
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_14_03_world.sql b/sql/updates/world/2015_10_14_03_world.sql
new file mode 100644
index 00000000000..e91d340d043
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_14_04_world.sql b/sql/updates/world/2015_10_14_04_world.sql
new file mode 100644
index 00000000000..ec17ef1061a
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_14_05_world.sql b/sql/updates/world/2015_10_14_05_world.sql
new file mode 100644
index 00000000000..5029b807055
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_14_06_world.sql b/sql/updates/world/2015_10_14_06_world.sql
new file mode 100644
index 00000000000..b3b5b23ea30
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_14_07_world.sql b/sql/updates/world/2015_10_14_07_world.sql
new file mode 100644
index 00000000000..2124eec2a41
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_16_00_world.sql b/sql/updates/world/2015_10_16_00_world.sql
new file mode 100644
index 00000000000..fcc4e6bf429
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_16_01_world.sql b/sql/updates/world/2015_10_16_01_world.sql
new file mode 100644
index 00000000000..050d198e94f
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_16_02_world.sql b/sql/updates/world/2015_10_16_02_world.sql
new file mode 100644
index 00000000000..b80f4909a3b
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_17_00_world.sql b/sql/updates/world/2015_10_17_00_world.sql
new file mode 100644
index 00000000000..c519abb709c
--- /dev/null
+++ b/sql/updates/world/2015_10_17_00_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature` SET `spawnMask`=15 WHERE `id`=37230;
diff --git a/sql/updates/world/2015_10_17_01_world.sql b/sql/updates/world/2015_10_17_01_world.sql
new file mode 100644
index 00000000000..f6ddc034e20
--- /dev/null
+++ b/sql/updates/world/2015_10_17_01_world.sql
@@ -0,0 +1 @@
+DELETE FROM `trinity_string` WHERE `entry` = 11010;
diff --git a/sql/updates/world/2015_10_17_02_world.sql b/sql/updates/world/2015_10_17_02_world.sql
new file mode 100644
index 00000000000..1960d33f7d9
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_20_00_world.sql b/sql/updates/world/2015_10_20_00_world.sql
new file mode 100644
index 00000000000..ed787f90f68
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_20_01_world.sql b/sql/updates/world/2015_10_20_01_world.sql
new file mode 100644
index 00000000000..f2d3e950a90
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_20_02_world.sql b/sql/updates/world/2015_10_20_02_world.sql
new file mode 100644
index 00000000000..e2211a704ea
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_20_03_world.sql b/sql/updates/world/2015_10_20_03_world.sql
new file mode 100644
index 00000000000..23f7ba806c1
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_21_00_world.sql b/sql/updates/world/2015_10_21_00_world.sql
new file mode 100644
index 00000000000..d751a6e65bc
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_21_01_world.sql b/sql/updates/world/2015_10_21_01_world.sql
new file mode 100644
index 00000000000..dd5e289d2c5
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_22_00_world.sql b/sql/updates/world/2015_10_22_00_world.sql
new file mode 100644
index 00000000000..8075c4e1b20
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_22_01_world.sql b/sql/updates/world/2015_10_22_01_world.sql
new file mode 100644
index 00000000000..ee7db3024ae
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_23_00_world.sql b/sql/updates/world/2015_10_23_00_world.sql
new file mode 100644
index 00000000000..ed83c4897e7
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_23_01_world.sql b/sql/updates/world/2015_10_23_01_world.sql
new file mode 100644
index 00000000000..01d4dd4206d
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_23_02_world.sql b/sql/updates/world/2015_10_23_02_world.sql
new file mode 100644
index 00000000000..3227d9b2096
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_23_03_world.sql b/sql/updates/world/2015_10_23_03_world.sql
new file mode 100644
index 00000000000..c966be415f9
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_27_00_world335.sql b/sql/updates/world/2015_10_27_00_world335.sql
new file mode 100644
index 00000000000..36583239a4d
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_27_01_world.sql b/sql/updates/world/2015_10_27_01_world.sql
new file mode 100644
index 00000000000..4e3986e5ca3
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_27_02_world.sql b/sql/updates/world/2015_10_27_02_world.sql
new file mode 100644
index 00000000000..6df624989d1
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_28_00_world.sql b/sql/updates/world/2015_10_28_00_world.sql
new file mode 100644
index 00000000000..d414c3b7fc6
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_29_00_world.sql b/sql/updates/world/2015_10_29_00_world.sql
new file mode 100644
index 00000000000..dd80ebe8ec4
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_30_00_world.sql b/sql/updates/world/2015_10_30_00_world.sql
new file mode 100644
index 00000000000..84247a85973
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_30_01_world_335.sql b/sql/updates/world/2015_10_30_01_world_335.sql
new file mode 100644
index 00000000000..36565638949
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_30_02_world.sql b/sql/updates/world/2015_10_30_02_world.sql
new file mode 100644
index 00000000000..5d9407ef620
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_30_03_world.sql b/sql/updates/world/2015_10_30_03_world.sql
new file mode 100644
index 00000000000..3b419524c5e
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_31_00_world.sql b/sql/updates/world/2015_10_31_00_world.sql
new file mode 100644
index 00000000000..edae60f42d6
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_31_01_world.sql b/sql/updates/world/2015_10_31_01_world.sql
new file mode 100644
index 00000000000..b929d74becc
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_31_02_world.sql b/sql/updates/world/2015_10_31_02_world.sql
new file mode 100644
index 00000000000..6dfeba2116c
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_10_31_03_world_2015_08_01_01.sql b/sql/updates/world/2015_10_31_03_world_2015_08_01_01.sql
new file mode 100644
index 00000000000..776486929ff
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_11_01_00_world.sql b/sql/updates/world/2015_11_01_00_world.sql
new file mode 100644
index 00000000000..dabd7d27138
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_11_01_01_world.sql b/sql/updates/world/2015_11_01_01_world.sql
new file mode 100644
index 00000000000..e6fb63ec28c
--- /dev/null
+++ b/sql/updates/world/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/updates/world/2015_11_01_02_world.sql b/sql/updates/world/2015_11_01_02_world.sql
new file mode 100644
index 00000000000..40a7f50c769
--- /dev/null
+++ b/sql/updates/world/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/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/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 4c209f89ec8..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,14 +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"
@@ -116,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
@@ -156,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/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/server/database/Database/Field.h b/src/server/database/Database/Field.h
index 42a842e6283..72364f2c034 100644
--- a/src/server/database/Database/Field.h
+++ b/src/server/database/Database/Field.h
@@ -23,6 +23,36 @@
#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;
@@ -214,15 +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 %s.%s (%s.%s) at index %u. Using type: %s.",
+ 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));
}
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp
index 14e7571dd42..3e0d684a1fd 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 "
@@ -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);
@@ -498,7 +497,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 +577,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 +602,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 +610,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 c76c584a0a8..3382430d695 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.h
+++ b/src/server/database/Database/Implementation/CharacterDatabase.h
@@ -143,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,
@@ -531,6 +530,8 @@ enum CharacterDatabaseStatements
CHAR_UPD_QUEST_TRACK_COMPLETE_TIME,
CHAR_UPD_QUEST_TRACK_ABANDON_TIME,
+ CHAR_INS_DESERTER_TRACK,
+
MAX_CHARACTERDATABASE_STATEMENTS
};
diff --git a/src/server/database/Database/Implementation/LoginDatabase.cpp b/src/server/database/Database/Implementation/LoginDatabase.cpp
index 8f0b5067957..9b7bf285efc 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) AND ab.active, 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", 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 79b7a53cb6e..3b30105e670 100644
--- a/src/server/database/Database/Implementation/LoginDatabase.h
+++ b/src/server/database/Database/Implementation/LoginDatabase.h
@@ -32,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,
@@ -95,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,
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/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/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 d3e11733997..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;
@@ -128,14 +127,13 @@ 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
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
index 8e2a82dbfd3..7b145268d22 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -470,6 +470,7 @@ void BossAI::_Reset()
if (!me->IsAlive())
return;
+ me->SetCombatPulseDelay(0);
me->ResetLootMode();
events.Reset();
summons.DespawnAll();
@@ -500,6 +501,7 @@ void BossAI::_EnterCombat()
instance->SetBossState(_bossId, IN_PROGRESS);
}
+ me->SetCombatPulseDelay(5);
me->setActive(true);
DoZoneInCombat();
ScheduleTasks();
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index 46122697094..46cf934356d 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -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)
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index efee565e151..6a3e978e504 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);
- }
}
}
@@ -2322,10 +2317,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);
diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h
index cb338cd3584..96aa1f735fc 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.h
+++ b/src/server/game/AI/SmartScripts/SmartScript.h
@@ -175,7 +175,7 @@ class SmartScript
return 0;
}
- GameObject* FindGameObjectNear(WorldObject* searchObject, uint32 guid) const
+ GameObject* FindGameObjectNear(WorldObject* searchObject, ObjectGuid::LowType guid) const
{
auto bounds = searchObject->GetMap()->GetGameObjectBySpawnIdStore().equal_range(guid);
if (bounds.first == bounds.second)
@@ -184,7 +184,7 @@ class SmartScript
return bounds.first->second;
}
- Creature* FindCreatureNear(WorldObject* searchObject, uint32 guid) const
+ Creature* FindCreatureNear(WorldObject* searchObject, ObjectGuid::LowType guid) const
{
auto bounds = searchObject->GetMap()->GetCreatureBySpawnIdStore().equal_range(guid);
if (bounds.first == bounds.second)
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/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
index 1809e306a45..768def2ff4d 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
@@ -300,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);
@@ -372,7 +372,7 @@ void AuctionHouseMgr::AddAItem(Item* it)
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())
@@ -738,7 +738,7 @@ 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);
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h
index f05d8583329..45cdba361f3 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.h
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h
@@ -72,15 +72,15 @@ struct AuctionEntry
{
uint32 Id;
uint8 houseId;
- uint32 itemGUIDLow;
+ 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
@@ -93,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);
};
@@ -150,13 +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())
@@ -183,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/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/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp
index e75c07d8946..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);
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index ad8a7b9e729..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()
@@ -784,19 +793,20 @@ void Battleground::EndBattleground(uint32 winner)
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVPSTATS_PLAYER);
BattlegroundScoreMap::const_iterator score = PlayerScores.find(player->GetGUID().GetCounter());
- stmt->setUInt32(0, battlegroundId);
- stmt->setUInt32(1, player->GetGUID().GetCounter());
- 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());
+ 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);
}
@@ -1165,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
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/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
index 73c0f1c22a5..87e07e15191 100644
--- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
@@ -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,6 +1068,16 @@ bool BGQueueRemoveEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
BattlegroundQueue &bgQueue = sBattlegroundMgr->GetBattlegroundQueue(m_BgQueueTypeId);
if (bgQueue.IsPlayerInvited(m_PlayerGuid, m_BgInstanceGUID, m_RemoveTime))
{
+ // track if player leaves the BG by not clicking enter button
+ 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_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);
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/Calendar/CalendarMgr.cpp b/src/server/game/Calendar/CalendarMgr.cpp
index fd63dd04bf6..368ebecba84 100644
--- a/src/server/game/Calendar/CalendarMgr.cpp
+++ b/src/server/game/Calendar/CalendarMgr.cpp
@@ -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);
@@ -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 2f003a58a69..161aefdfc67 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);
@@ -264,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 = "";
@@ -277,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;
@@ -285,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;
@@ -301,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))
{
@@ -346,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());
@@ -367,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 = "";
@@ -379,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;
@@ -413,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());
@@ -519,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]))
@@ -539,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());
@@ -557,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]))
@@ -573,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;
@@ -582,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;
@@ -591,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]))
@@ -603,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;
@@ -910,7 +872,7 @@ 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;
@@ -1060,7 +1022,7 @@ 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);
@@ -1069,7 +1031,7 @@ ObjectGuid ChatHandler::extractGuidFromLink(char* text)
}
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);
diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h
index 72d80aba7e6..ff8757a891d 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(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
@@ -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
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index f7260326857..3675d43a3b4 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",
@@ -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())
{
@@ -445,7 +445,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 +607,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 +663,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 +798,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 true;
+}
+
+bool ConditionMgr::IsObjectMeetingNotGroupedConditions(ConditionSourceType sourceType, uint32 entry, WorldObject* target0, WorldObject* target1 /*= nullptr*/, WorldObject* target2 /*= nullptr*/) const
+{
+ 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())
+ {
+ 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 spellCond;
+ return true;
}
-ConditionList ConditionMgr::GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId)
+ConditionContainer const* ConditionMgr::GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId) const
{
- ConditionList cond;
- CreatureSpellConditionContainer::const_iterator itr = SpellClickEventConditionStore.find(creatureId);
+ 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())
{
- 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)
@@ -995,14 +1012,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 +1149,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 +1158,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 +1173,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 +1193,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 +1212,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 +1233,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 +1257,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 +1274,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 +1295,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 +1647,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 +2110,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..81fe379f0db 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;
@@ -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 e268b376b34..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)
{
@@ -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 092ef714145..dc4ad55d9c2 100644
--- a/src/server/game/DataStores/DBCStructure.h
+++ b/src/server/game/DataStores/DBCStructure.h
@@ -21,7 +21,6 @@
#include "Common.h"
#include "DBCEnums.h"
-#include "Define.h"
#include "Util.h"
// Structures using to access raw DBC data and required packing to portability
@@ -1405,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
@@ -1638,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
@@ -1737,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;
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/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp
index 360cfdf1ae3..ce4e94b8ea6 100644
--- a/src/server/game/Entities/Corpse/Corpse.cpp
+++ b/src/server/game/Entities/Corpse/Corpse.cpp
@@ -59,14 +59,13 @@ void Corpse::RemoveFromWorld()
WorldObject::RemoveFromWorld();
}
-bool Corpse::Create(uint32 guidlow, Map* map)
+bool Corpse::Create(ObjectGuid::LowType guidlow)
{
- SetMap(map);
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);
@@ -79,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());
SetObjectScale(1.0f);
SetGuidValue(CORPSE_FIELD_OWNER, owner->GetGUID());
- _gridCoord = Trinity::ComputeGridCoord(GetPositionX(), GetPositionY());
+ _cellCoord = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY());
return true;
}
@@ -123,20 +118,6 @@ void Corpse::SaveToDB()
CharacterDatabase.CommitTransaction(trans);
}
-void Corpse::DeleteBonesFromWorld()
-{
- ASSERT(GetType() == CORPSE_BONES);
- Corpse* corpse = ObjectAccessor::GetCorpse(*this, GetGUID());
-
- if (!corpse)
- {
- TC_LOG_ERROR("entities.player", "Bones %u not found in world.", GetGUID().GetCounter());
- return;
- }
-
- AddObjectToRemoveList();
-}
-
void Corpse::DeleteFromDB(SQLTransaction& trans)
{
DeleteFromDB(GetOwnerGUID(), trans);
@@ -149,13 +130,13 @@ void Corpse::DeleteFromDB(ObjectGuid const& ownerGuid, SQLTransaction& trans)
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
// 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[16].GetUInt32();
+ ObjectGuid::LowType ownerGuid = fields[16].GetUInt32();
float posX = fields[0].GetFloat();
float posY = fields[1].GetFloat();
float posZ = fields[2].GetFloat();
@@ -192,14 +173,14 @@ 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->GetCharacterNameData(GetOwnerGUID()))
+ if (!sWorld->GetCharacterInfo(GetOwnerGUID()))
return true;
if (m_type == CORPSE_BONES)
diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h
index eeb22a064ba..7f2608e4bf3 100644
--- a/src/server/game/Entities/Corpse/Corpse.h
+++ b/src/server/game/Entities/Corpse/Corpse.h
@@ -55,13 +55,12 @@ 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);
@@ -71,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;
@@ -83,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 7fe3628f893..6a994d61852 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -138,7 +138,7 @@ 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_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)
@@ -226,7 +226,7 @@ void Creature::SearchFormation()
if (IsSummon())
return;
- uint32 lowguid = GetSpawnId();
+ ObjectGuid::LowType lowguid = GetSpawnId();
if (!lowguid)
return;
@@ -539,10 +539,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;
}
@@ -741,7 +775,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);
@@ -1164,7 +1198,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)
@@ -1205,7 +1239,7 @@ bool Creature::CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const*
return true;
}
-bool Creature::LoadCreatureFromDB(uint32 spawnId, Map* map, bool addToMap)
+bool Creature::LoadCreatureFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap)
{
CreatureData const* data = sObjectMgr->GetCreatureData(spawnId);
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index 3e381063772..df83a2f9c0f 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 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(bool reload = false);
void SelectLevel();
void LoadEquipment(int8 id = 1, bool force = false);
- uint32 GetSpawnId() const { return m_spawnId; }
+ 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 spawnId, Map* map) { return LoadCreatureFromDB(spawnId, map, false); }
- bool LoadCreatureFromDB(uint32 spawnId, 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_spawnId; ///< 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 f29e896f050..2d353fa154e 100644
--- a/src/server/game/Entities/Creature/CreatureGroups.cpp
+++ b/src/server/game/Entities/Creature/CreatureGroups.cpp
@@ -30,27 +30,27 @@ 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->GetGUID().GetCounter(), 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);
}
}
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/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
index 714a0a35caf..3d92f9e18cf 100644
--- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp
+++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
@@ -79,7 +79,7 @@ void DynamicObject::RemoveFromWorld()
}
}
-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);
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 42ed4674a53..c1ec2294c3d 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -167,7 +167,7 @@ void GameObject::RemoveFromWorld()
}
}
-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);
@@ -815,7 +815,7 @@ void GameObject::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask)
WorldDatabase.CommitTransaction(trans);
}
-bool GameObject::LoadGameObjectFromDB(uint32 spawnId, Map* map, bool addToMap)
+bool GameObject::LoadGameObjectFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap)
{
GameObjectData const* data = sObjectMgr->GetGOData(spawnId);
@@ -1152,7 +1152,7 @@ void GameObject::SetGoArtKit(uint8 kit)
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)
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index b91f1b6eeee..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 GetSpawnId() const { return m_spawnId; }
+ 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 spawnId, Map* map) { return LoadGameObjectFromDB(spawnId, map, false); }
- bool LoadGameObjectFromDB(uint32 spawnId, 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)
@@ -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;
@@ -861,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;
@@ -870,7 +870,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
typedef std::map<uint32, ObjectGuid> ChairSlotAndUser;
ChairSlotAndUser ChairListSlots;
- uint32 m_spawnId; ///< 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 69a77dd9213..1d2fd9b2804 100644
--- a/src/server/game/Entities/Item/Container/Bag.cpp
+++ b/src/server/game/Entities/Item/Container/Bag.cpp
@@ -69,7 +69,7 @@ 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);
@@ -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 f5eb9972af5..9a6af376e6d 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -255,7 +255,7 @@ 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);
@@ -317,7 +317,7 @@ void Item::SaveToDB(SQLTransaction& trans)
if (!isInTransaction)
trans = CharacterDatabase.BeginTransaction();
- uint32 guid = GetGUID().GetCounter();
+ ObjectGuid::LowType guid = GetGUID().GetCounter();
switch (uState)
{
case ITEM_NEW:
@@ -398,7 +398,7 @@ 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);
@@ -480,7 +480,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);
@@ -497,7 +497,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);
@@ -1254,7 +1254,7 @@ void Item::ItemContainerSaveLootToDB()
if (loot.isLooted()) // no money and no loot
return;
- uint32 container_id = GetGUID().GetCounter();
+ ObjectGuid::LowType container_id = GetGUID().GetCounter();
SQLTransaction trans = CharacterDatabase.BeginTransaction();
loot.containerID = container_id; // Save this for when a LootItem is removed
@@ -1322,7 +1322,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 = GetGUID().GetCounter();
+ ObjectGuid::LowType container_id = GetGUID().GetCounter();
// Save this for later use
loot.containerID = container_id;
@@ -1398,7 +1398,7 @@ bool Item::ItemContainerLoadLootFromDB()
void Item::ItemContainerDeleteLootItemsFromDB()
{
// Deletes items associated with an openable item from the DB
- uint32 containerId = GetGUID().GetCounter();
+ ObjectGuid::LowType containerId = GetGUID().GetCounter();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEMCONTAINER_ITEMS);
stmt->setUInt32(0, containerId);
SQLTransaction trans = CharacterDatabase.BeginTransaction();
@@ -1409,7 +1409,7 @@ void Item::ItemContainerDeleteLootItemsFromDB()
void Item::ItemContainerDeleteLootItemFromDB(uint32 itemID)
{
// Deletes a single item associated with an openable item from the DB
- uint32 containerId = GetGUID().GetCounter();
+ ObjectGuid::LowType containerId = GetGUID().GetCounter();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEMCONTAINER_ITEM);
stmt->setUInt32(0, containerId);
stmt->setUInt32(1, itemID);
@@ -1421,7 +1421,7 @@ void Item::ItemContainerDeleteLootItemFromDB(uint32 itemID)
void Item::ItemContainerDeleteLootMoneyFromDB()
{
// Deletes the money loot associated with an openable item from the DB
- uint32 containerId = GetGUID().GetCounter();
+ ObjectGuid::LowType containerId = GetGUID().GetCounter();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEMCONTAINER_MONEY);
stmt->setUInt32(0, containerId);
SQLTransaction trans = CharacterDatabase.BeginTransaction();
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index ad74906b4c9..a268334b212 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();
@@ -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; }
@@ -362,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 21a65440a55..e4d9e61bca3 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -103,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();
@@ -1066,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;
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 43d1ecdeabd..c9e3d069218 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -204,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);
@@ -431,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;
diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h
index 705cc3eac3e..74fffe09796 100644
--- a/src/server/game/Entities/Object/ObjectGuid.h
+++ b/src/server/game/Entities/Object/ObjectGuid.h
@@ -21,10 +21,8 @@
#include "Common.h"
#include "ByteBuffer.h"
-
#include <type_traits>
#include <functional>
-#include <unordered_set>
enum TypeID
{
@@ -130,11 +128,6 @@ class ObjectGuid
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); }
@@ -154,14 +147,14 @@ 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; }
@@ -283,13 +276,13 @@ class ObjectGuidGeneratorBase
public:
ObjectGuidGeneratorBase(ObjectGuid::LowType start = 1) : _nextGuid(start) { }
- virtual void Set(uint32 val) { _nextGuid = val; }
+ virtual void Set(ObjectGuid::LowType val) { _nextGuid = val; }
virtual ObjectGuid::LowType Generate() = 0;
ObjectGuid::LowType GetNextAfterMaxUsed() const { return _nextGuid; }
protected:
static void HandleCounterOverflow(HighGuid high);
- uint64 _nextGuid;
+ ObjectGuid::LowType _nextGuid;
};
template<HighGuid high>
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index 57fc56af89c..0121194e327 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -98,7 +98,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
{
m_loading = true;
- uint32 ownerid = owner->GetGUID().GetCounter();
+ ObjectGuid::LowType ownerid = owner->GetGUID().GetCounter();
PreparedStatement* stmt;
PreparedQueryResult result;
@@ -174,7 +174,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
}
Map* map = owner->GetMap();
- uint32 guid = map->GenerateLowGuid<HighGuid::Pet>();
+ ObjectGuid::LowType guid = map->GenerateLowGuid<HighGuid::Pet>();
if (!Create(guid, map, owner->GetPhaseMask(), petEntry, petId))
return false;
@@ -415,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();
@@ -485,7 +485,7 @@ void Pet::SavePetToDB(PetSaveMode mode)
}
}
-void Pet::DeleteFromDB(uint32 guidlow)
+void Pet::DeleteFromDB(ObjectGuid::LowType guidlow)
{
SQLTransaction trans = CharacterDatabase.BeginTransaction();
@@ -807,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=map->GenerateLowGuid<HighGuid::Pet>();
+ ObjectGuid::LowType guid=map->GenerateLowGuid<HighGuid::Pet>();
uint32 petId = sObjectMgr->GeneratePetNumber();
if (!Create(guid, map, phaseMask, cinfo->Entry, petId))
return false;
@@ -1835,7 +1835,7 @@ 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);
diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h
index e47bf220195..85c1f83d4a7 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
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 1be3c2454b2..2f78280a409 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -504,7 +504,7 @@ inline void KillRewarder::_InitXP(Player* player)
// * otherwise, not in PvP;
// * not if killer is on vehicle.
if (_isBattleGround || (!_isPvP && !_killer->GetVehicle()))
- _xp = Trinity::XP::Gain(player, _victim);
+ _xp = Trinity::XP::Gain(player, _victim, _isBattleGround);
}
inline void KillRewarder::_RewardHonor(Player* player)
@@ -957,7 +957,7 @@ 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
@@ -1961,7 +1961,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();
@@ -3416,7 +3416,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;
@@ -3551,7 +3551,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)
@@ -3809,10 +3809,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);
@@ -3827,26 +3827,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);
}
}
@@ -3912,14 +3915,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);
@@ -4523,23 +4526,23 @@ 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;
}
- if (uint32 guildId = GetGuildIdFromDB(playerguid))
+ if (ObjectGuid::LowType guildId = GetGuildIdFromDB(playerguid))
if (Guild* guild = sGuildMgr->GetGuildById(guildId))
guild->DeleteMember(playerguid, false, false, true);
@@ -4617,7 +4620,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);
@@ -4664,7 +4667,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());
}
@@ -4862,7 +4865,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
if (updateRealmChars)
sWorld->UpdateRealmCharCount(accountId);
- sWorld->DeleteCharacterNameData(playerguid);
+ sWorld->DeleteCharacterInfo(playerguid);
}
/**
@@ -5164,12 +5167,13 @@ Corpse* 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
- GetMap()->AddCorpse(corpse);
return corpse;
}
@@ -6916,7 +6920,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();
@@ -7232,7 +7236,7 @@ void Player::ModifyArenaPoints(int32 value, SQLTransaction trans)
}
}
-uint32 Player::GetGuildIdFromDB(ObjectGuid guid)
+ObjectGuid::LowType Player::GetGuildIdFromDB(ObjectGuid guid)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_MEMBER);
stmt->setUInt32(0, guid.GetCounter());
@@ -7286,7 +7290,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);
@@ -7610,20 +7614,6 @@ void Player::DuelComplete(DuelCompleteType type)
duel->opponent->SetGuidValue(PLAYER_DUEL_ARBITER, ObjectGuid::Empty);
duel->opponent->SetUInt32Value(PLAYER_DUEL_TEAM, 0);
- if (sWorld->getBoolConfig(CONFIG_RESET_COOLDOWN_AFTER_DUEL) &&
- type != DUEL_INTERRUPTED)
- {
- if (!HasCoolDownBeforeDuel())
- RemoveArenaSpellCooldowns(true);
- else
- ChatHandler(GetSession()).PSendSysMessage(LANG_COOLDOWN_NOT_RESET_AFTER_DUEL);
-
- if (!duel->opponent->HasCoolDownBeforeDuel())
- duel->opponent->RemoveArenaSpellCooldowns(true);
- else
- ChatHandler(duel->opponent->GetSession()).PSendSysMessage(LANG_COOLDOWN_NOT_RESET_AFTER_DUEL);
- }
-
delete duel->opponent->duel;
duel->opponent->duel = NULL;
delete duel;
@@ -8111,7 +8101,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
@@ -8239,7 +8229,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
@@ -8368,7 +8358,7 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, uint8
_Spell const& spellData = proto->Spells[i];
// no spell
- if (!spellData.SpellId)
+ if (spellData.SpellId <= 0)
continue;
// wrong triggering type
@@ -15653,8 +15643,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)
{
@@ -15920,6 +15909,16 @@ 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);
+ if (m_seasonalquests.find(eventId) != m_seasonalquests.end())
+ return m_seasonalquests.find(eventId)->second.find(quest_id) != m_seasonalquests.find(eventId)->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();
@@ -15938,8 +15937,17 @@ 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);
+ if (m_seasonalquests.find(eventId) == m_seasonalquests.end() || m_seasonalquests.find(eventId)->second.find(quest_id) == m_seasonalquests.find(eventId)->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;
}
@@ -16066,8 +16074,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);
@@ -16094,8 +16101,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);
@@ -16895,7 +16901,7 @@ bool Player::HasPvPForcingQuest() const
/*** LOAD SYSTEM ***/
/*********************************************************/
-void Player::Initialize(uint32 guid)
+void Player::Initialize(ObjectGuid::LowType guid)
{
Object::_Create(guid, 0, HighGuid::Player);
}
@@ -17111,7 +17117,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
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)))
{
@@ -17218,7 +17224,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();
@@ -17447,7 +17453,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;
@@ -17474,6 +17480,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;
}
}
@@ -17970,8 +17977,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();
@@ -17982,7 +17989,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;
@@ -18030,7 +18037,7 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff)
{
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;
@@ -18040,7 +18047,7 @@ 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;
}
@@ -18092,7 +18099,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))
{
@@ -18230,7 +18237,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);
@@ -18822,9 +18829,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)
@@ -19004,15 +19013,12 @@ 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())
@@ -19021,12 +19027,12 @@ bool Player::CheckInstanceLoginValid()
else
{
// cannot be in normal instance without a group and more players than 1 in instance
- if (!GetGroup() && GetMap()->GetPlayersCountExceptGMs() > 1)
+ if (!GetGroup() && map->GetPlayersCountExceptGMs() > 1)
return false;
}
// 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);
}
bool Player::CheckInstanceCount(uint32 instanceId) const
@@ -19139,7 +19145,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());
@@ -19157,7 +19163,7 @@ 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()->GetGUID().GetCounter();
stmt->setUInt32(index++, transLowGUID);
@@ -19244,7 +19250,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());
@@ -19277,7 +19283,7 @@ 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()->GetGUID().GetCounter();
stmt->setUInt32(index++, transLowGUID);
@@ -19573,7 +19579,7 @@ void Player::_SaveInventory(SQLTransaction& trans)
if (m_itemUpdateQueue.empty())
return;
- uint32 lowGuid = GetGUID().GetCounter();
+ ObjectGuid::LowType lowGuid = GetGUID().GetCounter();
for (size_t i = 0; i < m_itemUpdateQueue.size(); ++i)
{
Item* item = m_itemUpdateQueue[i];
@@ -19581,14 +19587,14 @@ void Player::_SaveInventory(SQLTransaction& trans)
continue;
Bag* container = item->GetContainer();
- uint32 bag_guid = container ? container->GetGUID().GetCounter() : 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->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());
@@ -20255,7 +20261,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;
@@ -20676,8 +20682,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);
@@ -21529,8 +21534,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);
@@ -22045,6 +22049,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);
+ }
}
}
@@ -22699,7 +22713,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)
@@ -22707,7 +22721,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));
@@ -22981,9 +22995,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);
}
}
@@ -23334,16 +23348,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;
+ }
}
}
}
@@ -25268,9 +25284,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;
}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 0c1fdd8f03d..75f04cb0d7b 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -285,7 +285,7 @@ struct PvPInfo
struct DuelInfo
{
- DuelInfo() : initiator(NULL), opponent(NULL), startTimer(0), startTime(0), outOfBound(0), isMounted(false), hasCoolDownBeforeDuel(false) { }
+ DuelInfo() : initiator(NULL), opponent(NULL), startTimer(0), startTime(0), outOfBound(0), isMounted(false) { }
Player* initiator;
Player* opponent;
@@ -293,7 +293,6 @@ struct DuelInfo
time_t startTime;
time_t outOfBound;
bool isMounted;
- bool hasCoolDownBeforeDuel;
};
struct Areas
@@ -1118,7 +1117,7 @@ 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;
@@ -1484,7 +1483,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);
@@ -1550,7 +1549,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);
@@ -1596,8 +1595,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();
@@ -1716,7 +1715,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);
@@ -1948,9 +1947,6 @@ class Player : public Unit, public GridObject<Player>
void SetHonorPoints(uint32 value);
void SetArenaPoints(uint32 value);
- bool HasCoolDownBeforeDuel() const { return duel->hasCoolDownBeforeDuel; }
- void UpdateHasCoolDownBeforeDuel() { duel->hasCoolDownBeforeDuel = GetSpellHistory()->GetArenaCooldownsSize() > 0; }
-
//End of PvP System
void SetDrunkValue(uint8 newDrunkValue, uint32 itemId = 0);
@@ -2202,7 +2198,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);
@@ -2374,7 +2370,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);
diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp
index e7989c405a8..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;
@@ -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;
@@ -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/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp
index 144805b88b5..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);
@@ -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();
@@ -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();
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 f01828661a3..6b234df5860 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -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;
}
@@ -13422,7 +13429,7 @@ void Unit::SetLevel(uint8 lvl)
if (player->GetGroup())
player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_LEVEL);
- sWorld->UpdateCharacterNameDataLevel(GetGUID(), lvl);
+ sWorld->UpdateCharacterInfoLevel(GetGUID(), lvl);
}
}
@@ -14174,9 +14181,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
@@ -14645,6 +14650,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()
@@ -16877,9 +16885,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;
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp
index 8f2d0491a91..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->GetSpawnId();
+ ObjectGuid::LowType guid = cr->GetSpawnId();
for (ActiveEvents::iterator e_itr = m_ActiveEvents.begin(); e_itr != m_ActiveEvents.end(); ++e_itr)
{
@@ -1400,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)
{
@@ -1416,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)
{
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/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index b5d8d08a6a4..7a9302699b2 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -291,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;
@@ -300,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));
@@ -442,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();
@@ -961,7 +965,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)
@@ -1084,7 +1088,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())
@@ -1338,8 +1342,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;
@@ -1504,7 +1508,7 @@ 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;
@@ -1672,7 +1676,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);
@@ -1803,7 +1807,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)
@@ -1817,7 +1821,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)
@@ -1831,7 +1835,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)
@@ -1841,7 +1845,7 @@ uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float
if (!map)
return 0;
- uint32 guid = GenerateGameObjectSpawnId();
+ ObjectGuid::LowType guid = GenerateGameObjectSpawnId();
GameObjectData& data = NewGOData(guid);
data.id = entry;
@@ -1883,7 +1887,7 @@ uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float
}
-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)
@@ -1895,7 +1899,7 @@ uint32 ObjectMgr::AddCreatureData(uint32 entry, uint32 mapId, float x, float y,
if (!map)
return 0;
- uint32 guid = GenerateCreatureSpawnId();
+ ObjectGuid::LowType guid = GenerateCreatureSpawnId();
CreatureData& data = NewOrExistCreatureData(guid);
data.id = entry;
data.mapid = mapId;
@@ -1966,7 +1970,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);
@@ -2094,7 +2098,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)
@@ -2108,7 +2112,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)
@@ -2122,7 +2126,7 @@ 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);
return ObjectAccessor::FindPlayer(guid);
@@ -2192,23 +2196,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();
- }
-
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ACCOUNT_BY_GUID);
+ if (CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(guid))
+ return characterInfo->AccountId;
- stmt->setUInt32(0, guid.GetCounter());
-
- PreparedQueryResult result = CharacterDatabase.Query(stmt);
- if (result)
- {
- uint32 acc = (*result)[0].GetUInt32();
- return acc;
- }
return 0;
}
@@ -2530,7 +2521,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;
@@ -2715,15 +2706,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);
- }
}
}
}
@@ -6542,6 +6524,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);
@@ -7338,7 +7322,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);
@@ -7348,7 +7332,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);
@@ -7584,7 +7568,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))
@@ -7606,7 +7590,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)
@@ -7627,7 +7611,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))
@@ -7644,6 +7628,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;
}
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 462370001dd..033ea482912 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -258,7 +258,7 @@ struct ScriptInfo
struct // SCRIPT_COMMAND_RESPAWN_GAMEOBJECT (9)
{
- uint32 GOGuid; // datalong
+ ObjectGuid::LowType GOGuid; // datalong
uint32 DespawnDelay; // datalong2
} RespawnGameobject;
@@ -277,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;
@@ -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();
@@ -1127,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);
@@ -1196,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
{
@@ -1218,20 +1218,20 @@ class ObjectMgr
void SetDBCLocaleIndex(LocaleConstant locale) { DBCLocaleIndex = locale; }
// 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);
+ 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);
@@ -1439,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/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp
index de0ab490e9c..2c292c43785 100644
--- a/src/server/game/Grids/ObjectGridLoader.cpp
+++ b/src/server/game/Grids/ObjectGridLoader.cpp
@@ -118,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))
{
@@ -152,7 +152,12 @@ void ObjectWorldLoader::Visit(CorpseMapType& /*m*/)
for (Corpse* corpse : *corpses)
{
corpse->AddToWorld();
- i_grid.GetGridType(i_cell.CellX(), i_cell.CellY()).AddWorldObject(corpse);
+ GridType& cell = i_grid.GetGridType(i_cell.CellX(), i_cell.CellY());
+ if (corpse->IsWorldObject())
+ cell.AddWorldObject(corpse);
+ else
+ cell.AddGridObject(corpse);
+
++i_corpses;
}
}
@@ -230,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 cc9ef29a8e8..5f500156f58 100644
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -91,7 +91,7 @@ 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_leaderGuid = leaderGuid;
@@ -198,7 +198,7 @@ void Group::LoadGroupFromDB(Field* fields)
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);
@@ -2224,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 fab22b30f47..d2fcad512bb 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -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)
{
@@ -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);
@@ -1972,7 +1972,7 @@ void Guild::LoadRankFromDB(Field* fields)
bool Guild::LoadMemberFromDB(Field* fields)
{
- uint32 lowguid = fields[1].GetUInt32();
+ ObjectGuid::LowType lowguid = fields[1].GetUInt32();
Member *member = new Member(m_id, ObjectGuid(HighGuid::Player, lowguid), fields[2].GetUInt8());
if (!member->LoadFromDB(fields))
{
@@ -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))
{
@@ -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;
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/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp
index 0293901c9e3..8ecf86680ca 100644
--- a/src/server/game/Handlers/AuctionHouseHandler.cpp
+++ b/src/server/game/Handlers/AuctionHouseHandler.cpp
@@ -265,6 +265,8 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
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;
}
@@ -272,6 +274,8 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
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;
}
diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp
index fec0b8e0d40..d4291e34df6 100644
--- a/src/server/game/Handlers/BattleGroundHandler.cpp
+++ b/src/server/game/Handlers/BattleGroundHandler.cpp
@@ -506,6 +506,16 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
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->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);
+ }
}
}
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index ba22ab6aa07..e5b32f548f9 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);
@@ -231,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;
}
}
@@ -363,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);
@@ -433,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))
@@ -645,7 +642,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
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.getGender(), newChar.getRace(), newChar.getClass(), newChar.getLevel());
newChar.CleanupsBeforeDelete();
delete createInfo;
@@ -887,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)
@@ -1095,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);
@@ -1134,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
@@ -1157,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)
@@ -1394,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);
@@ -1447,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);
}
@@ -1593,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);
@@ -1652,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);
@@ -1695,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)
{
diff --git a/src/server/game/Handlers/DuelHandler.cpp b/src/server/game/Handlers/DuelHandler.cpp
index 6e8ff5547d7..2f39a91afbe 100644
--- a/src/server/game/Handlers/DuelHandler.cpp
+++ b/src/server/game/Handlers/DuelHandler.cpp
@@ -43,9 +43,6 @@ void WorldSession::HandleDuelAcceptedOpcode(WorldPacket& recvPacket)
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());
- player->UpdateHasCoolDownBeforeDuel();
- plTarget->UpdateHasCoolDownBeforeDuel();
-
time_t now = time(NULL);
player->duel->startTimer = now;
plTarget->duel->startTimer = now;
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index 13987c983f7..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;
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp
index 4495c044c61..8c3c3e9082b 100644
--- a/src/server/game/Handlers/PetHandler.cpp
+++ b/src/server/game/Handlers/PetHandler.cpp
@@ -600,7 +600,7 @@ void WorldSession::HandlePetRename(WorldPacket& recvData)
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);
diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp
index c7a3f419d62..952659dcea5 100644
--- a/src/server/game/Handlers/PetitionsHandler.cpp
+++ b/src/server/game/Handlers/PetitionsHandler.cpp
@@ -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);
@@ -284,7 +284,7 @@ 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 << uint32(0); // there 0 ...
@@ -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
@@ -470,7 +470,7 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData)
uint64 signs = fields[1].GetUInt64();
uint8 type = fields[2].GetUInt8();
- uint32 playerGuid = _player->GetGUID().GetCounter();
+ ObjectGuid::LowType playerGuid = _player->GetGUID().GetCounter();
if (ownerGuid == _player->GetGUID())
return;
@@ -735,7 +735,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData)
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;
diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp
index 6d896bee26c..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
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp
index 91bc8309b18..fd7c4439c8f 100644
--- a/src/server/game/Handlers/QuestHandler.cpp
+++ b/src/server/game/Handlers/QuestHandler.cpp
@@ -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;
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 e832d7cdffe..93dafea0413 100644
--- a/src/server/game/Instances/InstanceScript.h
+++ b/src/server/game/Instances/InstanceScript.h
@@ -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 22ebe6c679e..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);
}
}
@@ -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->GetGUID().GetCounter();
+ ObjectGuid::LowType plguid = player->GetGUID().GetCounter();
QuestItemMap::const_iterator qmapitr = PlayerQuestItems.find(plguid);
if (qmapitr == PlayerQuestItems.end())
@@ -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 fd9392fb62f..78cd4d3692c 100644
--- a/src/server/game/Mails/Mail.cpp
+++ b/src/server/game/Mails/Mail.cpp
@@ -72,7 +72,7 @@ MailSender::MailSender(Player* sender)
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->GetGUID().GetCounter() == receiver_lowguid);
}
@@ -127,7 +127,7 @@ 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);
Player* receiver = ObjectAccessor::FindConnectedPlayer(receiverGuid);
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 2af77ffdec3..4893b742a16 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -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());
+ if (obj->IsWorldObject())
+ {
+ // 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())
+ grid->GetGridType(cell.CellX(), cell.CellY()).AddWorldObject(obj);
+ }
+ else
+ grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject(obj); // bones. nothing special here
+}
+
template<class T>
void Map::SwitchGridContainers(T* /*obj*/, bool /*on*/) { }
@@ -1601,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();
}
// *****************************
@@ -3216,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
@@ -3396,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)
{
@@ -3415,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);
@@ -3426,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)
{
@@ -3445,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);
@@ -3466,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);
@@ -3481,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);
@@ -3542,7 +3575,7 @@ void Map::LoadCorpseData()
{
Field* fields = result->Fetch();
CorpseType type = CorpseType(fields[13].GetUInt8());
- uint32 guid = fields[16].GetUInt32();
+ 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);
@@ -3575,14 +3608,16 @@ void Map::AddCorpse(Corpse* corpse)
{
corpse->SetMap(this);
- CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY());
- _corpsesByCell[cellCoord.GetId()].insert(corpse);
- _corpsesByPlayer[corpse->GetOwnerGUID()] = corpse;
+ _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->GetType() != CORPSE_BONES);
+ ASSERT(corpse);
corpse->DestroyForNearbyPlayers();
if (corpse->IsInGrid())
@@ -3593,9 +3628,11 @@ void Map::RemoveCorpse(Corpse* corpse)
corpse->ResetMap();
}
- CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY());
- _corpsesByCell[cellCoord.GetId()].erase(corpse);
- _corpsesByPlayer.erase(corpse->GetOwnerGUID());
+ _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*/)
@@ -3621,12 +3658,12 @@ Corpse* Map::ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia /*=
{
// Create bones, don't change Corpse
bones = new Corpse();
- bones->Create(corpse->GetGUID().GetCounter(), this);
+ 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->SetGridCoord(corpse->GetGridCoord());
+ bones->SetCellCoord(corpse->GetCellCoord());
bones->Relocate(corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetOrientation());
bones->SetPhaseMask(corpse->GetPhaseMask(), false);
@@ -3637,6 +3674,8 @@ Corpse* Map::ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia /*=
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);
}
@@ -3660,6 +3699,17 @@ void Map::RemoveOldCorpses()
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)
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index 2ba5e10c82c..0962bcc9d6c 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -499,28 +499,28 @@ 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();
@@ -561,7 +561,7 @@ class Map : public GridRefManager<NGridType>
{
_updateObjects.insert(obj);
}
-
+
void RemoveUpdateObject(Object* obj)
{
_updateObjects.erase(obj);
@@ -659,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;
@@ -711,8 +711,8 @@ 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;
@@ -733,6 +733,7 @@ class Map : public GridRefManager<NGridType>
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;
};
diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp
index cac6e3b91ea..84eba74c6dc 100644
--- a/src/server/game/Maps/TransportMgr.cpp
+++ b/src/server/game/Maps/TransportMgr.cpp
@@ -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)
@@ -425,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 c273ea7fb15..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;
@@ -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 d374c8c509a..de117905b3d 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -1202,8 +1202,7 @@ enum TrinityStrings
LANG_BAN_ACCOUNT_YOUPERMBANNEDMESSAGE_WORLD = 11007,
LANG_NPCINFO_INHABIT_TYPE = 11008,
- LANG_NPCINFO_FLAGS_EXTRA = 11009,
+ LANG_NPCINFO_FLAGS_EXTRA = 11009
- LANG_COOLDOWN_NOT_RESET_AFTER_DUEL = 11010
};
#endif
diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
index d914ef01108..9046d9e6991 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp
+++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
@@ -85,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)
{
@@ -99,7 +99,7 @@ void OPvPCapturePoint::AddGO(uint32 type, uint32 guid, uint32 entry)
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)
{
@@ -115,7 +115,7 @@ void OPvPCapturePoint::AddCre(uint32 type, uint32 guid, uint32 entry)
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;
@@ -126,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;
diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.h b/src/server/game/OutdoorPvP/OutdoorPvP.h
index d075da19ebc..b35147a8502 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvP.h
+++ b/src/server/game/OutdoorPvP/OutdoorPvP.h
@@ -128,12 +128,12 @@ class OPvPCapturePoint
virtual void DeleteSpawns();
- uint32 m_capturePointSpawnId;
+ 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, uint32> m_Objects;
- std::map<uint32, uint32> m_Creatures;
- std::map<uint32, uint32> m_ObjectTypes;
- std::map<uint32, 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,7 @@ class OutdoorPvP : public ZoneScript
// deletes all gos/creatures spawned by the pvp
void DeleteSpawns();
- typedef std::map<uint32/*spawnId*/, OPvPCapturePoint*> OPvPCapturePointMap;
+ typedef std::map<ObjectGuid::LowType/*spawnId*/, OPvPCapturePoint*> OPvPCapturePointMap;
typedef std::pair<ObjectGuid::LowType, GameObject*> GoScriptPair;
typedef std::pair<ObjectGuid::LowType, Creature*> CreatureScriptPair;
@@ -292,7 +292,7 @@ class OutdoorPvP : public ZoneScript
m_capturePoints[cp->m_capturePointSpawnId] = cp;
}
- OPvPCapturePoint * GetCapturePoint(uint32 guid) const
+ OPvPCapturePoint * GetCapturePoint(ObjectGuid::LowType guid) const
{
OutdoorPvP::OPvPCapturePointMap::const_iterator itr = m_capturePoints.find(guid);
if (itr != m_capturePoints.end())
diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp
index 8f3d4a758f3..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,7 +215,7 @@ 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))
{
@@ -237,7 +237,7 @@ void PoolGroup<Creature>::Despawn1Object(uint32 guid)
// 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))
{
@@ -621,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();
@@ -677,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/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp
index a369750b0c6..63006bc6ed6 100644
--- a/src/server/game/Scripting/MapScripts.cpp
+++ b/src/server/game/Scripting/MapScripts.cpp
@@ -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)
{
@@ -266,7 +266,7 @@ 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
{
auto bounds = searchObject->GetMap()->GetGameObjectBySpawnIdStore().equal_range(guid);
if (bounds.first == bounds.second)
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index 7c4b11769b5..a6a8eca6004 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
@@ -789,6 +790,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
}
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp
index 0ece05f1d93..c47df973692 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
// {
@@ -972,12 +973,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 +1034,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 +1396,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..025cedd84e0 100644
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -554,7 +554,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>
@@ -603,7 +603,7 @@ class ConditionScript : public ScriptObject
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
@@ -839,9 +839,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
@@ -1014,7 +1014,7 @@ class ScriptMgr
public: /* CommandScript */
- std::vector<ChatCommand*> GetChatCommands();
+ std::vector<ChatCommand> GetChatCommands();
public: /* WeatherScript */
@@ -1030,7 +1030,7 @@ class ScriptMgr
public: /* ConditionScript */
- bool OnConditionCheck(Condition* condition, ConditionSourceInfo& sourceInfo);
+ bool OnConditionCheck(Condition const* condition, ConditionSourceInfo& sourceInfo);
public: /* VehicleScript */
@@ -1111,8 +1111,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 45a816eda9b..b1a043c4b5b 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,17 +171,17 @@ 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()->GetGUID().GetCounter() : 0;
}
@@ -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);
@@ -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)
@@ -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();
@@ -957,7 +958,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;
@@ -1116,6 +1117,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)
{
@@ -1215,15 +1219,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 e597cbff27b..af2d2d22c57 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -249,7 +249,7 @@ 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; }
@@ -258,7 +258,7 @@ class WorldSession
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);
@@ -276,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; }
@@ -287,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);
@@ -358,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]; }
@@ -965,6 +968,7 @@ class WorldSession
void InitializeQueryCallbackParameters();
void ProcessQueryCallbacks();
+ QueryResultHolderFuture _realmAccountLoginCallback;
PreparedQueryResultFuture _charEnumCallback;
PreparedQueryResultFuture _addIgnoreCallback;
PreparedQueryResultFuture _stablePetCallback;
@@ -1026,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
@@ -1034,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..2c9a2a7bcfd 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 0cc075a3dde..5e70d953be9 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -1134,7 +1134,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 +1148,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 +1159,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 +1279,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);
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index e42f66c6ffb..93b8c3eb368 100644
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -1487,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
@@ -1920,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 e1302d48d2f..76eefa0bb0e 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -1019,7 +1019,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 +1105,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 +1725,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 +1793,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 +1805,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 +1815,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;
@@ -4253,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)
@@ -4668,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;
@@ -4789,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)
@@ -6046,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))
{
@@ -7315,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)
@@ -7389,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)
@@ -7404,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)
@@ -7415,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 10dfbd511df..b345c5affea 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -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;
@@ -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);
}
}
diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp
index 208b4cf7ed9..d2cf03dc936 100644
--- a/src/server/game/Spells/SpellHistory.cpp
+++ b/src/server/game/Spells/SpellHistory.cpp
@@ -43,6 +43,8 @@ struct SpellHistory::PersistenceHelper<Player>
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 +53,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)));
}
};
@@ -70,6 +74,8 @@ struct SpellHistory::PersistenceHelper<Pet>
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 +83,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 +100,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 +137,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 +156,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 +196,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 +235,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 +251,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*/)
@@ -351,7 +365,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,22 +377,6 @@ 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*/)
@@ -387,49 +385,27 @@ void SpellHistory::SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId /
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;
-
- if (categorySpell == spellInfo->Id) // skip main spell, already handled above
- continue;
-
- SpellInfo const* spellInfo2 = sSpellMgr->EnsureSpellInfo(categorySpell);
- if (!spellInfo2->IsCooldownStartedOnEvent())
- continue;
-
- data.Initialize(SMSG_COOLDOWN_EVENT, 4 + 8);
- data << uint32(categorySpell);
- data << uint64(_owner->GetGUID());
- player->SendDirectMessage(&data);
- }
- }
- }
}
}
-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.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 +419,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 +453,7 @@ void SpellHistory::ResetCooldown(CooldownStorageType::iterator& itr, bool update
}
}
- itr = _spellCooldowns.erase(itr);
+ itr = EraseCooldown(itr);
}
void SpellHistory::ResetAllCooldowns()
@@ -492,31 +468,69 @@ 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
+{
+ if (_spellCooldowns.count(spellInfo->Id) != 0)
+ return true;
+
+ uint32 category = 0;
+ if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(itemId))
+ {
+ for (uint32 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i)
+ {
+ if (uint32(itemTemplate->Spells[i].SpellId) == spellInfo->Id)
+ {
+ category = itemTemplate->Spells[i].SpellCategory;
+ break;
+ }
+ }
+ }
+
+ if (!category)
+ category = spellInfo->GetCategory();
+
+ if (!category)
+ return false;
+
+ return _categoryCooldowns.count(category) != 0;
+}
+
+bool SpellHistory::HasCooldown(uint32 spellId, uint32 itemId /*= 0*/) const
{
- return _spellCooldowns.count(spellId) != 0;
+ return HasCooldown(sSpellMgr->EnsureSpellInfo(spellId), itemId);
}
-uint32 SpellHistory::GetRemainingCooldown(uint32 spellId) const
+uint32 SpellHistory::GetRemainingCooldown(SpellInfo const* spellInfo) const
{
- auto itr = _spellCooldowns.find(spellId);
- if (itr == _spellCooldowns.end())
- return 0;
+ 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 +567,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,21 +651,59 @@ void SpellHistory::BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCoo
}
}
-uint16 SpellHistory::GetArenaCooldownsSize()
+void SpellHistory::SaveCooldownStateBeforeDuel()
{
- uint16 count = 0;
+ _spellCooldownsBeforeDuel = _spellCooldowns;
+}
- for (auto itr = _spellCooldowns.begin(); itr != _spellCooldowns.end();)
+void SpellHistory::RestoreCooldownStateAfterDuel()
+{
+ // category cooldows are not preserved.
+ if (Player* player = _owner->ToPlayer())
{
- SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first);
+ // 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)
- ++count;
- ++itr;
- }
+ if (spellInfo->RecoveryTime > 10 * MINUTE * IN_MILLISECONDS ||
+ spellInfo->CategoryRecoveryTime > 10 * MINUTE * IN_MILLISECONDS)
+ _spellCooldownsBeforeDuel[itr->first] = _spellCooldowns[itr->first];
+ }
+
+ _spellCooldowns = _spellCooldownsBeforeDuel;
+
+ // update the client: clear all cooldowns
+ std::vector<int32> resetCooldowns;
+ resetCooldowns.reserve(_spellCooldowns.size());
+
+ for (auto itr = _spellCooldowns.begin(); itr != _spellCooldowns.end(); ++itr)
+ resetCooldowns.push_back(itr->first);
- return count;
+ if (resetCooldowns.empty())
+ return;
+
+ SendClearCooldowns(resetCooldowns);
+
+ // 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)
+ continue;
+
+ cooldowns[itr->first] = cooldownDuration;
+ }
+
+ WorldPacket data;
+ BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, cooldowns);
+ player->SendDirectMessage(&data);
+ }
}
template void SpellHistory::LoadFromDB<Player>(PreparedQueryResult cooldownsResult);
diff --git a/src/server/game/Spells/SpellHistory.h b/src/server/game/Spells/SpellHistory.h
index 4d0642d644e..572f407da96 100644
--- a/src/server/game/Spells/SpellHistory.h
+++ b/src/server/game/Spells/SpellHistory.h
@@ -38,15 +38,15 @@ public:
struct CooldownEntry
{
- CooldownEntry() : ItemId(0), OnHold(false) { }
- CooldownEntry(Clock::time_point endTime, uint32 itemId) : CooldownEnd(endTime), ItemId(itemId), OnHold(false) { }
-
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 +60,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 +75,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 +104,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,17 +120,25 @@ public:
void BuildCooldownPacket(WorldPacket& data, uint8 flags, uint32 spellId, uint32 cooldown) const;
CooldownStorageType::size_type GetCooldownsSizeForPacket() const { return _spellCooldowns.size(); }
- uint16 GetArenaCooldownsSize();
+ 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;
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..241e7df9544 100644
--- a/src/server/game/Spells/SpellInfo.h
+++ b/src/server/game/Spells/SpellInfo.h
@@ -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..6305d0a456f 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3105,11 +3105,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 +3182,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/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp
index 8710100d9b3..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,7 +401,7 @@ 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;
@@ -418,7 +415,8 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s
if (result)
guid = sObjectMgr->GetGenerator<HighGuid::Player>().GetNextAfterMaxUsed(); // use first free if exists
- else incHighest = false;
+ else
+ incHighest = false;
}
else
guid = sObjectMgr->GetGenerator<HighGuid::Player>().GetNextAfterMaxUsed();
@@ -428,7 +426,7 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s
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);
@@ -444,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))
{
@@ -495,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());
@@ -524,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->GetGenerator<HighGuid::Item>().GetNextAfterMaxUsed(), true))
+ if (!ChangeGuid(line, 2, items, itemLowGuidOffset, true))
ROLLBACK(DUMP_FILE_BROKEN); // character_inventory.bag update
- if (!changeGuid(line, 4, items, sObjectMgr->GetGenerator<HighGuid::Item>().GetNextAfterMaxUsed()))
+ 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->GetGenerator<HighGuid::Item>().GetNextAfterMaxUsed()))
+ 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->GetGenerator<HighGuid::Item>().GetNextAfterMaxUsed()))
+ 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->GetGenerator<HighGuid::Item>().GetNextAfterMaxUsed()))
+ 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);
+
+ uint32 newPetId = sObjectMgr->GeneratePetNumber();
+ petIds[currentPetId] = newPetId;
- if (!changenth(line, 1, newpetid)) // character_pet.id update
+ 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;
@@ -677,7 +672,7 @@ 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());
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/World/World.cpp b/src/server/game/World/World.cpp
index 85e79168b71..a0dd889876c 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
@@ -456,6 +445,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 +1027,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,7 +1181,7 @@ 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_COOLDOWN_AFTER_DUEL] = sConfigMgr->GetBoolDefault("ResetCoolDownAfterDuel", 0);
+ m_bool_configs[CONFIG_RESET_DUEL_COOLDOWNS] = sConfigMgr->GetBoolDefault("ResetDuelCooldowns", 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);
@@ -1644,6 +1635,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();
@@ -1877,7 +1871,7 @@ void World::SetInitialWorldSettings()
TC_LOG_INFO("server.loading", "Calculate guild limitation(s) reset time...");
InitGuildResetTime();
- LoadCharacterNameData();
+ LoadCharacterInfoStore();
uint32 startupDuration = GetMSTimeDiffToNow(startupBegin);
@@ -2505,7 +2499,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);
@@ -2546,7 +2540,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)
@@ -3168,6 +3162,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.
@@ -3177,87 +3180,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()
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 1f71975cde2..b8ffc946615 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,
@@ -161,7 +162,7 @@ enum WorldBoolConfigs
CONFIG_ALLOW_TRACK_BOTH_RESOURCES,
CONFIG_CALCULATE_CREATURE_ZONE_AREA_DATA,
CONFIG_CALCULATE_GAMEOBJECT_ZONE_AREA_DATA,
- CONFIG_RESET_COOLDOWN_AFTER_DUEL,
+ CONFIG_RESET_DUEL_COOLDOWNS,
BOOL_CONFIG_VALUE_COUNT
};
@@ -374,6 +375,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,
@@ -523,13 +525,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
@@ -749,12 +752,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; }
@@ -861,8 +864,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 04520101d15..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;
}
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 4cafb651add..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;
}
@@ -275,14 +273,14 @@ 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()->GetGUID().GetCounter(), target->GetName().c_str(), target->GetGUID().GetCounter(), arena->GetName().c_str(), arena->GetId());
diff --git a/src/server/scripts/Commands/cs_ban.cpp b/src/server/scripts/Commands/cs_ban.cpp
index fc246898186..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)
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..f45e73b7c58 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);
+ if (!CheckSpellExistsAndIsValid(handler, spellId))
return false;
- }
-
- if (!SpellMgr::IsSpellValid(spellInfo, handler->GetSession()->GetPlayer()))
- {
- handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId);
- handler->SetSentErrorMessage(true);
- 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);
+ if (!CheckSpellExistsAndIsValid(handler, spellId))
return false;
- }
-
- if (!SpellMgr::IsSpellValid(spellInfo, handler->GetSession()->GetPlayer()))
- {
- handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId);
- handler->SetSentErrorMessage(true);
- 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 405f6fde624..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;
}
@@ -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());
@@ -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)
{
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 422104fedd5..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;
}
@@ -971,7 +967,7 @@ 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));
@@ -1001,7 +997,7 @@ 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);
@@ -1027,7 +1023,7 @@ 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));
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 ce1a42e6e78..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;
}
diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp
index 0a45506c736..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 = map->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))
{
@@ -292,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;
@@ -352,7 +349,7 @@ public:
if (!id)
return false;
- uint32 guidLow = atoi(id);
+ ObjectGuid::LowType guidLow = atoi(id);
if (!guidLow)
return false;
@@ -400,7 +397,7 @@ public:
if (!id)
return false;
- uint32 guidLow = atoi(id);
+ ObjectGuid::LowType guidLow = atoi(id);
if (!guidLow)
return false;
@@ -459,7 +456,7 @@ public:
if (!id)
return false;
- uint32 guidLow = atoi(id);
+ ObjectGuid::LowType guidLow = atoi(id);
if (!guidLow)
return false;
@@ -533,7 +530,7 @@ public:
if (!id)
return false;
- uint32 guidLow = atoi(id);
+ ObjectGuid::LowType guidLow = atoi(id);
if (!guidLow)
return false;
@@ -587,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();
@@ -656,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 8152508c5df..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;
}
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 c960d3f3753..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;
}
@@ -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;
}
@@ -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 2de22714a15..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;
}
diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp
index fb051832d7b..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();
@@ -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 21a55b1558a..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;
}
@@ -1470,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;
@@ -1659,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)
@@ -1774,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;
@@ -2487,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 bf82b81a8b7..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;
}
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index dcf75d0c5db..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 = map->GenerateLowGuid<HighGuid::Unit>();
+ ObjectGuid::LowType guid = map->GenerateLowGuid<HighGuid::Unit>();
CreatureData& data = sObjectMgr->NewOrExistCreatureData(guid);
data.id = id;
data.phaseMask = chr->GetPhaseMaskForSpawn();
@@ -286,7 +278,7 @@ public:
creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
- uint32 db_guid = creature->GetSpawnId();
+ 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,7 +481,7 @@ public:
if (!cId)
return false;
- uint32 lowguid = atoi(cId);
+ ObjectGuid::LowType lowguid = atoi(cId);
if (!lowguid)
return false;
@@ -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();
@@ -939,7 +931,7 @@ public:
if (!guid_str)
return false;
- uint32 lowguid = 0;
+ ObjectGuid::LowType lowguid = 0;
Creature* creature = NULL;
if (dontdel_str)
@@ -1101,7 +1093,7 @@ public:
mtype = RANDOM_MOTION_TYPE;
Creature* creature = handler->getSelectedCreature();
- uint32 guidLow = 0;
+ ObjectGuid::LowType guidLow = 0;
if (creature)
guidLow = creature->GetSpawnId();
@@ -1150,7 +1142,7 @@ public:
}
Creature* creature = handler->getSelectedCreature();
- uint32 guidLow = 0;
+ ObjectGuid::LowType guidLow = 0;
if (creature)
guidLow = creature->GetSpawnId();
@@ -1414,7 +1406,7 @@ 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->GetSpawnId())
@@ -1424,7 +1416,7 @@ public:
return false;
}
- uint32 lowguid = creature->GetSpawnId();
+ 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();
@@ -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 82904efc949..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;
}
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 57ea44a67bf..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;
}
diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp
index fe5ae940f88..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;
}
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 f7634381fc9..9b771f734be 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;
}
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 00b8bec51c8..b35e71dbd50 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?
@@ -1037,7 +1035,7 @@ public:
do
{
Field* fields = result->Fetch();
- uint32 guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
Creature* creature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HighGuid::Unit, VISUAL_WAYPOINT, guid));
if (!creature)
{
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_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/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
index 87945ccf916..8aba0a15462 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
@@ -309,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;
@@ -518,8 +514,6 @@ public:
uint32 NextStep(uint32 step)
{
- Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID);
- Map* map = me->GetMap();
switch (step)
{
case 0: return 9999999;
@@ -527,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:
@@ -555,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);
@@ -575,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;
}
}
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 9747d31952b..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);
+ }
};
/*######
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
index 3df07562d50..2714d65774f 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
@@ -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)
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
index 14be8c51bc2..a78ad740c97 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
@@ -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/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/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/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..8e84f1b4265 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);
diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
index c4ab8f76487..0ae870b27ee 100644
--- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
@@ -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/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..5890b9cbec7 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);
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
index b4627d7f941..eac84d1f6c9 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
@@ -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);
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_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_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_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_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index f0835135890..f9d5a310526 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -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.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/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..5248c48029c 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_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
index f5e5b287571..f6dc75c7b3b 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/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
index 1d7c7a2794a..37aaa639bb1 100644
--- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
@@ -77,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
@@ -246,7 +247,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;
}
@@ -557,7 +557,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)
@@ -594,7 +594,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;
}
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_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/isle_of_conquest.cpp b/src/server/scripts/Northrend/isle_of_conquest.cpp
index 79a20da9702..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
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
index 94ec7acba1f..d2892541373 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
@@ -162,11 +162,6 @@ 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(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))
{
@@ -196,11 +191,6 @@ 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(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))
{
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..b16a9630335 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))
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..787b191e23d 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);
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/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 0ab7c2fcb54..ca8c9a9ef93 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -3424,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);
}
diff --git a/src/server/scripts/World/action_ip_logger.cpp b/src/server/scripts/World/action_ip_logger.cpp
index 4a60a80ee5a..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->GetGUID().GetCounter();
+ 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..f08469d5bd5
--- /dev/null
+++ b/src/server/scripts/World/duel_reset.cpp
@@ -0,0 +1,57 @@
+/*
+ * 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"
+
+class DuelResetScript : public PlayerScript
+{
+ public:
+ DuelResetScript() : PlayerScript("DuelResetScript") { }
+
+ // Called when a duel starts (after 3s countdown)
+ void OnDuelStart(Player* player1, Player* player2) override
+ {
+ if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS))
+ {
+ player1->GetSpellHistory()->SaveCooldownStateBeforeDuel();
+ player2->GetSpellHistory()->SaveCooldownStateBeforeDuel();
+
+ player1->RemoveArenaSpellCooldowns(true);
+ player2->RemoveArenaSpellCooldowns(true);
+ }
+ }
+
+ // Called when a duel ends
+ void OnDuelEnd(Player* winner, Player* loser, DuelCompleteType /*type*/) override
+ {
+ if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS))
+ {
+ winner->RemoveArenaSpellCooldowns(true);
+ loser->RemoveArenaSpellCooldowns(true);
+
+ winner->GetSpellHistory()->RestoreCooldownStateAfterDuel();
+ loser->GetSpellHistory()->RestoreCooldownStateAfterDuel();
+ }
+ }
+};
+
+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/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/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index 1689f05966a..13b6b22bed4 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -1855,7 +1855,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)
@@ -1864,6 +1864,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.
@@ -2191,12 +2199,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
@@ -2220,7 +2237,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)
@@ -2605,12 +2623,12 @@ PlayerStart.MapsExplored = 0
HonorPointsAfterDuel = 0
#
-# ResetCoolDownAfterDuel
-# Description: Reset all cooldowns after duel, but only if player has no cooldowns before the duel.
+# ResetDuelCooldowns
+# Description: Reset all cooldowns before duel starts and restore them when duel ends.
# Default: 0 - (Disabled)
# 1 - (Enabled)
-ResetCoolDownAfterDuel = 0
+ResetDuelCooldowns = 0
#
# AlwaysMaxWeaponSkill
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;
- }
-}