aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt3
-rw-r--r--sql/updates/world/2014_07_28_13_world_sai.sql4
-rw-r--r--sql/updates/world/2014_07_29_00_335_world_sai.sql6
-rw-r--r--sql/updates/world/2014_07_29_01_world_misc.sql38
-rw-r--r--sql/updates/world/2014_07_29_02_world_misc.sql2
-rw-r--r--sql/updates/world/2014_07_29_03_world_waypoints.sql161
-rw-r--r--sql/updates/world/2014_07_29_04_world_sai.sql196
-rw-r--r--sql/updates/world/2014_07_29_05_world_trinity_string.sql1
-rw-r--r--sql/updates/world/2014_07_29_06_world_misc.sql3
-rw-r--r--sql/updates/world/2014_07_29_07_world_sai.sql172
-rw-r--r--sql/updates/world/2014_07_29_08_world_sai.sql288
-rw-r--r--sql/updates/world/2014_07_29_09_world_sai.sql20
-rw-r--r--sql/updates/world/2014_07_29_10_world_misc.sql99
-rw-r--r--sql/updates/world/2014_07_30_00_world_waypoints.sql792
-rw-r--r--sql/updates/world/2014_07_30_01_world_sai.sql52
-rw-r--r--sql/updates/world/2014_07_30_02_world_sai.sql1
-rw-r--r--sql/updates/world/2014_07_30_03_world_misc.sql203
-rw-r--r--sql/updates/world/2014_07_30_04_world_sai.sql86
-rw-r--r--sql/updates/world/2014_07_30_04_world_waypoints.sql5235
-rw-r--r--sql/updates/world/2014_07_30_05_world_waypoints.sql281
-rw-r--r--sql/updates/world/2014_07_30_06_world_waypoints.sql68
-rw-r--r--src/server/authserver/Main.cpp10
-rw-r--r--src/server/authserver/Server/AuthSession.cpp29
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp2
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.cpp8
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.h11
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp4
-rw-r--r--src/server/game/Entities/Player/Player.cpp8
-rw-r--r--src/server/game/Handlers/ChannelHandler.cpp5
-rw-r--r--src/server/game/Miscellaneous/Language.h53
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvP.cpp40
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvP.h5
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp9
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvPMgr.h2
-rw-r--r--src/server/game/Server/Protocol/PacketLog.cpp28
-rw-r--r--src/server/game/Server/Protocol/PacketLog.h3
-rw-r--r--src/server/game/Server/WorldSocket.cpp10
-rw-r--r--src/server/game/World/World.cpp5
-rw-r--r--src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp150
-rw-r--r--src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp61
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp63
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPHP.h26
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp52
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPNA.h25
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp8
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPSI.h2
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp54
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPTF.h24
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp59
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPZM.h63
-rw-r--r--src/server/shared/Configuration/Config.cpp17
-rw-r--r--src/server/shared/Configuration/Config.h4
-rw-r--r--src/server/shared/Database/Implementation/LoginDatabase.cpp4
-rw-r--r--src/server/worldserver/Main.cpp6
-rw-r--r--src/tools/mmaps_generator/MapBuilder.cpp16
55 files changed, 2938 insertions, 639 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7150c9664bb..2341cb7b96d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,6 +14,9 @@ project(TrinityCore)
# CMake policies (can not be handled elsewhere)
cmake_minimum_required(VERSION 2.8.9)
cmake_policy(SET CMP0005 OLD)
+if(POLICY CMP0043)
+ cmake_policy(SET CMP0043 OLD) # Disable 'Ignore COMPILE_DEFINITIONS_<Config> properties'
+endif(POLICY CMP0043)
# add this options before PROJECT keyword
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
diff --git a/sql/updates/world/2014_07_28_13_world_sai.sql b/sql/updates/world/2014_07_28_13_world_sai.sql
index a4e110ac06b..dbcc219155d 100644
--- a/sql/updates/world/2014_07_28_13_world_sai.sql
+++ b/sql/updates/world/2014_07_28_13_world_sai.sql
@@ -28,13 +28,13 @@ INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,
(15,1443,0,0,0,25,0,13028,0,0,1,0,'','Show gossip option only if player does not already know goldthorn tea recipe'),
(15,1443,0,0,0,7,0,185,180,0,1,0,'','Show Gossip only if player does not have at least 180 skill in cooking'),
(15,1443,1,0,0,7,0,171,1,0,0,0,'','Show gossip option only if player has Alchemy'),
-(15,1443,1,0,0,25,0,3451,1,0,1,0,'','Show gossip option only if player does not already know Major Trolls Blood Elixir'),
+(15,1443,1,0,0,25,0,3451,0,0,1,0,'','Show gossip option only if player does not already know Major Trolls Blood Elixir'),
(15,1443,1,0,0,7,0,171,175,0,1,0,'','Show gossip only if player does not have at least 175 skill in Alchemy'),
(15,1443,2,0,0,7,0,185,1,0,0,0,'','Show gossip option only if player has cooking'),
(15,1443,2,0,0,25,0,13028,0,0,1,0,'','Show gossip option only if player does not already know goldthorn tea recipe'),
(15,1443,2,0,0,7,0,185,180,0,0,0,'','Show Gossip only if player has at least 180 skill in cooking'),
(15,1443,3,0,0,7,0,171,1,0,0,0,'','Show gossip option only if player has Alchemy'),
-(15,1443,3,0,0,25,0,3451,1,0,1,0,'','Show gossip option only if player does not already know Major Trolls Blood Elixir'),
+(15,1443,3,0,0,25,0,3451,0,0,1,0,'','Show gossip option only if player does not already know Major Trolls Blood Elixir'),
(15,1443,3,0,0,7,0,171,175,0,0,0,'','Show gossip only if player has at least 175 skill in Alchemy');
DELETE FROM `gossip_menu_option` WHERE `menu_id`=1443;
diff --git a/sql/updates/world/2014_07_29_00_335_world_sai.sql b/sql/updates/world/2014_07_29_00_335_world_sai.sql
new file mode 100644
index 00000000000..2d431886124
--- /dev/null
+++ b/sql/updates/world/2014_07_29_00_335_world_sai.sql
@@ -0,0 +1,6 @@
+SET @CGUID := 45215;
+
+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, 28355, 0, 1, 1, -8670.599, 427.4635, 100.9918, 0.9599311, 120, 0, 0),
+(@CGUID+1, 28347, 0, 1, 1, -8672.78, 430.8922, 100.9918, 0.6632251, 120, 0, 0);
diff --git a/sql/updates/world/2014_07_29_01_world_misc.sql b/sql/updates/world/2014_07_29_01_world_misc.sql
new file mode 100644
index 00000000000..c5bfb6ba585
--- /dev/null
+++ b/sql/updates/world/2014_07_29_01_world_misc.sql
@@ -0,0 +1,38 @@
+UPDATE `creature_template` SET `AIName`= 'SmartAI',`ScriptName`='' WHERE `entry` IN(28347,7978);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN(28347,28355,7978) and `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` BETWEEN 2834700 AND 2834703 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
+(7978, 0, 0, 0, 1, 0, 100, 0, 0, 30000, 15000, 45000, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bimble Longberry - OOC - Say'),
+(28347, 0, 0, 0, 1, 0, 100, 0, 0, 30000, 60000, 90000, 87, 2834700, 2834701, 2834702, 2834703, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Miles Sidney - OOC - Run Random Script'),
+(28347, 0, 1, 0, 10, 0, 100, 0, 1, 20, 30000, 60000, 1, 5, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Miles Sidney - OOC LOS - Say Line 5'),
+
+(2834700, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Miles Sidney - Script 1 - Say Line 0'),
+(2834700, 9, 1, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 28355, 0, 0, 0, 0, 0, 0, 'Miles Sidney - Script 1 - Say Line 2 (Wright Williams)'),
+(2834700, 9, 2, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Miles Sidney - Script 1 - Say Line 4'),
+(2834701, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 28355, 0, 0, 0, 0, 0, 0, 'Miles Sidney - Script 2 - Say Line 0 (Wright Williams)'),
+(2834701, 9, 1, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Miles Sidney - Script 2 - Say Line 1'),
+(2834702, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 28355, 0, 0, 0, 0, 0, 0, 'Miles Sidney - Script 3 - Say Line 1 (Wright Williams)'),
+(2834702, 9, 1, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Miles Sidney - Script 3 - Say Line 2'),
+(2834703, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 19, 28355, 0, 0, 0, 0, 0, 0, 'Miles Sidney - Script 4 - Say Line 3 (Wright Williams)'),
+(2834703, 9, 1, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Miles Sidney - Script 4 - Say Line 3');
+
+DELETE FROM `creature_text` WHERE `entry` IN(7978,28347,28355);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES
+(7978, 0, 1, 'Straight from the lush forests of Elwynn, get your fresh fruit right here.', 12, 7, 100, 0, 0, 0, 'Bimble Longberry', 4021),
+(7978, 0, 2, 'Juicy fruits for sale!', 12, 7, 100, 0, 0, 0, 'Bimble Longberry', 4019),
+(7978, 0, 3, 'Sink your teeth into a fresh, ripe apple.', 12, 7, 100, 0, 0, 0, 'Bimble Longberry', 4020),
+(28355, 0, 0, 'Sir, our customers are complaining that there''s not enough Maiden''s Anguish in our Deadly Poisons.', 12, 0, 100, 0, 0, 0, 'Wright Williams', 27801),
+(28355, 1, 0, 'Sir, I think we were close with the Lethargy Root in that last poison recipe.', 12, 0, 100, 0, 0, 0, 'Wright Williams', 27803),
+(28355, 2, 0, 'I''m working on it, I just don''t want to sell it until I''m happy with it. It shouldn''t be long.', 12, 0, 100, 0, 0, 0, 'Wright Williams', 27808),
+(28355, 3, 0, 'Sir, our customers are complaining that there''s too much Deathweed in our Anesthetics.', 12, 0, 100, 0, 0, 0, 'Wright Williams', 27802),
+(28347, 0, 0, 'Wright, have you finished that new concoction you''ve been working on? I''m tired of these spores filling up my shop!', 12, 0, 100, 0, 0, 0, 'Miles Sidney', 27804),
+(28347, 1, 0, 'Then put twice as much in next time!', 12, 0, 100, 0, 0, 0, 'Miles Sidney', 27805),
+(28347, 2, 0, 'Remember, kid: You''re always more wrong than you think you are. Double It!', 12, 0, 100, 0, 0, 0, 'Miles Sidney', 27807),
+(28347, 3, 0, 'Only put half as much in next time.', 12, 0, 100, 0, 0, 0, 'Miles Sidney', 27806),
+(28347, 4, 0, 'That''s what you always say. Sometimes I think you''re never going to finish that thing.', 12, 0, 100, 0, 0, 0, 'Miles Sidney', 27810),
+(28347, 5, 0, 'Greetings.', 12, 7, 100, 3, 0, 0, 'Miles Sidney', 43337),
+(28347, 5, 1, 'Greetings, $c.', 12, 7, 100, 3, 0, 0, 'Miles Sidney', 43330),
+(28347, 5, 2, 'Greetings! Please have a look around.', 12, 7, 100, 3, 0, 0, 'Miles Sidney',43333),
+(28347, 5, 3, 'Let me know if you need help finding anything, $c.', 12, 7, 100, 3, 0, 0, 'Miles Sidney', 43335),
+(28347, 5, 4, 'Welcome. May I help you find something?', 12, 7, 100, 3, 0, 0, 'Miles Sidney', 43336);
diff --git a/sql/updates/world/2014_07_29_02_world_misc.sql b/sql/updates/world/2014_07_29_02_world_misc.sql
new file mode 100644
index 00000000000..178a278a5df
--- /dev/null
+++ b/sql/updates/world/2014_07_29_02_world_misc.sql
@@ -0,0 +1,2 @@
+UPDATE `conditions` SET `ConditionValue2`=0 WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=1443 AND `SourceEntry`=3 AND `SourceId`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=25 AND `ConditionTarget`=0 AND `ConditionValue1`=3451 AND `ConditionValue2`=1 AND `ConditionValue3`=0;
+UPDATE `conditions` SET `ConditionValue2`=0 WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=1443 AND `SourceEntry`=1 AND `SourceId`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=25 AND `ConditionTarget`=0 AND `ConditionValue1`=3451 AND `ConditionValue2`=1 AND `ConditionValue3`=0;
diff --git a/sql/updates/world/2014_07_29_03_world_waypoints.sql b/sql/updates/world/2014_07_29_03_world_waypoints.sql
new file mode 100644
index 00000000000..e68dc55f714
--- /dev/null
+++ b/sql/updates/world/2014_07_29_03_world_waypoints.sql
@@ -0,0 +1,161 @@
+-- Fix InhabitType for Unending Voidwraith Entry: 19568
+UPDATE creature_template SET `InhabitType`=4 WHERE entry=19568;
+
+-- Remove overspawns
+DELETE FROM `creature` WHERE `guid` IN (70004,69971,69972,69974,69975,69979,69983,69983,69984,69985);
+
+-- Pathing for Unending Voidwraith Entry: 19568
+SET @NPC := 69987;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3915.081,`position_y`=2111.545,`position_z`=274.4216 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3910.933,2130.042,268.1047,0,0,0,0,100,0),
+(@PATH,2,3906.025,2154.37,268.1672,0,0,0,0,100,0),
+(@PATH,3,3902.745,2174.67,268.7223,0,0,0,0,100,0),
+(@PATH,4,3897.602,2202.157,270.2776,0,1000,0,80,100,0);
+
+-- Pathing for Unending Voidwraith Entry: 19568
+SET @NPC := 69988;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3887.315,`position_y`=2258.425,`position_z`=214.2984 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3886.422,2258.591,207.7289,0,0,1,0,100,0),
+(@PATH,2,3880.079,2289.422,171.0624,0,1000,0,81,100,0);
+
+-- Pathing for Unending Voidwraith Entry: 19568
+SET @NPC := 69989;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3726.479,`position_y`=1961.26,`position_z`=249.9123 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3726.549,1962.258,241.1067,0,0,1,0,100,0),
+(@PATH,2,3726.522,1962.159,210.7784,0,0,0,0,100,0),
+(@PATH,3,3726.594,1962.199,171.9171,0,1000,0,82,100,0);
+
+-- Pathing for Unending Voidwraith Entry: 19568
+SET @NPC := 69991;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4044.87,`position_y`=2025.382,`position_z`=267.5442 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,4065.068,2028.757,270.5326,0,0,0,0,100,0),
+(@PATH,2,4080.474,2031.845,270.3937,0,0,0,0,100,0),
+(@PATH,3,4114.268,2037.787,271.1436,0,1000,0,83,100,0);
+
+-- Pathing for Unending Voidwraith Entry: 19568
+SET @NPC := 69993;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4148.985,`position_y`=2042.905,`position_z`=164.7122 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,4148.518,2041.715,179.4717,0,0,0,0,100,0),
+(@PATH,2,4148.935,2042.122,214.9162,0,0,0,0,100,0),
+(@PATH,3,4149.163,2042.004,249.0274,0,1000,0,84,100,0);
+
+-- Pathing for Unending Voidwraith Entry: 19568
+SET @NPC := 69994;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3827.957,`position_y`=1979.826,`position_z`=275.0208 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3827.956,1980.894,268.086,0,0,0,0,100,0),
+(@PATH,2,3808.116,1977.663,268.8724,0,0,0,0,100,0),
+(@PATH,3,3781.85,1972.763,269.8727,0,0,0,0,100,0),
+(@PATH,4,3759.935,1969.464,271.9074,0,1000,0,85,100,0);
+
+-- Pathing for Unending Voidwraith Entry: 19568
+SET @NPC := 69998;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4151.247,`position_y`=2042.391,`position_z`=245.5923 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,4150.083,2041.977,243.7888,0,0,0,0,100,0),
+(@PATH,2,4150.307,2041.957,214.594,0,0,0,0,100,0),
+(@PATH,3,4150.337,2041.994,173.4543,0,1000,0,86,100,0);
+
+-- Pathing for Unending Voidwraith Entry: 19568
+SET @NPC := 69999;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3957.735,`position_y`=1894.359,`position_z`=269.9256 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3959.09,1891.894,271.8099,0,0,0,0,100,0),
+(@PATH,2,3963.445,1862.928,271.171,0,0,0,0,100,0),
+(@PATH,3,3969.4,1841.54,271.3934,0,0,0,0,100,0),
+(@PATH,4,3976.177,1801.907,271.8932,0,0,0,0,100,0),
+(@PATH,5,3978.509,1789.356,271.8932,0,0,0,0,100,0),
+(@PATH,6,3985.332,1757.852,271.9979,0,0,0,0,100,0),
+(@PATH,7,3988.208,1743.379,272.2765,0,1000,0,87,100,0);
+
+-- Pathing for Unending Voidwraith Entry: 19568
+SET @NPC := 69978;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3990.148,`position_y`=1735.373,`position_z`=270.1769 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3990.676,1736.489,274.6074,0,0,0,0,100,0),
+(@PATH,2,3984.71,1764.321,270.99,0,0,0,0,100,0),
+(@PATH,3,3978.079,1796.415,270.7212,0,0,0,0,100,0),
+(@PATH,4,3976.071,1818.841,270.7491,0,0,0,0,100,0),
+(@PATH,5,3967.914,1856.6,273.707,0,0,0,0,100,0),
+(@PATH,6,3965.208,1873.519,274.3181,0,1000,0,88,100,0);
+
+-- Pathing for Unending Voidwraith Entry: 19568
+SET @NPC := 69980;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4001.008,`position_y`=1683.551,`position_z`=137.2256 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,4000.599,1682.332,144.5384,0,0,0,0,100,0),
+(@PATH,2,4001.468,1682.875,184.6771,0,0,0,0,100,0),
+(@PATH,3,4000.325,1683.686,228.1769,0,1000,0,89,100,0);
+
+-- Pathing for Unending Voidwraith Entry: 19568
+SET @NPC := 69982;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3696.551,`position_y`=1954.486,`position_z`=134.3766 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3660.113,1949.127,128.0894,0,0,0,0,100,0),
+(@PATH,2,3632.976,1946.206,126.9835,0,0,0,0,100,0),
+(@PATH,3,3591.018,1935.34,128.265,0,0,0,0,100,0),
+(@PATH,4,3570.341,1931.432,128.7372,0,0,0,0,100,0),
+(@PATH,5,3552.659,1931.052,126.8722,0,1000,0,90,100,0);
+
+DELETE FROM `waypoint_scripts` WHERE `id` IN (80,81,82,83,84,85,86,87,88,89,90);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`dataint`,`x`,`y`,`z`,`o`,`guid`) VALUES
+(80,0,6,530,1,0,3915.081,2111.545,274.4216,0,880),
+(81,0,6,530,1,0,3887.315,2258.425,214.2984,0,881),
+(82,0,6,530,1,0,3726.479,1961.26,249.9123,0,882),
+(83,0,6,530,1,0,4044.87,2025.382,267.5442,0,883),
+(84,0,6,530,1,0,4148.985,2042.905,164.7122,0,884),
+(85,0,6,530,1,0,3827.957,1979.826,275.0208,0,885),
+(86,0,6,530,1,0,4151.247,2042.391,245.5923,0,886),
+(87,0,6,530,1,0,3957.735,1894.359,269.9256,0,887),
+(88,0,6,530,1,0,3990.148,1735.373,270.1769,0,888),
+(89,0,6,530,1,0,4001.008,1683.551,137.2256,0,889),
+(90,0,6,530,1,0,3696.551,1954.486,134.3766,0,890);
diff --git a/sql/updates/world/2014_07_29_04_world_sai.sql b/sql/updates/world/2014_07_29_04_world_sai.sql
new file mode 100644
index 00000000000..586be996444
--- /dev/null
+++ b/sql/updates/world/2014_07_29_04_world_sai.sql
@@ -0,0 +1,196 @@
+-- Feeboz SAI
+SET @ENTRY := 4063;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,1,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,"Feeboz - On Aggro - Say Line 0 (No Repeat)"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,4600,8400,11,34083,64,0,0,0,0,2,0,0,0,0,0,0,0,"Feeboz - In Combat CMC - Cast 'Fireball'"),
+(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Feeboz - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Blackrock Scout SAI
+SET @ENTRY := 4064;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Blackrock Scout - In Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,2,0,0,100,0,1400,4300,16900,25300,11,3019,1,0,0,0,0,1,0,0,0,0,0,0,0,"Blackrock Scout - In Combat - Cast 'Frenzy'"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackrock Scout - In Combat - Say Line 0"),
+(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackrock Scout - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Galak Wrangler SAI
+SET @ENTRY := 4093;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Galak Wrangler - In Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,0,0,100,0,3000,5500,9000,15000,11,6533,1,0,0,0,0,2,0,0,0,0,0,0,0,"Galak Wrangler - In Combat - Cast 'Net'"),
+(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galak Wrangler - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Galak Scout SAI
+SET @ENTRY := 4094;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Galak Scout - In Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galak Scout - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Galak Stormer SAI
+SET @ENTRY := 4097;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Galak Stormer - In Combat CMC - Cast 'Lightning Bolt' (No Repeat)"),
+(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galak Stormer - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Gravelsnout Surveyor SAI
+SET @ENTRY := 4116;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,20806,64,0,0,0,0,2,0,0,0,0,0,0,0,"Gravelsnout Surveyor - In Combat CMC - Cast 'Frostbolt'"),
+(@ENTRY,0,1,0,0,0,100,0,6000,9000,17000,21000,11,6141,1,0,0,0,0,2,0,0,0,0,0,0,0,"Gravelsnout Surveyor - In Combat - Cast 'Blizzard'"),
+(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gravelsnout Surveyor - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Cloud Serpent SAI
+SET @ENTRY := 4117;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,8246,64,0,0,0,0,2,0,0,0,0,0,0,0,"Cloud Serpent - In Combat CMC - Cast 'Lightning Bolt'");
+
+
+-- Elder Cloud Serpent SAI
+SET @ENTRY := 4119;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,7000,11000,11,421,65,0,0,0,0,2,0,0,0,0,0,0,0,"Elder Cloud Serpent - In Combat CMC - Cast 'Chain Lightning'");
+
+-- Keeper Ordanus SAI
+SET @ENTRY := 4273;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Keeper Ordanus - In Combat CMC - Cast 'Lightning Bolt'"),
+(@ENTRY,0,1,0,0,0,100,0,3500,6200,20900,34300,11,12747,1,0,0,0,0,5,0,0,0,0,0,0,0,"Keeper Ordanus - In Combat - Cast 'Entangling Roots'"),
+(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Keeper Ordanus - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Scarlet Evoker SAI
+SET @ENTRY := 4289;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,0,0,2400,3800,11,9053,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Evoker - In Combat CMC - Cast 'Fireball' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,6000,8000,14000,29000,11,8422,1,0,0,0,0,5,0,0,0,0,0,0,0,"Scarlet Evoker - In Combat - Cast 'Flamestrike' (Normal Dungeon)"),
+(@ENTRY,0,2,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Evoker - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Scarlet Diviner SAI
+SET @ENTRY := 4291;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,0,0,2400,3800,11,9053,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Diviner - In Combat CMC - Cast 'Fireball' (Normal Dungeon)"),
+(@ENTRY,0,1,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Diviner - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Scarlet Sorcerer SAI
+SET @ENTRY := 4294;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,0,0,2400,3800,11,9672,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Sorcerer - In Combat CMC - Cast 'Frostbolt'(Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,6000,8000,18000,21000,11,6146,1,0,0,0,0,5,0,0,0,0,0,0,0,"Scarlet Sorcerer - In Combat - Cast 'Slow' (Normal Dungeon)"),
+(@ENTRY,0,2,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Sorcerer - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Scarlet Conjuror SAI
+SET @ENTRY := 4297;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,0,0,2400,3800,11,9053,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Conjuror - In Combat CMC - Cast 'Fireball' (Normal Dungeon)"),
+(@ENTRY,0,1,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Conjuror - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Defias Taskmaster SAI
+SET @ENTRY := 4417;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,0,0,2200,3800,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Defias Taskmaster - In Combat CMC - Cast 'Shoot' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,32000,39000,32000,39000,11,6685,1,0,0,0,0,2,0,0,0,0,0,0,0,"Defias Taskmaster - In Combat - Cast 'Piercing Shot' (Normal Dungeon)");
+
+-- Defias Wizard SAI
+SET @ENTRY := 4418;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,0,0,3300,5600,11,9053,64,0,0,0,0,2,0,0,0,0,0,0,0,"Defias Wizard - In Combat CMC - Cast 'Fireball' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,1100,1100,42600,63500,11,4979,1,0,0,0,0,1,0,0,0,0,0,0,0,"Defias Wizard - In Combat - Cast 'Quick Flame Ward' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,3300,7800,9600,14200,11,113,32,0,0,0,0,2,0,0,0,0,0,0,0,"Defias Wizard - In Combat - Cast 'Chains of Ice' (Normal Dungeon)"),
+(@ENTRY,0,3,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Defias Wizard - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Death Speaker Jargba SAI
+SET @ENTRY := 4428;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,0,0,2400,3800,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Death Speaker Jargba - In Combat CMC - Cast 'Shadow Bolt'"),
+(@ENTRY,0,1,0,0,0,100,2,7000,10000,10000,15000,11,14515,1,0,0,0,0,6,0,0,0,0,0,0,0,"Death Speaker Jargba - In Combat - Cast 'Dominate Mind'");
+
+-- Murkgill Hunter SAI
+SET @ENTRY := 4458;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2600,4800,11,10277,64,0,0,0,0,2,0,0,0,0,0,0,0,"Murkgill Hunter - In Combat CMC - Cast 'Throw'"),
+(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Murkgill Hunter - Between 0-15% Health - Flee For Assist");
+
+-- Murkgill Oracle SAI
+SET @ENTRY := 4459;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Murkgill Oracle - In Combat CMC - Cast 'Lightning Bolt'"),
+(@ENTRY,0,1,0,14,0,100,0,700,40,25000,35000,11,11986,1,0,0,0,0,7,0,0,0,0,0,0,0,"Murkgill Oracle - Friendly At 700 Health - Cast 'Healing Wave'"),
+(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Murkgill Oracle - Between 0-15% Health - Flee For Assist");
+
+-- Murkgill Lord SAI
+SET @ENTRY := 4460;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,1000,1000,1800000,1800000,11,12544,0,0,0,0,0,1,0,0,0,0,0,0,0,"Murkgill Lord - Out of Combat - Cast 'Frost Armor'"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,2400,3800,11,9672,64,0,0,0,0,2,0,0,0,0,0,0,0,"Murkgill Lord - In Combat CMC - Cast 'Frostbolt'"),
+(@ENTRY,0,2,0,0,0,100,0,6000,9000,15000,18500,11,11831,1,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Spellbinder - In Combat - Cast 'Frost Nova'");
+
+-- Blackrock Hunter SAI
+SET @ENTRY := 4462;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,10,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackrock Hunter - On Aggro - Say Line 0"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,2200,3800,11,10277,64,0,0,0,0,2,0,0,0,0,0,0,0,"Blackrock Hunter - In Combat CMC - Cast 'Throw'"),
+(@ENTRY,0,2,3,0,0,100,0,6400,31400,19700,34400,11,3019,1,0,0,0,0,1,0,0,0,0,0,0,0,"Blackrock Hunter - In Combat - Cast 'Frenzy'"),
+(@ENTRY,0,3,0,61,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackrock Hunter - In Combat - Say Line 1"),
+(@ENTRY,0,4,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackrock Hunter - Between 0-15% Health - Flee For Assist");
+
+-- Blackrock Summoner SAI
+SET @ENTRY := 4463;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,1,1000,1000,0,0,11,11939,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackrock Summoner - Out of Combat - Cast 'Summon Imp' (No Repeat)"),
+(@ENTRY,0,1,0,4,0,10,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackrock Summoner - On Aggro - Say Line 0 (No Repeat)"),
+(@ENTRY,0,2,0,0,0,100,0,0,0,3400,6000,11,20793,64,0,0,0,0,2,0,0,0,0,0,0,0,"Blackrock Summoner - In Combat CMC - Cast 'Fireball'"),
+(@ENTRY,0,3,0,0,0,100,0,300,6400,18100,38800,11,184,1,0,0,0,0,1,0,0,0,0,0,0,0,"Blackrock Summoner - In Combat - Cast 'Fire Shield II'"),
+(@ENTRY,0,4,5,0,0,100,0,6400,31400,39100,68100,11,3019,1,0,0,0,0,1,0,0,0,0,0,0,0,"Blackrock Summoner - In Combat - Cast 'Frenzy'"),
+(@ENTRY,0,5,0,61,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackrock Summoner - In Combat - Say Line 1"),
+(@ENTRY,0,6,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackrock Summoner - Between 0-15% Health - Flee For Assist");
+
+-- Scarlet Spellbinder SAI
+SET @ENTRY := 4494;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,20822,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Spellbinder - In Combat CMC - Cast 'Frostbolt'"),
+(@ENTRY,0,1,0,0,0,100,0,6000,9000,15000,18500,11,11831,1,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Spellbinder - In Combat - Cast 'Frost Nova'"),
+(@ENTRY,0,2,0,0,0,100,0,4000,6000,20000,25000,11,11436,1,0,0,0,0,5,0,0,0,0,0,0,0,"Scarlet Spellbinder - In Combat - Cast 'Slow'"),
+(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Spellbinder - Between 0-15% Health - Flee For Assist");
diff --git a/sql/updates/world/2014_07_29_05_world_trinity_string.sql b/sql/updates/world/2014_07_29_05_world_trinity_string.sql
new file mode 100644
index 00000000000..0a35f4ef72c
--- /dev/null
+++ b/sql/updates/world/2014_07_29_05_world_trinity_string.sql
@@ -0,0 +1 @@
+DELETE FROM `trinity_string` WHERE `entry` BETWEEN 10001 AND 10048;
diff --git a/sql/updates/world/2014_07_29_06_world_misc.sql b/sql/updates/world/2014_07_29_06_world_misc.sql
new file mode 100644
index 00000000000..5fb99f4c57a
--- /dev/null
+++ b/sql/updates/world/2014_07_29_06_world_misc.sql
@@ -0,0 +1,3 @@
+DELETE FROM `creature_text` WHERE `entry`=16364;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES
+(16364, 0, 0, '%s releases the last of its energies into the nearby runestone, successfully reactivating it.', 16, 0, 100, 0, 0, 0, 'Infused Crystal', 12272);
diff --git a/sql/updates/world/2014_07_29_07_world_sai.sql b/sql/updates/world/2014_07_29_07_world_sai.sql
new file mode 100644
index 00000000000..b8a3d47cbec
--- /dev/null
+++ b/sql/updates/world/2014_07_29_07_world_sai.sql
@@ -0,0 +1,172 @@
+-- Death's Head Adept SAI
+SET @ENTRY := 4516;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,0,0,2400,3800,11,9672,64,0,0,0,0,2,0,0,0,0,0,0,0,"Death's Head Adept - In Combat CMC - Cast 'Frostbolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,3000,6000,10000,15000,11,113,1,0,0,0,0,5,0,0,0,0,0,0,0,"Death's Head Adept - In Combat - Cast 'Chains of Ice' (Normal Dungeon)"),
+(@ENTRY,0,2,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Death's Head Adept - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Death's Head Priest SAI
+SET @ENTRY := 4517;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,2,1000,1000,1800000,1800000,11,1245,0,0,0,0,0,1,0,0,0,0,0,0,0,"Death's Head Priest - Out of Combat - Cast 'Power Word: Fortitude' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,0,0,2400,3800,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Death's Head Priest - In Combat CMC - Cast 'Shadow Bolt' (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,2,0,2,0,100,2,0,40,14000,20000,11,6063,1,0,0,0,0,1,0,0,0,0,0,0,0,"Death's Head Priest - Between 0-40% Health - Cast 'Heal' (Normal Dungeon)"),
+(@ENTRY,0,3,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Death's Head Priest - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Burning Blade Augur SAI
+SET @ENTRY := 4663;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,20807,64,0,0,0,0,2,0,0,0,0,0,0,0,"Burning Blade Augur - In Combat CMC - Cast 'Shadow Bolt'"),
+(@ENTRY,0,1,0,0,0,100,0,3000,6000,25000,25000,11,6909,32,0,0,0,0,2,0,0,0,0,0,0,0,"Burning Blade Augur - In Combat - Cast 'Curse of Thorns'"),
+(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Burning Blade Augur - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Burning Blade Adept SAI
+SET @ENTRY := 4665;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,19816,64,0,0,0,0,2,0,0,0,0,0,0,0,"Burning Blade Adept - In Combat CMC - Cast 'Fireball'"),
+(@ENTRY,0,1,0,2,0,100,1,0,20,0,0,11,6742,0,0,0,0,0,1,0,0,0,0,0,0,0,"Burning Blade Adept - Between 0-20% Health - Cast 'Bloodlust'"),
+(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Burning Blade Adept - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Burning Blade Shadowmage SAI
+SET @ENTRY := 4667;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,20816,64,0,0,0,0,2,0,0,0,0,0,0,0,"Burning Blade Shadowmage - In Combat CMC - Cast 'Shadow Bolt'"),
+(@ENTRY,0,1,0,0,0,100,0,5000,12000,18000,26000,11,9657,1,0,0,0,0,1,0,0,0,0,0,0,0,"Burning Blade Shadowmage - In Combat - Cast 'Shadow Shell'"),
+(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Burning Blade Shadowmage - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Burning Blade Summoner SAI
+SET @ENTRY := 4668;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,1,1000,1000,0,0,11,688,0,0,0,0,0,1,0,0,0,0,0,0,0,"Burning Blade Summoner - Out of Combat - Cast 'Summon Imp'"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,2400,3800,11,20825,64,0,0,0,0,2,0,0,0,0,0,0,0,"Burning Blade Summoner - In Combat CMC - Cast 'Shadow Bolt'"),
+(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Burning Blade Summoner - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Fallenroot Hellcaller SAI
+SET @ENTRY := 4799;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,0,0,2400,3800,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Fallenroot Hellcaller - In Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,12000,15000,30000,45000,11,8129,1,0,0,0,0,5,0,0,0,0,0,0,0,"Fallenroot Hellcaller - In Combat - Cast 'Mana Burn' (Normal Dungeon)");
+
+-- Blackfathom Tide Priestess SAI
+SET @ENTRY := 4802;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4800,11,9672,64,0,0,0,0,2,0,0,0,0,0,0,0,"Blackfathom Tide Priestess - In Combat CMC - Cast 'Frostbolt'"),
+(@ENTRY,0,1,0,2,0,100,0,0,30,25000,35000,11,11642,1,0,0,0,0,1,0,0,0,0,0,0,0,"Blackfathom Tide Priestess - Between 0-30% Health - Cast 'Heal'"),
+(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blackfathom Tide Priestess - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Twilight Aquamancer SAI
+SET @ENTRY := 4811;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,3,1000,1000,0,0,11,8372,1,0,0,0,0,1,0,0,0,0,0,0,0,"Twilight Aquamancer - Out of Combat - Cast 'Summon Aqua Guardian' (No Repeat)"),
+(@ENTRY,0,1,0,0,0,100,2,0,40,2400,3800,11,9672,64,0,0,0,0,2,0,0,0,0,0,0,0,"Twilight Aquamancer - In Combat CMC - Cast 'Frostbolt' (Normal Dungeon)"),
+(@ENTRY,0,2,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Twilight Aquamancer - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Twilight Shadowmage SAI
+SET @ENTRY := 4813;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,3,1000,1000,0,0,11,12746,1,0,0,0,0,1,0,0,0,0,0,0,0,"Twilight Shadowmage - Out of Combat - Cast 'Summon Voidwalker' (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,0,0,2400,3800,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Twilight Shadowmage - In Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,18000,26000,24000,30000,11,7645,1,0,0,0,0,6,0,0,0,0,0,0,0,"Twilight Shadowmage - In Combat - Cast 'Dominate Mind' (Normal Dungeon)"),
+(@ENTRY,0,3,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Twilight Shadowmage - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Blindlight Oracle SAI
+SET @ENTRY := 4820;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,0,0,2400,3800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Blindlight Oracle - In Combat CMC - Cast 'Lightning Bolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,14,0,100,2,1000,40,30000,40000,11,6063,1,0,0,0,0,7,0,0,0,0,0,0,0,"Blindlight Oracle - Friendly At 1000 Health - Cast 'Heal' (Normal Dungeon)"),
+(@ENTRY,0,2,0,2,0,100,2,0,49,22000,22000,11,8362,1,0,0,0,0,1,0,0,0,0,0,0,0,"Blindlight Oracle - Between 0-50% Health - Cast 'Renew' (Normal Dungeon)"),
+(@ENTRY,0,3,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blindlight Oracle - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Lady Sarevess SAI
+SET @ENTRY := 4831;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,3,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sarevess - On Aggro - Say Line 0 (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Lady Sarevess - In Combat CMC - Cast 'Shoot' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,9000,12000,12000,15000,11,8435,1,0,0,0,0,2,0,0,0,0,0,0,0,"Lady Sarevess - In Combat - Cast 'Forked Lightning' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,2,6000,8500,9000,13000,11,865,1,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sarevess - In Combat - Cast 'Frost Nova' (Normal Dungeon)"),
+(@ENTRY,0,4,0,0,0,100,2,7000,9000,9000,13000,11,246,33,0,0,0,0,6,0,0,0,0,0,0,0,"Lady Sarevess - In Combat - Cast 'Slow' (Normal Dungeon)"),
+(@ENTRY,0,5,0,6,0,100,3,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sarevess - On Just Died - Say Line 1 (Normal Dungeon)");
+
+-- Earthcaller Halmgar SAI
+SET @ENTRY := 4842;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,3,1000,1000,0,0,11,8270,1,0,0,0,0,1,0,0,0,0,0,0,0,"Earthcaller Halmgar - Out of Combat - Cast 'Summon Earth Rumbler' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,0,0,2400,3800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Earthcaller Halmgar - In Combat CMC - Cast 'Lightning Bolt' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,0,2000,50000,60000,11,2484,1,0,0,0,0,1,0,0,0,0,0,0,0,"Earthcaller Halmgar - In Combat - Cast 'Earthbind Totem' (Normal Dungeon)"),
+(@ENTRY,0,3,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Earthcaller Halmgar - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Shadowforge Surveyor SAI
+SET @ENTRY := 4844;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,0,1000,1000,1800000,1800000,11,12544,1,0,0,0,0,1,0,0,0,0,0,0,0,"Shadowforge Surveyor - Out of Combat - Cast 'Frost Armor' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,3400,5000,11,9053,64,0,0,0,0,2,0,0,0,0,0,0,0,"Shadowforge Surveyor - In Combat CMC - Cast 'Fireball'"),
+(@ENTRY,0,2,0,0,0,100,0,10700,20100,20300,22600,11,11831,1,0,0,0,0,1,0,0,0,0,0,0,0,"Shadowforge Surveyor - In Combat - Cast 'Frost Nova'"),
+(@ENTRY,0,3,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Shadowforge Surveyor - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Shadowforge Darkcaster SAI
+SET @ENTRY := 4848;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,0,0,2400,3800,11,9081,64,0,0,0,0,2,0,0,0,0,0,0,0,"Shadowforge Darkcaster - In Combat CMC - Cast 'Shadow Bolt Volley' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,9000,13000,11000,15000,11,15800,1,0,0,0,0,5,0,0,0,0,0,0,0,"Shadowforge Darkcaster - In Combat - Cast 'Mana Burn' (Normal Dungeon)"),
+(@ENTRY,0,2,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Shadowforge Darkcaster - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Stonevault Geomancer SAI
+SET @ENTRY := 4853;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,0,0,2400,3800,11,9053,64,0,0,0,0,2,0,0,0,0,0,0,0,"Stonevault Geomancer - In Combat CMC - Cast 'Fireball' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,4000,8000,30000,38000,11,10452,1,0,0,0,0,2,0,0,0,0,0,0,0,"Stonevault Geomancer - In Combat - Cast 'Flame Buffet' (Normal Dungeon)"),
+(@ENTRY,0,2,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stonevault Geomancer - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Grimlok SAI
+SET @ENTRY := 4854;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,3,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grimlok - On Aggro - Say Line 0 (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,0,0,2400,3800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Grimlok - In Combat CMC - Cast 'Lightning Bolt' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,8000,12000,21000,31000,11,8292,0,0,0,0,0,2,0,0,0,0,0,0,0,"Grimlok - In Combat - Cast 'Chain Bolt' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,3,5000,7000,0,0,11,8143,1,0,0,0,0,1,0,0,0,0,0,0,0,"Grimlok - In Combat - Cast 'Tremor Totem' (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,4,0,2,0,100,2,0,50,25000,35000,11,11892,33,0,0,0,0,5,0,0,0,0,0,0,0,"Grimlok - Between 0-50% Health - Cast 'Shrink' (Normal Dungeon)"),
+(@ENTRY,0,5,0,2,0,100,2,0,30,30000,35000,11,6742,1,0,0,0,0,1,0,0,0,0,0,0,0,"Grimlok - Between 0-30% Health - Cast 'Bloodlust' (Normal Dungeon)"),
+(@ENTRY,0,6,0,5,0,100,3,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grimlok - On Killed Unit - Say Line 2 (No Repeat) (Normal Dungeon)");
+
+-- Stonevault Cave Hunter SAI
+SET @ENTRY := 4856;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2800,4700,11,10277,64,0,0,0,0,2,0,0,0,0,0,0,0,"Stonevault Cave Hunter - In Combat CMC - Cast 'Throw'"),
+(@ENTRY,0,1,0,0,0,100,0,5900,13200,20300,26700,11,6533,0,0,0,0,0,2,0,0,0,0,0,0,0,"Stonevault Cave Hunter - In Combat - Cast 'Net'"),
+(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stonevault Cave Hunter - Between 0-15% Health - Flee For Assist (No Repeat)");
diff --git a/sql/updates/world/2014_07_29_08_world_sai.sql b/sql/updates/world/2014_07_29_08_world_sai.sql
new file mode 100644
index 00000000000..3246f547e8b
--- /dev/null
+++ b/sql/updates/world/2014_07_29_08_world_sai.sql
@@ -0,0 +1,288 @@
+-- Gordunni Ogre Mage SAI
+SET @ENTRY := 5237;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Gordunni Ogre Mage - In Combat CMC - Cast 'Lightning Bolt'"),
+(@ENTRY,0,1,0,2,0,100,1,0,30,0,0,11,6742,1,0,0,0,0,1,0,0,0,0,0,0,0,"Gordunni Ogre Mage - Between 0-30% Health - Cast 'Bloodlust' (No Repeat)");
+
+-- Gordunni Mage-Lord SAI
+SET @ENTRY := 5239;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,20823,64,0,0,0,0,2,0,0,0,0,0,0,0,"Gordunni Mage-Lord - In Combat CMC - Cast 'Fireball'"),
+(@ENTRY,0,1,0,0,0,100,0,5000,9000,20000,26000,11,20827,1,0,0,0,0,2,0,0,0,0,0,0,0,"Gordunni Mage-Lord - In Combat - Cast 'Flamestrike'"),
+(@ENTRY,0,2,0,2,0,100,1,0,30,0,0,11,6742,1,0,0,0,0,1,0,0,0,0,0,0,0,"Gordunni Mage-Lord - Between 0-30% Health - Cast 'Bloodlust' (No Repeat)");
+
+-- Woodpaw Mystic SAI
+SET @ENTRY := 5254;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Woodpaw Mystic - In Combat CMC - Cast 'Lightning Bolt'"),
+(@ENTRY,0,1,0,14,0,100,0,800,30,45000,45000,11,8005,1,0,0,0,0,7,0,0,0,0,0,0,0,"Woodpaw Mystic - Friendly At 800 Health - Cast 'Healing Wave'"),
+(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Woodpaw Mystic - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Atal'ai Witch Doctor SAI
+SET @ENTRY := 5259;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,0,0,3500,5200,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Atal'ai Witch Doctor - In Combat CMC - Cast 'Lightning Bolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,4900,13100,13100,18400,11,12058,1,0,0,0,0,2,0,0,0,0,0,0,0,"Atal'ai Witch Doctor - In Combat - Cast 'Chain Lightning' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,10900,26100,17100,35100,11,11641,1,0,0,0,0,5,0,0,0,0,0,0,0,"Atal'ai Witch Doctor - In Combat - Cast 'Hex' (Normal Dungeon)"),
+(@ENTRY,0,3,0,14,0,100,2,1800,40,12700,23100,11,11986,1,0,0,0,0,7,0,0,0,0,0,0,0,"Atal'ai Witch Doctor - Friendly At 1800 Health - Cast 'Healing Wave' (Normal Dungeon)"),
+(@ENTRY,0,4,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Atal'ai Witch Doctor - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Enthralled Atal'ai SAI
+SET @ENTRY := 5261;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,5000,12000,18000,25000,11,12021,0,0,0,0,0,2,0,0,0,0,0,0,0,"Enthralled Atal'ai - In Combat - Cast 'Fixate' (Normal Dungeon)");
+
+-- Mummified Atal'ai SAI
+SET @ENTRY := 5263;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,8000,15000,4000,10000,11,16186,32,0,0,0,0,2,0,0,0,0,0,0,0,"Mummified Atal'ai - In Combat - Cast 'Fevered Plague' (Normal Dungeon)");
+
+-- Atal'ai Priest SAI
+SET @ENTRY := 5269;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,2,1000,1000,1800000,1800000,11,31976,1,0,0,0,0,1,0,0,0,0,0,0,0,"Atal'ai Priest - Out of Combat - Cast 'Shadow Shield' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,0,0,2400,3800,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Atal'ai Priest - In Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"),
+(@ENTRY,0,2,0,14,0,100,2,1000,30,11000,15000,11,11642,1,0,0,0,0,7,0,0,0,0,0,0,0,"Atal'ai Priest - Friendly At 1000 Health - Cast 'Heal' (Normal Dungeon)"),
+(@ENTRY,0,3,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Atal'ai Priest - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Atal'ai Corpse Eater SAI
+SET @ENTRY := 5270;
+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,2,0,100,3,0,30,12000,12000,11,12134,1,0,0,0,0,1,0,0,0,0,0,0,0,"Atal'ai Corpse Eater - Between 0-30% Health - Cast 'Atal'ai Corpse Eat' (No Repeat) (Normal Dungeon)");
+
+-- Atal'ai Deathwalker SAI
+SET @ENTRY := 5271;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,7300,14500,15900,32200,11,11639,0,0,0,0,0,2,0,0,0,0,0,0,0,"Atal'ai Deathwalker - In Combat - Cast 'Shadow Word: Pain' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,9000,13000,13000,18000,11,12096,1,0,0,0,0,6,0,0,0,0,0,0,0,"Atal'ai Deathwalker - In Combat - Cast 'Fear' (Normal Dungeon)"),
+(@ENTRY,0,2,0,6,0,100,3,0,0,0,0,11,12095,7,0,0,0,0,1,0,0,0,0,0,0,0,"Atal'ai Deathwalker - On Just Died - Cast 'Summon Atal'ai Deathwalker's Spirit' (No Repeat) (Normal Dungeon)");
+
+-- Atal'ai High Priest SAI
+SET @ENTRY := 5273;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,0,0,3600,3600,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Atal'ai High Priest - In Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,40,2,10000,20000,75000,75000,11,12151,1,0,0,0,0,1,0,0,0,0,0,0,0,"Atal'ai High Priest - In Combat - Cast 'Summon Atal'ai Skeleton' (Normal Dungeon)"),
+(@ENTRY,0,2,0,14,0,100,2,2500,40,20000,30000,11,12039,1,0,0,0,0,7,0,0,0,0,0,0,0,"Atal'ai High Priest - Friendly At 2500 Health - Cast 'Heal' (Normal Dungeon)"),
+(@ENTRY,0,3,0,2,0,100,3,0,30,0,0,11,12040,1,0,0,0,0,1,0,0,0,0,0,0,0,"Atal'ai High Priest - Between 0-30% Health - Cast 'Shadow Shield' (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,4,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Atal'ai High Priest - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Ironfur Patriarch SAI
+SET @ENTRY := 5274;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,60,0,8000,8000,12000,12000,11,10968,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ironfur Patriarch - In Combat - Cast 'Demoralizing Roar'");
+
+-- Nightmare Scalebane SAI
+SET @ENTRY := 5277;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,4500,10900,11900,17100,11,3639,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nightmare Scalebane - In Combat - Cast 'Improved Blocking' (Normal Dungeon)");
+
+-- Nightmare Wyrmkin SAI
+SET @ENTRY := 5280;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,0,0,3400,4800,11,9591,64,0,0,0,0,2,0,0,0,0,0,0,0,"Nightmare Wyrmkin - In Combat CMC - Cast 'Acid Spit' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,9000,14000,23000,27000,11,12098,1,0,0,0,0,6,0,0,0,0,0,0,0,"Nightmare Wyrmkin - In Combat - Cast 'Sleep' (Normal Dungeon)");
+
+-- Nightmare Wanderer SAI
+SET @ENTRY := 5283;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,13900,16700,12100,19900,11,11976,0,0,0,0,0,2,0,0,0,0,0,0,0,"Nightmare Wanderer - In Combat - Cast 'Strike' (Normal Dungeon)"),
+(@ENTRY,0,1,0,9,0,100,2,0,5,23800,38200,11,12097,33,0,0,0,0,2,0,0,0,0,0,0,0,"Nightmare Wanderer - Within 0-5 Range - Cast 'Pierce Armor' (Normal Dungeon)");
+
+-- Areatrigger SAI
+SET @ENTRY := 5284;
+DELETE FROM `areatrigger_scripts` WHERE `entry`=@ENTRY;
+INSERT INTO `areatrigger_scripts` VALUES (@ENTRY,"SmartTrigger");
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=2;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,2,0,0,46,0,100,0,5284,0,0,0,85,60111,2,0,0,0,0,7,0,0,0,0,0,0,0,"Areatrigger - On Trigger - Cast 'Kill Credit South'");
+
+-- Areatrigger SAI
+SET @ENTRY := 5285;
+DELETE FROM `areatrigger_scripts` WHERE `entry`=@ENTRY;
+INSERT INTO `areatrigger_scripts` VALUES (@ENTRY,"SmartTrigger");
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=2;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,2,0,0,46,0,100,0,5285,0,0,0,85,60112,2,0,0,0,0,7,0,0,0,0,0,0,0,"Areatrigger - On Trigger - Cast 'Kill Credit Central'");
+
+-- Areatrigger SAI
+SET @ENTRY := 5286;
+DELETE FROM `areatrigger_scripts` WHERE `entry`=@ENTRY;
+INSERT INTO `areatrigger_scripts` VALUES (@ENTRY,"SmartTrigger");
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=2;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,2,0,0,46,0,100,0,5286,0,0,0,85,60115,2,0,0,0,0,7,0,0,0,0,0,0,0,"Areatrigger - On Trigger - Cast 'Kill Credit North'");
+
+-- Areatrigger SAI
+SET @ENTRY := 5287;
+DELETE FROM `areatrigger_scripts` WHERE `entry`=@ENTRY;
+INSERT INTO `areatrigger_scripts` VALUES (@ENTRY,"SmartTrigger");
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=2;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,2,0,0,46,0,100,0,5287,0,0,0,85,60117,2,0,0,0,0,7,0,0,0,0,0,0,0,"Areatrigger - On Trigger - Cast 'Kill Credit Northwest'");
+
+-- Hakkari Frostwing SAI
+SET @ENTRY := 5291;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,5900,9700,15900,32200,11,8398,0,0,0,0,0,2,0,0,0,0,0,0,0,"Hakkari Frostwing - In Combat - Cast 'Frostbolt Volley' (Normal Dungeon)"),
+(@ENTRY,0,1,0,9,0,100,2,0,5,8000,17800,11,5708,0,0,0,0,0,2,0,0,0,0,0,0,0,"Hakkari Frostwing - Within 0-5 Range - Cast 'Swoop' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,6900,16800,16800,29600,11,11831,1,0,0,0,0,1,0,0,0,0,0,0,0,"Hakkari Frostwing - In Combat - Cast 'Frost Nova' (Normal Dungeon)");
+
+-- Ferocious Rage Scar SAI
+SET @ENTRY := 5299;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,60,0,15000,15000,45000,45000,11,3147,0,0,0,0,0,5,0,0,0,0,0,0,0,"Ferocious Rage Scar - In Combat - Cast 'Rend Flesh'");
+
+-- Dunemaul Ogre Mage SAI
+SET @ENTRY := 5473;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,9053,64,0,0,0,0,2,0,0,0,0,0,0,0,"Dunemaul Ogre Mage - In Combat CMC - Cast 'Fireball'"),
+(@ENTRY,0,1,0,0,0,100,0,4000,9000,18000,26000,11,11436,1,0,0,0,0,2,0,0,0,0,0,0,0,"Dunemaul Ogre Mage - In Combat - Cast 'Slow'"),
+(@ENTRY,0,2,0,2,0,100,1,0,30,0,0,11,6742,1,0,0,0,0,1,0,0,0,0,0,0,0,"Dunemaul Ogre Mage - Between 0-30% Health - Cast 'Bloodlust' (No Repeat)");
+
+-- Dunemaul Brute SAI
+SET @ENTRY := 5474;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,4000,7000,9000,12000,11,10966,0,0,0,0,0,2,0,0,0,0,0,0,0,"Dunemaul Brute - In Combat - Cast 'Uppercut'");
+
+-- Dunemaul Warlock SAI
+SET @ENTRY := 5475;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Dunemaul Warlock - In Combat CMC - Cast 'Shadow Bolt'"),
+(@ENTRY,0,1,0,0,0,100,0,7000,11000,21000,26000,11,2941,1,0,0,0,0,2,0,0,0,0,0,0,0,"Dunemaul Warlock - In Combat - Cast 'Immolate'"),
+(@ENTRY,0,2,0,0,0,100,0,3000,5000,180000,188000,11,6909,1,0,0,0,0,2,0,0,0,0,0,0,0,"Dunemaul Warlock - In Combat - Cast 'Curse of Thorns'");
+
+-- Thistleshrub Dew Collector SAI
+SET @ENTRY := 5481;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,500,2500,22000,26000,11,11922,0,0,0,0,0,2,0,0,0,0,0,0,0,"Thistleshrub Dew Collector - In Combat - Cast 'Entangling Roots'");
+
+-- Thistleshrub Rootshaper SAI
+SET @ENTRY := 5485;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,500,2500,25000,35000,11,8376,0,0,0,0,0,1,0,0,0,0,0,0,0,"Thistleshrub Rootshaper - In Combat - Cast 'Earthgrab Totem'");
+
+-- Wastewander Rogue SAI
+SET @ENTRY := 5615;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,1,1000,1000,0,0,11,30831,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wastewander Rogue - Out of Combat - Cast 'Stealth'"),
+(@ENTRY,0,1,0,0,0,100,0,3000,6000,6000,10000,11,8721,0,0,0,0,0,2,0,0,0,0,0,0,0,"Wastewander Rogue - In Combat - Cast 'Backstab'");
+
+-- Wastewander Thief SAI
+SET @ENTRY := 5616;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,6000,9000,7000,12000,11,6713,0,0,0,0,0,2,0,0,0,0,0,0,0,"Wastewander Thief - In Combat - Cast 'Disarm'");
+
+-- Wastewander Shadow Mage SAI
+SET @ENTRY := 5617;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,1,1000,1000,0,0,11,12746,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wastewander Shadow Mage - Out of Combat - Cast 'Summon Voidwalker' (No Repeat)"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,2400,3800,11,20825,64,0,0,0,0,2,0,0,0,0,0,0,0,"Wastewander Shadow Mage - In Combat CMC - Cast 'Shadow Bolt'"),
+(@ENTRY,0,2,0,0,0,100,0,6000,9000,19000,26000,11,20826,0,0,0,0,0,2,0,0,0,0,0,0,0,"Wastewander Shadow Mage - In Combat - Cast 'Immolate'"),
+(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wastewander Shadow Mage - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Wastewander Bandit SAI
+SET @ENTRY := 5618;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,4000,8000,7000,12000,11,8629,0,0,0,0,0,2,0,0,0,0,0,0,0,"Wastewander Bandit - In Combat - Cast 'Gouge'"),
+(@ENTRY,0,1,0,0,0,100,0,3000,6000,6000,10000,11,8721,0,0,0,0,0,2,0,0,0,0,0,0,0,"Wastewander Bandit - In Combat - Cast 'Backstab'");
+
+-- Sandfury Hideskinner SAI
+SET @ENTRY := 5645;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,3000,6000,6000,10000,11,7159,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sandfury Hideskinner - In Combat - Cast 'Backstab'");
+
+-- Sandfury Axe Thrower SAI
+SET @ENTRY := 5646;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2200,3900,11,10277,64,0,0,0,0,2,0,0,0,0,0,0,0,"Sandfury Axe Thrower - In Combat CMC - Cast 'Throw'"),
+(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sandfury Axe Thrower - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+
+-- Sandfury Firecaller SAI
+SET @ENTRY := 5647;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,20823,64,0,0,0,0,2,0,0,0,0,0,0,0,"Sandfury Firecaller - In Combat CMC - Cast 'Fireball'"),
+(@ENTRY,0,1,0,0,0,85,0,8000,14000,20000,26000,11,11990,1,0,0,0,0,2,0,0,0,0,0,0,0,"Sandfury Firecaller - In Combat - Cast 'Rain of Fire'"),
+(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sandfury Firecaller - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Sandfury Shadowcaster SAI
+SET @ENTRY := 5648;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,2,1000,1000,1800000,1800000,11,20798,1,0,0,0,0,1,0,0,0,0,0,0,0,"Sandfury Shadowcaster - Out of Combat - Cast 'Demon Skin' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,0,0,2400,3800,11,12471,64,0,0,0,0,2,0,0,0,0,0,0,0,"Sandfury Shadowcaster - In Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,6000,9000,23000,28000,11,14032,1,0,0,0,0,5,0,0,0,0,0,0,0,"Sandfury Shadowcaster - In Combat - Cast 'Shadow Word: Pain' (Normal Dungeon)"),
+(@ENTRY,0,3,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sandfury Shadowcaster - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Sandfury Blood Drinker SAI
+SET @ENTRY := 5649;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,85,2,5500,8000,8000,10000,11,11898,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sandfury Blood Drinker - In Combat - Cast 'Blood Leech' (Normal Dungeon)");
+
+-- Sandfury Witch Doctor SAI
+SET @ENTRY := 5650;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,6000,6000,45000,45000,11,11899,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sandfury Witch Doctor - In Combat - Cast 'Healing Ward' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,85,2,3000,3000,35000,35000,11,8264,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sandfury Witch Doctor - In Combat - Cast 'Lava Spout Totem' (Normal Dungeon)"),
+(@ENTRY,0,2,0,2,0,100,2,0,50,12000,12000,11,17843,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sandfury Witch Doctor - Between 0-50% Health - Cast 'Flash Heal' (Normal Dungeon)");
diff --git a/sql/updates/world/2014_07_29_09_world_sai.sql b/sql/updates/world/2014_07_29_09_world_sai.sql
new file mode 100644
index 00000000000..ceed8de74de
--- /dev/null
+++ b/sql/updates/world/2014_07_29_09_world_sai.sql
@@ -0,0 +1,20 @@
+UPDATE `creature_template` SET `AIName`= 'SmartAI',`ScriptName`='' WHERE `entry` IN(16196,16183, 15951);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN(16196,16183, 15951) and `source_type`=0;
+
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(16183, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 91, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Courier Dawnstrider - On Data Set - Remove Bytes 1'),
+(16183, 0, 1, 0, 38, 0, 100, 0, 2, 2, 0, 0, 90, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Courier Dawnstrider - On Data Set - Set Bytes 1'),
+(16196, 0, 0, 1, 20, 0, 100, 0, 9147, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 16183, 0, 0, 0, 0, 0, 0, 'Apothecary Thedra - On Quest Reward (The Fallen Courier) - Set Data 1 1 on Courier Dawnstrider'),
+(16196, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 1, 0, 7000, 0, 0, 0, 0, 19, 16183, 0, 0, 0, 0, 0, 0, 'Apothecary Thedra - Linked with Previous Event - Say Line 1 on Courier Dawnstrider'),
+(16196, 0, 2, 3, 52, 0, 100, 0, 0, 16183, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 16183, 0, 0, 0, 0, 0, 0, 'Apothecary Thedra - On Text Over - Set Data 2 2 on Courier Dawnstrider'),
+(16196, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apothecary Thedra - Linked with Previous Event - Say Line 1'),
+(15951, 0, 0, 1, 20, 0, 100, 0, 8891, 0, 0, 0, 50, 181012, 4000, 0, 0, 0, 0, 8, 0, 0, 0, 9049.713, -7434.266, 84.65627, 2.094393, 'Magister Duskwither - On Quest Reward (Abandoned Investigations) - Spawn Magister Duskwithers Journal'),
+(15951, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Magister Duskwither - Linked with Previous Event - Say Line 1'),
+(15951, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 26660, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,0 , 0, 'Magister Duskwither - Linked with Previous Event - Cast Duskwither''s Fireball');
+
+DELETE FROM `creature_text` WHERE `entry` IN (16183,15951,16196);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES
+(16183, 0, 0, 'Where... where am I?', 12, 0, 100, 0, 0, 0, 'Courier Dawnstrider', 12726),
+(15951, 0, 0, 'Good riddance... now none shall be able to repeat my mistakes!', 12, 0, 100, 0, 0, 0, 'Magister Duskwither',11713),
+(16196, 0, 0, 'You''re not going anywhere just yet, handsome. Not until you regain your strength.', 12, 0, 100, 0, 0, 0, 'Apothecary Thedra',12728);
diff --git a/sql/updates/world/2014_07_29_10_world_misc.sql b/sql/updates/world/2014_07_29_10_world_misc.sql
new file mode 100644
index 00000000000..c2e56002de7
--- /dev/null
+++ b/sql/updates/world/2014_07_29_10_world_misc.sql
@@ -0,0 +1,99 @@
+-- Ango'rosh Ogre SAI
+SET @ENTRY := 18117;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,2000,2000,4000,4000,11,11978,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ango'rosh Ogre - In Combat - Cast 'Kick'"),
+(@ENTRY,0,1,2,2,0,100,1,0,25,0,0,11,8599,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ango'rosh Ogre - Between 0-25% Health - Cast 'Enrage' (No Repeat)"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ango'rosh Ogre - Between 0-25% Health - Say Line 0 (No Repeat)");
+
+-- Ango'rosh Shaman SAI
+SET @ENTRY := 18118;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ango'rosh Shaman - In Combat CMC - Cast 'Lightning Bolt'"),
+(@ENTRY,0,1,0,0,0,100,1,18000,25000,0,0,11,32062,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ango'rosh Shaman - In Combat - Cast 'Fire Nova Totem' (No Repeat)"),
+(@ENTRY,0,2,0,2,0,100,1,0,49,0,0,11,23381,1,0,0,0,0,1,0,0,0,0,0,0,0,"Ango'rosh Shaman - Between 0-49% Health - Cast 'Healing Touch' (No Repeat)"),
+(@ENTRY,0,3,0,2,0,100,1,0,30,0,0,11,6742,1,0,0,0,0,1,0,0,0,0,0,0,0,"Ango'rosh Shaman - Between 0-30% Health - Cast 'Bloodlust' (No Repeat)");
+
+-- Ango'rosh Brute SAI
+SET @ENTRY := 18119;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,2000,2000,4000,4000,11,11428,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ango'rosh Brute - In Combat - Cast 'Knockdown'"),
+(@ENTRY,0,1,2,2,0,100,1,0,25,0,0,11,8599,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ango'rosh Brute - Between 0-25% Health - Cast 'Enrage' (No Repeat)"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ango'rosh Brute - Between 0-25% Health - Say Line 0 (No Repeat)");
+
+-- Ango'rosh Mauler SAI
+SET @ENTRY := 18120;
+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,2,0,100,1,0,49,0,0,11,14895,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ango'rosh Mauler - Between 0-49% Health - Cast 'Overpower' (No Repeat)");
+
+-- Ango'rosh Souleater SAI
+SET @ENTRY := 18121;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ango'rosh Souleater - In Combat CMC - Cast 'Shadow Bolt'"),
+(@ENTRY,0,1,0,2,0,100,1,0,30,0,0,11,35195,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ango'rosh Souleater - Between 0-30% Health - Cast 'Siphon Life' (No Repeat)");
+
+UPDATE creature SET `spawndist`=0,`MovementType`=0 WHERE `id` IN (18117);
+UPDATE creature_template_addon SET `emote`=234 WHERE `entry` IN (18117);
+
+-- Pathing for Voidshrieker Entry: 18870
+SET @NPC := 67511;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4103.666,`position_y`=2008.716,`position_z`=230.7258 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,4103.666,2008.716,230.7258,0,0,0,0,100,0),
+(@PATH,2,4125.061,1977.475,222.0139,0,0,0,0,100,0),
+(@PATH,3,4144.464,1974.719,217.2654,0,0,0,0,100,0),
+(@PATH,4,4179.295,1998.64,200.3009,0,0,0,0,100,0),
+(@PATH,5,4187.473,2032.222,181.2747,0,0,0,0,100,0),
+(@PATH,6,4175.088,2063.897,166.8787,0,0,0,0,100,0),
+(@PATH,7,4187.473,2032.222,181.4369,0,0,0,0,100,0),
+(@PATH,8,4179.295,1998.64,200.3009,0,0,0,0,100,0),
+(@PATH,9,4144.464,1974.719,217.2654,0,0,0,0,100,0),
+(@PATH,10,4125.061,1977.475,222.0139,0,0,0,0,100,0),
+(@PATH,11,4103.666,2008.716,230.7258,0,0,0,0,100,0),
+(@PATH,12,4080.718,2041.648,241.5903,0,0,0,0,100,0),
+(@PATH,13,4062.161,2056.093,248.8654,0,0,0,0,100,0),
+(@PATH,14,4035.457,2075.88,254.4613,0,0,0,0,100,0),
+(@PATH,15,4006.357,2097.843,254.2741,0,0,0,0,100,0),
+(@PATH,16,4035.457,2075.88,254.4613,0,0,0,0,100,0),
+(@PATH,17,4061.979,2056.222,248.8656,0,0,0,0,100,0),
+(@PATH,18,4080.718,2041.648,241.5903,0,0,0,0,100,0);
+
+-- Pathing for Voidshrieker Entry: 18870
+SET @NPC := 67509;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3798.831,`position_y`=1750.282,`position_z`=178.7591 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3798.831,1750.282,178.7591,0,0,0,0,100,0),
+(@PATH,2,3832.464,1753.988,196.8661,0,0,0,0,100,0),
+(@PATH,3,3861.998,1759.556,211.6918,0,0,0,0,100,0),
+(@PATH,4,3884.387,1775.794,220.648,0,0,0,0,100,0),
+(@PATH,5,3899.43,1797.509,226.1601,0,0,0,0,100,0),
+(@PATH,6,3903.543,1822.17,230.1046,0,0,0,0,100,0),
+(@PATH,7,3886.774,1848.648,239.562,0,0,0,0,100,0),
+(@PATH,8,3895.88,1866.627,248.396,0,0,0,0,100,0),
+(@PATH,9,3897.675,1884.414,252.7833,0,0,0,0,100,0),
+(@PATH,10,3882.037,1917.948,254.2183,0,0,0,0,100,0),
+(@PATH,11,3897.675,1884.414,252.7833,0,0,0,0,100,0),
+(@PATH,12,3895.88,1866.627,248.396,0,0,0,0,100,0),
+(@PATH,13,3886.774,1848.648,239.562,0,0,0,0,100,0),
+(@PATH,14,3903.543,1822.17,230.1046,0,0,0,0,100,0),
+(@PATH,15,3899.43,1797.509,226.1601,0,0,0,0,100,0),
+(@PATH,16,3884.387,1775.794,220.648,0,0,0,0,100,0),
+(@PATH,17,3862.094,1759.63,211.6694,0,0,0,0,100,0),
+(@PATH,18,3832.464,1753.988,196.8661,0,0,0,0,100,0);
diff --git a/sql/updates/world/2014_07_30_00_world_waypoints.sql b/sql/updates/world/2014_07_30_00_world_waypoints.sql
new file mode 100644
index 00000000000..adb3bf83b04
--- /dev/null
+++ b/sql/updates/world/2014_07_30_00_world_waypoints.sql
@@ -0,0 +1,792 @@
+-- Fix speed for Marsh Walker
+UPDATE `creature_template` SET `speed_walk`=0.714285 WHERE `entry`=18135;
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64827;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-301.1938,`position_y`=8503.301,`position_z`=18.08551 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-301.1938,8503.301,18.08551,0,0,0,0,100,0),
+(@PATH,2,-329.7956,8532.172,18.0473,0,0,0,0,100,0),
+(@PATH,3,-346.0217,8570.542,17.29573,0,0,0,0,100,0),
+(@PATH,4,-381.4028,8604.693,17.4228,0,0,0,0,100,0),
+(@PATH,5,-346.0217,8570.542,17.29573,0,0,0,0,100,0),
+(@PATH,6,-329.7956,8532.172,18.0473,0,0,0,0,100,0),
+(@PATH,7,-301.1938,8503.301,18.08551,0,0,0,0,100,0),
+(@PATH,8,-274.4911,8481.536,17.49909,0,0,0,0,100,0),
+(@PATH,9,-232.2047,8467.544,17.49908,0,0,0,0,100,0),
+(@PATH,10,-248.1649,8454.211,17.49908,0,0,0,0,100,0),
+(@PATH,11,-250.5263,8417.836,17.49909,0,0,0,0,100,0),
+(@PATH,12,-254.9303,8379.229,17.49908,0,0,0,0,100,0),
+(@PATH,13,-250.5263,8417.836,17.49909,0,0,0,0,100,0),
+(@PATH,14,-248.1649,8454.211,17.49908,0,0,0,0,100,0),
+(@PATH,15,-232.2047,8467.544,17.49908,0,0,0,0,100,0),
+(@PATH,16,-274.4911,8481.536,17.49909,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64825;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=874.0325,`position_y`=8117.328,`position_z`=17.64004 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,874.0325,8117.328,17.64004,0,0,0,0,100,0),
+(@PATH,2,872.1207,8150.702,17.51563,0,0,0,0,100,0),
+(@PATH,3,856.12,8173.937,17.83715,0,0,0,0,100,0),
+(@PATH,4,872.1207,8150.702,17.51563,0,0,0,0,100,0),
+(@PATH,5,874.0325,8117.328,17.64004,0,0,0,0,100,0),
+(@PATH,6,869.3058,8088.53,17.37932,0,0,0,0,100,0),
+(@PATH,7,849.413,8053.933,17.49905,0,0,0,0,100,0),
+(@PATH,8,823.0306,8058.05,17.49907,0,0,0,0,100,0),
+(@PATH,9,786.84,8065.035,17.72405,0,0,0,0,100,0),
+(@PATH,10,823.0306,8058.05,17.49907,0,0,0,0,100,0),
+(@PATH,11,849.413,8053.933,17.49905,0,0,0,0,100,0),
+(@PATH,12,869.3058,8088.53,17.37932,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64836;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-170.0164,`position_y`=8324.316,`position_z`=17.49908 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-170.0164,8324.316,17.49908,0,0,0,0,100,0),
+(@PATH,2,-151.9314,8340.622,17.4991,0,0,0,0,100,0),
+(@PATH,3,-125.7491,8351.658,17.59933,0,0,0,0,100,0),
+(@PATH,4,-105.4347,8331.116,17.55655,0,0,0,0,100,0),
+(@PATH,5,-85.87706,8321.008,17.69277,0,0,0,0,100,0),
+(@PATH,6,-49.14638,8337.898,17.94507,0,0,0,0,100,0),
+(@PATH,7,-42.37836,8378.92,17.43042,0,0,0,0,100,0),
+(@PATH,8,-48.26867,8414.372,17.47196,0,0,0,0,100,0),
+(@PATH,9,-55.37891,8463.818,17.39169,0,0,0,0,100,0),
+(@PATH,10,-53.64724,8494.014,17.42002,0,0,0,0,100,0),
+(@PATH,11,-55.37891,8463.818,17.39169,0,0,0,0,100,0),
+(@PATH,12,-48.26867,8414.372,17.47196,0,0,0,0,100,0),
+(@PATH,13,-42.37836,8378.92,17.43042,0,0,0,0,100,0),
+(@PATH,14,-49.14638,8337.898,17.94507,0,0,0,0,100,0),
+(@PATH,15,-85.87706,8321.008,17.69277,0,0,0,0,100,0),
+(@PATH,16,-105.4347,8331.116,17.55655,0,0,0,0,100,0),
+(@PATH,17,-125.7491,8351.658,17.59933,0,0,0,0,100,0),
+(@PATH,18,-151.9314,8340.622,17.4991,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64830;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=447.8367,`position_y`=8068.624,`position_z`=17.57124 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,447.8367,8068.624,17.57124,0,0,0,0,100,0),
+(@PATH,2,466.6456,8034.254,17.49908,0,0,0,0,100,0),
+(@PATH,3,480.148,8005.124,17.40107,0,0,0,0,100,0),
+(@PATH,4,458.6443,7973.283,17.4404,0,0,0,0,100,0),
+(@PATH,5,420.8627,7951.928,18.2707,0,0,0,0,100,0),
+(@PATH,6,395.485,7930.003,17.47219,0,0,0,0,100,0),
+(@PATH,7,415.0804,7917.56,17.55268,0,0,0,0,100,0),
+(@PATH,8,425.3092,7890.014,17.49909,0,0,0,0,100,0),
+(@PATH,9,415.0804,7917.56,17.55268,0,0,0,0,100,0),
+(@PATH,10,395.485,7930.003,17.47219,0,0,0,0,100,0),
+(@PATH,11,420.8627,7951.928,18.2707,0,0,0,0,100,0),
+(@PATH,12,458.6443,7973.283,17.4404,0,0,0,0,100,0),
+(@PATH,13,480.148,8005.124,17.40107,0,0,0,0,100,0),
+(@PATH,14,466.6456,8034.254,17.49908,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64823;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1118.289,`position_y`=8010.705,`position_z`=17.82893 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1118.289,8010.705,17.82893,0,0,0,0,100,0),
+(@PATH,2,1087.97,8006.682,17.62409,0,0,0,0,100,0),
+(@PATH,3,1084.727,7979.982,17.49906,0,0,0,0,100,0),
+(@PATH,4,1095.844,7952.913,17.70093,0,0,0,0,100,0),
+(@PATH,5,1098.577,7920.478,17.51494,0,0,0,0,100,0),
+(@PATH,6,1078.124,7900.944,18.06584,0,0,0,0,100,0),
+(@PATH,7,1042.975,7908.009,17.94593,0,0,0,0,100,0),
+(@PATH,8,1016.453,7917.573,17.33556,0,0,0,0,100,0),
+(@PATH,9,1042.975,7908.009,17.94593,0,0,0,0,100,0),
+(@PATH,10,1078.124,7900.944,18.06584,0,0,0,0,100,0),
+(@PATH,11,1098.577,7920.478,17.51494,0,0,0,0,100,0),
+(@PATH,12,1095.844,7952.913,17.70093,0,0,0,0,100,0),
+(@PATH,13,1084.727,7979.982,17.49906,0,0,0,0,100,0),
+(@PATH,14,1087.97,8006.682,17.62409,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64839;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-114.5583,`position_y`=8460.023,`position_z`=18.7491 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-114.5583,8460.023,18.7491,0,0,0,0,100,0),
+(@PATH,2,-93.83334,8491.481,17.4991,0,0,0,0,100,0),
+(@PATH,3,-111.76,8506.979,17.4991,0,0,0,0,100,0),
+(@PATH,4,-93.83334,8491.481,17.4991,0,0,0,0,100,0),
+(@PATH,5,-114.5583,8460.023,18.7491,0,0,0,0,100,0),
+(@PATH,6,-122.5003,8425.968,17.49909,0,0,0,0,100,0),
+(@PATH,7,-129.3711,8389.323,18.05834,0,0,0,0,100,0),
+(@PATH,8,-116.9223,8349.573,17.63839,0,0,0,0,100,0),
+(@PATH,9,-117.383,8311.256,17.51004,0,0,0,0,100,0),
+(@PATH,10,-114.472,8279.946,17.5043,0,0,0,0,100,0),
+(@PATH,11,-77.70963,8284.504,17.49908,0,0,0,0,100,0),
+(@PATH,12,-114.472,8279.946,17.5043,0,0,0,0,100,0),
+(@PATH,13,-117.383,8311.256,17.51004,0,0,0,0,100,0),
+(@PATH,14,-116.9223,8349.573,17.63839,0,0,0,0,100,0),
+(@PATH,15,-129.3711,8389.323,18.05834,0,0,0,0,100,0),
+(@PATH,16,-122.5003,8425.968,17.49909,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64829;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=578.0402,`position_y`=7958.319,`position_z`=17.49801 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,578.0402,7958.319,17.49801,0,0,0,0,100,0),
+(@PATH,2,584.077,7995.75,17.45513,0,0,0,0,100,0),
+(@PATH,3,609.2556,8015.048,17.37646,0,0,0,0,100,0),
+(@PATH,4,584.077,7995.75,17.45513,0,0,0,0,100,0),
+(@PATH,5,578.0402,7958.319,17.49801,0,0,0,0,100,0),
+(@PATH,6,555.1559,7936.427,17.49322,0,0,0,0,100,0),
+(@PATH,7,514.7059,7943.127,17.47691,0,0,0,0,100,0),
+(@PATH,8,488.2624,7948.173,17.4991,0,0,0,0,100,0),
+(@PATH,9,460.5211,7917.301,17.49908,0,0,0,0,100,0),
+(@PATH,10,488.2624,7948.173,17.4991,0,0,0,0,100,0),
+(@PATH,11,514.7059,7943.127,17.47691,0,0,0,0,100,0),
+(@PATH,12,555.1559,7936.427,17.49322,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64820;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=781.5635,`position_y`=7542.347,`position_z`=17.736 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,781.5635,7542.347,17.736,0,0,0,0,100,0),
+(@PATH,2,815.6573,7517.502,17.78351,0,0,0,0,100,0),
+(@PATH,3,781.5635,7542.347,17.736,0,0,0,0,100,0),
+(@PATH,4,762.9514,7551.243,17.6321,0,0,0,0,100,0),
+(@PATH,5,726.7571,7550.808,17.64579,0,0,0,0,100,0),
+(@PATH,6,677.6494,7553.893,17.60796,0,0,0,0,100,0),
+(@PATH,7,636.2073,7560.307,17.38115,0,0,0,0,100,0),
+(@PATH,8,601.652,7580.129,17.57902,0,0,0,0,100,0),
+(@PATH,9,636.2073,7560.307,17.38115,0,0,0,0,100,0),
+(@PATH,10,677.6494,7553.893,17.60796,0,0,0,0,100,0),
+(@PATH,11,726.7571,7550.808,17.64579,0,0,0,0,100,0),
+(@PATH,12,762.9514,7551.243,17.6321,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64821;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=644.4886,`position_y`=7622.633,`position_z`=17.49904 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,644.4886,7622.633,17.49904,0,0,0,0,100,0),
+(@PATH,2,623.101,7642.905,17.48726,0,0,0,0,100,0),
+(@PATH,3,587.3256,7666.358,17.46451,0,0,0,0,100,0),
+(@PATH,4,551.9452,7682.568,17.49909,0,0,0,0,100,0),
+(@PATH,5,524.8663,7686.722,17.49909,0,0,0,0,100,0),
+(@PATH,6,484.5952,7692.899,17.49909,0,0,0,0,100,0),
+(@PATH,7,461.4081,7714.175,17.49909,0,0,0,0,100,0),
+(@PATH,8,445.0038,7746.1,18.03618,0,0,0,0,100,0),
+(@PATH,9,461.4081,7714.175,17.49909,0,0,0,0,100,0),
+(@PATH,10,484.5952,7692.899,17.49909,0,0,0,0,100,0),
+(@PATH,11,524.8663,7686.722,17.49909,0,0,0,0,100,0),
+(@PATH,12,551.9452,7682.568,17.49909,0,0,0,0,100,0),
+(@PATH,13,587.3256,7666.358,17.46451,0,0,0,0,100,0),
+(@PATH,14,623.101,7642.905,17.48726,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64834;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=86.54546,`position_y`=8255.574,`position_z`=18.9558 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,86.54546,8255.574,18.9558,0,0,0,0,100,0),
+(@PATH,2,87.19987,8292.317,18.10031,0,0,0,0,100,0),
+(@PATH,3,94.62978,8320.794,17.46457,0,0,0,0,100,0),
+(@PATH,4,87.61372,8359.54,17.70627,0,0,0,0,100,0),
+(@PATH,5,94.62978,8320.794,17.46457,0,0,0,0,100,0),
+(@PATH,6,87.19987,8292.317,18.10031,0,0,0,0,100,0),
+(@PATH,7,86.54546,8255.574,18.9558,0,0,0,0,100,0),
+(@PATH,8,94.9808,8216.692,18.18986,0,0,0,0,100,0),
+(@PATH,9,86.12218,8174.826,17.72863,0,0,0,0,100,0),
+(@PATH,10,108.6104,8145.648,18.16449,0,0,0,0,100,0),
+(@PATH,11,117.8114,8117.763,17.48594,0,0,0,0,100,0),
+(@PATH,12,112.2395,8086.566,17.46772,0,0,0,0,100,0),
+(@PATH,13,109.7972,8043.445,17.49909,0,0,0,0,100,0),
+(@PATH,14,93.5204,8017.323,17.62408,0,0,0,0,100,0),
+(@PATH,15,116.5076,8021.615,17.62409,0,0,0,0,100,0),
+(@PATH,16,148.3784,8017.857,18.15998,0,0,0,0,100,0),
+(@PATH,17,116.5076,8021.615,17.62409,0,0,0,0,100,0),
+(@PATH,18,93.5204,8017.323,17.62408,0,0,0,0,100,0),
+(@PATH,19,109.7972,8043.445,17.49909,0,0,0,0,100,0),
+(@PATH,20,112.2395,8086.566,17.46772,0,0,0,0,100,0),
+(@PATH,21,117.8114,8117.763,17.48594,0,0,0,0,100,0),
+(@PATH,22,108.6104,8145.648,18.16449,0,0,0,0,100,0),
+(@PATH,23,86.12218,8174.826,17.72863,0,0,0,0,100,0),
+(@PATH,24,94.9808,8216.692,18.18986,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64824;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=961.119,`position_y`=8084.976,`position_z`=17.46151 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,961.119,8084.976,17.46151,0,0,0,0,100,0),
+(@PATH,2,944.0886,8122.21,17.58651,0,0,0,0,100,0),
+(@PATH,3,961.119,8084.976,17.46151,0,0,0,0,100,0),
+(@PATH,4,965.8881,8057.272,17.07878,0,0,0,0,100,0),
+(@PATH,5,966.6901,8014.281,17.40984,0,0,0,0,100,0),
+(@PATH,6,932.3383,8016.327,17.51394,0,0,0,0,100,0),
+(@PATH,7,886.6631,8012.957,17.5023,0,0,0,0,100,0),
+(@PATH,8,884.9916,7986.938,17.5023,0,0,0,0,100,0),
+(@PATH,9,886.6631,8012.957,17.5023,0,0,0,0,100,0),
+(@PATH,10,932.3383,8016.327,17.51394,0,0,0,0,100,0),
+(@PATH,11,966.6901,8014.281,17.40984,0,0,0,0,100,0),
+(@PATH,12,965.8881,8057.272,17.07878,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64835;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-50.38683,`position_y`=8411.523,`position_z`=17.47196 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-50.38683,8411.523,17.47196,0,0,0,0,100,0),
+(@PATH,2,-7.419705,8405.802,17.59548,0,0,0,0,100,0),
+(@PATH,3,33.12446,8413.819,17.56993,0,0,0,0,100,0),
+(@PATH,4,-7.419705,8405.802,17.59548,0,0,0,0,100,0),
+(@PATH,5,-50.38683,8411.523,17.47196,0,0,0,0,100,0),
+(@PATH,6,-96.01302,8420.427,17.54388,0,0,0,0,100,0),
+(@PATH,7,-141.6372,8435.925,17.49909,0,0,0,0,100,0),
+(@PATH,8,-155.1646,8460.817,17.49909,0,0,0,0,100,0),
+(@PATH,9,-128.9806,8498.716,17.4991,0,0,0,0,100,0),
+(@PATH,10,-148.222,8536.911,17.4991,0,0,0,0,100,0),
+(@PATH,11,-128.9806,8498.716,17.4991,0,0,0,0,100,0),
+(@PATH,12,-155.1646,8460.817,17.49909,0,0,0,0,100,0),
+(@PATH,13,-141.6372,8435.925,17.49909,0,0,0,0,100,0),
+(@PATH,14,-96.01302,8420.427,17.54388,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64833;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=87.91873,`position_y`=8158.213,`position_z`=17.85594 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,87.91873,8158.213,17.85594,0,0,0,0,100,0),
+(@PATH,2,119.1228,8142.663,17.80609,0,0,0,0,100,0),
+(@PATH,3,149.2628,8139.451,17.49908,0,0,0,0,100,0),
+(@PATH,4,183.1385,8135.855,17.49909,0,0,0,0,100,0),
+(@PATH,5,215.0218,8123.902,17.49909,0,0,0,0,100,0),
+(@PATH,6,227.7337,8086.152,17.52486,0,0,0,0,100,0),
+(@PATH,7,253.659,8054.662,17.49908,0,0,0,0,100,0),
+(@PATH,8,282.684,8039.052,17.49798,0,0,0,0,100,0),
+(@PATH,9,313.2512,8034.264,17.49908,0,0,0,0,100,0),
+(@PATH,10,340.0236,8034.506,17.49909,0,0,0,0,100,0),
+(@PATH,11,313.2512,8034.264,17.49908,0,0,0,0,100,0),
+(@PATH,12,282.684,8039.052,17.49798,0,0,0,0,100,0),
+(@PATH,13,253.659,8054.662,17.49908,0,0,0,0,100,0),
+(@PATH,14,227.7337,8086.152,17.52486,0,0,0,0,100,0),
+(@PATH,15,215.0218,8123.902,17.49909,0,0,0,0,100,0),
+(@PATH,16,183.1385,8135.855,17.49909,0,0,0,0,100,0),
+(@PATH,17,149.2628,8139.451,17.49908,0,0,0,0,100,0),
+(@PATH,18,119.1228,8142.663,17.80609,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64840;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-347.4796,`position_y`=8533.388,`position_z`=17.49909 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-347.4796,8533.388,17.49909,0,0,0,0,100,0),
+(@PATH,2,-329.523,8553.835,17.49909,0,0,0,0,100,0),
+(@PATH,3,-296.6537,8564.734,17.43943,0,0,0,0,100,0),
+(@PATH,4,-261.5942,8595.95,17.49909,0,0,0,0,100,0),
+(@PATH,5,-296.6537,8564.734,17.43943,0,0,0,0,100,0),
+(@PATH,6,-329.523,8553.835,17.49909,0,0,0,0,100,0),
+(@PATH,7,-347.4796,8533.388,17.49909,0,0,0,0,100,0),
+(@PATH,8,-368.0536,8508.598,17.49909,0,0,0,0,100,0),
+(@PATH,9,-388.4557,8480.802,17.499,0,0,0,0,100,0),
+(@PATH,10,-368.0536,8508.598,17.49909,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64838;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=184.0078,`position_y`=8977,`position_z`=17.39463 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,184.0078,8977,17.39463,0,0,0,0,100,0),
+(@PATH,2,211.13,8973.212,17.81977,0,0,0,0,100,0),
+(@PATH,3,216.3611,8937.859,18.64739,0,0,0,0,100,0),
+(@PATH,4,200.0475,8911.421,17.49908,0,0,0,0,100,0),
+(@PATH,5,210.271,8891.9,17.46042,0,0,0,0,100,0),
+(@PATH,6,200.0475,8911.421,17.49908,0,0,0,0,100,0),
+(@PATH,7,216.3611,8937.859,18.64739,0,0,0,0,100,0),
+(@PATH,8,211.13,8973.212,17.81977,0,0,0,0,100,0),
+(@PATH,9,184.0078,8977,17.39463,0,0,0,0,100,0),
+(@PATH,10,148.9398,8971.519,19.89098,0,0,0,0,100,0),
+(@PATH,11,121.7532,8954.647,17.59854,0,0,0,0,100,0),
+(@PATH,12,98.23904,8918.107,18.67969,0,0,0,0,100,0),
+(@PATH,13,121.7532,8954.647,17.59854,0,0,0,0,100,0),
+(@PATH,14,148.9398,8971.519,19.89098,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64832;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=785.5858,`position_y`=8579.806,`position_z`=17.56527 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,785.5858,8579.806,17.56527,0,0,0,0,100,0),
+(@PATH,2,755.4162,8584.002,17.4991,0,0,0,0,100,0),
+(@PATH,3,735.4412,8602.093,17.4991,0,0,0,0,100,0),
+(@PATH,4,715.2771,8583.415,17.4991,0,0,0,0,100,0),
+(@PATH,5,710.8354,8545.135,17.8741,0,0,0,0,100,0),
+(@PATH,6,716.3047,8522.668,20.39779,0,0,0,0,100,0),
+(@PATH,7,710.8354,8545.135,17.8741,0,0,0,0,100,0),
+(@PATH,8,715.2771,8583.415,17.4991,0,0,0,0,100,0),
+(@PATH,9,735.4412,8602.093,17.4991,0,0,0,0,100,0),
+(@PATH,10,755.4162,8584.002,17.4991,0,0,0,0,100,0),
+(@PATH,11,785.5858,8579.806,17.56527,0,0,0,0,100,0),
+(@PATH,12,825.7322,8589.715,17.49902,0,0,0,0,100,0),
+(@PATH,13,849.3665,8614.612,17.69501,0,0,0,0,100,0),
+(@PATH,14,867.0609,8633.648,18.25114,0,0,0,0,100,0),
+(@PATH,15,849.3665,8614.612,17.69501,0,0,0,0,100,0),
+(@PATH,16,825.7322,8589.715,17.49902,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64822;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=291.873,`position_y`=7703.415,`position_z`=17.88411 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,291.873,7703.415,17.88411,0,0,0,0,100,0),
+(@PATH,2,314.779,7703.312,17.58478,0,0,0,0,100,0),
+(@PATH,3,342.3629,7700.679,17.4991,0,0,0,0,100,0),
+(@PATH,4,368.9921,7677.205,18.26697,0,0,0,0,100,0),
+(@PATH,5,404.9698,7692.616,17.5832,0,0,0,0,100,0),
+(@PATH,6,438.4161,7710.469,17.49909,0,0,0,0,100,0),
+(@PATH,7,473.649,7704.022,17.41897,0,0,0,0,100,0),
+(@PATH,8,505.8389,7679.953,17.49909,0,0,0,0,100,0),
+(@PATH,9,514.8956,7650.235,17.49901,0,0,0,0,100,0),
+(@PATH,10,497.9654,7624.322,17.80044,0,0,0,0,100,0),
+(@PATH,11,514.8956,7650.235,17.49901,0,0,0,0,100,0),
+(@PATH,12,505.8389,7679.953,17.49909,0,0,0,0,100,0),
+(@PATH,13,473.649,7704.022,17.41897,0,0,0,0,100,0),
+(@PATH,14,438.4161,7710.469,17.49909,0,0,0,0,100,0),
+(@PATH,15,404.9698,7692.616,17.5832,0,0,0,0,100,0),
+(@PATH,16,368.9921,7677.205,18.26697,0,0,0,0,100,0),
+(@PATH,17,342.3629,7700.679,17.4991,0,0,0,0,100,0),
+(@PATH,18,314.779,7703.312,17.58478,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64832;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=716.7272,`position_y`=8601.276,`position_z`=17.4991 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,716.7272,8601.276,17.4991,0,0,0,0,100,0),
+(@PATH,2,752.174,8584.586,17.4991,0,0,0,0,100,0),
+(@PATH,3,795.9551,8585.222,17.49673,0,0,0,0,100,0),
+(@PATH,4,827.15,8586.998,17.49902,0,0,0,0,100,0),
+(@PATH,5,856.6465,8574.583,17.49829,0,0,0,0,100,0),
+(@PATH,6,886.3231,8559.085,17.39889,0,0,0,0,100,0),
+(@PATH,7,912.6191,8540.341,17.49909,0,0,0,0,100,0),
+(@PATH,8,939.4836,8513.34,17.45282,0,0,0,0,100,0),
+(@PATH,9,954.2996,8474.65,17.49907,0,0,0,0,100,0),
+(@PATH,10,984.855,8453.599,17.39467,0,0,0,0,100,0),
+(@PATH,11,954.2996,8474.65,17.49907,0,0,0,0,100,0),
+(@PATH,12,939.4836,8513.34,17.45282,0,0,0,0,100,0),
+(@PATH,13,912.6191,8540.341,17.49909,0,0,0,0,100,0),
+(@PATH,14,886.3231,8559.085,17.39889,0,0,0,0,100,0),
+(@PATH,15,856.6465,8574.583,17.49829,0,0,0,0,100,0),
+(@PATH,16,827.15,8586.998,17.49902,0,0,0,0,100,0),
+(@PATH,17,795.9551,8585.222,17.49673,0,0,0,0,100,0),
+(@PATH,18,752.174,8584.586,17.4991,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64828;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=924.0667,`position_y`=8305.966,`position_z`=17.67109 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,924.0667,8305.966,17.67109,0,0,0,0,100,0),
+(@PATH,2,902.5826,8273.492,18.56687,0,0,0,0,100,0),
+(@PATH,3,924.0667,8305.966,17.67109,0,0,0,0,100,0),
+(@PATH,4,947.1714,8327.824,17.4991,0,0,0,0,100,0),
+(@PATH,5,986.4986,8340.583,17.49908,0,0,0,0,100,0),
+(@PATH,6,948.4996,8346.964,17.4991,0,0,0,0,100,0),
+(@PATH,7,947.7733,8389.242,17.68296,0,0,0,0,100,0),
+(@PATH,8,952.5717,8412.851,17.49909,0,0,0,0,100,0),
+(@PATH,9,957.0486,8448.102,17.46062,0,0,0,0,100,0),
+(@PATH,10,952.5717,8412.851,17.49909,0,0,0,0,100,0),
+(@PATH,11,947.7733,8389.242,17.68296,0,0,0,0,100,0),
+(@PATH,12,948.4996,8346.964,17.4991,0,0,0,0,100,0),
+(@PATH,13,986.4986,8340.583,17.49908,0,0,0,0,100,0),
+(@PATH,14,947.1714,8327.824,17.4991,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64819;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-390.1439,`position_y`=8253.518,`position_z`=16.09562 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-390.1439,8253.518,16.09562,0,0,0,0,100,0),
+(@PATH,2,-357.2793,8281.346,17.36786,0,0,0,0,100,0),
+(@PATH,3,-350.4625,8312.578,17.4991,0,0,0,0,100,0),
+(@PATH,4,-349.5631,8344.943,17.49913,0,0,0,0,100,0),
+(@PATH,5,-379.0918,8372.424,17.49909,0,0,0,0,100,0),
+(@PATH,6,-414.88,8355.182,17.44271,0,0,0,0,100,0),
+(@PATH,7,-446.0282,8319.295,15.24428,0,0,0,0,100,0),
+(@PATH,8,-445.7359,8287.406,17.17921,0,0,0,0,100,0),
+(@PATH,9,-461.3513,8246.95,17.877,0,0,0,0,100,0),
+(@PATH,10,-445.7359,8287.406,17.17921,0,0,0,0,100,0),
+(@PATH,11,-446.0282,8319.295,15.24428,0,0,0,0,100,0),
+(@PATH,12,-414.88,8355.182,17.44271,0,0,0,0,100,0),
+(@PATH,13,-379.0918,8372.424,17.49909,0,0,0,0,100,0),
+(@PATH,14,-349.5631,8344.943,17.49913,0,0,0,0,100,0),
+(@PATH,15,-350.4625,8312.578,17.4991,0,0,0,0,100,0),
+(@PATH,16,-357.2793,8281.346,17.36786,0,0,0,0,100,0),
+(@PATH,17,-390.1172,8253.547,16.111,0,0,0,0,100,0),
+(@PATH,18,-424.5453,8234.055,17.90831,0,0,0,0,100,0),
+(@PATH,19,-442.472,8206.46,16.09482,0,0,0,0,100,0),
+(@PATH,20,-424.5453,8234.055,17.90831,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64831;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=883.9965,`position_y`=8521.639,`position_z`=17.83781 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,883.9965,8521.639,17.83781,0,0,0,0,100,0),
+(@PATH,2,914.638,8546.687,17.49909,0,0,0,0,100,0),
+(@PATH,3,947.3973,8548.576,17.42227,0,0,0,0,100,0),
+(@PATH,4,973.8578,8584.088,16.96828,0,0,0,0,100,0),
+(@PATH,5,947.3973,8548.576,17.42227,0,0,0,0,100,0),
+(@PATH,6,914.638,8546.687,17.49909,0,0,0,0,100,0),
+(@PATH,7,883.9965,8521.639,17.83781,0,0,0,0,100,0),
+(@PATH,8,858.9237,8483.394,17.51669,0,0,0,0,100,0),
+(@PATH,9,839.9093,8454.622,17.62974,0,0,0,0,100,0),
+(@PATH,10,818.9688,8447.583,17.50474,0,0,0,0,100,0),
+(@PATH,11,788.2785,8449.614,18.37276,0,0,0,0,100,0),
+(@PATH,12,818.9688,8447.583,17.50474,0,0,0,0,100,0),
+(@PATH,13,839.9093,8454.622,17.62974,0,0,0,0,100,0),
+(@PATH,14,858.9237,8483.394,17.51669,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64826;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=974.1456,`position_y`=8151.406,`position_z`=17.49909 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,974.1456,8151.406,17.49909,0,0,0,0,100,0),
+(@PATH,2,936.1339,8152.216,17.41899,0,0,0,0,100,0),
+(@PATH,3,918.0892,8178.414,17.52471,0,0,0,0,100,0),
+(@PATH,4,913.4008,8213.664,17.40324,0,0,0,0,100,0),
+(@PATH,5,918.0892,8178.414,17.52471,0,0,0,0,100,0),
+(@PATH,6,936.1339,8152.216,17.41899,0,0,0,0,100,0),
+(@PATH,7,974.1456,8151.406,17.49909,0,0,0,0,100,0),
+(@PATH,8,1005.321,8156.346,17.49909,0,0,0,0,100,0),
+(@PATH,9,1032.515,8133.889,17.49909,0,0,0,0,100,0),
+(@PATH,10,1060.987,8106.548,17.49909,0,0,0,0,100,0),
+(@PATH,11,1047.958,8075.616,17.77516,0,0,0,0,100,0),
+(@PATH,12,1011.745,8049.339,18.16889,0,0,0,0,100,0),
+(@PATH,13,1047.958,8075.616,17.77516,0,0,0,0,100,0),
+(@PATH,14,1060.987,8106.548,17.49909,0,0,0,0,100,0),
+(@PATH,15,1032.515,8133.889,17.49909,0,0,0,0,100,0),
+(@PATH,16,1005.321,8156.346,17.49909,0,0,0,0,100,0);
+
+-- Pathing for Marsh Walker Entry: 18135
+SET @NPC := 64837;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=82.27843,`position_y`=8509.213,`position_z`=17.49909 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,82.27843,8509.213,17.49909,0,0,0,0,100,0),
+(@PATH,2,94.213,8544.274,17.99909,0,0,0,0,100,0),
+(@PATH,3,69.33735,8574.196,17.68814,0,0,0,0,100,0),
+(@PATH,4,83.5051,8551.99,17.49909,0,0,0,0,100,0),
+(@PATH,5,117.2316,8551.036,17.96043,0,0,0,0,100,0),
+(@PATH,6,150.0363,8554.89,17.68345,0,0,0,0,100,0),
+(@PATH,7,163.1173,8588.505,18.63587,0,0,0,0,100,0),
+(@PATH,8,156.6575,8612.926,17.53897,0,0,0,0,100,0),
+(@PATH,9,163.1173,8588.505,18.63587,0,0,0,0,100,0),
+(@PATH,10,150.0363,8554.89,17.68345,0,0,0,0,100,0),
+(@PATH,11,117.2316,8551.036,17.96043,0,0,0,0,100,0),
+(@PATH,12,83.5051,8551.99,17.49909,0,0,0,0,100,0),
+(@PATH,13,69.33735,8574.196,17.68814,0,0,0,0,100,0),
+(@PATH,14,94.213,8544.274,17.99909,0,0,0,0,100,0),
+(@PATH,15,82.27843,8509.213,17.49909,0,0,0,0,100,0),
+(@PATH,16,92.01487,8483.376,17.49909,0,0,0,0,100,0),
+(@PATH,17,77.338,8501.032,17.49909,0,0,0,0,100,0),
+(@PATH,18,47.22873,8506.513,17.49909,0,0,0,0,100,0),
+(@PATH,19,25.15582,8520.438,17.49283,0,0,0,0,100,0),
+(@PATH,20,47.22873,8506.513,17.49909,0,0,0,0,100,0);
+
+-- Pathing for Ango'rosh Shaman Entry: 18118
+SET @NPC := 64200;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=644.8542,`position_y`=7864.837,`position_z`=22.3112 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,644.8542,7864.837,22.3112,0,0,0,0,100,0),
+(@PATH,2,658.7136,7850.472,21.90904,0,0,0,0,100,0),
+(@PATH,3,673.5045,7838.813,22.60974,0,0,0,0,100,0),
+(@PATH,4,679.8118,7823.88,22.23306,0,0,0,0,100,0),
+(@PATH,5,684.8212,7799.125,21.99128,0,0,0,0,100,0),
+(@PATH,6,693.1428,7791.885,22.23091,0,0,0,0,100,0),
+(@PATH,7,693.1428,7791.885,22.23091,0,0,0,0,100,0),
+(@PATH,8,684.8212,7799.125,21.99128,0,0,0,0,100,0),
+(@PATH,9,679.8118,7823.88,22.23306,0,0,0,0,100,0),
+(@PATH,10,673.5045,7838.813,22.60974,0,0,0,0,100,0),
+(@PATH,11,658.7136,7850.472,21.90904,0,0,0,0,100,0),
+(@PATH,12,644.7537,7864.248,22.31084,0,0,0,0,100,0),
+(@PATH,13,637.0594,7876.642,21.9847,0,0,0,0,100,0),
+(@PATH,14,622.5043,7883.878,22.07429,0,0,0,0,100,0),
+(@PATH,15,597.0054,7883.503,21.96379,0,0,0,0,100,0),
+(@PATH,16,584.8994,7878.884,22.13079,0,0,0,0,100,0),
+(@PATH,17,578.9732,7863.721,22.09724,0,0,0,0,100,0),
+(@PATH,18,572.3759,7854.287,21.59724,0,0,0,0,100,0),
+(@PATH,19,557.7398,7852.659,21.62408,0,0,0,0,100,0),
+(@PATH,20,572.3759,7854.287,21.59724,0,0,0,0,100,0),
+(@PATH,21,578.9732,7863.721,22.09724,0,0,0,0,100,0),
+(@PATH,22,584.8994,7878.884,22.13079,0,0,0,0,100,0),
+(@PATH,23,597.0054,7883.503,21.96379,0,0,0,0,100,0),
+(@PATH,24,622.5043,7883.878,22.07429,0,0,0,0,100,0),
+(@PATH,25,637.0594,7876.642,21.9847,0,0,0,0,100,0);
+
+-- Pathing for Ango'rosh Shaman Entry: 18118
+SET @NPC := 64199;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=770.1323,`position_y`=7774.846,`position_z`=22.67318 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,770.1323,7774.846,22.67318,0,0,0,0,100,0),
+(@PATH,2,777.4385,7767.182,21.9991,0,0,0,0,100,0),
+(@PATH,3,785.0085,7758.705,21.86028,0,0,0,0,100,0),
+(@PATH,4,794.3231,7747.627,21.98528,0,0,0,0,100,0),
+(@PATH,5,804.1041,7737.199,21.84237,0,0,0,0,100,0),
+(@PATH,6,810.9216,7725.344,21.92386,0,0,0,0,100,0),
+(@PATH,7,814.6373,7706.108,21.62845,0,0,0,0,100,0),
+(@PATH,8,810.9216,7725.344,21.92386,0,0,0,0,100,0),
+(@PATH,9,804.1041,7737.199,21.84237,0,0,0,0,100,0),
+(@PATH,10,794.3231,7747.627,21.98528,0,0,0,0,100,0),
+(@PATH,11,785.0085,7758.705,21.86028,0,0,0,0,100,0),
+(@PATH,12,777.4385,7767.182,21.9991,0,0,0,0,100,0),
+(@PATH,13,770.3223,7774.25,22.63703,0,0,0,0,100,0),
+(@PATH,14,765.7609,7779.539,22.77408,0,0,0,0,100,0),
+(@PATH,15,761.437,7784.407,22.66974,0,0,0,0,100,0),
+(@PATH,16,755.484,7787.25,22.49196,0,0,0,0,100,0),
+(@PATH,17,748.4116,7788.092,22.13786,0,0,0,0,100,0),
+(@PATH,18,742.2909,7786.957,22.00575,0,0,0,0,100,0),
+(@PATH,19,734.4057,7787.279,22.0069,0,0,0,0,100,0),
+(@PATH,20,727.2755,7788.375,21.81407,0,0,0,0,100,0),
+(@PATH,21,717.0435,7789.009,22.1188,0,0,0,0,100,0),
+(@PATH,22,710.8192,7789.798,22.10098,0,0,0,0,100,0),
+(@PATH,23,702.6148,7790.601,22.37459,0,0,0,0,100,0),
+(@PATH,24,690.6102,7791.114,22.24128,0,0,0,0,100,0),
+(@PATH,25,679.7465,7787.897,22.47639,0,0,0,0,100,0),
+(@PATH,26,675.0551,7778.473,21.07356,0,0,0,0,100,0),
+(@PATH,27,678.0349,7766.003,21.06932,0,0,0,0,100,0),
+(@PATH,28,684.7713,7752.402,22.23509,0,0,0,0,100,0),
+(@PATH,29,678.0349,7766.003,21.06932,0,0,0,0,100,0),
+(@PATH,30,675.0551,7778.473,21.07356,0,0,0,0,100,0),
+(@PATH,31,679.7465,7787.897,22.47639,0,0,0,0,100,0),
+(@PATH,32,690.6102,7791.114,22.24128,0,0,0,0,100,0),
+(@PATH,33,702.6148,7790.601,22.37459,0,0,0,0,100,0),
+(@PATH,34,710.5023,7789.834,22.10141,0,0,0,0,100,0),
+(@PATH,35,717.0435,7789.009,22.1188,0,0,0,0,100,0),
+(@PATH,36,727.2755,7788.375,21.81407,0,0,0,0,100,0),
+(@PATH,37,734.4057,7787.279,22.0069,0,0,0,0,100,0),
+(@PATH,38,742.2909,7786.957,22.00575,0,0,0,0,100,0),
+(@PATH,39,748.4116,7788.092,22.13786,0,0,0,0,100,0),
+(@PATH,40,755.484,7787.25,22.49196,0,0,0,0,100,0),
+(@PATH,41,761.437,7784.407,22.66974,0,0,0,0,100,0),
+(@PATH,42,765.7609,7779.539,22.77408,0,0,0,0,100,0);
+
+UPDATE `creature` SET `id`=18118 WHERE `guid`=64195;
+UPDATE `creature` SET `spawndist`=5,`MovementType`=1 WHERE `guid` IN (64191,64195,64159,64196,64186,64170,64163,64158);
+DELETE FROM `creature_addon` WHERE `guid` IN (64191,64195,64159,64196,64186,64170,64163,64158);
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`emote`,`auras`) VALUES
+(64159,0,1,0, ''),(64196,0,1,0, ''),(64191,0,1,0, ''),(64186,0,1,0, ''),(64170,0,1,0, ''),(64163,0,1,0, ''),(64158,0,1,0, '');
+
+-- Pathing for Ango'rosh Sentry Entry: 20443
+SET @NPC := 72411;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1280.438,`position_y`=8627.676,`position_z`=20.92095 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1280.438,8627.676,20.92095,0,0,0,0,100,0),
+(@PATH,2,1260.006,8639.502,22.83721,0,0,0,0,100,0),
+(@PATH,3,1245.05,8641.163,24.4113,0,0,0,0,100,0),
+(@PATH,4,1216.487,8650.236,20.57172,0,0,0,0,100,0),
+(@PATH,5,1245.05,8641.163,24.4113,0,0,0,0,100,0),
+(@PATH,6,1260.006,8639.502,22.83721,0,0,0,0,100,0),
+(@PATH,7,1280.438,8627.676,20.92095,0,0,0,0,100,0),
+(@PATH,8,1281.377,8600.357,18.18194,0,0,0,0,100,0);
+
+-- Pathing for Ango'rosh Sentry Entry: 20443
+SET @NPC := 72420;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=970.3631,`position_y`=8553.178,`position_z`=21.38559 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,970.3631,8553.178,21.38559,0,0,0,0,100,0),
+(@PATH,2,985.7488,8583.917,19.42825,0,0,0,0,100,0),
+(@PATH,3,999.244,8606.11,24.68743,0,0,0,0,100,0),
+(@PATH,4,1025.91,8617.661,19.0017,0,0,0,0,100,0),
+(@PATH,5,999.2891,8606.135,24.75078,0,0,0,0,100,0),
+(@PATH,6,985.7488,8583.917,19.42825,0,0,0,0,100,0),
+(@PATH,7,970.3631,8553.178,21.38559,0,0,0,0,100,0),
+(@PATH,8,969.0519,8528.513,20.06933,0,0,0,0,100,0),
+(@PATH,9,988.2411,8512.356,18.72606,0,0,0,0,100,0),
+(@PATH,10,969.0519,8528.513,20.06933,0,0,0,0,100,0);
+
+-- Pathing for Ango'rosh Sentry Entry: 20443
+SET @NPC := 72413;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1173.638,`position_y`=8413.106,`position_z`=47.84419 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1173.638,8413.106,47.84419,0,0,0,0,100,0),
+(@PATH,2,1163.449,8415.349,42.86897,0,0,0,0,100,0),
+(@PATH,3,1152.371,8420.931,36.45106,0,0,0,0,100,0),
+(@PATH,4,1149.642,8423.404,35.62211,0,0,0,0,100,0),
+(@PATH,5,1161.088,8437.671,27.15933,0,0,0,0,100,0),
+(@PATH,6,1167.009,8444.979,22.7928,0,0,0,0,100,0),
+(@PATH,7,1161.088,8437.671,27.15933,0,0,0,0,100,0),
+(@PATH,8,1149.642,8423.404,35.62211,0,0,0,0,100,0),
+(@PATH,9,1152.371,8420.931,36.45106,0,0,0,0,100,0),
+(@PATH,10,1163.449,8415.349,42.86897,0,0,0,0,100,0),
+(@PATH,11,1173.638,8413.106,47.84419,0,0,0,0,100,0),
+(@PATH,12,1178.014,8414.137,50.07702,0,0,0,0,100,0),
+(@PATH,13,1184.483,8417.801,53.34129,0,0,0,0,100,0),
+(@PATH,14,1190.194,8420.89,56.02716,0,0,0,0,100,0),
+(@PATH,15,1187.88,8427.463,57.16458,0,0,0,0,100,0),
+(@PATH,16,1183.713,8437.44,58.30647,0,0,0,0,100,0),
+(@PATH,17,1187.88,8427.463,57.16458,0,0,0,0,100,0),
+(@PATH,18,1190.194,8420.89,56.02716,0,0,0,0,100,0),
+(@PATH,19,1184.483,8417.801,53.34129,0,0,0,0,100,0),
+(@PATH,20,1178.014,8414.137,50.07702,0,0,0,0,100,0);
+
+-- Pathing for Ango'rosh Sentry Entry: 20443
+SET @NPC := 72421;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1072.604,`position_y`=8637.91,`position_z`=22.98809 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1072.604,8637.91,22.98809,0,0,0,0,100,0),
+(@PATH,2,1052.562,8618.747,17.68465,0,0,0,0,100,0),
+(@PATH,3,1072.604,8637.91,22.98809,0,0,0,0,100,0),
+(@PATH,4,1094.035,8644.675,23.35613,0,0,0,0,100,0);
+
+-- Pathing for Ango'rosh Sentry Entry: 20443
+SET @NPC := 72410;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1257.143,`position_y`=8512.616,`position_z`=22.73383 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1257.143,8512.616,22.73383,0,0,0,0,100,0),
+(@PATH,2,1267.241,8500.584,24.4882,0,0,0,0,100,0),
+(@PATH,3,1275.148,8489.038,23.69006,0,0,0,0,100,0),
+(@PATH,4,1267.47,8461.444,22.73318,0,0,0,0,100,0),
+(@PATH,5,1251.861,8441.785,20.1918,0,0,0,0,100,0),
+(@PATH,6,1237.605,8424.362,17.89481,0,0,0,0,100,0),
+(@PATH,7,1229.287,8411.072,18.9991,0,0,0,0,100,0),
+(@PATH,8,1210.862,8406.452,17.7491,0,0,0,0,100,0),
+(@PATH,9,1229.287,8411.072,18.9991,0,0,0,0,100,0),
+(@PATH,10,1237.605,8424.362,17.89481,0,0,0,0,100,0),
+(@PATH,11,1251.861,8441.785,20.1918,0,0,0,0,100,0),
+(@PATH,12,1267.47,8461.444,22.73318,0,0,0,0,100,0),
+(@PATH,13,1275.148,8489.038,23.69006,0,0,0,0,100,0),
+(@PATH,14,1267.241,8500.584,24.4882,0,0,0,0,100,0),
+(@PATH,15,1257.143,8512.616,22.73383,0,0,0,0,100,0),
+(@PATH,16,1264.564,8540.619,18.63026,0,0,0,0,100,0),
+(@PATH,17,1281.139,8567.028,20.92814,0,0,0,0,100,0),
+(@PATH,18,1285.464,8603.98,18.06524,0,0,0,0,100,0),
+(@PATH,19,1281.139,8567.028,20.92814,0,0,0,0,100,0),
+(@PATH,20,1264.564,8540.619,18.63026,0,0,0,0,100,0);
+
+-- Pathing for Ango'rosh Sentry Entry: 20443
+SET @NPC := 72418;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1050.08,`position_y`=8471.225,`position_z`=55.79852 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1050.08,8471.225,55.79852,0,0,0,0,100,0),
+(@PATH,2,1045.566,8467.722,53.36241,0,0,0,0,100,0),
+(@PATH,3,1039.81,8464.549,50.48059,0,0,0,0,100,0),
+(@PATH,4,1034.04,8462.964,47.46804,0,0,0,0,100,0),
+(@PATH,5,1023.59,8466.265,41.93713,0,0,0,0,100,0),
+(@PATH,6,1015.494,8469.264,37.75529,0,0,0,0,100,0),
+(@PATH,7,1010.956,8473.249,35.49992,0,0,0,0,100,0),
+(@PATH,8,1018.681,8483.053,29.74021,0,0,0,0,100,0),
+(@PATH,9,1027.361,8493.991,23.25309,0,0,0,0,100,0),
+(@PATH,10,1018.681,8483.053,29.74021,0,0,0,0,100,0),
+(@PATH,11,1010.956,8473.249,35.49992,0,0,0,0,100,0),
+(@PATH,12,1015.494,8469.264,37.75529,0,0,0,0,100,0),
+(@PATH,13,1023.397,8466.325,41.84349,0,0,0,0,100,0),
+(@PATH,14,1034.04,8462.964,47.46804,0,0,0,0,100,0),
+(@PATH,15,1039.81,8464.549,50.48059,0,0,0,0,100,0),
+(@PATH,16,1045.566,8467.722,53.36241,0,0,0,0,100,0),
+(@PATH,17,1050.08,8471.225,55.79852,0,0,0,0,100,0),
+(@PATH,18,1049.307,8476.159,57.09945,0,0,0,0,100,0),
+(@PATH,19,1044.823,8485.451,58.18297,0,0,0,0,100,0),
+(@PATH,20,1049.307,8476.159,57.09945,0,0,0,0,100,0);
diff --git a/sql/updates/world/2014_07_30_01_world_sai.sql b/sql/updates/world/2014_07_30_01_world_sai.sql
new file mode 100644
index 00000000000..e8991ebe772
--- /dev/null
+++ b/sql/updates/world/2014_07_30_01_world_sai.sql
@@ -0,0 +1,52 @@
+UPDATE `creature_template` SET `AIName`= 'SmartAI',`ScriptName`='' WHERE `entry` IN(15402,15958);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN(15402, 15958) and `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN(1540200,1540201,1540202) 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
+(15402, 0, 0, 0, 20, 0, 100, 0, 8487, 0, 0, 0, 80, 1540200, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - On Quest Rewarded (Corrupted Soil) - Run Script'),
+(15402, 0, 1, 2, 19, 0, 100, 0, 8488, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - On Quest Accept (Unexpected Results) - Store Targetlist'),
+(15402, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 1540201, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - On Quest Accept (Unexpected Results) - Run Script'),
+(15402, 0, 3, 0, 0, 0, 100, 0, 1000, 1000, 5000, 8000, 11, 20811, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - IC - Cast Fireball'),
+(15402, 0, 4, 0, 6, 1, 100, 0, 0, 0, 0, 0, 6, 8488, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - On Death (Phase 1) - Fail Quest Unexpected Results'),
+(15402, 0, 5, 6, 7, 1, 100, 0, 0, 0, 0, 0, 15, 8488, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - OOC (Phase 4) - Complete Quest Unexpected Results (Phase 3)'),
+(15402, 0, 6, 0, 61, 8, 100, 0, 0, 0, 0, 0, 80, 1540202, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - Linked with Previous Event - Run Script (Phase 3)'),
+(15402, 0, 7, 0, 11, 0, 100, 0, 0, 0, 0, 0, 18, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - On Spawn - Set Immune to NPC'),
+(15958, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gharsul the Remorseless - On Just Summoned - Set Phase 2'),
+(15958, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 53, 1, 15958, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 'Gharsul the Remorseless - On Just Summoned - Start WP'),
+(15958, 0, 2, 3, 40, 0, 100, 0, 1, 15958, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gharsul the Remorseless - On Reached WP1 - Set Home position'),
+(15958, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gharsul the Remorseless - On Reached WP1 - Set react state agressive'),
+(15958, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 19, 15402, 0, 0, 0, 0, 0, 0, 'Gharsul the Remorseless - On Reached WP1 - Attack Apprentice Mirveda'),
+
+-- Script does not need to cast 29535 Quest - Apprentice Mirveda - Test Soil as this spell is cast as rewardspellcast from quest_Template and having it in script just makes the npc cast it twice instead of once
+(1540200, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - Script 1 - Set NPC Flags'),
+(1540200, 9, 1, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - Script 1 - Say Line 1'),
+(1540200, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - Script 1 - Set NPC Flags'),
+(1540201, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - Script 2 - Set NPC Flags'),
+(1540201, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 2, 232, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - Script 2 - Set Faction'),
+(1540201, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 19, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - Script 2 - Remove Unit Flags Immune to NPC'),
+(1540201, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - Script 2 - Set Phase 1'),
+(1540201, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - Script 2 - Summon Summon Group 0'),
+(1540202, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - Script 3 - Set NPC Flags'),
+(1540202, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 2, 1604, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - Script 3 - Set Faction'),
+(1540202, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 18, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - Script 3 - Add Unit Flags Immune to NPC'),
+(1540202, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Apprentice Mirveda - Script 3 - Set Phase 0');
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=15656 AND `source_type`=0 AND `id`>1;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(15656, 0, 2, 3, 54, 0, 100, 0, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Angershade - On Just Summoned - Set Phase 2'),
+(15656, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 53, 1, 15656, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 'Angershade - On Just Summoned - Start WP'),
+(15656, 0, 4, 5, 40, 0, 100, 0, 1, 15656, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Angershade - On Reached WP1 - Set Home position'),
+(15656, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Angershade - On Reached WP1 - Set react state agressive'),
+(15656, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 19, 15402, 0, 0, 0, 0, 0, 0, 'Angershade - On Reached WP1 - Attack Apprentice Mirveda');
+
+DELETE FROM `creature_summon_groups` WHERE `summonerId`=15402;
+INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`) VALUES
+(15402, 0, 0, 15958, 8749.505, -7132.595, 35.31983, 3.816502, 1, 180000), -- Gharsul the Remorseless
+(15402, 0, 0, 15656, 8755.38, -7131.521, 35.30957, 3.816502, 1, 180000), -- Angershade
+(15402, 0, 0, 15656, 8753.199, -7125.975, 35.31986, 3.816502, 1, 180000); -- Angershade
+
+DELETE FROM `waypoints` WHERE `entry` IN(15958,15656);
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(15958, 1, 8706.201172, -7157.467773, 44.203865, 'Gharsul the Remorseless'),
+(15656, 1, 8705.161133, -7155.801270, 44.329075, 'Angershade');
diff --git a/sql/updates/world/2014_07_30_02_world_sai.sql b/sql/updates/world/2014_07_30_02_world_sai.sql
new file mode 100644
index 00000000000..ef12a4236c5
--- /dev/null
+++ b/sql/updates/world/2014_07_30_02_world_sai.sql
@@ -0,0 +1 @@
+UPDATE `smart_scripts` SET `event_phase_mask`=1 WHERE `entryorguid`=15402 AND `source_type`=0 AND `id`=6
diff --git a/sql/updates/world/2014_07_30_03_world_misc.sql b/sql/updates/world/2014_07_30_03_world_misc.sql
new file mode 100644
index 00000000000..3b6866ad935
--- /dev/null
+++ b/sql/updates/world/2014_07_30_03_world_misc.sql
@@ -0,0 +1,203 @@
+-- Fix and remove some Ango'rosh Souleater & Mauler spawns
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=18121);
+UPDATE `creature_template_addon` SET `auras`= '35194' WHERE `entry`=18121;
+DELETE FROM creature WHERE guid IN (64230,64242,64259,64229,64240);
+UPDATE `creature` SET `spawndist`=5,`MovementType`=1,`position_x`=1819.455,`position_y`=8405.807,`position_z`=-8.42151 WHERE `guid`=64261;
+
+-- Ango'rosh Shadowmage SAI
+SET @ENTRY := 20444;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ango'rosh Shadowmage - In Combat CMC - Cast 'Shadow Bolt'"),
+(@ENTRY,0,1,0,0,0,100,0,3000,5000,15000,19000,11,9657,1,0,0,0,0,1,0,0,0,0,0,0,0,"Ango'rosh Shadowmage - In Combat - Cast 'Shadow Shell'");
+
+-- Pathing for Ango'rosh Souleater Entry: 18121
+SET @NPC := 64246;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1483.504,`position_y`=8615.958,`position_z`=-23.3291 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '35194');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1483.504,8615.958,-23.3291,0,0,0,0,100,0),
+(@PATH,2,1502.414,8615.582,-27.77901,0,0,0,0,100,0),
+(@PATH,3,1549.829,8613.372,-33.61022,0,0,0,0,100,0),
+(@PATH,4,1595.268,8608.182,-32.85706,0,0,0,0,100,0),
+(@PATH,5,1549.829,8613.372,-33.61022,0,0,0,0,100,0),
+(@PATH,6,1502.414,8615.582,-27.77901,0,0,0,0,100,0);
+
+-- Pathing for Ango'rosh Mauler Entry: 18120
+SET @NPC := 64228;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1764.775,`position_y`=8621.494,`position_z`=3.295652 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1764.775,8621.494,3.295652,0,0,0,0,100,0),
+(@PATH,2,1755.779,8625.817,4.385007,0,0,0,0,100,0),
+(@PATH,3,1744.3,8627.528,6.188718,0,0,0,0,100,0),
+(@PATH,4,1729.123,8630.341,6.311835,0,0,0,0,100,0),
+(@PATH,5,1717.921,8632.591,8.065008,0,0,0,0,100,0),
+(@PATH,6,1699.805,8628.589,12.01016,0,0,0,0,100,0),
+(@PATH,7,1689.124,8621.329,12.50693,0,0,0,0,100,0),
+(@PATH,8,1681.696,8611.765,12.6384,0,0,0,0,100,0),
+(@PATH,9,1675.004,8605.295,12.36166,0,0,0,0,100,0),
+(@PATH,10,1664.974,8601.517,10.78405,0,0,0,0,100,0),
+(@PATH,11,1655.826,8594.225,8.950456,0,0,0,0,100,0),
+(@PATH,12,1649.307,8586.103,8.346086,0,0,0,0,100,0),
+(@PATH,13,1655.826,8594.225,8.950456,0,0,0,0,100,0),
+(@PATH,14,1664.974,8601.517,10.78405,0,0,0,0,100,0),
+(@PATH,15,1675.004,8605.295,12.36166,0,0,0,0,100,0),
+(@PATH,16,1681.696,8611.765,12.6384,0,0,0,0,100,0),
+(@PATH,17,1689.124,8621.329,12.50693,0,0,0,0,100,0),
+(@PATH,18,1699.805,8628.589,12.01016,0,0,0,0,100,0),
+(@PATH,19,1717.921,8632.591,8.065008,0,0,0,0,100,0),
+(@PATH,20,1729.123,8630.341,6.311835,0,0,0,0,100,0),
+(@PATH,21,1744.3,8627.528,6.188718,0,0,0,0,100,0),
+(@PATH,22,1755.779,8625.817,4.385007,0,0,0,0,100,0),
+(@PATH,23,1764.717,8621.615,3.358396,0,0,0,0,100,0),
+(@PATH,24,1770.793,8609.967,0.8600597,0,0,0,0,100,0),
+(@PATH,25,1778.085,8581.91,-7.021969,0,0,0,0,100,0),
+(@PATH,26,1781.569,8556.616,-9.007608,0,0,0,0,100,0),
+(@PATH,27,1791.778,8532.473,-16.78218,0,0,0,0,100,0),
+(@PATH,28,1806.07,8517.046,-16.52869,0,0,0,0,100,0),
+(@PATH,29,1812.219,8498.097,-19.58127,0,0,0,0,100,0),
+(@PATH,30,1805.245,8477.743,-19.69052,0,0,0,0,100,0),
+(@PATH,31,1809.99,8468.151,-16.3652,0,0,0,0,100,0),
+(@PATH,32,1822.48,8447.891,-16.88681,0,0,0,0,100,0),
+(@PATH,33,1809.99,8468.151,-16.3652,0,0,0,0,100,0),
+(@PATH,34,1805.245,8477.743,-19.69052,0,0,0,0,100,0),
+(@PATH,35,1812.219,8498.097,-19.58127,0,0,0,0,100,0),
+(@PATH,36,1806.07,8517.046,-16.52869,0,0,0,0,100,0),
+(@PATH,37,1791.797,8532.447,-16.83393,0,0,0,0,100,0),
+(@PATH,38,1781.569,8556.616,-9.007608,0,0,0,0,100,0),
+(@PATH,39,1778.085,8581.91,-7.021969,0,0,0,0,100,0),
+(@PATH,40,1770.793,8609.967,0.8600597,0,0,0,0,100,0);
+
+-- Pathing for Ango'rosh Mauler Entry: 18120
+SET @NPC := 64223;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1394.517,`position_y`=8623.379,`position_z`=9.483105 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1394.517,8623.379,9.483105,0,0,0,0,100,0),
+(@PATH,2,1367.01,8619.995,14.69728,0,0,0,0,100,0),
+(@PATH,3,1348.54,8608.503,18.98279,0,0,0,0,100,0),
+(@PATH,4,1330.298,8594.458,20.70809,0,0,0,0,100,0),
+(@PATH,5,1312.62,8590.247,19.89278,0,0,0,0,100,0),
+(@PATH,6,1271.029,8590.587,19.02531,0,0,0,0,100,0),
+(@PATH,7,1312.62,8590.247,19.89278,0,0,0,0,100,0),
+(@PATH,8,1330.298,8594.458,20.70809,0,0,0,0,100,0),
+(@PATH,9,1348.514,8608.496,18.99512,0,0,0,0,100,0),
+(@PATH,10,1367.01,8619.995,14.69728,0,0,0,0,100,0),
+(@PATH,11,1394.517,8623.379,9.483105,0,0,0,0,100,0),
+(@PATH,12,1409.568,8618.852,5.867712,0,0,0,0,100,0),
+(@PATH,13,1424.441,8607.313,3.257421,0,0,0,0,100,0),
+(@PATH,14,1441.44,8607.563,-2.581793,0,0,0,0,100,0),
+(@PATH,15,1461.23,8614.597,-12.20679,0,0,0,0,100,0),
+(@PATH,16,1484.593,8616.813,-23.64642,0,0,0,0,100,0),
+(@PATH,17,1461.683,8614.68,-12.70679,0,0,0,0,100,0),
+(@PATH,18,1441.522,8607.562,-2.717291,0,0,0,0,100,0),
+(@PATH,19,1424.441,8607.313,3.257421,0,0,0,0,100,0),
+(@PATH,20,1409.568,8618.852,5.867712,0,0,0,0,100,0);
+
+-- Pathing for Ango'rosh Mauler Entry: 18120
+SET @NPC := 64232;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1608.688,`position_y`=8551.909,`position_z`=-15.61611 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1608.688,8551.909,-15.61611,0,0,0,0,100,0),
+(@PATH,2,1606.189,8568.754,-21.79966,0,0,0,0,100,0),
+(@PATH,3,1608.48,8584.462,-29.34727,0,0,0,0,100,0),
+(@PATH,4,1606.189,8568.754,-21.79966,0,0,0,0,100,0),
+(@PATH,5,1608.679,8551.937,-15.42959,0,0,0,0,100,0),
+(@PATH,6,1611.307,8535.476,-8.693747,0,0,0,0,100,0),
+(@PATH,7,1615.581,8524.725,-6.334841,0,0,0,0,100,0),
+(@PATH,8,1622.581,8518.366,-5.849367,0,0,0,0,100,0),
+(@PATH,9,1631.158,8510.858,-6.801638,0,0,0,0,100,0),
+(@PATH,10,1644.64,8504.219,-7.020604,0,0,0,0,100,0),
+(@PATH,11,1654.69,8501.367,-6.633519,0,0,0,0,100,0),
+(@PATH,12,1665.907,8502.825,-6.924901,0,0,0,0,100,0),
+(@PATH,13,1672.206,8501.249,-7.81,0,0,0,0,100,0),
+(@PATH,14,1677.826,8494.035,-8.564032,0,0,0,0,100,0),
+(@PATH,15,1689.134,8484.7,-7.435247,0,0,0,0,100,0),
+(@PATH,16,1700.158,8477,-6.369071,0,0,0,0,100,0),
+(@PATH,17,1689.134,8484.7,-7.435247,0,0,0,0,100,0),
+(@PATH,18,1677.826,8494.035,-8.564032,0,0,0,0,100,0),
+(@PATH,19,1672.206,8501.249,-7.81,0,0,0,0,100,0),
+(@PATH,20,1665.907,8502.825,-6.924901,0,0,0,0,100,0),
+(@PATH,21,1654.69,8501.367,-6.633519,0,0,0,0,100,0),
+(@PATH,22,1644.64,8504.219,-7.020604,0,0,0,0,100,0),
+(@PATH,23,1631.158,8510.858,-6.801638,0,0,0,0,100,0),
+(@PATH,24,1622.581,8518.366,-5.849367,0,0,0,0,100,0),
+(@PATH,25,1615.581,8524.725,-6.334841,0,0,0,0,100,0),
+(@PATH,26,1611.307,8535.476,-8.693747,0,0,0,0,100,0);
+
+-- Pathing for Ango'rosh Mauler Entry: 18120
+SET @NPC := 64239;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1643.826,`position_y`=8612.983,`position_z`=-31.12585 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1643.826,8612.983,-31.12585,0,0,0,0,100,0),
+(@PATH,2,1636.367,8611.652,-28.45675,0,0,0,0,100,0),
+(@PATH,3,1631.083,8610.185,-27.16004,0,0,0,0,100,0),
+(@PATH,4,1624.009,8607.951,-25.66858,0,0,0,0,100,0),
+(@PATH,5,1630.667,8610.061,-27.07753,0,0,0,0,100,0),
+(@PATH,6,1636.367,8611.652,-28.45675,0,0,0,0,100,0),
+(@PATH,7,1643.823,8612.983,-31.1251,0,0,0,0,100,0),
+(@PATH,8,1653.174,8612.425,-33.30415,0,0,0,0,100,0),
+(@PATH,9,1659.041,8606.214,-35.02015,0,0,0,0,100,0),
+(@PATH,10,1663.339,8595.787,-39.44561,0,0,0,0,100,0),
+(@PATH,11,1668.673,8580.869,-43.56666,0,0,0,0,100,0),
+(@PATH,12,1672.773,8571.901,-45.45698,0,0,0,0,100,0),
+(@PATH,13,1683.156,8565.985,-47.18433,0,0,0,0,100,0),
+(@PATH,14,1706.897,8560.648,-45.62059,0,0,0,0,100,0),
+(@PATH,15,1683.156,8565.985,-47.18433,0,0,0,0,100,0),
+(@PATH,16,1672.773,8571.901,-45.45698,0,0,0,0,100,0),
+(@PATH,17,1668.673,8580.869,-43.56666,0,0,0,0,100,0),
+(@PATH,18,1663.339,8595.787,-39.44561,0,0,0,0,100,0),
+(@PATH,19,1659.041,8606.214,-35.02015,0,0,0,0,100,0),
+(@PATH,20,1653.174,8612.425,-33.30415,0,0,0,0,100,0);
+
+-- Pathing for Ango'rosh Mauler Entry: 18120
+SET @NPC := 64241;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1654.654,`position_y`=8521.531,`position_z`=-53.58351 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1654.654,8521.531,-53.58351,0,0,0,0,100,0),
+(@PATH,2,1649.625,8510.094,-54.21131,0,0,0,0,100,0),
+(@PATH,3,1648.938,8498.171,-53.83168,0,0,0,0,100,0),
+(@PATH,4,1656.672,8485.056,-55.70977,0,0,0,0,100,0),
+(@PATH,5,1668.375,8473.033,-58.77278,0,0,0,0,100,0),
+(@PATH,6,1682.668,8469.868,-61.03103,0,0,0,0,100,0),
+(@PATH,7,1693.718,8469.74,-60.3237,0,0,0,0,100,0),
+(@PATH,8,1702.251,8470.647,-59.50084,0,0,0,0,100,0),
+(@PATH,9,1715.028,8473.496,-57.46725,0,0,0,0,100,0),
+(@PATH,10,1702.251,8470.647,-59.50084,0,0,0,0,100,0),
+(@PATH,11,1693.747,8469.74,-60.23508,0,0,0,0,100,0),
+(@PATH,12,1682.668,8469.868,-61.03103,0,0,0,0,100,0),
+(@PATH,13,1668.375,8473.033,-58.77278,0,0,0,0,100,0),
+(@PATH,14,1656.672,8485.056,-55.70977,0,0,0,0,100,0),
+(@PATH,15,1648.938,8498.171,-53.83168,0,0,0,0,100,0),
+(@PATH,16,1649.625,8510.094,-54.21131,0,0,0,0,100,0),
+(@PATH,17,1654.654,8521.531,-53.58351,0,0,0,0,100,0),
+(@PATH,18,1664.266,8535.215,-51.28564,0,0,0,0,100,0),
+(@PATH,19,1673.347,8538.975,-49.83964,0,0,0,0,100,0),
+(@PATH,20,1687.687,8539.301,-49.18303,0,0,0,0,100,0),
+(@PATH,21,1698.444,8539.608,-48.25351,0,0,0,0,100,0),
+(@PATH,22,1687.687,8539.301,-49.18303,0,0,0,0,100,0),
+(@PATH,23,1673.364,8538.981,-49.88883,0,0,0,0,100,0),
+(@PATH,24,1664.266,8535.215,-51.28564,0,0,0,0,100,0);
diff --git a/sql/updates/world/2014_07_30_04_world_sai.sql b/sql/updates/world/2014_07_30_04_world_sai.sql
new file mode 100644
index 00000000000..0022886ca5a
--- /dev/null
+++ b/sql/updates/world/2014_07_30_04_world_sai.sql
@@ -0,0 +1,86 @@
+-- Warmaul Warlock SAI
+SET @ENTRY := 18037;
+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,50,1,1000,1000,0,0,11,11939,1,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Warlock - Out of Combat - Cast 'Summon Imp' (No Repeat)"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,2400,3800,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Warmaul Warlock - In Combat CMC - Cast 'Shadow Bolt'");
+
+-- Rajis Fyashe SAI
+SET @ENTRY := 18044;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,15043,64,0,0,0,0,2,0,0,0,0,0,0,0,"Rajis Fyashe - In Combat CMC - Cast 'Frostbolt'"),
+(@ENTRY,0,1,0,0,0,100,1,6000,9000,0,0,11,35594,1,0,0,0,0,1,0,0,0,0,0,0,0,"Rajis Fyashe - In Combat - Cast 'Mass Elementals' (No Repeat)"),
+(@ENTRY,0,2,0,0,0,100,0,8000,9000,8000,12000,11,35499,0,0,0,0,0,2,0,0,0,0,0,0,0,"Rajis Fyashe - In Combat - Cast 'Water Spout'"),
+(@ENTRY,0,3,0,0,0,100,0,18000,24000,18000,24000,11,34787,1,0,0,0,0,2,0,0,0,0,0,0,0,"Rajis Fyashe - In Combat - Cast 'Freezing Circle'"),
+(@ENTRY,0,4,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Rajis Fyashe - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Enraged Crusher SAI
+SET @ENTRY := 18062;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,65,0,30000,30000,8000,8000,11,32015,0,0,0,0,0,2,0,0,0,0,0,0,0,"Enraged Crusher - In Combat - Cast 'Knockdown'"),
+(@ENTRY,0,1,2,2,0,100,1,0,30,0,0,11,3019,0,0,0,0,0,1,0,0,0,0,0,0,0,"Enraged Crusher - Between 0-30% Health - Cast 'Frenzy' (No Repeat)"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Enraged Crusher - Between 0-30% Health - Say Line 0 (No Repeat)");
+
+-- Warmaul Shaman SAI
+SET @ENTRY := 18064;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,60,0,2000,2000,4000,4000,11,15038,0,0,0,0,0,2,0,0,0,0,0,0,0,"Warmaul Shaman - In Combat - Cast 'Scorching Totem'"),
+(@ENTRY,0,1,0,2,0,100,1,0,49,22000,22000,11,11986,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Shaman - Between 0-49% Health - Cast 'Healing Wave'");
+
+-- Umbrafen Oracle SAI
+SET @ENTRY := 18077;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,1,0,0,0,0,11,12550,0,0,0,0,0,1,0,0,0,0,0,0,0,"Umbrafen Oracle - On Aggro - Cast 'Lightning Shield'"),
+(@ENTRY,0,1,0,2,0,100,1,0,49,22000,22000,11,11986,0,0,0,0,0,1,0,0,0,0,0,0,0,"Umbrafen Oracle - Between 0-49% Health - Cast 'Healing Wave'");
+
+-- Darkcrest Siren SAI
+SET @ENTRY := 18087;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,9672,64,0,0,0,0,2,0,0,0,0,0,0,0,"Darkcrest Siren - In Combat CMC - Cast 'Frostbolt'"),
+(@ENTRY,0,1,0,0,0,100,0,7000,10000,14000,18000,11,11831,1,0,0,0,0,1,0,0,0,0,0,0,0,"Darkcrest Siren - In Combat - Cast 'Frost Nova'"),
+(@ENTRY,0,2,0,0,0,100,0,5000,7000,12000,17000,11,6726,1,0,0,0,0,5,0,0,0,0,0,0,0,"Darkcrest Siren - In Combat - Cast 'Silence'"),
+(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Darkcrest Siren - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Bloodscale Enchantress SAI
+SET @ENTRY := 18088;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,34447,64,0,0,0,0,2,0,0,0,0,0,0,0,"Bloodscale Enchantress - In Combat CMC - Cast 'Arcane Missiles'"),
+(@ENTRY,0,1,0,0,0,100,0,6000,8000,16000,22000,11,34787,1,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscale Enchantress - In Combat - Cast 'Freezing Circle'");
+
+-- Bloodscale Slavedriver SAI
+SET @ENTRY := 18089;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,1,0,0,0,0,11,32064,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscale Slavedriver - On Aggro - Cast 'Battle Shout' (No Repeat)");
+
+-- Bloodscale Wavecaller SAI
+SET @ENTRY := 20089;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,0,1000,1000,600000,600000,11,34827,33,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscale Wavecaller - Out of Combat - Cast 'Water Shield' (No Repeat)"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,2400,3800,11,32011,64,0,0,0,0,2,0,0,0,0,0,0,0,"Bloodscale Wavecaller - In Combat CMC - Cast 'Water Bolt'");
+
+-- Darkcrest Sorceress SAI
+SET @ENTRY := 19947;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,0,1000,1000,1800000,1800000,11,12544,33,0,0,0,0,1,0,0,0,0,0,0,0,"Darkcrest Sorceress - Out of Combat - Cast 'Frost Armor' (No Repeat)"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,2400,3800,11,13901,64,0,0,0,0,2,0,0,0,0,0,0,0,"Darkcrest Sorceress - In Combat CMC - Cast 'Arcane Bolt'"),
+(@ENTRY,0,2,0,0,0,100,0,10000,15000,20000,25000,11,34787,1,0,0,0,0,2,0,0,0,0,0,0,0,"Darkcrest Sorceress - In Combat - Cast 'Freezing Circle'"),
+(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Darkcrest Sorceress - Between 0-15% Health - Flee For Assist (No Repeat)");
diff --git a/sql/updates/world/2014_07_30_04_world_waypoints.sql5 b/sql/updates/world/2014_07_30_04_world_waypoints.sql5
new file mode 100644
index 00000000000..96a2ac74603
--- /dev/null
+++ b/sql/updates/world/2014_07_30_04_world_waypoints.sql5
@@ -0,0 +1,235 @@
+-- Pathing for Darkcrest Sentry Entry: 20079
+SET @NPC := 71525;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-811.9146,`position_y`=5769.104,`position_z`=17.18619 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-811.9146,5769.104,17.18619,0,0,0,0,100,0),
+(@PATH,2,-823.9103,5769.617,18.49771,0,0,0,0,100,0),
+(@PATH,3,-837.1352,5761.915,13.98373,0,0,0,0,100,0),
+(@PATH,4,-845.346,5746.582,15.9177,0,0,0,0,100,0),
+(@PATH,5,-856.5806,5737.951,17.44125,0,0,0,0,100,0),
+(@PATH,6,-870.8132,5739.455,18.25524,0,0,0,0,100,0),
+(@PATH,7,-876.6976,5766.97,17.9558,0,0,0,0,100,0),
+(@PATH,8,-879.2238,5786.183,17.97192,0,0,0,0,100,0),
+(@PATH,9,-877.8231,5799.473,18.22192,0,0,0,0,100,0),
+(@PATH,10,-875.8525,5816.587,18.1166,0,0,0,0,100,0),
+(@PATH,11,-870.438,5833.134,17.8666,0,0,0,0,100,0),
+(@PATH,12,-875.8525,5816.587,18.1166,0,0,0,0,100,0),
+(@PATH,13,-877.8231,5799.473,18.22192,0,0,0,0,100,0),
+(@PATH,14,-879.2238,5786.183,17.97192,0,0,0,0,100,0),
+(@PATH,15,-876.6976,5766.97,17.9558,0,0,0,0,100,0),
+(@PATH,16,-870.8132,5739.455,18.25524,0,0,0,0,100,0),
+(@PATH,17,-856.5806,5737.951,17.44125,0,0,0,0,100,0),
+(@PATH,18,-845.346,5746.582,15.9177,0,0,0,0,100,0),
+(@PATH,19,-837.1352,5761.915,13.98373,0,0,0,0,100,0),
+(@PATH,20,-823.9103,5769.617,18.49771,0,0,0,0,100,0),
+(@PATH,21,-811.9146,5769.104,17.18619,0,0,0,0,100,0),
+(@PATH,22,-803.7941,5777.138,19.5491,0,0,0,0,100,0),
+(@PATH,23,-805.7983,5789.479,19.2897,0,0,0,0,100,0),
+(@PATH,24,-813.3177,5798.603,18.38748,0,0,0,0,100,0),
+(@PATH,25,-825.4734,5800.777,17.13269,0,0,0,0,100,0),
+(@PATH,26,-841.5132,5803.947,14.80724,0,0,0,0,100,0),
+(@PATH,27,-853.8585,5824.338,14.71092,0,0,0,0,100,0),
+(@PATH,28,-864.2906,5832.222,17.76622,0,0,0,0,100,0),
+(@PATH,29,-853.9316,5824.39,14.72874,0,0,0,0,100,0),
+(@PATH,30,-841.5132,5803.947,14.80724,0,0,0,0,100,0),
+(@PATH,31,-825.4734,5800.777,17.13269,0,0,0,0,100,0),
+(@PATH,32,-813.3177,5798.603,18.38748,0,0,0,0,100,0),
+(@PATH,33,-805.7983,5789.479,19.2897,0,0,0,0,100,0),
+(@PATH,34,-803.7941,5777.138,19.5491,0,0,0,0,100,0);
+
+-- Pathing for Darkcrest Sentry Entry: 20079
+SET @NPC := 71526;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-410.8705,`position_y`=6309.836,`position_z`=17.62405 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-410.8705,6309.836,17.62405,0,0,0,0,100,0),
+(@PATH,2,-397.7162,6294.659,17.62408,0,0,0,0,100,0),
+(@PATH,3,-386.2312,6282.547,17.49908,0,0,0,0,100,0),
+(@PATH,4,-397.7162,6294.659,17.62408,0,0,0,0,100,0),
+(@PATH,5,-410.8705,6309.836,17.62405,0,0,0,0,100,0),
+(@PATH,6,-412.0008,6326.139,17.70071,0,0,0,0,100,0),
+(@PATH,7,-427.5412,6351.002,17.63304,0,0,0,0,100,0),
+(@PATH,8,-442.1701,6376.702,17.97111,0,0,0,0,100,0),
+(@PATH,9,-440.1516,6410.867,17.4473,0,0,0,0,100,0),
+(@PATH,10,-436.8709,6453.745,17.55275,0,0,0,0,100,0),
+(@PATH,11,-406.3064,6458.811,17.25673,0,0,0,0,100,0),
+(@PATH,12,-390.183,6444.14,17.39387,0,0,0,0,100,0),
+(@PATH,13,-406.3064,6458.811,17.25673,0,0,0,0,100,0),
+(@PATH,14,-436.8709,6453.745,17.55275,0,0,0,0,100,0),
+(@PATH,15,-440.1516,6410.867,17.4473,0,0,0,0,100,0),
+(@PATH,16,-442.1701,6376.702,17.97111,0,0,0,0,100,0),
+(@PATH,17,-427.5412,6351.002,17.63304,0,0,0,0,100,0),
+(@PATH,18,-412.0008,6326.139,17.70071,0,0,0,0,100,0);
+
+-- Pathing for Darkcrest Sentry Entry: 20079
+SET @NPC := 71527;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-355.7398,`position_y`=6439.344,`position_z`=17.67068 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-355.7398,6439.344,17.67068,0,0,0,0,100,0),
+(@PATH,2,-337.6484,6458.52,16.78129,0,0,0,0,100,0),
+(@PATH,3,-355.7398,6439.344,17.67068,0,0,0,0,100,0),
+(@PATH,4,-375.4502,6416.951,17.63828,0,0,0,0,100,0),
+(@PATH,5,-352.3055,6382.163,17.44267,0,0,0,0,100,0),
+(@PATH,6,-339.4132,6371.913,18.95378,0,0,0,0,100,0),
+(@PATH,7,-320.4037,6349.353,17.49905,0,0,0,0,100,0),
+(@PATH,8,-339.4132,6371.913,18.95378,0,0,0,0,100,0),
+(@PATH,9,-352.3055,6382.163,17.44267,0,0,0,0,100,0),
+(@PATH,10,-375.4502,6416.951,17.63828,0,0,0,0,100,0);
+
+-- Pathing for Darkcrest Sentry Entry: 20079
+SET @NPC := 71528;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-320.0476,`position_y`=6163.984,`position_z`=17.62409 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-320.0476,6163.984,17.62409,0,0,0,0,100,0),
+(@PATH,2,-331.2123,6150.911,17.87409,0,0,0,0,100,0),
+(@PATH,3,-345.0256,6140.545,18.02436,0,0,0,0,100,0),
+(@PATH,4,-360.5103,6137.307,17.89936,0,0,0,0,100,0),
+(@PATH,5,-381.054,6139.517,18.19844,0,0,0,0,100,0),
+(@PATH,6,-360.5103,6137.307,17.89936,0,0,0,0,100,0),
+(@PATH,7,-345.0256,6140.545,18.02436,0,0,0,0,100,0),
+(@PATH,8,-331.2123,6150.911,17.87409,0,0,0,0,100,0),
+(@PATH,9,-320.0476,6163.984,17.62409,0,0,0,0,100,0),
+(@PATH,10,-314.4604,6181.93,17.56598,0,0,0,0,100,0),
+(@PATH,11,-319.6298,6200.069,17.49909,0,0,0,0,100,0),
+(@PATH,12,-316.2941,6219.737,17.49909,0,0,0,0,100,0),
+(@PATH,13,-316.1273,6237.474,17.49908,0,0,0,0,100,0),
+(@PATH,14,-316.2941,6219.737,17.49909,0,0,0,0,100,0),
+(@PATH,15,-319.6298,6200.069,17.49909,0,0,0,0,100,0),
+(@PATH,16,-314.4604,6181.93,17.56598,0,0,0,0,100,0);
+
+-- Pathing for Darkcrest Sentry Entry: 20079
+SET @NPC := 71529;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-410.5085,`position_y`=6255.543,`position_z`=17.44794 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-410.5085,6255.543,17.44794,0,0,0,0,100,0),
+(@PATH,2,-386.918,6282.233,17.49908,0,0,0,0,100,0),
+(@PATH,3,-410.5085,6255.543,17.44794,0,0,0,0,100,0),
+(@PATH,4,-421.0254,6231.694,17.49909,0,0,0,0,100,0),
+(@PATH,5,-453.1329,6217.985,17.48819,0,0,0,0,100,0),
+(@PATH,6,-473.6789,6245.981,17.65528,0,0,0,0,100,0),
+(@PATH,7,-481.439,6255.942,17.70008,0,0,0,0,100,0),
+(@PATH,8,-482.8473,6271.657,17.61994,0,0,0,0,100,0),
+(@PATH,9,-471.7555,6293.839,17.87409,0,0,0,0,100,0),
+(@PATH,10,-456.8588,6315.148,17.00413,0,0,0,0,100,0),
+(@PATH,11,-445.0121,6331.941,17.53489,0,0,0,0,100,0),
+(@PATH,12,-456.8588,6315.148,17.00413,0,0,0,0,100,0),
+(@PATH,13,-471.7555,6293.839,17.87409,0,0,0,0,100,0),
+(@PATH,14,-482.8473,6271.657,17.61994,0,0,0,0,100,0),
+(@PATH,15,-481.439,6255.942,17.70008,0,0,0,0,100,0),
+(@PATH,16,-473.6789,6245.981,17.65528,0,0,0,0,100,0),
+(@PATH,17,-453.1329,6217.985,17.48819,0,0,0,0,100,0),
+(@PATH,18,-421.0254,6231.694,17.49909,0,0,0,0,100,0);
+
+-- Pathing for Darkcrest Sentry Entry: 20079
+SET @NPC := 71530;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-523.4554,`position_y`=5876.645,`position_z`=17.92353 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-523.4554,5876.645,17.92353,0,0,0,0,100,0),
+(@PATH,2,-540.7239,5876.821,17.94059,0,0,0,0,100,0),
+(@PATH,3,-546.246,5885.771,17.86613,0,0,0,0,100,0),
+(@PATH,4,-558.3109,5907.695,17.4421,0,0,0,0,100,0),
+(@PATH,5,-570.5005,5919.63,17.4075,0,0,0,0,100,0),
+(@PATH,6,-583.1713,5918.977,17.5325,0,0,0,0,100,0),
+(@PATH,7,-596.1543,5918.109,17.6575,0,0,0,0,100,0),
+(@PATH,8,-583.1713,5918.977,17.5325,0,0,0,0,100,0),
+(@PATH,9,-570.5005,5919.63,17.4075,0,0,0,0,100,0),
+(@PATH,10,-558.3109,5907.695,17.4421,0,0,0,0,100,0),
+(@PATH,11,-546.246,5885.771,17.86613,0,0,0,0,100,0),
+(@PATH,12,-540.7239,5876.821,17.94059,0,0,0,0,100,0);
+
+-- Pathing for Darkcrest Sentry Entry: 20079
+SET @NPC := 71531;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-685.4247,`position_y`=5744.201,`position_z`=14.45076 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-685.4247,5744.201,14.45076,0,0,0,0,100,0),
+(@PATH,2,-689.3704,5733.29,15.48919,0,0,0,0,100,0),
+(@PATH,3,-694.3406,5721.417,15.68475,0,0,0,0,100,0),
+(@PATH,4,-693.628,5710.063,17.0241,0,0,0,0,100,0),
+(@PATH,5,-685.0911,5693.25,17.02255,0,0,0,0,100,0),
+(@PATH,6,-664.6328,5678.895,16.09896,0,0,0,0,100,0),
+(@PATH,7,-634.0374,5672.613,14.96591,0,0,0,0,100,0),
+(@PATH,8,-620.5831,5687.272,16.39875,0,0,0,0,100,0),
+(@PATH,9,-613.4608,5698.938,17.93769,0,0,0,0,100,0),
+(@PATH,10,-616.0839,5713.076,16.13629,0,0,0,0,100,0),
+(@PATH,11,-618.7032,5726.208,14.38177,0,0,0,0,100,0),
+(@PATH,12,-634.3477,5740.746,9.167722,0,0,0,0,100,0),
+(@PATH,13,-644.801,5754.851,13.55782,0,0,0,0,100,0),
+(@PATH,14,-664.2159,5766.098,11.48791,0,0,0,0,100,0),
+(@PATH,15,-676.3831,5758.203,15.53962,0,0,0,0,100,0);
+
+-- Pathing for Darkcrest Sentry Entry: 20079
+SET @NPC := 71532;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-636.8377,`position_y`=5918.188,`position_z`=17.91747 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-636.8377,5918.188,17.91747,0,0,0,0,100,0),
+(@PATH,2,-650.0894,5912.31,17.40759,0,0,0,0,100,0),
+(@PATH,3,-649.3865,5895.695,18.2393,0,0,0,0,100,0),
+(@PATH,4,-649.5691,5884.616,15.62773,0,0,0,0,100,0),
+(@PATH,5,-649.3865,5895.695,18.2393,0,0,0,0,100,0),
+(@PATH,6,-650.0894,5912.31,17.40759,0,0,0,0,100,0),
+(@PATH,7,-636.8377,5918.188,17.91747,0,0,0,0,100,0),
+(@PATH,8,-619.8817,5917.089,17.98915,0,0,0,0,100,0),
+(@PATH,9,-605.9981,5915.45,17.85243,0,0,0,0,100,0),
+(@PATH,10,-592.5848,5917.771,17.47745,0,0,0,0,100,0),
+(@PATH,11,-605.9981,5915.45,17.85243,0,0,0,0,100,0),
+(@PATH,12,-619.8817,5917.089,17.98915,0,0,0,0,100,0);
+
+-- Pathing for Darkcrest Sentry Entry: 20079
+SET @NPC := 71533;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-745.6512,`position_y`=5946.403,`position_z`=17.49909 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-745.6512,5946.403,17.49909,0,0,0,0,100,0),
+(@PATH,2,-733.8559,5949.237,17.62409,0,0,0,0,100,0),
+(@PATH,3,-715.53,5953.377,17.4991,0,0,0,0,100,0),
+(@PATH,4,-694.0532,5951.034,17.4991,0,0,0,0,100,0),
+(@PATH,5,-684.2486,5942.766,17.77119,0,0,0,0,100,0),
+(@PATH,6,-674.2134,5928.139,17.84693,0,0,0,0,100,0),
+(@PATH,7,-684.2486,5942.766,17.77119,0,0,0,0,100,0),
+(@PATH,8,-694.0532,5951.034,17.4991,0,0,0,0,100,0),
+(@PATH,9,-715.53,5953.377,17.4991,0,0,0,0,100,0),
+(@PATH,10,-733.8559,5949.237,17.62409,0,0,0,0,100,0),
+(@PATH,11,-745.6512,5946.403,17.49909,0,0,0,0,100,0),
+(@PATH,12,-763.0795,5961.114,18.29157,0,0,0,0,100,0),
+(@PATH,13,-790.5579,5959.934,17.61956,0,0,0,0,100,0),
+(@PATH,14,-816.7445,5948.383,17.49907,0,0,0,0,100,0),
+(@PATH,15,-839.172,5933.668,17.74907,0,0,0,0,100,0),
+(@PATH,16,-846.7526,5922.306,17.63042,0,0,0,0,100,0),
+(@PATH,17,-839.172,5933.668,17.74907,0,0,0,0,100,0),
+(@PATH,18,-816.7445,5948.383,17.49907,0,0,0,0,100,0),
+(@PATH,19,-790.5579,5959.934,17.61956,0,0,0,0,100,0),
+(@PATH,20,-763.0795,5961.114,18.29157,0,0,0,0,100,0);
diff --git a/sql/updates/world/2014_07_30_05_world_waypoints.sql b/sql/updates/world/2014_07_30_05_world_waypoints.sql
new file mode 100644
index 00000000000..bf6b238de11
--- /dev/null
+++ b/sql/updates/world/2014_07_30_05_world_waypoints.sql
@@ -0,0 +1,281 @@
+-- Pathing for Bloodscale Sentry Entry: 20090
+SET @NPC := 71581;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=759.4943,`position_y`=6306.357,`position_z`=17.4089 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,759.4943,6306.357,17.4089,0,0,0,0,100,0),
+(@PATH,2,743.9999,6305.703,17.4089,0,0,0,0,100,0),
+(@PATH,3,759.4943,6306.357,17.4089,0,0,0,0,100,0),
+(@PATH,4,777.3499,6314.912,17.43856,0,0,0,0,100,0),
+(@PATH,5,794.5563,6329.634,17.56356,0,0,0,0,100,0),
+(@PATH,6,808.5778,6354.748,17.60061,0,0,0,0,100,0),
+(@PATH,7,810.1545,6398.271,17.51148,0,0,0,0,100,0),
+(@PATH,8,809.5649,6422.784,17.63817,0,0,0,0,100,0),
+(@PATH,9,808.3696,6436.6,17.43865,0,0,0,0,100,0),
+(@PATH,10,792.6043,6452.208,17.50587,0,0,0,0,100,0),
+(@PATH,11,795.5001,6464.677,17.50587,0,0,0,0,100,0),
+(@PATH,12,802.4607,6493.509,17.52557,0,0,0,0,100,0),
+(@PATH,13,791.0586,6509.359,17.21747,0,0,0,0,100,0),
+(@PATH,14,779.1663,6519.042,17.46943,0,0,0,0,100,0),
+(@PATH,15,778.7495,6533.446,17.41533,0,0,0,0,100,0),
+(@PATH,16,779.1663,6519.042,17.46943,0,0,0,0,100,0),
+(@PATH,17,791.0586,6509.359,17.21747,0,0,0,0,100,0),
+(@PATH,18,802.4607,6493.509,17.52557,0,0,0,0,100,0),
+(@PATH,19,795.5001,6464.677,17.50587,0,0,0,0,100,0),
+(@PATH,20,792.6043,6452.208,17.50587,0,0,0,0,100,0),
+(@PATH,21,808.3696,6436.6,17.43865,0,0,0,0,100,0),
+(@PATH,22,809.5649,6422.784,17.63817,0,0,0,0,100,0),
+(@PATH,23,810.1545,6398.271,17.51148,0,0,0,0,100,0),
+(@PATH,24,808.5778,6354.748,17.60061,0,0,0,0,100,0),
+(@PATH,25,794.5563,6329.634,17.56356,0,0,0,0,100,0),
+(@PATH,26,777.3499,6314.912,17.43856,0,0,0,0,100,0);
+
+-- Pathing for Bloodscale Sentry Entry: 20090
+SET @NPC := 71582;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=598.7636,`position_y`=8083.793,`position_z`=17.6241 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,598.7636,8083.793,17.6241,0,0,0,0,100,0),
+(@PATH,2,599.6365,8065.933,17.75457,0,0,0,0,100,0),
+(@PATH,3,596.1388,8050.151,18.00457,0,0,0,0,100,0),
+(@PATH,4,596.8356,8025.449,17.44117,0,0,0,0,100,0),
+(@PATH,5,621.4521,8017.487,17.50146,0,0,0,0,100,0),
+(@PATH,6,644.4905,8017.622,17.50067,0,0,0,0,100,0),
+(@PATH,7,662.3524,8008.327,17.5639,0,0,0,0,100,0),
+(@PATH,8,693.9063,7983.882,17.44135,0,0,0,0,100,0),
+(@PATH,9,714.2939,7989.167,17.52692,0,0,0,0,100,0),
+(@PATH,10,693.9063,7983.882,17.44135,0,0,0,0,100,0),
+(@PATH,11,662.3524,8008.327,17.5639,0,0,0,0,100,0),
+(@PATH,12,644.4905,8017.622,17.50067,0,0,0,0,100,0),
+(@PATH,13,621.4521,8017.487,17.50146,0,0,0,0,100,0),
+(@PATH,14,596.8356,8025.449,17.44117,0,0,0,0,100,0),
+(@PATH,15,596.1388,8050.151,18.00457,0,0,0,0,100,0),
+(@PATH,16,599.6365,8065.933,17.75457,0,0,0,0,100,0),
+(@PATH,17,598.7636,8083.793,17.6241,0,0,0,0,100,0),
+(@PATH,18,588.2853,8104.152,17.4111,0,0,0,0,100,0),
+(@PATH,19,568.5647,8114.293,17.2861,0,0,0,0,100,0),
+(@PATH,20,596.414,8115.547,17.4111,0,0,0,0,100,0),
+(@PATH,21,600.2018,8135.068,17.58697,0,0,0,0,100,0),
+(@PATH,22,597.5128,8154.914,18.0076,0,0,0,0,100,0),
+(@PATH,23,596.1393,8167.66,15.3831,0,0,0,0,100,0),
+(@PATH,24,597.5128,8154.914,18.0076,0,0,0,0,100,0),
+(@PATH,25,600.2018,8135.068,17.58697,0,0,0,0,100,0),
+(@PATH,26,596.414,8115.547,17.4111,0,0,0,0,100,0),
+(@PATH,27,568.5647,8114.293,17.2861,0,0,0,0,100,0),
+(@PATH,28,588.2853,8104.152,17.4111,0,0,0,0,100,0);
+
+-- Pathing for Bloodscale Sentry Entry: 20090
+SET @NPC := 71583;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=583.2789,`position_y`=6151.631,`position_z`=17.56806 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,583.2789,6151.631,17.56806,0,0,0,0,100,0),
+(@PATH,2,588.7063,6121.675,17.49909,0,0,0,0,100,0),
+(@PATH,3,604.5994,6116.76,17.4991,0,0,0,0,100,0),
+(@PATH,4,627.8912,6116.608,17.4991,0,0,0,0,100,0),
+(@PATH,5,642.8787,6127.678,17.49909,0,0,0,0,100,0),
+(@PATH,6,664.4583,6155.981,17.4254,0,0,0,0,100,0),
+(@PATH,7,647.6324,6179.767,17.45327,0,0,0,0,100,0),
+(@PATH,8,640.0746,6202.314,17.48018,0,0,0,0,100,0),
+(@PATH,9,621.8489,6238.127,17.64701,0,0,0,0,100,0),
+(@PATH,10,600.6134,6251.576,17.77201,0,0,0,0,100,0),
+(@PATH,11,621.8489,6238.127,17.64701,0,0,0,0,100,0),
+(@PATH,12,640.0746,6202.314,17.48018,0,0,0,0,100,0),
+(@PATH,13,647.6324,6179.767,17.45327,0,0,0,0,100,0),
+(@PATH,14,664.4583,6155.981,17.4254,0,0,0,0,100,0),
+(@PATH,15,642.8787,6127.678,17.49909,0,0,0,0,100,0),
+(@PATH,16,627.8912,6116.608,17.4991,0,0,0,0,100,0),
+(@PATH,17,604.5994,6116.76,17.4991,0,0,0,0,100,0),
+(@PATH,18,588.7063,6121.675,17.49909,0,0,0,0,100,0);
+
+-- Pathing for Bloodscale Sentry Entry: 20090
+SET @NPC := 71584;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=484.8557,`position_y`=6147.238,`position_z`=17.39692 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,484.8557,6147.238,17.39692,0,0,0,0,100,0),
+(@PATH,2,497.8846,6127.964,17.62593,0,0,0,0,100,0),
+(@PATH,3,508.6398,6118.515,17.57525,0,0,0,0,100,0),
+(@PATH,4,529.306,6106.489,17.57525,0,0,0,0,100,0),
+(@PATH,5,543.109,6101.563,17.53619,0,0,0,0,100,0),
+(@PATH,6,562.1443,6106.827,17.66119,0,0,0,0,100,0),
+(@PATH,7,543.109,6101.563,17.53619,0,0,0,0,100,0),
+(@PATH,8,529.306,6106.489,17.57525,0,0,0,0,100,0),
+(@PATH,9,508.6398,6118.515,17.57525,0,0,0,0,100,0),
+(@PATH,10,497.8846,6127.964,17.62593,0,0,0,0,100,0),
+(@PATH,11,484.8557,6147.238,17.39692,0,0,0,0,100,0),
+(@PATH,12,479.6094,6168.237,17.3991,0,0,0,0,100,0),
+(@PATH,13,497.7457,6180.41,17.3991,0,0,0,0,100,0),
+(@PATH,14,520.0167,6193.519,17.50527,0,0,0,0,100,0),
+(@PATH,15,497.7457,6180.41,17.3991,0,0,0,0,100,0),
+(@PATH,16,479.6094,6168.237,17.3991,0,0,0,0,100,0);
+
+-- Pathing for Bloodscale Sentry Entry: 20090
+SET @NPC := 71585;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=714.0928,`position_y`=6330.395,`position_z`=17.28641 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,714.0928,6330.395,17.28641,0,0,0,0,100,0),
+(@PATH,2,711.8986,6368.565,17.3039,0,0,0,0,100,0),
+(@PATH,3,714.0928,6330.395,17.28641,0,0,0,0,100,0),
+(@PATH,4,707.5536,6305.207,17.44607,0,0,0,0,100,0),
+(@PATH,5,688.4388,6290.488,17.43558,0,0,0,0,100,0),
+(@PATH,6,686.5964,6275.249,17.68558,0,0,0,0,100,0),
+(@PATH,7,675.7322,6259.213,17.66298,0,0,0,0,100,0),
+(@PATH,8,660.7868,6235.378,17.60566,0,0,0,0,100,0),
+(@PATH,9,637.1617,6227.35,17.69966,0,0,0,0,100,0),
+(@PATH,10,615.4294,6239.798,17.64701,0,0,0,0,100,0),
+(@PATH,11,601.6331,6250.868,17.77201,0,0,0,0,100,0),
+(@PATH,12,615.4294,6239.798,17.64701,0,0,0,0,100,0),
+(@PATH,13,637.1617,6227.35,17.69966,0,0,0,0,100,0),
+(@PATH,14,660.7868,6235.378,17.60566,0,0,0,0,100,0),
+(@PATH,15,675.7322,6259.213,17.66298,0,0,0,0,100,0),
+(@PATH,16,686.5964,6275.249,17.68558,0,0,0,0,100,0),
+(@PATH,17,688.4388,6290.488,17.43558,0,0,0,0,100,0),
+(@PATH,18,707.5536,6305.207,17.44607,0,0,0,0,100,0);
+
+-- Pathing for Bloodscale Sentry Entry: 20090
+SET @NPC := 71586;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=456.8788,`position_y`=6370.086,`position_z`=17.94312 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,456.8788,6370.086,17.94312,0,0,0,0,100,0),
+(@PATH,2,452.2714,6389.746,17.81812,0,0,0,0,100,0),
+(@PATH,3,467.8412,6407.655,17.79832,0,0,0,0,100,0),
+(@PATH,4,491.2019,6411.824,15.48412,0,0,0,0,100,0),
+(@PATH,5,467.8412,6407.655,17.79832,0,0,0,0,100,0),
+(@PATH,6,452.2714,6389.746,17.81812,0,0,0,0,100,0),
+(@PATH,7,456.8788,6370.086,17.94312,0,0,0,0,100,0),
+(@PATH,8,454.0548,6347.622,17.85618,0,0,0,0,100,0),
+(@PATH,9,446.207,6326.609,17.93723,0,0,0,0,100,0),
+(@PATH,10,441.623,6303.469,17.93723,0,0,0,0,100,0),
+(@PATH,11,446.207,6326.609,17.93723,0,0,0,0,100,0),
+(@PATH,12,454.0548,6347.622,17.85618,0,0,0,0,100,0);
+
+-- Pathing for Bloodscale Sentry Entry: 20090
+SET @NPC := 71587;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=473.7206,`position_y`=8024.335,`position_z`=17.56001 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,473.7206,8024.335,17.56001,0,0,0,0,100,0),
+(@PATH,2,496.147,8008.202,17.40107,0,0,0,0,100,0),
+(@PATH,3,517.5805,8011.069,17.49237,0,0,0,0,100,0),
+(@PATH,4,538.4409,8009.085,17.53157,0,0,0,0,100,0),
+(@PATH,5,560.729,8010.077,17.4316,0,0,0,0,100,0),
+(@PATH,6,589.2994,8011.602,17.44117,0,0,0,0,100,0),
+(@PATH,7,560.729,8010.077,17.4316,0,0,0,0,100,0),
+(@PATH,8,538.4409,8009.085,17.53157,0,0,0,0,100,0),
+(@PATH,9,517.5805,8011.069,17.49237,0,0,0,0,100,0),
+(@PATH,10,496.147,8008.202,17.40107,0,0,0,0,100,0),
+(@PATH,11,473.7206,8024.335,17.56001,0,0,0,0,100,0),
+(@PATH,12,458.5915,8058.235,17.49908,0,0,0,0,100,0),
+(@PATH,13,454.0531,8072.585,17.49909,0,0,0,0,100,0),
+(@PATH,14,440.1596,8088.723,17.49909,0,0,0,0,100,0),
+(@PATH,15,433.4708,8105.307,17.77139,0,0,0,0,100,0),
+(@PATH,16,440.1596,8088.723,17.49909,0,0,0,0,100,0),
+(@PATH,17,454.0531,8072.585,17.49909,0,0,0,0,100,0),
+(@PATH,18,458.5915,8058.235,17.49908,0,0,0,0,100,0);
+
+-- Pathing for Bloodscale Sentry Entry: 20090
+SET @NPC := 71588;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=763.2474,`position_y`=8077.369,`position_z`=17.49908 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,763.2474,8077.369,17.49908,0,0,0,0,100,0),
+(@PATH,2,764.3576,8096.227,17.49908,0,0,0,0,100,0),
+(@PATH,3,763.1123,8113.93,17.49908,0,0,0,0,100,0),
+(@PATH,4,754.1951,8129.958,17.565,0,0,0,0,100,0),
+(@PATH,5,746.9005,8144.393,16.9609,0,0,0,0,100,0),
+(@PATH,6,754.1951,8129.958,17.565,0,0,0,0,100,0),
+(@PATH,7,763.1123,8113.93,17.49908,0,0,0,0,100,0),
+(@PATH,8,764.3576,8096.227,17.49908,0,0,0,0,100,0),
+(@PATH,9,763.2474,8077.369,17.49908,0,0,0,0,100,0),
+(@PATH,10,753.71,8050.239,17.49907,0,0,0,0,100,0),
+(@PATH,11,736.1158,8032.819,17.50464,0,0,0,0,100,0),
+(@PATH,12,727.4476,8005.954,17.80172,0,0,0,0,100,0),
+(@PATH,13,736.1158,8032.819,17.50464,0,0,0,0,100,0),
+(@PATH,14,753.71,8050.239,17.49907,0,0,0,0,100,0);
+
+-- Pathing for Bloodscale Sentry Entry: 20090
+SET @NPC := 71589;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=590.5538,`position_y`=6385.54,`position_z`=19.41796 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,590.5538,6385.54,19.41796,0,0,0,0,100,0),
+(@PATH,2,576.1758,6381.048,19.19262,0,0,0,0,100,0),
+(@PATH,3,549.4913,6380.258,16.99608,0,0,0,0,100,0),
+(@PATH,4,536.714,6381.334,19.3341,0,0,0,0,100,0),
+(@PATH,5,512.5249,6386.269,20.09841,0,0,0,0,100,0),
+(@PATH,6,536.714,6381.334,19.3341,0,0,0,0,100,0),
+(@PATH,7,549.4913,6380.258,16.99608,0,0,0,0,100,0),
+(@PATH,8,576.1758,6381.048,19.19262,0,0,0,0,100,0),
+(@PATH,9,590.502,6385.516,19.35204,0,0,0,0,100,0),
+(@PATH,10,603.5302,6383.618,19.05107,0,0,0,0,100,0),
+(@PATH,11,618.3229,6384.962,19.48649,0,0,0,0,100,0),
+(@PATH,12,629.5106,6391.457,18.35343,0,0,0,0,100,0),
+(@PATH,13,618.3229,6384.962,19.48649,0,0,0,0,100,0),
+(@PATH,14,603.5302,6383.618,19.05107,0,0,0,0,100,0);
+
+-- Pathing for Bloodscale Sentry Entry: 20090
+SET @NPC := 71590;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=384.1659,`position_y`=8112.826,`position_z`=17.53038 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,384.1659,8112.826,17.53038,0,0,0,0,100,0),
+(@PATH,2,403.2718,8119.023,17.60357,0,0,0,0,100,0),
+(@PATH,3,421.5509,8121.888,17.61883,0,0,0,0,100,0),
+(@PATH,4,422.268,8135.977,17.62646,0,0,0,0,100,0),
+(@PATH,5,421.0201,8147.833,17.5863,0,0,0,0,100,0),
+(@PATH,6,410.0742,8161.833,17.12646,0,0,0,0,100,0),
+(@PATH,7,405.593,8175.743,17.44895,0,0,0,0,100,0),
+(@PATH,8,404.0476,8192.669,17.69895,0,0,0,0,100,0),
+(@PATH,9,405.593,8175.743,17.44895,0,0,0,0,100,0),
+(@PATH,10,410.0742,8161.833,17.12646,0,0,0,0,100,0),
+(@PATH,11,421.0201,8147.833,17.5863,0,0,0,0,100,0),
+(@PATH,12,422.268,8135.977,17.62646,0,0,0,0,100,0),
+(@PATH,13,421.5509,8121.888,17.61883,0,0,0,0,100,0),
+(@PATH,14,403.2718,8119.023,17.60357,0,0,0,0,100,0),
+(@PATH,15,384.1659,8112.826,17.53038,0,0,0,0,100,0),
+(@PATH,16,366.2072,8100.374,17.74176,0,0,0,0,100,0),
+(@PATH,17,338.3154,8112.941,17.49909,0,0,0,0,100,0),
+(@PATH,18,330.1254,8143.837,17.49909,0,0,0,0,100,0),
+(@PATH,19,324.209,8171.819,17.64763,0,0,0,0,100,0),
+(@PATH,20,312.2263,8170.651,17.40044,0,0,0,0,100,0),
+(@PATH,21,292.32,8159.853,17.61897,0,0,0,0,100,0),
+(@PATH,22,277.5932,8158.432,17.57466,0,0,0,0,100,0),
+(@PATH,23,292.32,8159.853,17.61897,0,0,0,0,100,0),
+(@PATH,24,312.2263,8170.651,17.40044,0,0,0,0,100,0),
+(@PATH,25,324.209,8171.819,17.64763,0,0,0,0,100,0),
+(@PATH,26,330.1254,8143.837,17.49909,0,0,0,0,100,0),
+(@PATH,27,338.3154,8112.941,17.49909,0,0,0,0,100,0),
+(@PATH,28,366.2072,8100.374,17.74176,0,0,0,0,100,0);
diff --git a/sql/updates/world/2014_07_30_06_world_waypoints.sql b/sql/updates/world/2014_07_30_06_world_waypoints.sql
new file mode 100644
index 00000000000..c0a8a2ee413
--- /dev/null
+++ b/sql/updates/world/2014_07_30_06_world_waypoints.sql
@@ -0,0 +1,68 @@
+-- Pathing for Swamprat Guard Entry: 18910
+SET @NPC := 67906;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=75.29373,`position_y`=5261.419,`position_z`=23.08392 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,257,0, '5301');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,75.29373,5261.419,23.08392,0,0,0,0,100,0),
+(@PATH,2,75.29796,5274.807,23.04233,0,0,0,0,100,0),
+(@PATH,3,82.62872,5302.216,22.98195,0,0,0,0,100,0),
+(@PATH,4,83.02105,5314.273,22.13724,0,0,0,0,100,0),
+(@PATH,5,82.34508,5302.751,22.97913,0,0,0,0,100,0),
+(@PATH,6,75.29796,5274.807,23.04233,0,0,0,0,100,0),
+(@PATH,7,75.29373,5261.419,23.08392,0,0,0,0,100,0),
+(@PATH,8,75.86388,5247.502,23.12924,0,0,0,0,100,0),
+(@PATH,9,79.21181,5240.832,23.16174,0,0,0,0,100,0),
+(@PATH,10,87.85194,5229.543,22.38807,0,0,0,0,100,0),
+(@PATH,11,79.21181,5240.832,23.16174,0,0,0,0,100,0),
+(@PATH,12,75.86388,5247.502,23.12924,0,0,0,0,100,0);
+
+-- Pathing for Swamprat Guard Entry: 18910
+SET @NPC := 67907;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=75.29373,`position_y`=5261.419,`position_z`=23.08392 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,257,0, '5301');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,75.29373,5261.419,23.08392,0,0,0,0,100,0),
+(@PATH,2,75.29796,5274.807,23.04233,0,0,0,0,100,0),
+(@PATH,3,82.62872,5302.216,22.98195,0,0,0,0,100,0),
+(@PATH,4,83.02105,5314.273,22.13724,0,0,0,0,100,0),
+(@PATH,5,82.34508,5302.751,22.97913,0,0,0,0,100,0),
+(@PATH,6,75.29796,5274.807,23.04233,0,0,0,0,100,0),
+(@PATH,7,75.29373,5261.419,23.08392,0,0,0,0,100,0),
+(@PATH,8,75.86388,5247.502,23.12924,0,0,0,0,100,0),
+(@PATH,9,79.21181,5240.832,23.16174,0,0,0,0,100,0),
+(@PATH,10,87.85194,5229.543,22.38807,0,0,0,0,100,0),
+(@PATH,11,79.21181,5240.832,23.16174,0,0,0,0,100,0),
+(@PATH,12,75.86388,5247.502,23.12924,0,0,0,0,100,0);
+
+-- Add Swamprat Guard formation
+DELETE FROM `creature_formations` WHERE `leaderGUID`=67907;
+INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`)VALUES
+(67907,67907,0,0,2),(67907,67906,3,0,2);
+
+-- Pathing for Swamprat Guard Entry: 18910
+SET @NPC := 67910;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=104.3016,`position_y`=5221.673,`position_z`=22.33099 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,257,0, '5301');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,104.3016,5221.673,22.33099,0,0,0,0,100,0),
+(@PATH,2,98.48994,5217.889,22.21583,0,0,0,0,100,0),
+(@PATH,3,97.17163,5209.297,21.69117,0,0,0,0,100,0),
+(@PATH,4,82.73155,5204.081,22.44019,0,0,0,0,100,0),
+(@PATH,5,80.67603,5193.767,21.65778,0,0,0,0,100,0),
+(@PATH,6,90.1913,5186.492,21.33686,0,0,0,0,100,0),
+(@PATH,7,92.36255,5170.327,22.81916,0,0,0,0,100,0),
+(@PATH,8,104.2373,5163.936,22.91181,0,0,0,0,100,0),
+(@PATH,9,108.7816,5178.44,22.09893,0,0,0,0,100,0),
+(@PATH,10,121.7926,5183.15,24.04241,0,0,0,0,100,0),
+(@PATH,11,117.1341,5191.477,23.33294,0,0,0,0,100,0),
+(@PATH,12,118.593,5209.887,22.58294,0,0,0,0,100,0),
+(@PATH,13,114.1548,5216.103,23.23504,0,0,0,0,100,0);
diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp
index f5cc3bf2508..0b1a93b3d2a 100644
--- a/src/server/authserver/Main.cpp
+++ b/src/server/authserver/Main.cpp
@@ -70,18 +70,18 @@ int main(int argc, char** argv)
if (vm.count("help"))
return 0;
- if (!sConfigMgr->LoadInitial(configFile))
+ std::string configError;
+ if (!sConfigMgr->LoadInitial(configFile, configError))
{
- printf("Invalid or missing configuration file : %s\n", configFile.c_str());
- printf("Verify that the file exists and has \'[authserver]\' written in the top of the file!\n");
+ printf("Error in config file: %s\n", configError.c_str());
return 1;
}
TC_LOG_INFO("server.authserver", "%s (authserver)", _FULLVERSION);
TC_LOG_INFO("server.authserver", "<Ctrl-C> to stop.\n");
TC_LOG_INFO("server.authserver", "Using configuration file %s.", configFile.c_str());
- TC_LOG_INFO("server.worldserver", "Using SSL version: %s (library: %s)", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION));
- TC_LOG_INFO("server.worldserver", "Using Boost version: %i.%i.%i", BOOST_VERSION / 100000, BOOST_VERSION / 100 % 1000, BOOST_VERSION % 100);
+ TC_LOG_INFO("server.authserver", "Using SSL version: %s (library: %s)", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION));
+ TC_LOG_INFO("server.authserver", "Using Boost version: %i.%i.%i", BOOST_VERSION / 100000, BOOST_VERSION / 100 % 1000, BOOST_VERSION % 100);
// authserver PID file creation
std::string pidFile = sConfigMgr->GetStringDefault("PidFile", "");
diff --git a/src/server/authserver/Server/AuthSession.cpp b/src/server/authserver/Server/AuthSession.cpp
index 6607e98fb3b..ac7c1cfaee5 100644
--- a/src/server/authserver/Server/AuthSession.cpp
+++ b/src/server/authserver/Server/AuthSession.cpp
@@ -108,8 +108,13 @@ typedef struct AUTH_RECONNECT_PROOF_C
#pragma pack(pop)
-#define BYTE_SIZE 32
-#define REALMLIST_SKIP_PACKETS 5
+enum class BufferSizes : uint32
+{
+ SRP_6_V = 0x20,
+ SRP_6_S = 0x20,
+};
+
+#define REALM_LIST_PACKET_SIZE 5
#define XFER_ACCEPT_SIZE 1
#define XFER_RESUME_SIZE 9
#define XFER_CANCEL_SIZE 1
@@ -122,7 +127,7 @@ std::unordered_map<uint8, AuthHandler> AuthSession::InitHandlers()
handlers[AUTH_LOGON_PROOF] = { STATUS_CONNECTED, sizeof(AUTH_LOGON_PROOF_C), &AuthSession::HandleLogonProof };
handlers[AUTH_RECONNECT_CHALLENGE] = { STATUS_CONNECTED, sizeof(AUTH_LOGON_CHALLENGE_C), &AuthSession::HandleReconnectChallenge };
handlers[AUTH_RECONNECT_PROOF] = { STATUS_CONNECTED, sizeof(AUTH_RECONNECT_PROOF_C), &AuthSession::HandleReconnectProof };
- handlers[REALM_LIST] = { STATUS_AUTHED, REALMLIST_SKIP_PACKETS, &AuthSession::HandleRealmList };
+ handlers[REALM_LIST] = { STATUS_AUTHED, REALM_LIST_PACKET_SIZE, &AuthSession::HandleRealmList };
handlers[XFER_ACCEPT] = { STATUS_AUTHED, XFER_ACCEPT_SIZE, &AuthSession::HandleXferAccept };
handlers[XFER_RESUME] = { STATUS_AUTHED, XFER_RESUME_SIZE, &AuthSession::HandleXferResume };
handlers[XFER_CANCEL] = { STATUS_AUTHED, XFER_CANCEL_SIZE, &AuthSession::HandleXferCancel };
@@ -318,7 +323,7 @@ bool AuthSession::HandleLogonChallenge()
TC_LOG_DEBUG("network", "database authentication values: v='%s' s='%s'", databaseV.c_str(), databaseS.c_str());
// multiply with 2 since bytes are stored as hexstring
- if (databaseV.size() != BYTE_SIZE * 2 || databaseS.size() != BYTE_SIZE * 2)
+ if (databaseV.size() != size_t(BufferSizes::SRP_6_V) * 2 || databaseS.size() != size_t(BufferSizes::SRP_6_S) * 2)
SetVSFields(rI);
else
{
@@ -346,10 +351,10 @@ bool AuthSession::HandleLogonChallenge()
// B may be calculated < 32B so we force minimal length to 32B
pkt.append(B.AsByteArray(32).get(), 32); // 32 bytes
pkt << uint8(1);
- pkt.append(g.AsByteArray().get(), 1);
+ pkt.append(g.AsByteArray(1).get(), 1);
pkt << uint8(32);
pkt.append(N.AsByteArray(32).get(), 32);
- pkt.append(s.AsByteArray().get(), s.GetNumBytes()); // 32 bytes
+ pkt.append(s.AsByteArray(int32(BufferSizes::SRP_6_S)).get(), size_t(BufferSizes::SRP_6_S)); // 32 bytes
pkt.append(unk3.AsByteArray(16).get(), 16);
uint8 securityFlags = 0;
@@ -490,10 +495,10 @@ bool AuthSession::HandleLogonProof()
sha.UpdateBigNumbers(&s, &A, &B, &K, NULL);
sha.Finalize();
BigNumber M;
- M.SetBinary(sha.GetDigest(), 20);
+ M.SetBinary(sha.GetDigest(), sha.GetLength());
// Check if SRP6 results match (password is correct), else send an error
- if (!memcmp(M.AsByteArray().get(), logonProof->M1, 20))
+ if (!memcmp(M.AsByteArray(sha.GetLength()).get(), logonProof->M1, 20))
{
TC_LOG_DEBUG("server.authserver", "'%s:%d' User '%s' successfully authenticated", GetRemoteIpAddress().to_string().c_str(), GetRemotePort(), _login.c_str());
@@ -871,21 +876,19 @@ bool AuthSession::HandleXferAccept()
// Make the SRP6 calculation from hash in dB
void AuthSession::SetVSFields(const std::string& rI)
{
- s.SetRand(BYTE_SIZE * 8);
+ s.SetRand(int32(BufferSizes::SRP_6_S) * 8);
BigNumber I;
I.SetHexStr(rI.c_str());
// In case of leading zeros in the rI hash, restore them
uint8 mDigest[SHA_DIGEST_LENGTH];
- memset(mDigest, 0, SHA_DIGEST_LENGTH);
- if (I.GetNumBytes() <= SHA_DIGEST_LENGTH)
- memcpy(mDigest, I.AsByteArray().get(), I.GetNumBytes());
+ memcpy(mDigest, I.AsByteArray(SHA_DIGEST_LENGTH).get(), SHA_DIGEST_LENGTH);
std::reverse(mDigest, mDigest + SHA_DIGEST_LENGTH);
SHA1Hash sha;
- sha.UpdateData(s.AsByteArray().get(), s.GetNumBytes());
+ sha.UpdateData(s.AsByteArray(uint32(BufferSizes::SRP_6_S)).get(), (uint32(BufferSizes::SRP_6_S)));
sha.UpdateData(mDigest, SHA_DIGEST_LENGTH);
sha.Finalize();
BigNumber x;
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index 17db09eedfb..2bbdffc1e7b 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -61,7 +61,7 @@ namespace Trinity
private:
Player const* _player;
ChatMsg _msgType;
- int32 _textId;
+ uint32 _textId;
uint32 _achievementId;
};
} // namespace Trinity
diff --git a/src/server/game/Chat/Channels/ChannelMgr.cpp b/src/server/game/Chat/Channels/ChannelMgr.cpp
index 366b0eee59f..a3a4ef69e63 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.cpp
+++ b/src/server/game/Chat/Channels/ChannelMgr.cpp
@@ -29,14 +29,16 @@ ChannelMgr::~ChannelMgr()
ChannelMgr* ChannelMgr::forTeam(uint32 team)
{
+ static ChannelMgr allianceChannelMgr;
+ static ChannelMgr hordeChannelMgr;
if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL))
- return AllianceChannelMgr::instance(); // cross-faction
+ return &allianceChannelMgr; // cross-faction
if (team == ALLIANCE)
- return AllianceChannelMgr::instance();
+ return &allianceChannelMgr;
if (team == HORDE)
- return HordeChannelMgr::instance();
+ return &hordeChannelMgr;
return NULL;
}
diff --git a/src/server/game/Chat/Channels/ChannelMgr.h b/src/server/game/Chat/Channels/ChannelMgr.h
index f3ca9694176..fb93af2c310 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.h
+++ b/src/server/game/Chat/Channels/ChannelMgr.h
@@ -35,13 +35,7 @@ class ChannelMgr
~ChannelMgr();
public:
- static ChannelMgr* instance()
- {
- static ChannelMgr instance;
- return &instance;
- }
-
- static ChannelMgr * forTeam(uint32 team);
+ static ChannelMgr* forTeam(uint32 team);
void setTeam(uint32 newTeam) { team = newTeam; }
Channel* GetJoinChannel(std::string const& name, uint32 channel_id);
@@ -55,7 +49,4 @@ class ChannelMgr
void MakeNotOnPacket(WorldPacket* data, std::string const& name);
};
-class AllianceChannelMgr : public ChannelMgr { };
-class HordeChannelMgr : public ChannelMgr { };
-
#endif
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index 04ceaefb0d5..6083895ab26 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -1787,9 +1787,9 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
}
if (cond->ConditionValue2)
- TC_LOG_ERROR("sql.sql", "Spell condition has useless data in value2 (%u)!", cond->ConditionValue2);
+ TC_LOG_ERROR("sql.sql", "Spell condition has useless data (spell Id: %d) in value2 (%u)!", cond->ConditionValue1, cond->ConditionValue2);
if (cond->ConditionValue3)
- TC_LOG_ERROR("sql.sql", "Spell condition has useless data in value3 (%u)!", cond->ConditionValue3);
+ TC_LOG_ERROR("sql.sql", "Spell condition has useless data (spell Id: %d) in value3 (%u)!", cond->ConditionValue1, cond->ConditionValue3);
break;
}
case CONDITION_LEVEL:
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 73d87ef4774..21cb96ac048 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -3032,14 +3032,6 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate)
sScriptMgr->OnGivePlayerXP(this, xp, victim);
- // Favored experience increase START
- uint32 zone = GetZoneId();
- float favored_exp_mult = 0;
- if ((HasAura(32096) || HasAura(32098)) && (zone == 3483 || zone == 3562 || zone == 3836 || zone == 3713 || zone == 3714))
- favored_exp_mult = 0.05f; // Thrallmar's Favor and Honor Hold's Favor
- xp = uint32(xp * (1 + favored_exp_mult));
- // Favored experience increase END
-
// XP to money conversion processed in Player::RewardQuest
if (level >= sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
return;
diff --git a/src/server/game/Handlers/ChannelHandler.cpp b/src/server/game/Handlers/ChannelHandler.cpp
index 0ab5a8ab811..fd76b23087e 100644
--- a/src/server/game/Handlers/ChannelHandler.cpp
+++ b/src/server/game/Handlers/ChannelHandler.cpp
@@ -21,6 +21,8 @@
#include "Player.h"
#include "WorldSession.h"
+#include <cctype>
+
void WorldSession::HandleJoinChannel(WorldPacket& recvPacket)
{
uint32 channelId;
@@ -52,6 +54,9 @@ void WorldSession::HandleJoinChannel(WorldPacket& recvPacket)
if (channelName.empty())
return;
+ if (isdigit(channelName[0]))
+ return;
+
if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam()))
{
cMgr->setTeam(GetPlayer()->GetTeam());
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index 68a0687dc24..0f917f43528 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -1145,59 +1145,6 @@ enum TrinityStrings
// Use for not-in-offcial-sources patches
// 10000-10999
- // opvp hp
- LANG_OPVP_HP_CAPTURE_OVERLOOK_H = 10001,
- LANG_OPVP_HP_CAPTURE_OVERLOOK_A = 10002,
- LANG_OPVP_HP_CAPTURE_STADIUM_H = 10003,
- LANG_OPVP_HP_CAPTURE_STADIUM_A = 10004,
- LANG_OPVP_HP_CAPTURE_BROKENHILL_H = 10005,
- LANG_OPVP_HP_CAPTURE_BROKENHILL_A = 10006,
- LANG_OPVP_HP_LOSE_OVERLOOK_H = 10007,
- LANG_OPVP_HP_LOSE_OVERLOOK_A = 10008,
- LANG_OPVP_HP_LOSE_STADIUM_H = 10009,
- LANG_OPVP_HP_LOSE_STADIUM_A = 10010,
- LANG_OPVP_HP_LOSE_BROKENHILL_H = 10011,
- LANG_OPVP_HP_LOSE_BROKENHILL_A = 10012,
- // opvp zm
- LANG_OPVP_ZM_CAPTURE_WEST_H = 10013,
- LANG_OPVP_ZM_CAPTURE_WEST_A = 10014,
- LANG_OPVP_ZM_CAPTURE_EAST_H = 10015,
- LANG_OPVP_ZM_CAPTURE_EAST_A = 10016,
- LANG_OPVP_ZM_CAPTURE_GY_H = 10017,
- LANG_OPVP_ZM_CAPTURE_GY_A = 10018,
- LANG_OPVP_ZM_LOSE_WEST_H = 10019,
- LANG_OPVP_ZM_LOSE_WEST_A = 10020,
- LANG_OPVP_ZM_LOSE_EAST_H = 10021,
- LANG_OPVP_ZM_LOSE_EAST_A = 10022,
- LANG_OPVP_ZM_LOSE_GY_H = 10023,
- LANG_OPVP_ZM_LOSE_GY_A = 10024,
- // opvp na
- LANG_OPVP_NA_CAPTURE_H = 10025,
- LANG_OPVP_NA_CAPTURE_A = 10026,
- LANG_OPVP_NA_LOSE_H = 10027,
- LANG_OPVP_NA_LOSE_A = 10028,
- // opvp tf
- LANG_OPVP_TF_CAPTURE_H = 10029,
- LANG_OPVP_TF_CAPTURE_A = 10030,
- LANG_OPVP_TF_LOSE_H = 10031,
- LANG_OPVP_TF_LOSE_A = 10032,
- // opvp ep
- LANG_OPVP_EP_CAPTURE_NPT_H = 10033,
- LANG_OPVP_EP_CAPTURE_NPT_A = 10034,
- LANG_OPVP_EP_CAPTURE_EWT_H = 10035,
- LANG_OPVP_EP_CAPTURE_EWT_A = 10036,
- LANG_OPVP_EP_CAPTURE_CGT_H = 10037,
- LANG_OPVP_EP_CAPTURE_CGT_A = 10038,
- LANG_OPVP_EP_CAPTURE_PWT_H = 10039,
- LANG_OPVP_EP_CAPTURE_PWT_A = 10040,
- LANG_OPVP_EP_LOSE_NPT_H = 10041,
- LANG_OPVP_EP_LOSE_NPT_A = 10042,
- LANG_OPVP_EP_LOSE_EWT_H = 10043,
- LANG_OPVP_EP_LOSE_EWT_A = 10044,
- LANG_OPVP_EP_LOSE_CGT_H = 10045,
- LANG_OPVP_EP_LOSE_CGT_A = 10046,
- LANG_OPVP_EP_LOSE_PWT_H = 10047,
- LANG_OPVP_EP_LOSE_PWT_A = 10048,
// opvp si
LANG_OPVP_SI_CAPTURE_H = 10049,
LANG_OPVP_SI_CAPTURE_A = 10050,
diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
index cacec14d5e6..92a83f9d6f0 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp
+++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
@@ -25,10 +25,29 @@
#include "WorldPacket.h"
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
-#include "GridNotifiers.h"
-#include "GridNotifiersImpl.h"
#include "CellImpl.h"
+class DefenseMessageBuilder
+{
+ public:
+ DefenseMessageBuilder(uint32 zoneId, uint32 id)
+ : _zoneId(zoneId), _id(id) { }
+
+ void operator()(WorldPacket& data, LocaleConstant locale) const
+ {
+ std::string text = sOutdoorPvPMgr->GetDefenseMessage(_zoneId, _id, locale);
+
+ data.Initialize(SMSG_DEFENSE_MESSAGE, 4 + 4 + text.length());
+ data.append<uint32>(_zoneId);
+ data.append<uint32>(text.length());
+ data << text;
+ }
+
+ private:
+ uint32 _zoneId; ///< ZoneId
+ uint32 _id; ///< BroadcastTextId
+};
+
OPvPCapturePoint::OPvPCapturePoint(OutdoorPvP* pvp):
m_capturePointGUID(0), m_capturePoint(NULL), m_maxValue(0.0f), m_minValue(0.0f), m_maxSpeed(0),
m_value(0), m_team(TEAM_NEUTRAL), m_OldState(OBJECTIVESTATE_NEUTRAL),
@@ -616,3 +635,20 @@ void OutdoorPvP::OnGameObjectRemove(GameObject* go)
if (OPvPCapturePoint *cp = GetCapturePoint(go->GetDBTableGUIDLow()))
cp->m_capturePoint = NULL;
}
+
+void OutdoorPvP::SendDefenseMessage(uint32 zoneId, uint32 id)
+{
+ DefenseMessageBuilder builder(zoneId, id);
+ Trinity::LocalizedPacketDo<DefenseMessageBuilder> localizer(builder);
+ BroadcastWorker(localizer, zoneId);
+}
+
+template<class Worker>
+void OutdoorPvP::BroadcastWorker(Worker& _worker, uint32 zoneId)
+{
+ for (uint32 i = 0; i < BG_TEAMS_COUNT; ++i)
+ for (PlayerSet::iterator itr = m_players[i].begin(); itr != m_players[i].end(); ++itr)
+ if (Player* player = ObjectAccessor::FindPlayer(*itr))
+ if (player->GetZoneId() == zoneId)
+ _worker(player);
+}
diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.h b/src/server/game/OutdoorPvP/OutdoorPvP.h
index 577d70021a6..b7c08d51bda 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvP.h
+++ b/src/server/game/OutdoorPvP/OutdoorPvP.h
@@ -260,6 +260,8 @@ class OutdoorPvP : public ZoneScript
}
}
+ void SendDefenseMessage(uint32 zoneId, uint32 id);
+
protected:
// the map of the objectives belonging to this outdoorpvp
@@ -299,6 +301,9 @@ class OutdoorPvP : public ZoneScript
bool HasPlayer(Player const* player) const;
void TeamCastSpell(TeamId team, int32 spellId);
+
+ template<class Worker>
+ void BroadcastWorker(Worker& _worker, uint32 zoneId);
};
#endif /*OUTDOOR_PVP_H_*/
diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
index 2b05f7255f6..5306a3ca3c1 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
+++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
@@ -228,3 +228,12 @@ void OutdoorPvPMgr::HandlePlayerResurrects(Player* player, uint32 zoneid)
if (itr->second->HasPlayer(player))
itr->second->HandlePlayerResurrects(player, zoneid);
}
+
+std::string OutdoorPvPMgr::GetDefenseMessage(uint32 zoneId, uint32 id, LocaleConstant locale) const
+{
+ if (BroadcastText const* bct = sObjectMgr->GetBroadcastText(id))
+ return bct->GetText(locale);
+
+ TC_LOG_ERROR("outdoorpvp", "Can not find DefenseMessage (Zone: %u, Id: %u). BroadcastText (Id: %u) does not exist.", zoneId, id, id);
+ return "";
+}
diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
index 1a9db2b682e..bf2f14a291f 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
+++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
@@ -84,6 +84,8 @@ class OutdoorPvPMgr
void HandleDropFlag(Player* player, uint32 spellId);
+ std::string GetDefenseMessage(uint32 zoneId, uint32 id, LocaleConstant locale) const;
+
private:
typedef std::vector<OutdoorPvP*> OutdoorPvPSet;
typedef std::map<uint32 /* zoneid */, OutdoorPvP*> OutdoorPvPMap;
diff --git a/src/server/game/Server/Protocol/PacketLog.cpp b/src/server/game/Server/Protocol/PacketLog.cpp
index a905b01c73c..0d0dd07edf9 100644
--- a/src/server/game/Server/Protocol/PacketLog.cpp
+++ b/src/server/game/Server/Protocol/PacketLog.cpp
@@ -38,11 +38,19 @@ struct LogHeader
struct PacketHeader
{
+ // used to uniquely identify a connection
+ struct OptionalData
+ {
+ uint8 SocketIPBytes[16];
+ uint32 SocketPort;
+ };
+
char Direction[4];
uint32 ConnectionId;
uint32 ArrivalTicks;
uint32 OptionalDataSize;
uint32 Length;
+ OptionalData OptionalData;
uint32 Opcode;
};
@@ -89,14 +97,28 @@ void PacketLog::Initialize()
}
}
-void PacketLog::LogPacket(WorldPacket const& packet, Direction direction)
+void PacketLog::LogPacket(WorldPacket const& packet, Direction direction, boost::asio::ip::address addr, uint16 port)
{
PacketHeader header;
*reinterpret_cast<uint32*>(header.Direction) = direction == CLIENT_TO_SERVER ? 0x47534d43 : 0x47534d53;
header.ConnectionId = 0;
header.ArrivalTicks = getMSTime();
- header.OptionalDataSize = 0;
- header.Length = packet.size() + 4;
+
+ header.OptionalDataSize = sizeof(header.OptionalData);
+ memset(header.OptionalData.SocketIPBytes, 0, sizeof(header.OptionalData.SocketIPBytes));
+ if (addr.is_v4())
+ {
+ auto bytes = addr.to_v4().to_bytes();
+ memcpy(header.OptionalData.SocketIPBytes, bytes.data(), bytes.size());
+ }
+ else if (addr.is_v6())
+ {
+ auto bytes = addr.to_v6().to_bytes();
+ memcpy(header.OptionalData.SocketIPBytes, bytes.data(), bytes.size());
+ }
+
+ header.OptionalData.SocketPort = port;
+ header.Length = packet.size() + sizeof(header.Opcode);
header.Opcode = packet.GetOpcode();
fwrite(&header, sizeof(header), 1, _file);
diff --git a/src/server/game/Server/Protocol/PacketLog.h b/src/server/game/Server/Protocol/PacketLog.h
index 4f298fa3c50..b09e853236a 100644
--- a/src/server/game/Server/Protocol/PacketLog.h
+++ b/src/server/game/Server/Protocol/PacketLog.h
@@ -19,6 +19,7 @@
#define TRINITY_PACKETLOG_H
#include "Common.h"
+#include <boost/asio/ip/address.hpp>
enum Direction
{
@@ -43,7 +44,7 @@ class PacketLog
void Initialize();
bool CanLogPacket() const { return (_file != NULL); }
- void LogPacket(WorldPacket const& packet, Direction direction);
+ void LogPacket(WorldPacket const& packet, Direction direction, boost::asio::ip::address addr, uint16 port);
private:
FILE* _file;
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 9c46eac6896..e74e7806288 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -97,7 +97,7 @@ void WorldSocket::ReadDataHandler(boost::system::error_code error, size_t transf
}
if (sPacketLog->CanLogPacket())
- sPacketLog->LogPacket(packet, CLIENT_TO_SERVER);
+ sPacketLog->LogPacket(packet, CLIENT_TO_SERVER, GetRemoteIpAddress(), GetRemotePort());
TC_LOG_TRACE("network.opcode", "C->S: %s %s", (_worldSession ? _worldSession->GetPlayerInfo() : GetRemoteIpAddress().to_string()).c_str(), GetOpcodeNameForLogging(opcode).c_str());
@@ -177,7 +177,7 @@ void WorldSocket::ReadDataHandler(boost::system::error_code error, size_t transf
void WorldSocket::AsyncWrite(WorldPacket& packet)
{
if (sPacketLog->CanLogPacket())
- sPacketLog->LogPacket(packet, SERVER_TO_CLIENT);
+ sPacketLog->LogPacket(packet, SERVER_TO_CLIENT, GetRemoteIpAddress(), GetRemotePort());
if (_worldSession && packet.size() > 0x400)
packet.Compress(_worldSession->GetCompressionStream());
@@ -260,7 +260,7 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
return;
}
- // Get the account information from the realmd database
+ // 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;
@@ -311,7 +311,7 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
// id has to be fetched at this point, so that first actual account response that fails can be logged
id = fields[0].GetUInt32();
- ///- Re-check ip locking (same check as in realmd).
+ ///- Re-check ip locking (same check as in auth).
if (fields[3].GetUInt8() == 1) // if ip is locked
{
if (strcmp(fields[2].GetCString(), address.c_str()))
@@ -371,7 +371,7 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
security = fields[0].GetUInt8();
}
- // Re-check account ban (same check as in realmd)
+ // Re-check account ban (same check as in auth)
stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_BANS);
stmt->setUInt32(0, id);
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 14591db9eb6..3af21032cd5 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -411,9 +411,10 @@ void World::LoadConfigSettings(bool reload)
{
if (reload)
{
- if (!sConfigMgr->Reload())
+ std::string configError;
+ if (!sConfigMgr->Reload(configError))
{
- TC_LOG_ERROR("misc", "World settings reload fail: can't read settings from %s.", sConfigMgr->GetFilename().c_str());
+ TC_LOG_ERROR("misc", "World settings reload fail: %s.", configError.c_str());
return;
}
sLog->LoadFromConfig();
diff --git a/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp b/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp
index 82212972f45..9e20f6c5cb1 100644
--- a/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp
@@ -19,12 +19,11 @@
/* ScriptData
SDName: Eversong_Woods
SD%Complete: 95
-SDComment: Quest support: 8487, 8488, 8490
+SDComment: Quest support: 8490
SDCategory: Eversong Woods
EndScriptData */
/* ContentData
-npc_apprentice_mirveda
npc_infused_crystal
EndContentData */
@@ -34,152 +33,6 @@ EndContentData */
#include "ScriptedEscortAI.h"
#include "Player.h"
-enum UnexpectedResults
-{
- // Quest
- QUEST_CORRUPTED_SOIL = 8487,
- QUEST_UNEXPECTED_RESULT = 8488,
-
- // Creatures
- NPC_GHARZUL = 15958, // Quest 8488
- NPC_ANGERSHADE = 15656, // Quest 8488
-
- // Factions
- FACTION_NORMAL = 1604, // Quest 8488
- FACTION_COMBAT = 232, // Quest 8488
-
- // Spells
- SPELL_TEST_SOIL = 29535, // Quest 8487
- SPELL_FIREBALL = 20811, // Quest 8488
-
- // Text
- SAY_TEST_SOIL = 0, // Quest 8487
-
- // Events
- EVENT_TALK = 1, // Quest 8487
- EVENT_ADD_QUEST_GIVER_FLAG = 2, // Quest 8487
- EVENT_SUMMON = 3, // Quest 8488
- EVENT_FIREBALL = 4 // Quest 8488
-};
-
-class npc_apprentice_mirveda : public CreatureScript
-{
-public:
- npc_apprentice_mirveda() : CreatureScript("npc_apprentice_mirveda") { }
-
- struct npc_apprentice_mirvedaAI : public ScriptedAI
- {
- npc_apprentice_mirvedaAI(Creature* creature) : ScriptedAI(creature), Summons(me) { }
-
- uint32 KillCount;
- uint64 PlayerGUID;
- SummonList Summons;
- EventMap events;
-
- void Reset() override
- {
- SetCombatMovement(false);
- KillCount = 0;
- PlayerGUID = 0;
- Summons.DespawnAll();
- }
-
- void sQuestReward(Player* /*player*/, Quest const* quest, uint32 /*opt*/) override
- {
- if (quest->GetQuestId() == QUEST_CORRUPTED_SOIL)
- {
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
- events.ScheduleEvent(EVENT_TALK, 2000);
- }
- }
-
- void sQuestAccept(Player* player, Quest const* quest) override
- {
- if (quest->GetQuestId() == QUEST_UNEXPECTED_RESULT)
- {
- me->setFaction(FACTION_COMBAT);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
- events.ScheduleEvent(EVENT_SUMMON, 1000);
- PlayerGUID = player->GetGUID();
- }
- }
-
- void EnterCombat(Unit* /*who*/) override
- {
- events.ScheduleEvent(EVENT_FIREBALL, 1000);
- }
-
- void JustSummoned(Creature* summoned) override
- {
- // This is the best I can do because AttackStart does nothing
- summoned->GetMotionMaster()->MovePoint(1, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
- // summoned->AI()->AttackStart(me);
- Summons.Summon(summoned);
- }
-
- void SummonedCreatureDies(Creature* summoned, Unit* /*who*/) override
- {
- Summons.Despawn(summoned);
- ++KillCount;
- }
-
- void JustDied(Unit* /*killer*/) override
- {
- me->setFaction(FACTION_NORMAL);
-
- if (PlayerGUID)
- if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID))
- player->FailQuest(QUEST_UNEXPECTED_RESULT);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (KillCount >= 3 && PlayerGUID)
- if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID))
- if (player->GetQuestStatus(QUEST_UNEXPECTED_RESULT) == QUEST_STATUS_INCOMPLETE)
- {
- player->CompleteQuest(QUEST_UNEXPECTED_RESULT);
- me->setFaction(FACTION_NORMAL);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
- }
-
- events.Update(diff);
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_TALK:
- Talk(SAY_TEST_SOIL);
- events.ScheduleEvent(EVENT_ADD_QUEST_GIVER_FLAG, 7000);
- break;
- case EVENT_ADD_QUEST_GIVER_FLAG:
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
- break;
- case EVENT_SUMMON:
- me->SummonCreature(NPC_GHARZUL, 8749.505f, -7132.595f, 35.31983f, 3.816502f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 180000);
- me->SummonCreature(NPC_ANGERSHADE, 8755.38f, -7131.521f, 35.30957f, 3.816502f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 180000);
- me->SummonCreature(NPC_ANGERSHADE, 8753.199f, -7125.975f, 35.31986f, 3.816502f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 180000);
- break;
- case EVENT_FIREBALL:
- if (!UpdateVictim())
- continue;
- DoCastVictim(SPELL_FIREBALL, true); // Not casting in combat
- events.ScheduleEvent(EVENT_FIREBALL, 3000);
- break;
- default:
- break;
- }
- }
- DoMeleeAttackIfReady();
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_apprentice_mirvedaAI(creature);
- }
-};
/*######
## npc_infused_crystal
@@ -299,6 +152,5 @@ public:
void AddSC_eversong_woods()
{
- new npc_apprentice_mirveda();
new npc_infused_crystal();
}
diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
index 05aab1ef723..81a175b57b7 100644
--- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
@@ -19,14 +19,12 @@
/* ScriptData
SDName: Bloodmyst_Isle
SD%Complete: 80
-SDComment: Quest support: 9670, 9667
+SDComment: Quest support: 9670
SDCategory: Bloodmyst Isle
EndScriptData */
/* ContentData
npc_webbed_creature
-npc_princess_stillpine
-go_princess_stillpines_cage
EndContentData */
#include "ScriptMgr.h"
@@ -85,64 +83,7 @@ public:
}
};
-/*######
-## Quest 9667: Saving Princess Stillpine
-######*/
-
-enum Stillpine
-{
- QUEST_SAVING_PRINCESS_STILLPINE = 9667,
- NPC_PRINCESS_STILLPINE = 17682,
- GO_PRINCESS_STILLPINES_CAGE = 181928,
- SPELL_OPENING_PRINCESS_STILLPINE_CREDIT = 31003,
- SAY_DIRECTION = 0
-};
-
-class go_princess_stillpines_cage : public GameObjectScript
-{
-public:
- go_princess_stillpines_cage() : GameObjectScript("go_princess_stillpines_cage") { }
-
- bool OnGossipHello(Player* player, GameObject* go) override
- {
- go->SetGoState(GO_STATE_READY);
- if (Creature* stillpine = go->FindNearestCreature(NPC_PRINCESS_STILLPINE, 25, true))
- {
- stillpine->GetMotionMaster()->MovePoint(1, go->GetPositionX(), go->GetPositionY()-15, go->GetPositionZ());
- player->KilledMonsterCredit(NPC_PRINCESS_STILLPINE, stillpine->GetGUID());
- }
- return true;
- }
-};
-
-class npc_princess_stillpine : public CreatureScript
-{
-public:
- npc_princess_stillpine() : CreatureScript("npc_princess_stillpine") { }
-
- struct npc_princess_stillpineAI : public ScriptedAI
- {
- npc_princess_stillpineAI(Creature* creature) : ScriptedAI(creature) { }
-
- void MovementInform(uint32 type, uint32 id) override
- {
- if (type == POINT_MOTION_TYPE && id == 1)
- {
- Talk(SAY_DIRECTION);
- me->DespawnOrUnsummon();
- }
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_princess_stillpineAI(creature);
- }
-};
-
void AddSC_bloodmyst_isle()
{
new npc_webbed_creature();
- new npc_princess_stillpine();
- new go_princess_stillpines_cage();
}
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp
index 99b782336ec..b3492b8334b 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp
@@ -20,18 +20,12 @@
#include "OutdoorPvP.h"
#include "OutdoorPvPMgr.h"
#include "Player.h"
-#include "WorldPacket.h"
-#include "World.h"
#include "ObjectMgr.h"
-#include "Language.h"
-
-const uint32 HP_LANG_LOSE_A[HP_TOWER_NUM] = {LANG_OPVP_HP_LOSE_BROKENHILL_A, LANG_OPVP_HP_LOSE_OVERLOOK_A, LANG_OPVP_HP_LOSE_STADIUM_A};
-
-const uint32 HP_LANG_LOSE_H[HP_TOWER_NUM] = {LANG_OPVP_HP_LOSE_BROKENHILL_H, LANG_OPVP_HP_LOSE_OVERLOOK_H, LANG_OPVP_HP_LOSE_STADIUM_H};
+#include "WorldPacket.h"
-const uint32 HP_LANG_CAPTURE_A[HP_TOWER_NUM] = {LANG_OPVP_HP_CAPTURE_BROKENHILL_A, LANG_OPVP_HP_CAPTURE_OVERLOOK_A, LANG_OPVP_HP_CAPTURE_STADIUM_A};
+const uint32 HP_LANG_CAPTURE_A[HP_TOWER_NUM] = { TEXT_BROKEN_HILL_TAKEN_ALLIANCE, TEXT_OVERLOOK_TAKEN_ALLIANCE, TEXT_STADIUM_TAKEN_ALLIANCE };
-const uint32 HP_LANG_CAPTURE_H[HP_TOWER_NUM] = {LANG_OPVP_HP_CAPTURE_BROKENHILL_H, LANG_OPVP_HP_CAPTURE_OVERLOOK_H, LANG_OPVP_HP_CAPTURE_STADIUM_H};
+const uint32 HP_LANG_CAPTURE_H[HP_TOWER_NUM] = { TEXT_BROKEN_HILL_TAKEN_HORDE, TEXT_OVERLOOK_TAKEN_HORDE, TEXT_STADIUM_TAKEN_HORDE };
OPvPCapturePointHP::OPvPCapturePointHP(OutdoorPvP* pvp, OutdoorPvPHPTowerType type)
: OPvPCapturePoint(pvp), m_TowerType(type)
@@ -139,9 +133,7 @@ void OutdoorPvPHP::SendRemoveWorldStates(Player* player)
player->SendUpdateWorldState(HP_UI_TOWER_DISPLAY_H, 0);
player->SendUpdateWorldState(HP_UI_TOWER_COUNT_H, 0);
player->SendUpdateWorldState(HP_UI_TOWER_COUNT_A, 0);
- player->SendUpdateWorldState(HP_UI_TOWER_SLIDER_N, 0);
- player->SendUpdateWorldState(HP_UI_TOWER_SLIDER_POS, 0);
- player->SendUpdateWorldState(HP_UI_TOWER_SLIDER_DISPLAY, 0);
+
for (int i = 0; i < HP_TOWER_NUM; ++i)
{
player->SendUpdateWorldState(HP_MAP_N[i], 0);
@@ -156,13 +148,9 @@ void OutdoorPvPHP::FillInitialWorldStates(WorldPacket &data)
data << uint32(HP_UI_TOWER_DISPLAY_H) << uint32(1);
data << uint32(HP_UI_TOWER_COUNT_A) << uint32(m_AllianceTowersControlled);
data << uint32(HP_UI_TOWER_COUNT_H) << uint32(m_HordeTowersControlled);
- data << uint32(HP_UI_TOWER_SLIDER_DISPLAY) << uint32(0);
- data << uint32(HP_UI_TOWER_SLIDER_POS) << uint32(50);
- data << uint32(HP_UI_TOWER_SLIDER_N) << uint32(100);
+
for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
- {
itr->second->FillInitialWorldStates(data);
- }
}
void OPvPCapturePointHP::ChangeState()
@@ -177,13 +165,11 @@ void OPvPCapturePointHP::ChangeState()
field = HP_MAP_A[m_TowerType];
if (uint32 alliance_towers = ((OutdoorPvPHP*)m_PvP)->GetAllianceTowersControlled())
((OutdoorPvPHP*)m_PvP)->SetAllianceTowersControlled(--alliance_towers);
- sWorld->SendZoneText(OutdoorPvPHPBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(HP_LANG_LOSE_A[m_TowerType]));
break;
case OBJECTIVESTATE_HORDE:
field = HP_MAP_H[m_TowerType];
if (uint32 horde_towers = ((OutdoorPvPHP*)m_PvP)->GetHordeTowersControlled())
((OutdoorPvPHP*)m_PvP)->SetHordeTowersControlled(--horde_towers);
- sWorld->SendZoneText(OutdoorPvPHPBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(HP_LANG_LOSE_H[m_TowerType]));
break;
case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
field = HP_MAP_N[m_TowerType];
@@ -220,7 +206,7 @@ void OPvPCapturePointHP::ChangeState()
uint32 alliance_towers = ((OutdoorPvPHP*)m_PvP)->GetAllianceTowersControlled();
if (alliance_towers < 3)
((OutdoorPvPHP*)m_PvP)->SetAllianceTowersControlled(++alliance_towers);
- sWorld->SendZoneText(OutdoorPvPHPBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(HP_LANG_CAPTURE_A[m_TowerType]));
+ m_PvP->SendDefenseMessage(OutdoorPvPHPBuffZones[0], HP_LANG_CAPTURE_A[m_TowerType]);
break;
}
case OBJECTIVESTATE_HORDE:
@@ -231,7 +217,7 @@ void OPvPCapturePointHP::ChangeState()
uint32 horde_towers = ((OutdoorPvPHP*)m_PvP)->GetHordeTowersControlled();
if (horde_towers < 3)
((OutdoorPvPHP*)m_PvP)->SetHordeTowersControlled(++horde_towers);
- sWorld->SendZoneText(OutdoorPvPHPBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(HP_LANG_CAPTURE_H[m_TowerType]));
+ m_PvP->SendDefenseMessage(OutdoorPvPHPBuffZones[0], HP_LANG_CAPTURE_H[m_TowerType]);
break;
}
case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE:
@@ -272,16 +258,6 @@ void OPvPCapturePointHP::ChangeState()
SendObjectiveComplete(HP_CREDITMARKER[m_TowerType], 0);
}
-void OPvPCapturePointHP::SendChangePhase()
-{
- SendUpdateWorldState(HP_UI_TOWER_SLIDER_N, m_neutralValuePct);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- SendUpdateWorldState(HP_UI_TOWER_SLIDER_POS, phase);
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(HP_UI_TOWER_SLIDER_DISPLAY, 1);
-}
-
void OPvPCapturePointHP::FillInitialWorldStates(WorldPacket &data)
{
switch (m_State)
@@ -309,25 +285,6 @@ void OPvPCapturePointHP::FillInitialWorldStates(WorldPacket &data)
}
}
-bool OPvPCapturePointHP::HandlePlayerEnter(Player* player)
-{
- if (OPvPCapturePoint::HandlePlayerEnter(player))
- {
- player->SendUpdateWorldState(HP_UI_TOWER_SLIDER_DISPLAY, 1);
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- player->SendUpdateWorldState(HP_UI_TOWER_SLIDER_POS, phase);
- player->SendUpdateWorldState(HP_UI_TOWER_SLIDER_N, m_neutralValuePct);
- return true;
- }
- return false;
-}
-
-void OPvPCapturePointHP::HandlePlayerLeave(Player* player)
-{
- player->SendUpdateWorldState(HP_UI_TOWER_SLIDER_DISPLAY, 0);
- OPvPCapturePoint::HandlePlayerLeave(player);
-}
-
void OutdoorPvPHP::HandleKillImpl(Player* player, Unit* killed)
{
if (killed->GetTypeId() != TYPEID_PLAYER)
@@ -362,11 +319,7 @@ void OutdoorPvPHP::SetHordeTowersControlled(uint32 count)
class OutdoorPvP_hellfire_peninsula : public OutdoorPvPScript
{
public:
-
- OutdoorPvP_hellfire_peninsula()
- : OutdoorPvPScript("outdoorpvp_hp")
- {
- }
+ OutdoorPvP_hellfire_peninsula() : OutdoorPvPScript("outdoorpvp_hp") { }
OutdoorPvP* GetOutdoorPvP() const override
{
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h
index fa78da4732d..5b81960b24f 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h
@@ -20,6 +20,16 @@
#include "OutdoorPvP.h"
+enum DefenseMessages
+{
+ TEXT_OVERLOOK_TAKEN_ALLIANCE = 14841, // '|cffffff00The Overlook has been taken by the Alliance!|r'
+ TEXT_OVERLOOK_TAKEN_HORDE = 14842, // '|cffffff00The Overlook has been taken by the Horde!|r'
+ TEXT_STADIUM_TAKEN_ALLIANCE = 14843, // '|cffffff00The Stadium has been taken by the Alliance!|r'
+ TEXT_STADIUM_TAKEN_HORDE = 14844, // '|cffffff00The Stadium has been taken by the Horde!|r'
+ TEXT_BROKEN_HILL_TAKEN_ALLIANCE = 14845, // '|cffffff00Broken Hill has been taken by the Alliance!|r'
+ TEXT_BROKEN_HILL_TAKEN_HORDE = 14846, // '|cffffff00Broken Hill has been taken by the Horde!|r'
+};
+
#define OutdoorPvPHPBuffZonesNum 6
// HP, citadel, ramparts, blood furnace, shattered halls, mag's lair
const uint32 OutdoorPvPHPBuffZones[OutdoorPvPHPBuffZonesNum] = { 3483, 3563, 3562, 3713, 3714, 3836 };
@@ -52,11 +62,7 @@ enum OutdoorPvPHPWorldStates
HP_UI_TOWER_DISPLAY_H = 0x9b9,
HP_UI_TOWER_COUNT_H = 0x9ae,
- HP_UI_TOWER_COUNT_A = 0x9ac,
-
- HP_UI_TOWER_SLIDER_N = 2475,
- HP_UI_TOWER_SLIDER_POS = 2474,
- HP_UI_TOWER_SLIDER_DISPLAY = 2473
+ HP_UI_TOWER_COUNT_A = 0x9ac
};
const uint32 HP_MAP_N[HP_TOWER_NUM] = {0x9b5, 0x9b2, 0x9a8};
@@ -88,28 +94,19 @@ const go_type HPTowerFlags[HP_TOWER_NUM] =
class OPvPCapturePointHP : public OPvPCapturePoint
{
public:
-
OPvPCapturePointHP(OutdoorPvP* pvp, OutdoorPvPHPTowerType type);
void ChangeState();
- void SendChangePhase();
-
void FillInitialWorldStates(WorldPacket & data);
- // used when player is activated/inactivated in the area
- bool HandlePlayerEnter(Player* player);
- void HandlePlayerLeave(Player* player);
-
private:
-
OutdoorPvPHPTowerType m_TowerType;
};
class OutdoorPvPHP : public OutdoorPvP
{
public:
-
OutdoorPvPHP();
bool SetupOutdoorPvP();
@@ -132,7 +129,6 @@ class OutdoorPvPHP : public OutdoorPvP
void SetHordeTowersControlled(uint32 count);
private:
-
// how many towers are controlled
uint32 m_AllianceTowersControlled;
uint32 m_HordeTowersControlled;
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
index 9008b0867d7..1b4828dec51 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
@@ -21,8 +21,6 @@
#include "ObjectMgr.h"
#include "OutdoorPvPMgr.h"
#include "WorldPacket.h"
-#include "Language.h"
-#include "World.h"
OutdoorPvPNA::OutdoorPvPNA()
{
@@ -135,10 +133,6 @@ void OPvPCapturePointNA::FactionTakeOver(uint32 team)
{
if (m_ControllingFaction)
sObjectMgr->RemoveGraveYardLink(NA_HALAA_GRAVEYARD, NA_HALAA_GRAVEYARD_ZONE, m_ControllingFaction, false);
- if (m_ControllingFaction == ALLIANCE)
- sWorld->SendZoneText(NA_HALAA_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_NA_LOSE_A));
- else if (m_ControllingFaction == HORDE)
- sWorld->SendZoneText(NA_HALAA_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_NA_LOSE_H));
m_ControllingFaction = team;
if (m_ControllingFaction)
@@ -160,7 +154,7 @@ void OPvPCapturePointNA::FactionTakeOver(uint32 team)
m_PvP->SendUpdateWorldState(NA_UI_HORDE_GUARDS_SHOW, 0);
m_PvP->SendUpdateWorldState(NA_UI_ALLIANCE_GUARDS_SHOW, 1);
m_PvP->SendUpdateWorldState(NA_UI_GUARDS_LEFT, m_GuardsAlive);
- sWorld->SendZoneText(NA_HALAA_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_NA_CAPTURE_A));
+ m_PvP->SendDefenseMessage(NA_HALAA_GRAVEYARD_ZONE, TEXT_HALAA_TAKEN_ALLIANCE);
}
else
{
@@ -172,7 +166,7 @@ void OPvPCapturePointNA::FactionTakeOver(uint32 team)
m_PvP->SendUpdateWorldState(NA_UI_HORDE_GUARDS_SHOW, 1);
m_PvP->SendUpdateWorldState(NA_UI_ALLIANCE_GUARDS_SHOW, 0);
m_PvP->SendUpdateWorldState(NA_UI_GUARDS_LEFT, m_GuardsAlive);
- sWorld->SendZoneText(NA_HALAA_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_NA_CAPTURE_H));
+ m_PvP->SendDefenseMessage(NA_HALAA_GRAVEYARD_ZONE, TEXT_HALAA_TAKEN_HORDE);
}
UpdateWyvernRoostWorldState(NA_ROOST_S);
UpdateWyvernRoostWorldState(NA_ROOST_N);
@@ -180,25 +174,6 @@ void OPvPCapturePointNA::FactionTakeOver(uint32 team)
UpdateWyvernRoostWorldState(NA_ROOST_E);
}
-bool OPvPCapturePointNA::HandlePlayerEnter(Player* player)
-{
- if (OPvPCapturePoint::HandlePlayerEnter(player))
- {
- player->SendUpdateWorldState(NA_UI_TOWER_SLIDER_DISPLAY, 1);
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- player->SendUpdateWorldState(NA_UI_TOWER_SLIDER_POS, phase);
- player->SendUpdateWorldState(NA_UI_TOWER_SLIDER_N, m_neutralValuePct);
- return true;
- }
- return false;
-}
-
-void OPvPCapturePointNA::HandlePlayerLeave(Player* player)
-{
- player->SendUpdateWorldState(NA_UI_TOWER_SLIDER_DISPLAY, 0);
- OPvPCapturePoint::HandlePlayerLeave(player);
-}
-
OPvPCapturePointNA::OPvPCapturePointNA(OutdoorPvP* pvp) :
OPvPCapturePoint(pvp), m_capturable(true), m_GuardsAlive(0), m_ControllingFaction(0),
m_WyvernStateNorth(0), m_WyvernStateSouth(0), m_WyvernStateEast(0), m_WyvernStateWest(0),
@@ -261,10 +236,6 @@ void OPvPCapturePointNA::FillInitialWorldStates(WorldPacket &data)
data << NA_UI_GUARDS_MAX << NA_GUARDS_MAX;
data << NA_UI_GUARDS_LEFT << uint32(m_GuardsAlive);
- data << NA_UI_TOWER_SLIDER_DISPLAY << uint32(0);
- data << NA_UI_TOWER_SLIDER_POS << uint32(50);
- data << NA_UI_TOWER_SLIDER_N << uint32(100);
-
data << NA_MAP_WYVERN_NORTH_NEU_H << uint32((m_WyvernStateNorth & WYVERN_NEU_HORDE) != 0);
data << NA_MAP_WYVERN_NORTH_NEU_A << uint32((m_WyvernStateNorth & WYVERN_NEU_ALLIANCE) != 0);
data << NA_MAP_WYVERN_NORTH_H << uint32((m_WyvernStateNorth & WYVERN_HORDE) != 0);
@@ -298,9 +269,6 @@ void OutdoorPvPNA::SendRemoveWorldStates(Player* player)
player->SendUpdateWorldState(NA_UI_ALLIANCE_GUARDS_SHOW, 0);
player->SendUpdateWorldState(NA_UI_GUARDS_MAX, 0);
player->SendUpdateWorldState(NA_UI_GUARDS_LEFT, 0);
- player->SendUpdateWorldState(NA_UI_TOWER_SLIDER_DISPLAY, 0);
- player->SendUpdateWorldState(NA_UI_TOWER_SLIDER_POS, 0);
- player->SendUpdateWorldState(NA_UI_TOWER_SLIDER_N, 0);
player->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_NEU_H, 0);
player->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_NEU_A, 0);
player->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_H, 0);
@@ -608,16 +576,6 @@ void OPvPCapturePointNA::ChangeState()
UpdateHalaaWorldState();
}
-void OPvPCapturePointNA::SendChangePhase()
-{
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(NA_UI_TOWER_SLIDER_DISPLAY, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- SendUpdateWorldState(NA_UI_TOWER_SLIDER_POS, phase);
- SendUpdateWorldState(NA_UI_TOWER_SLIDER_N, m_neutralValuePct);
-}
-
void OPvPCapturePointNA::UpdateHalaaWorldState()
{
m_PvP->SendUpdateWorldState(NA_MAP_HALAA_NEUTRAL, uint32((m_HalaaState & HALAA_N) != 0));
@@ -661,11 +619,7 @@ void OPvPCapturePointNA::UpdateWyvernRoostWorldState(uint32 roost)
class OutdoorPvP_nagrand : public OutdoorPvPScript
{
public:
-
- OutdoorPvP_nagrand()
- : OutdoorPvPScript("outdoorpvp_na")
- {
- }
+ OutdoorPvP_nagrand() : OutdoorPvPScript("outdoorpvp_na") { }
OutdoorPvP* GetOutdoorPvP() const override
{
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h
index 011775e1715..aa52c8135e7 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h
@@ -20,6 +20,16 @@
#include "OutdoorPvP.h"
+enum DefenseMessages
+{
+ TEXT_ALL_GUARDS_DEFEATED = 15017, // (NYI) '|cffffff00All the guards have been defeated!|r'
+ TEXT_HALAA_TAKEN_ALLIANCE = 15018, // '|cffffff00The Alliance has taken control of Halaa!|r'
+ TEXT_HALAA_TAKEN_HORDE = 15019, // '|cffffff00The Horde has taken control of Halaa!|r'
+ TEXT_HALAA_DEFENSELESS = 15020, // (NYI) '|cffffff00Halaa is defenseless!|r'
+ TEXT_HALAA_GAINING_CONTROL_HORDE = 15493, // (NYI) '|cffffff00The Horde is gaining control of Halaa!|r'
+ TEXT_HALAA_GAINING_CONTROL_ALLIANCE = 15494 // (NYI) '|cffffff00The Alliance is gaining control of Halaa!|r'
+};
+
/// @todo "sometimes" set to neutral
enum OutdoorPvPNASpells
@@ -51,10 +61,6 @@ enum OutdoorPvPNAWorldStates
NA_UI_GUARDS_MAX = 2493,
NA_UI_GUARDS_LEFT = 2491,
- NA_UI_TOWER_SLIDER_DISPLAY = 2495,
- NA_UI_TOWER_SLIDER_POS = 2494,
- NA_UI_TOWER_SLIDER_N = 2497,
-
NA_MAP_WYVERN_NORTH_NEU_H = 2762,
NA_MAP_WYVERN_NORTH_NEU_A = 2662,
NA_MAP_WYVERN_NORTH_H = 2663,
@@ -253,21 +259,14 @@ class OutdoorPvPNA;
class OPvPCapturePointNA : public OPvPCapturePoint
{
public:
-
OPvPCapturePointNA(OutdoorPvP* pvp);
bool Update(uint32 diff);
void ChangeState();
- void SendChangePhase();
-
void FillInitialWorldStates(WorldPacket & data);
- // used when player is activated/inactivated in the area
- bool HandlePlayerEnter(Player* player);
- void HandlePlayerLeave(Player* player);
-
bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go);
int32 HandleOpenGo(Player* player, uint64 guid);
@@ -276,7 +275,6 @@ class OPvPCapturePointNA : public OPvPCapturePoint
uint32 GetControllingFaction() const;
protected:
-
// called when a faction takes control
void FactionTakeOver(uint32 team);
@@ -290,7 +288,6 @@ class OPvPCapturePointNA : public OPvPCapturePoint
void UpdateHalaaWorldState();
private:
-
bool m_capturable;
uint32 m_GuardsAlive;
@@ -312,7 +309,6 @@ class OPvPCapturePointNA : public OPvPCapturePoint
class OutdoorPvPNA : public OutdoorPvP
{
public:
-
OutdoorPvPNA();
bool SetupOutdoorPvP();
@@ -329,7 +325,6 @@ class OutdoorPvPNA : public OutdoorPvP
void HandleKillImpl(Player* player, Unit* killed);
private:
-
OPvPCapturePointNA * m_obj;
};
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
index b43904f2223..62108feaeeb 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
@@ -95,6 +95,7 @@ bool OutdoorPvPSI::HandleAreaTrigger(Player* player, uint32 trigger)
if (m_Gathered_A >= SI_MAX_RESOURCES)
{
TeamApplyBuff(TEAM_ALLIANCE, SI_CENARION_FAVOR);
+ /// @todo: confirm this text
sWorld->SendZoneText(OutdoorPvPSIBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_SI_CAPTURE_A));
m_LastController = ALLIANCE;
m_Gathered_A = 0;
@@ -120,6 +121,7 @@ bool OutdoorPvPSI::HandleAreaTrigger(Player* player, uint32 trigger)
if (m_Gathered_H >= SI_MAX_RESOURCES)
{
TeamApplyBuff(TEAM_HORDE, SI_CENARION_FAVOR);
+ /// @todo: confirm this text
sWorld->SendZoneText(OutdoorPvPSIBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_SI_CAPTURE_H));
m_LastController = HORDE;
m_Gathered_A = 0;
@@ -244,11 +246,7 @@ bool OutdoorPvPSI::HandleCustomSpell(Player* player, uint32 spellId, GameObject*
class OutdoorPvP_silithus : public OutdoorPvPScript
{
public:
-
- OutdoorPvP_silithus()
- : OutdoorPvPScript("outdoorpvp_si")
- {
- }
+ OutdoorPvP_silithus() : OutdoorPvPScript("outdoorpvp_si") { }
OutdoorPvP* GetOutdoorPvP() const override
{
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h
index 050bd6e8889..fdab0a292bd 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h
@@ -54,7 +54,6 @@ enum SI_WorldStates
class OutdoorPvPSI : public OutdoorPvP
{
public:
-
OutdoorPvPSI();
bool SetupOutdoorPvP();
@@ -77,7 +76,6 @@ class OutdoorPvPSI : public OutdoorPvP
void UpdateWorldState();
private:
-
uint32 m_Gathered_A;
uint32 m_Gathered_H;
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp
index c8c707a1958..e089dfdb7d5 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp
@@ -22,8 +22,6 @@
#include "WorldPacket.h"
#include "Player.h"
#include "ObjectMgr.h"
-#include "Language.h"
-#include "World.h"
OutdoorPvPTF::OutdoorPvPTF()
{
@@ -56,10 +54,6 @@ void OPvPCapturePointTF::FillInitialWorldStates(WorldPacket &data)
void OutdoorPvPTF::FillInitialWorldStates(WorldPacket &data)
{
- data << TF_UI_TOWER_SLIDER_POS << uint32(50);
- data << TF_UI_TOWER_SLIDER_N << uint32(100);
- data << TF_UI_TOWER_SLIDER_DISPLAY << uint32(0);
-
data << TF_UI_TOWER_COUNT_H << m_HordeTowersControlled;
data << TF_UI_TOWER_COUNT_A << m_AllianceTowersControlled;
data << TF_UI_TOWERS_CONTROLLED_DISPLAY << uint32(!m_IsLocked);
@@ -80,10 +74,6 @@ void OutdoorPvPTF::FillInitialWorldStates(WorldPacket &data)
void OutdoorPvPTF::SendRemoveWorldStates(Player* player)
{
- player->SendUpdateWorldState(TF_UI_TOWER_SLIDER_POS, uint32(0));
- player->SendUpdateWorldState(TF_UI_TOWER_SLIDER_N, uint32(0));
- player->SendUpdateWorldState(TF_UI_TOWER_SLIDER_DISPLAY, uint32(0));
-
player->SendUpdateWorldState(TF_UI_TOWER_COUNT_H, uint32(0));
player->SendUpdateWorldState(TF_UI_TOWER_COUNT_A, uint32(0));
player->SendUpdateWorldState(TF_UI_TOWERS_CONTROLLED_DISPLAY, uint32(0));
@@ -111,25 +101,6 @@ void OPvPCapturePointTF::UpdateTowerState()
m_PvP->SendUpdateWorldState(uint32(TFTowerWorldStates[m_TowerType].a), uint32((m_TowerState & TF_TOWERSTATE_A) != 0));
}
-bool OPvPCapturePointTF::HandlePlayerEnter(Player* player)
-{
- if (OPvPCapturePoint::HandlePlayerEnter(player))
- {
- player->SendUpdateWorldState(TF_UI_TOWER_SLIDER_DISPLAY, 1);
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- player->SendUpdateWorldState(TF_UI_TOWER_SLIDER_POS, phase);
- player->SendUpdateWorldState(TF_UI_TOWER_SLIDER_N, m_neutralValuePct);
- return true;
- }
- return false;
-}
-
-void OPvPCapturePointTF::HandlePlayerLeave(Player* player)
-{
- player->SendUpdateWorldState(TF_UI_TOWER_SLIDER_DISPLAY, 0);
- OPvPCapturePoint::HandlePlayerLeave(player);
-}
-
bool OutdoorPvPTF::Update(uint32 diff)
{
bool changed = OutdoorPvP::Update(diff);
@@ -286,14 +257,14 @@ void OPvPCapturePointTF::ChangeState()
{
if (uint32 alliance_towers = ((OutdoorPvPTF*)m_PvP)->GetAllianceTowersControlled())
((OutdoorPvPTF*)m_PvP)->SetAllianceTowersControlled(--alliance_towers);
- sWorld->SendZoneText(OutdoorPvPTFBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_TF_LOSE_A));
+ m_PvP->SendDefenseMessage(OutdoorPvPTFBuffZones[0], TEXT_SPIRIT_TOWER_LOSE_ALLIANCE);
}
// if changing from controlling horde to alliance
else if (m_OldState == OBJECTIVESTATE_HORDE)
{
if (uint32 horde_towers = ((OutdoorPvPTF*)m_PvP)->GetHordeTowersControlled())
((OutdoorPvPTF*)m_PvP)->SetHordeTowersControlled(--horde_towers);
- sWorld->SendZoneText(OutdoorPvPTFBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_TF_LOSE_H));
+ m_PvP->SendDefenseMessage(OutdoorPvPTFBuffZones[0], TEXT_SPIRIT_TOWER_LOSE_HORDE);
}
uint32 artkit = 21;
@@ -308,7 +279,7 @@ void OPvPCapturePointTF::ChangeState()
if (alliance_towers < TF_TOWER_NUM)
((OutdoorPvPTF*)m_PvP)->SetAllianceTowersControlled(++alliance_towers);
- sWorld->SendZoneText(OutdoorPvPTFBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_TF_CAPTURE_A));
+ m_PvP->SendDefenseMessage(OutdoorPvPTFBuffZones[0], TEXT_SPIRIT_TOWER_TAKEN_ALLIANCE);
for (PlayerSet::iterator itr = m_activePlayers[0].begin(); itr != m_activePlayers[0].end(); ++itr)
if (Player* player = ObjectAccessor::FindPlayer(*itr))
@@ -323,7 +294,7 @@ void OPvPCapturePointTF::ChangeState()
if (horde_towers < TF_TOWER_NUM)
((OutdoorPvPTF*)m_PvP)->SetHordeTowersControlled(++horde_towers);
- sWorld->SendZoneText(OutdoorPvPTFBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_TF_CAPTURE_H));
+ m_PvP->SendDefenseMessage(OutdoorPvPTFBuffZones[0], TEXT_SPIRIT_TOWER_TAKEN_HORDE);
for (PlayerSet::iterator itr = m_activePlayers[1].begin(); itr != m_activePlayers[1].end(); ++itr)
if (Player* player = ObjectAccessor::FindPlayer(*itr))
@@ -346,25 +317,10 @@ void OPvPCapturePointTF::ChangeState()
UpdateTowerState();
}
-void OPvPCapturePointTF::SendChangePhase()
-{
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(TF_UI_TOWER_SLIDER_DISPLAY, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- SendUpdateWorldState(TF_UI_TOWER_SLIDER_POS, phase);
- // send this too, sometimes it resets :S
- SendUpdateWorldState(TF_UI_TOWER_SLIDER_N, m_neutralValuePct);
-}
-
class OutdoorPvP_terokkar_forest : public OutdoorPvPScript
{
public:
-
- OutdoorPvP_terokkar_forest()
- : OutdoorPvPScript("outdoorpvp_tf")
- {
- }
+ OutdoorPvP_terokkar_forest() : OutdoorPvPScript("outdoorpvp_tf") { }
OutdoorPvP* GetOutdoorPvP() const override
{
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h
index 2c4ad0445be..ef400452e63 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h
@@ -20,6 +20,16 @@
#include "OutdoorPvP.h"
+enum DefenseMessages
+{
+ TEXT_BONE_WASTES_TAKEN_ALLIANCE = 16120, // (NYI) '|cffffff00The Alliance has taken control of The Bone Wastes!|r'
+ TEXT_BONE_WASTES_TAKEN_HORDE = 16119, // (NYI) '|cffffff00The Horde has taken control of The Bone Wastes!|r'
+ TEXT_SPIRIT_TOWER_TAKEN_ALLIANCE = 18285, // '|cffffff00The Alliance has taken control of a Spirit Tower!|r'
+ TEXT_SPIRIT_TOWER_TAKEN_HORDE = 18286, // '|cffffff00The Horde has taken control of a Spirit Tower!|r'
+ TEXT_SPIRIT_TOWER_LOSE_ALLIANCE = 18288, // '|cffffff00The Alliance has lost control of a Spirit Tower!|r'
+ TEXT_SPIRIT_TOWER_LOSE_HORDE = 18287 // '|cffffff00The Horde has lost control of a Spirit Tower!|r'
+};
+
const uint8 OutdoorPvPTFBuffZonesNum = 5;
const uint32 OutdoorPvPTFBuffZones[OutdoorPvPTFBuffZonesNum] =
@@ -98,10 +108,6 @@ const uint32 TFTowerPlayerLeaveEvents[TF_TOWER_NUM] =
enum TFWorldStates
{
- TF_UI_TOWER_SLIDER_POS = 0xa41,
- TF_UI_TOWER_SLIDER_N = 0xa40,
- TF_UI_TOWER_SLIDER_DISPLAY = 0xa3f,
-
TF_UI_TOWER_COUNT_H = 0xa3e,
TF_UI_TOWER_COUNT_A = 0xa3d,
TF_UI_TOWERS_CONTROLLED_DISPLAY = 0xa3c,
@@ -124,25 +130,17 @@ enum TFTowerStates
class OPvPCapturePointTF : public OPvPCapturePoint
{
public:
-
OPvPCapturePointTF(OutdoorPvP* pvp, OutdoorPvPTF_TowerType type);
bool Update(uint32 diff);
void ChangeState();
- void SendChangePhase();
-
void FillInitialWorldStates(WorldPacket & data);
- // used when player is activated/inactivated in the area
- bool HandlePlayerEnter(Player* player);
- void HandlePlayerLeave(Player* player);
-
void UpdateTowerState();
protected:
-
OutdoorPvPTF_TowerType m_TowerType;
uint32 m_TowerState;
@@ -151,7 +149,6 @@ class OPvPCapturePointTF : public OPvPCapturePoint
class OutdoorPvPTF : public OutdoorPvP
{
public:
-
OutdoorPvPTF();
bool SetupOutdoorPvP();
@@ -174,7 +171,6 @@ class OutdoorPvPTF : public OutdoorPvP
bool IsLocked() const;
private:
-
bool m_IsLocked;
uint32 m_LockTimer;
uint32 m_LockTimerUpdate;
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp
index d54a4f7d4d7..d6ee91ff2a9 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp
@@ -24,7 +24,6 @@
#include "ObjectAccessor.h"
#include "WorldPacket.h"
#include "GossipDef.h"
-#include "World.h"
OPvPCapturePointZM_Beacon::OPvPCapturePointZM_Beacon(OutdoorPvP* pvp, ZM_BeaconType type)
: OPvPCapturePoint(pvp), m_TowerType(type), m_TowerState(ZM_TOWERSTATE_N)
@@ -52,25 +51,6 @@ void OPvPCapturePointZM_Beacon::UpdateTowerState()
m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].map_tower_h), uint32((m_TowerState & ZM_TOWERSTATE_H) != 0));
}
-bool OPvPCapturePointZM_Beacon::HandlePlayerEnter(Player* player)
-{
- if (OPvPCapturePoint::HandlePlayerEnter(player))
- {
- player->SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_disp, 1);
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- player->SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_pos, phase);
- player->SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_n, m_neutralValuePct);
- return true;
- }
- return false;
-}
-
-void OPvPCapturePointZM_Beacon::HandlePlayerLeave(Player* player)
-{
- player->SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_disp, 0);
- OPvPCapturePoint::HandlePlayerLeave(player);
-}
-
void OPvPCapturePointZM_Beacon::ChangeState()
{
// if changing from controlling alliance to horde
@@ -78,14 +58,12 @@ void OPvPCapturePointZM_Beacon::ChangeState()
{
if (uint32 alliance_towers = ((OutdoorPvPZM*)m_PvP)->GetAllianceTowersControlled())
((OutdoorPvPZM*)m_PvP)->SetAllianceTowersControlled(--alliance_towers);
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(ZMBeaconLoseA[m_TowerType]));
}
// if changing from controlling horde to alliance
else if (m_OldState == OBJECTIVESTATE_HORDE)
{
if (uint32 horde_towers = ((OutdoorPvPZM*)m_PvP)->GetHordeTowersControlled())
((OutdoorPvPZM*)m_PvP)->SetHordeTowersControlled(--horde_towers);
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(ZMBeaconLoseH[m_TowerType]));
}
switch (m_State)
@@ -96,7 +74,7 @@ void OPvPCapturePointZM_Beacon::ChangeState()
uint32 alliance_towers = ((OutdoorPvPZM*)m_PvP)->GetAllianceTowersControlled();
if (alliance_towers < ZM_NUM_BEACONS)
((OutdoorPvPZM*)m_PvP)->SetAllianceTowersControlled(++alliance_towers);
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(ZMBeaconCaptureA[m_TowerType]));
+ m_PvP->SendDefenseMessage(ZM_GRAVEYARD_ZONE, ZMBeaconCaptureA[m_TowerType]);
break;
}
case OBJECTIVESTATE_HORDE:
@@ -105,7 +83,7 @@ void OPvPCapturePointZM_Beacon::ChangeState()
uint32 horde_towers = ((OutdoorPvPZM*)m_PvP)->GetHordeTowersControlled();
if (horde_towers < ZM_NUM_BEACONS)
((OutdoorPvPZM*)m_PvP)->SetHordeTowersControlled(++horde_towers);
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(ZMBeaconCaptureH[m_TowerType]));
+ m_PvP->SendDefenseMessage(ZM_GRAVEYARD_ZONE, ZMBeaconCaptureH[m_TowerType]);
break;
}
case OBJECTIVESTATE_NEUTRAL:
@@ -120,16 +98,6 @@ void OPvPCapturePointZM_Beacon::ChangeState()
UpdateTowerState();
}
-void OPvPCapturePointZM_Beacon::SendChangePhase()
-{
- // send this too, sometimes the slider disappears, dunno why :(
- SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_disp, 1);
- // send these updates to only the ones in this objective
- uint32 phase = (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f);
- SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_pos, phase);
- SendUpdateWorldState(ZMBeaconInfo[m_TowerType].slider_n, m_neutralValuePct);
-}
-
bool OutdoorPvPZM::Update(uint32 diff)
{
bool changed = OutdoorPvP::Update(diff);
@@ -220,8 +188,6 @@ int32 OPvPCapturePointZM_GraveYard::HandleOpenGo(Player* player, uint64 guid)
{
if (player->HasAura(ZM_BATTLE_STANDARD_A) && m_GraveYardState != ZM_GRAVEYARD_A)
{
- if (m_GraveYardState == ZM_GRAVEYARD_H)
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_ZM_LOSE_GY_H));
m_GraveYardState = ZM_GRAVEYARD_A;
DelObject(0); // only one gotype is used in the whole outdoor pvp, no need to call it a constant
AddObject(0, ZM_Banner_A.entry, ZM_Banner_A.map, ZM_Banner_A.x, ZM_Banner_A.y, ZM_Banner_A.z, ZM_Banner_A.o, ZM_Banner_A.rot0, ZM_Banner_A.rot1, ZM_Banner_A.rot2, ZM_Banner_A.rot3);
@@ -229,12 +195,10 @@ int32 OPvPCapturePointZM_GraveYard::HandleOpenGo(Player* player, uint64 guid)
sObjectMgr->AddGraveYardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, ALLIANCE, false); // add gy
m_PvP->TeamApplyBuff(TEAM_ALLIANCE, ZM_CAPTURE_BUFF);
player->RemoveAurasDueToSpell(ZM_BATTLE_STANDARD_A);
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_ZM_CAPTURE_GY_A));
+ m_PvP->SendDefenseMessage(ZM_GRAVEYARD_ZONE, TEXT_TWIN_SPIRE_RUINS_TAKEN_ALLIANCE);
}
else if (player->HasAura(ZM_BATTLE_STANDARD_H) && m_GraveYardState != ZM_GRAVEYARD_H)
{
- if (m_GraveYardState == ZM_GRAVEYARD_A)
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_ZM_LOSE_GY_A));
m_GraveYardState = ZM_GRAVEYARD_H;
DelObject(0); // only one gotype is used in the whole outdoor pvp, no need to call it a constant
AddObject(0, ZM_Banner_H.entry, ZM_Banner_H.map, ZM_Banner_H.x, ZM_Banner_H.y, ZM_Banner_H.z, ZM_Banner_H.o, ZM_Banner_H.rot0, ZM_Banner_H.rot1, ZM_Banner_H.rot2, ZM_Banner_H.rot3);
@@ -242,7 +206,7 @@ int32 OPvPCapturePointZM_GraveYard::HandleOpenGo(Player* player, uint64 guid)
sObjectMgr->AddGraveYardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, HORDE, false); // add gy
m_PvP->TeamApplyBuff(TEAM_HORDE, ZM_CAPTURE_BUFF);
player->RemoveAurasDueToSpell(ZM_BATTLE_STANDARD_H);
- sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_ZM_CAPTURE_GY_H));
+ m_PvP->SendDefenseMessage(ZM_GRAVEYARD_ZONE, TEXT_TWIN_SPIRE_RUINS_TAKEN_HORDE);
}
UpdateTowerState();
}
@@ -415,20 +379,13 @@ void OutdoorPvPZM::SetHordeTowersControlled(uint32 count)
void OutdoorPvPZM::FillInitialWorldStates(WorldPacket &data)
{
data << ZM_WORLDSTATE_UNK_1 << uint32(1);
+
for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
- {
itr->second->FillInitialWorldStates(data);
- }
}
void OutdoorPvPZM::SendRemoveWorldStates(Player* player)
{
- player->SendUpdateWorldState(ZM_UI_TOWER_SLIDER_N_W, 0);
- player->SendUpdateWorldState(ZM_UI_TOWER_SLIDER_POS_W, 0);
- player->SendUpdateWorldState(ZM_UI_TOWER_SLIDER_DISPLAY_W, 0);
- player->SendUpdateWorldState(ZM_UI_TOWER_SLIDER_N_E, 0);
- player->SendUpdateWorldState(ZM_UI_TOWER_SLIDER_POS_E, 0);
- player->SendUpdateWorldState(ZM_UI_TOWER_SLIDER_DISPLAY_E, 0);
player->SendUpdateWorldState(ZM_WORLDSTATE_UNK_1, 1);
player->SendUpdateWorldState(ZM_UI_TOWER_EAST_N, 0);
player->SendUpdateWorldState(ZM_UI_TOWER_EAST_H, 0);
@@ -454,11 +411,7 @@ void OutdoorPvPZM::SendRemoveWorldStates(Player* player)
class OutdoorPvP_zangarmarsh : public OutdoorPvPScript
{
public:
-
- OutdoorPvP_zangarmarsh()
- : OutdoorPvPScript("outdoorpvp_zm")
- {
- }
+ OutdoorPvP_zangarmarsh() : OutdoorPvPScript("outdoorpvp_zm") { }
OutdoorPvP* GetOutdoorPvP() const override
{
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h
index fdd093a1bfe..eef1ff9cc3b 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h
@@ -18,9 +18,22 @@
#ifndef OUTDOOR_PVP_ZM_
#define OUTDOOR_PVP_ZM_
-#include "Language.h"
#include "OutdoorPvP.h"
+enum DefenseMessages
+{
+ TEXT_WEST_BEACON_TAKEN_ALLIANCE = 15541, // '|cffffff00The Alliance has taken control of the West Beacon!|r'
+ TEXT_WEST_BEACON_TAKEN_HORDE = 15543, // '|cffffff00The Horde has taken control of the West Beacon!|r'
+ TEXT_EAST_BEACON_TAKEN_ALLIANCE = 15546, // '|cffffff00The Alliance has taken control of the East Beacon!|r'
+ TEXT_EAST_BEACON_TAKEN_HORDE = 15545, // '|cffffff00The Horde has taken control of the East Beacon!|r'
+ TEXT_TWIN_SPIRE_RUINS_TAKEN_ALLIANCE = 15591, // '|cffffff00The Alliance has taken control of Twin Spire Ruins!|r'
+ TEXT_TWIN_SPIRE_RUINS_TAKEN_HORDE = 15590, // '|cffffff00The Horde has taken control of Twin Spire Ruins!|r'
+ TEXT_BOTH_BEACONS_TAKEN_ALLIANCE = 16284, // (NYI) '|cffffff00The Alliance has taken control of both beacons!|r'
+ TEXT_BOTH_BEACONS_TAKEN_HORDE = 16285, // (NYI) '|cffffff00The Horde has taken control of both beacons!|r'
+ TEXT_BATTLE_STANDARDS_ALLIANCE = 16287, // (NYI) '|cffffff00The Alliance Field Scout is now issuing battle standards.|r'
+ TEXT_BATTLE_STANDARDS_HORDE = 16288 // (NYI) '|cffffff00The Horde Field Scout is now issuing battle standards.|r'
+};
+
const uint8 OutdoorPvPZMBuffZonesNum = 5;
// the buff is cast in these zones
@@ -66,9 +79,6 @@ enum ZMCreatureTypes
struct zm_beacon
{
- uint32 slider_disp;
- uint32 slider_n;
- uint32 slider_pos;
uint32 ui_tower_n;
uint32 ui_tower_h;
uint32 ui_tower_a;
@@ -88,32 +98,20 @@ enum ZM_BeaconType
const zm_beacon ZMBeaconInfo[ZM_NUM_BEACONS] =
{
- {2533, 2535, 2534, 2560, 2559, 2558, 2652, 2651, 2650, 11807, 11806},
- {2527, 2529, 2528, 2557, 2556, 2555, 2646, 2645, 2644, 11805, 11804}
+ {2560, 2559, 2558, 2652, 2651, 2650, 11807, 11806},
+ {2557, 2556, 2555, 2646, 2645, 2644, 11805, 11804}
};
const uint32 ZMBeaconCaptureA[ZM_NUM_BEACONS] =
{
- LANG_OPVP_ZM_CAPTURE_EAST_A,
- LANG_OPVP_ZM_CAPTURE_WEST_A
+ TEXT_EAST_BEACON_TAKEN_ALLIANCE,
+ TEXT_WEST_BEACON_TAKEN_ALLIANCE
};
const uint32 ZMBeaconCaptureH[ZM_NUM_BEACONS] =
{
- LANG_OPVP_ZM_CAPTURE_EAST_H,
- LANG_OPVP_ZM_CAPTURE_WEST_H
-};
-
-const uint32 ZMBeaconLoseA[ZM_NUM_BEACONS] =
-{
- LANG_OPVP_ZM_LOSE_EAST_A,
- LANG_OPVP_ZM_LOSE_WEST_A
-};
-
-const uint32 ZMBeaconLoseH[ZM_NUM_BEACONS] =
-{
- LANG_OPVP_ZM_LOSE_EAST_H,
- LANG_OPVP_ZM_LOSE_WEST_H
+ TEXT_EAST_BEACON_TAKEN_HORDE,
+ TEXT_WEST_BEACON_TAKEN_HORDE
};
const go_type ZMCapturePoints[ZM_NUM_BEACONS] =
@@ -124,14 +122,6 @@ const go_type ZMCapturePoints[ZM_NUM_BEACONS] =
enum OutdoorPvPZMWorldStates
{
- ZM_UI_TOWER_SLIDER_N_W = 2529,
- ZM_UI_TOWER_SLIDER_POS_W = 2528,
- ZM_UI_TOWER_SLIDER_DISPLAY_W = 2527,
-
- ZM_UI_TOWER_SLIDER_N_E = 2535,
- ZM_UI_TOWER_SLIDER_POS_E = 2534,
- ZM_UI_TOWER_SLIDER_DISPLAY_E = 2533,
-
ZM_WORLDSTATE_UNK_1 = 2653,
ZM_UI_TOWER_EAST_N = 2560,
@@ -169,23 +159,15 @@ class OutdoorPvPZM;
class OPvPCapturePointZM_Beacon : public OPvPCapturePoint
{
public:
-
OPvPCapturePointZM_Beacon(OutdoorPvP* pvp, ZM_BeaconType type);
void ChangeState();
- void SendChangePhase();
-
void FillInitialWorldStates(WorldPacket & data);
- // used when player is activated/inactivated in the area
- bool HandlePlayerEnter(Player* player);
- void HandlePlayerLeave(Player* player);
-
void UpdateTowerState();
protected:
-
ZM_BeaconType m_TowerType;
uint32 m_TowerState;
};
@@ -200,7 +182,6 @@ enum ZM_GraveYardState
class OPvPCapturePointZM_GraveYard : public OPvPCapturePoint
{
public:
-
OPvPCapturePointZM_GraveYard(OutdoorPvP* pvp);
bool Update(uint32 diff);
@@ -224,11 +205,9 @@ class OPvPCapturePointZM_GraveYard : public OPvPCapturePoint
uint32 GetGraveYardState() const;
private:
-
uint32 m_GraveYardState;
protected:
-
uint32 m_BothControllingFaction;
uint64 m_FlagCarrierGUID;
@@ -237,7 +216,6 @@ class OPvPCapturePointZM_GraveYard : public OPvPCapturePoint
class OutdoorPvPZM : public OutdoorPvP
{
public:
-
OutdoorPvPZM();
bool SetupOutdoorPvP();
@@ -260,7 +238,6 @@ class OutdoorPvPZM : public OutdoorPvP
void SetHordeTowersControlled(uint32 count);
private:
-
OPvPCapturePointZM_GraveYard * m_GraveYard;
uint32 m_AllianceTowersControlled;
diff --git a/src/server/shared/Configuration/Config.cpp b/src/server/shared/Configuration/Config.cpp
index ecebf30182e..6b83f562520 100644
--- a/src/server/shared/Configuration/Config.cpp
+++ b/src/server/shared/Configuration/Config.cpp
@@ -25,7 +25,7 @@
using namespace boost::property_tree;
-bool ConfigMgr::LoadInitial(std::string const& file)
+bool ConfigMgr::LoadInitial(std::string const& file, std::string& error)
{
std::lock_guard<std::mutex> lock(_configLock);
@@ -34,25 +34,32 @@ bool ConfigMgr::LoadInitial(std::string const& file)
try
{
ptree fullTree;
- boost::property_tree::ini_parser::read_ini(file, fullTree);
+ ini_parser::read_ini(file, fullTree);
if (fullTree.empty())
+ {
+ error = "empty file (" + file + ")";
return false;
+ }
// Since we're using only one section per config file, we skip the section and have direct property access
_config = fullTree.begin()->second;
}
- catch (std::exception const& /*ex*/)
+ catch (ini_parser::ini_parser_error const& e)
{
+ if (e.line() == 0)
+ error = e.message() + " (" + e.filename() + ")";
+ else
+ error = e.message() + " (" + e.filename() + ":" + std::to_string(e.line()) + ")";
return false;
}
return true;
}
-bool ConfigMgr::Reload()
+bool ConfigMgr::Reload(std::string& error)
{
- return LoadInitial(_filename.c_str());
+ return LoadInitial(_filename.c_str(), error);
}
std::string ConfigMgr::GetStringDefault(std::string const& name, const std::string& def)
diff --git a/src/server/shared/Configuration/Config.h b/src/server/shared/Configuration/Config.h
index 42c3a700f3f..ff0233b5669 100644
--- a/src/server/shared/Configuration/Config.h
+++ b/src/server/shared/Configuration/Config.h
@@ -31,7 +31,7 @@ class ConfigMgr
public:
/// Method used only for loading main configuration files (authserver.conf and worldserver.conf)
- bool LoadInitial(std::string const& file);
+ bool LoadInitial(std::string const& file, std::string& error);
static ConfigMgr* instance()
{
@@ -39,7 +39,7 @@ public:
return &instance;
}
- bool Reload();
+ bool Reload(std::string& error);
std::string GetStringDefault(std::string const& name, const std::string& def);
bool GetBoolDefault(std::string const& name, bool def);
diff --git a/src/server/shared/Database/Implementation/LoginDatabase.cpp b/src/server/shared/Database/Implementation/LoginDatabase.cpp
index f0ab2077662..b9f281d3f2a 100644
--- a/src/server/shared/Database/Implementation/LoginDatabase.cpp
+++ b/src/server/shared/Database/Implementation/LoginDatabase.cpp
@@ -26,13 +26,13 @@ void LoginDatabaseConnection::DoPrepareStatements()
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_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 realmd', 'Failed login autoban')", CONNECTION_ASYNC);
+ 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);
PrepareStatement(LOGIN_SEL_IP_BANNED_BY_IP, "SELECT ip, bandate, unbandate, bannedby, banreason FROM ip_banned WHERE (bandate = unbandate OR unbandate > UNIX_TIMESTAMP()) AND ip LIKE CONCAT('%%', ?, '%%') ORDER BY unbandate", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_ACCOUNT_BANNED, "SELECT bandate, unbandate FROM account_banned WHERE id = ? AND active = 1", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_ACCOUNT_BANNED_ALL, "SELECT account.id, username FROM account, account_banned WHERE account.id = account_banned.id AND active = 1 GROUP BY account.id", CONNECTION_SYNCH);
PrepareStatement(LOGIN_SEL_ACCOUNT_BANNED_BY_USERNAME, "SELECT account.id, username FROM account, account_banned WHERE account.id = account_banned.id AND active = 1 AND username LIKE CONCAT('%%', ?, '%%') GROUP BY account.id", CONNECTION_SYNCH);
- PrepareStatement(LOGIN_INS_ACCOUNT_AUTO_BANNED, "INSERT INTO account_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity realmd', 'Failed login autoban', 1)", CONNECTION_ASYNC);
+ PrepareStatement(LOGIN_INS_ACCOUNT_AUTO_BANNED, "INSERT INTO account_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity Auth', 'Failed login autoban', 1)", CONNECTION_ASYNC);
PrepareStatement(LOGIN_DEL_ACCOUNT_BANNED, "DELETE FROM account_banned WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_SEL_SESSIONKEY, "SELECT a.sessionkey, a.id, aa.gmlevel FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE username = ?", CONNECTION_SYNCH);
PrepareStatement(LOGIN_UPD_VS, "UPDATE account SET v = ?, s = ? WHERE username = ?", CONNECTION_ASYNC);
diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp
index 02e6268cd26..3afa9e84e8b 100644
--- a/src/server/worldserver/Main.cpp
+++ b/src/server/worldserver/Main.cpp
@@ -109,10 +109,10 @@ extern int main(int argc, char** argv)
WinServiceRun();
#endif
- if (!sConfigMgr->LoadInitial(configFile))
+ std::string configError;
+ if (!sConfigMgr->LoadInitial(configFile, configError))
{
- printf("Invalid or missing configuration file : %s\n", configFile.c_str());
- printf("Verify that the file exists and has \'[worldserver]' written in the top of the file!\n");
+ printf("Error in config file: %s\n", configError.c_str());
return 1;
}
diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp
index 3437355c0a9..b119b6cdbde 100644
--- a/src/tools/mmaps_generator/MapBuilder.cpp
+++ b/src/tools/mmaps_generator/MapBuilder.cpp
@@ -782,12 +782,12 @@ namespace MMAP
if (params.nvp > DT_VERTS_PER_POLYGON)
{
printf("%s Invalid verts-per-polygon value! \n", tileString);
- continue;
+ break;
}
if (params.vertCount >= 0xffff)
{
printf("%s Too many vertices! \n", tileString);
- continue;
+ break;
}
if (!params.vertCount || !params.verts)
{
@@ -796,7 +796,7 @@ namespace MMAP
// message is an annoyance
//printf("%sNo vertices to build tile! \n", tileString);
- continue;
+ break;
}
if (!params.polyCount || !params.polys ||
TILES_PER_MAP*TILES_PER_MAP == params.polyCount)
@@ -805,19 +805,19 @@ namespace MMAP
// keep in mind that we do output those into debug info
// drop tiles with only exact count - some tiles may have geometry while having less tiles
printf("%s No polygons to build on tile! \n", tileString);
- continue;
+ break;
}
if (!params.detailMeshes || !params.detailVerts || !params.detailTris)
{
printf("%s No detail mesh to build tile! \n", tileString);
- continue;
+ break;
}
printf("%s Building navmesh tile...\n", tileString);
if (!dtCreateNavMeshData(&params, &navData, &navDataSize))
{
printf("%s Failed building navmesh tile! \n", tileString);
- continue;
+ break;
}
dtTileRef tileRef = 0;
@@ -828,7 +828,7 @@ namespace MMAP
if (!tileRef || dtResult != DT_SUCCESS)
{
printf("%s Failed adding tile to navmesh! \n", tileString);
- continue;
+ break;
}
// file output
@@ -841,7 +841,7 @@ namespace MMAP
sprintf(message, "[Map %03i] Failed to open %s for writing!\n", mapID, fileName);
perror(message);
navMesh->removeTile(tileRef, NULL, NULL);
- continue;
+ break;
}
printf("%s Writing to file...\n", tileString);