aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2013_12_15_00_world_creature_template.sql2
-rw-r--r--sql/updates/world/2013_12_15_01_world_creature_template.sql4
-rw-r--r--sql/updates/world/2013_12_16_00_world_sai.sql186
-rw-r--r--sql/updates/world/2013_12_17_00_world_sai.sql1
-rw-r--r--sql/updates/world/2013_12_18_00_world_misc.sql161
-rw-r--r--sql/updates/world/2013_12_18_01_world_sai.sql173
-rw-r--r--sql/updates/world/2013_12_18_02_world_misc.sql332
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp48
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h1
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp62
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp4
-rw-r--r--src/server/game/Entities/Player/Player.cpp4
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp4
-rw-r--r--src/server/game/Handlers/AuctionHouseHandler.cpp1
-rw-r--r--src/server/game/Maps/Map.cpp8
-rw-r--r--src/server/game/Maps/MapManager.cpp36
-rw-r--r--src/server/game/Maps/MapManager.h5
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp12
-rw-r--r--src/server/game/Movement/Spline/MoveSpline.h2
-rw-r--r--src/server/scripts/Northrend/zone_dragonblight.cpp336
20 files changed, 1287 insertions, 95 deletions
diff --git a/sql/updates/world/2013_12_15_00_world_creature_template.sql b/sql/updates/world/2013_12_15_00_world_creature_template.sql
new file mode 100644
index 00000000000..a7b1c9ea6eb
--- /dev/null
+++ b/sql/updates/world/2013_12_15_00_world_creature_template.sql
@@ -0,0 +1,2 @@
+-- Trained Rock Falcon spells for quest 11470 "There Exists No Honor Among Birds"
+UPDATE `creature_template` SET `spell1`=44422,`spell2`=44423,`spell3`=44424 WHERE `entry`=24783;
diff --git a/sql/updates/world/2013_12_15_01_world_creature_template.sql b/sql/updates/world/2013_12_15_01_world_creature_template.sql
new file mode 100644
index 00000000000..c7961d6f5ca
--- /dev/null
+++ b/sql/updates/world/2013_12_15_01_world_creature_template.sql
@@ -0,0 +1,4 @@
+-- Fix Trained Rock Falcon InhabitType
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=24783;
+-- Fix faction for Earthen Dwarf
+UPDATE `creature_template` SET `faction_A`=1868,`faction_H`=1868 WHERE entry IN (27980,31391);
diff --git a/sql/updates/world/2013_12_16_00_world_sai.sql b/sql/updates/world/2013_12_16_00_world_sai.sql
new file mode 100644
index 00000000000..028f91fce6d
--- /dev/null
+++ b/sql/updates/world/2013_12_16_00_world_sai.sql
@@ -0,0 +1,186 @@
+-- Runed Giant SAI
+SET @ENTRY := 26417;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+UPDATE `creature_addon` SET `auras`= '' WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,11,47329,0,0,0,0,0,1,0,0,0,0,0,0,0,"Runed Giant - On Spawn - Cast Runic Compulsion"),
+(@ENTRY,0,1,0,8,0,25,0,47604,0,10000,10000,80,2641700,2,2,0,0,0,1,0,0,0,0,0,0,0,"Runed Giant - On Spell Hit - Start Script for Free At Last");
+
+-- Inquisitor Salrand SAI
+SET @ENTRY := 25584;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,38,0,100,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Inquisitor Salrand - On Data 1 1 - Say 0"),
+(@ENTRY,0,1,2,38,0,100,1,1,2,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Inquisitor Salrand - On Data 1 2 - Say 1"),
+(@ENTRY,0,2,0,61,0,100,1,0,0,0,0,80,2558400,0,0,0,0,0,1,0,0,0,0,0,0,0,"Inquisitor Salrand - On Data 1 2 - Run script"),
+(@ENTRY,0,3,4,6,0,100,1,0,0,0,0,11,45809,0,0,0,0,0,1,0,0,0,0,0,0,0,"Inquisitor Salrand - On Death - Cast Summon Salrand's Lockbox"),
+(@ENTRY,0,4,0,61,0,100,1,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Inquisitor Salrand - On Death - Say 2"),
+(@ENTRY,0,5,0,11,0,100,0,0,0,0,0,11,45775,0,0,0,0,0,1,0,0,0,0,0,0,0,"Runed Giant - On Spawn - Cast Cosmetic - Divine Shield Blue");
+
+-- Image of Drakuru SAI
+SET @ENTRY := 26543;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,12042,0,0,0,11,47308,0,0,0,0,0,7,0,0,0,0,0,0,0,"Image of Drakuru - On quest accepted - Spellcast Strip Detect Drakuru 02"),
+(@ENTRY,0,1,2,11,0,100,0,0,0,0,0,11,43167,0,0,0,0,0,1,0,0,0,0,0,0,0,"Image of Drakuru - On Spawn - Cast Spirit Particles (green)"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,11,47119,0,0,0,0,0,1,0,0,0,0,0,0,0,"Image of Drakuru - On Spawn - Cast Drakuru (Quest Invis)");
+
+-- Image of Drakuru SAI
+SET @ENTRY := 26787;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,19,0,100,0,12238,0,0,0,11,48417,0,0,0,0,0,7,0,0,0,0,0,0,0,"Image of Drakuru - On quest accepted - Spellcast Strip Detect Drakuru 04"),
+(@ENTRY,0,1,2,11,0,100,0,0,0,0,0,11,43167,0,0,0,0,0,1,0,0,0,0,0,0,0,"Image of Drakuru - On Spawn - Cast Spirit Particles (green)"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,11,47119,0,0,0,0,0,1,0,0,0,0,0,0,0,"Image of Drakuru - On Spawn - Cast Drakuru (Quest Invis)");
+
+-- Fix frenzy for Kvaldir Berserker
+UPDATE `smart_scripts` SET `event_flags`=1 WHERE `source_type`=0 AND `entryorguid`=34947 AND `id`=2;
+
+-- Scarlet Infantryman SAI
+SET @ENTRY := 28609;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+UPDATE `creature_addon` SET `auras`= '' WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,20,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Infantryman - On Aggro - Say Line 0"),
+(@ENTRY,0,1,0,9,0,100,0,0,5,6000,9000,11,25710,0,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Infantryman - At 0 - 5 Range - Cast Heroic Strike"),
+(@ENTRY,0,2,0,0,0,100,0,9000,15000,16000,19000,11,53399,1,1,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Infantryman - In Combat - Cast Sweeping Slam"),
+(@ENTRY,0,3,0,11,0,100,0,0,0,0,0,11,48356,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Infantryman - On Spawn - Cast See Wintergarde Invisibility");
+
+-- Kvaldir Mist Binder SAI
+SET @ENTRY := 34839;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,0,1,0, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,11,45658,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kvaldir Mist Binder - On Spawn - Cast Call of the Mist "),
+(@ENTRY,0,1,0,0,0,100,0,6000,9000,12000,17000,11,49816,0,0,0,0,0,5,0,0,0,0,0,0,0,"Kvaldir Mist Binder - In Combat - Cast Mist of Strangulation");
+
+-- Scarlet Commander SAI
+SET @ENTRY := 28936;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,0,1,2404, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,9,0,100,0,0,0,2300,3900,11,52818,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Commander - In Combat CMC - Cast Shoot"),
+(@ENTRY,0,1,0,9,0,100,0,0,5,6000,9000,11,52221,0,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Commander - Between 0-5 Range - Cast Heroic Strike"),
+(@ENTRY,0,2,0,7,0,100,1,0,0,0,0,40,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Commander - On Evade - Set Sheath Melee"),
+(@ENTRY,0,3,0,11,0,100,0,0,0,0,0,11,48356,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Commander - On Spawn - Cast See Wintergarde Invisibility");
+
+-- Scarlet Peasant SAI
+SET @ENTRY := 28557;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,1,234, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`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,20,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Peasant - At 0-20% hp - Say text"),
+(@ENTRY,0,1,0,11,0,100,0,0,0,0,0,11,48356,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Peasant - On Spawn - Cast See Wintergarde Invisibility");
+
+-- Scarlet Captain SAI
+SET @ENTRY := 28611;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,0,1,2404, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,9,0,100,0,0,0,2300,3900,11,52818,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Captain - In Combat CMC - Cast Shoot"),
+(@ENTRY,0,1,0,9,0,100,0,0,5,6000,9000,11,52221,0,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Captain - Between 0-5 Range - Cast Heroic Strike"),
+(@ENTRY,0,2,0,7,0,100,1,0,0,0,0,40,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Captain - On Evade - Set Sheath Melee"),
+(@ENTRY,0,3,0,11,0,100,0,0,0,0,0,11,48356,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Captain - On Spawn - Cast See Wintergarde Invisibility");
+
+-- Firemane Flamecaller SAI
+SET @ENTRY := 4334;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,0,1,0, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`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,3400,11,9053,64,0,0,0,0,2,0,0,0,0,0,0,0,"Firemane Flamecaller - In Combat CMC - Cast Fireball"),
+(@ENTRY,0,1,0,0,0,100,0,1000,5000,600000,600000,11,18968,1,0,0,0,0,1,0,0,0,0,0,0,0,"Firemane Flamecaller - In Combat - Cast Fire Shield"),
+(@ENTRY,0,2,0,0,0,100,0,9000,16000,30000,45000,11,11990,1,0,0,0,0,2,0,0,0,0,0,0,0,"Firemane Flamecaller - In Combat - Cast Rain of Fire");
+
+-- Plague Eruptor SAI
+SET @ENTRY := 27611;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,65536,1,0, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`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,8000,28000,38000,11,49350,0,0,0,0,0,5,0,0,0,0,0,0,0,"Plague Eruptor - In Combat - Cast Plague Cloud");
+
+-- Fordragon High Priest SAI
+SET @ENTRY := 27677;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+UPDATE `creature_addon` SET `auras`= '' WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4800,11,25054,64,0,0,0,0,2,0,0,0,0,0,0,0,"Fordragon High Priest - In Combat CMC - Cast Holy Smite"),
+(@ENTRY,0,1,0,0,0,100,0,18000,25000,40000,53000,11,32595,1,0,0,0,0,1,0,0,0,0,0,0,0,"Fordragon High Priest - In Combat - Cast Power Word: Shield"),
+(@ENTRY,0,2,0,0,0,100,0,9000,15000,15000,23000,11,49306,1,0,0,0,0,1,0,0,0,0,0,0,0,"Fordragon High Priest - In Combat - Cast Circle of Healing"),
+(@ENTRY,0,3,0,14,0,100,0,3000,40,17000,21000,11,25058,1,0,0,0,0,7,0,0,0,0,0,0,0,"Fordragon High Priest - On Friendly Unit At 3000 Health Within 40 Range - Cast Renew"),
+(@ENTRY,0,4,0,2,0,100,1,0,15,0,0,11,49348,1,0,0,0,0,1,0,0,0,0,0,0,0,"Fordragon High Priest - Between 0-15% Health - Cast Greater Heal");
+
+-- Angrathar Aberration SAI
+SET @ENTRY := 27631;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,65536,1,0, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,2,0,100,1,0,30,0,0,11,31540,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angrathar Aberration - HP@30% - Cast Enrage"),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angrathar Aberration - HP@30% - Say 0");
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0, '%s becomes enraged!',16,0,100,0,0,0, 'Angrathar Aberration on enrage');
+
+-- Scarlet Medic SAI
+SET @ENTRY := 28608;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,0,1,0, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,11,48356,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Medic - On Spawn - Cast See Wintergarde Invisibility"),
+(@ENTRY,0,1,0,1,0,100,0,1000,1000,1800000,1800000,11,13864,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Medic - Out Of Combat - Cast Power Word: Fortitude"),
+(@ENTRY,0,2,0,4,0,30,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Medic - On Aggro - Say Line 0"),
+(@ENTRY,0,3,0,0,0,100,0,0,0,3400,4800,11,15498,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Medic - In Combat CMC - Cast Holy Smite"),
+(@ENTRY,0,4,0,2,0,100,1,0,0,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Medic - Between 0-15% Health - Flee For Assist");
+
+-- Bloodspore Firestarter SAI
+SET @ENTRY := 25470;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,0,1,0, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`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,45985,1,1,0,0,0,1,0,0,0,0,0,0,0,"Bloodspore Firestarter - Out Of Combat - Cast Flaming Touch"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,3800,6200,11,20793,64,0,0,0,0,2,0,0,0,0,0,0,0,"Bloodspore Firestarter - In Combat CMC - Cast Fireball");
+
+-- Citizen of New Avalon SAI
+SET @ENTRY := 28941;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,0,1,0, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,11,52716,2,0,0,0,0,1,0,0,0,0,0,0,0,"Citizen of New Avalon - On Aggro - Cast fear");
diff --git a/sql/updates/world/2013_12_17_00_world_sai.sql b/sql/updates/world/2013_12_17_00_world_sai.sql
new file mode 100644
index 00000000000..3ebe6e95618
--- /dev/null
+++ b/sql/updates/world/2013_12_17_00_world_sai.sql
@@ -0,0 +1 @@
+UPDATE `smart_scripts` SET `action_type`=69 WHERE `entryorguid`=137300 AND `id` IN (19,20);
diff --git a/sql/updates/world/2013_12_18_00_world_misc.sql b/sql/updates/world/2013_12_18_00_world_misc.sql
new file mode 100644
index 00000000000..1ea7b8550eb
--- /dev/null
+++ b/sql/updates/world/2013_12_18_00_world_misc.sql
@@ -0,0 +1,161 @@
+-- Add script to Commander Eligor Dawnbringer
+UPDATE creature_template SET `AIName`= '',ScriptName = 'npc_commander_eligor_dawnbringer' WHERE entry=27784;
+
+-- NPC talk text insert for Commander Eligor Dawnbringer
+DELETE FROM `creature_text` WHERE `entry`=27784;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(27784,0,0, 'Next, I shall speak of the most powerful entities within the pinnacle of Naxxramas. Truly, these are two of the greatest threats to all of Northrend.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer - Pinnacle of Naxxramas'),
+(27784,1,0, 'Next, I shall speak of the death knight wing of Naxxramas. Within its corrupted halls, the echo of battle rings day and night, as our finest warriors are corrupted and twisted into the Scourge''s greatest warriors.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer - Death knight wing of Naxxramas'),
+(27784,2,0, 'Next, I shall speak of the blighted abomination wing of Naxxramas. There, the Scourge develop the strongest and most hideous aberrations of their armies.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer - Blighted abomination wing of Naxxramas'),
+(27784,3,0, 'Next, I shall speak of the accursed spider wing of Naxxramas. It is there that the Scourge breed even more poisonous and dangerous versions of their kin.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer - Accursed spider wing of Naxxramas'),
+(27784,4,0, 'Next, I shall speak of the dread plague wing of Naxxramas, where the scourge seek to improve upon the deadly blight which they spread upon Lordaeron.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer - Dread plague wing of Naxxramas'),
+(27784,5,0, 'I shall leave this image on display for your perusal. Study your opponents'' strengths, for a creature''s strength can also be its weakness.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer - End of talk'),
+(27784,6,0, 'Sapphiron. Once a noble blue dragon within the mountains of Northrend, Sapphiron was slain by Arthas during his campaign through the frozen north. Resurrected to serve him, Sapphiron guards Kel''Thuzad''s lair eternally, awaiting those who would dare tresspass upon his master.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,7,0, 'The Lich, Kel''Thuzad. He serves the Lich King without question, a necromancer of great prowess in life, turned to a master of necromancy after his death. It is said he is the most loyal of the Lich King''s subjects.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,8,0, 'Kel''Thuzad has survived trials that would have long since shattered the souls of even the greatest of the Brotherhood. He readily gave his life at Arthas''s hand, later to be brought back - reborn in the power of the Sunwell.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,9,0, 'In the plaguelands, Kel''Thuzad was again defeated by the agents of the Argent Dawn. However, his phylactery was delivered to a false agent of the brotherhood. We have yet to discover who stole his phylactery or why.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,10,0, 'Pay attention. This is Instructor Razuvious, Kel''Thuzad''s appointed trainer of all death knights. It is said that his own technique is so potent, only a disciple of his could possibly withstand his might.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,11,0, 'Gothik, the Harvester. A master of necromancy and conjuration, Gothik is said to be able to beckon forth legions of the undead at a moment''s notice. It is with his guidance that even the weakest of Death Knights can raise the dead.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,12,0, 'The most powerful Death Knights within Naxxramas are the four horsemen. They represent the pinnacle of Kel''Thuzad''s guard. The first, Thane Korth''azz, holds the power of flame.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,13,0, 'The next, Lady Blaumeux, calls forth the power of shadows, drawing the souls of the living into the voracious embrace.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,14,0, 'Sir Zeliek, a paladin in life, so strong in his faith, that even in undeath, the power of the light still heeds his call, smiting his foes in battle.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,15,0, 'The final Death Knight, Lord Mograine, was the finest warrior that the Death Knights had ever seen. However, after the events in Azeroth, he vanished without a trace. Kel''Thuzad has appointed Baron Rivendare in his place.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,16,0, 'Behold, Patchwerk. When word of his existence first reached the ears of the Brotherhood, none believed the tales of an abomination with such immense speed and strength. Fewer still believed it when he fell the first time...',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,17,0, 'Grobbulus, the first of what was to be an army of flesh giants. It carried the plague slime of Naxxramas within its body, injecting the living ooze into the bodies of its foe. The recipient of this foul injection would usually flee to his allies, bringing them down with him.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,18,0, 'Gluth, the foul plague-dog of Naxxramas, was said to have an appetitie so voracious that even the living were not enough to satisfy his hunger. Feugen was said to feed him an army of Zombies daily, recycling the remains of undead too weak to use in combat.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,19,0, 'Thaddius, built from the flesh of women and children, it is said that their souls are fused together - eternally bound within that foul prison of flesh.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,20,0, 'Anub''Rekhan, one of the finest Spider Lords of Azjol''Nerub, was brought under the control of the Scourge when he and his former commander, Anub''arak, were finally defeated by the Lich King many years ago. It is said that he was the most loyal of Anub''arak''s commanders.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,21,0, 'The Grand Widow Faerlina, a botanist in life, breeder and caretaker of arachnids in death, she oversees the spider wing, developing the most potent of poisons for the Lich King.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,22,0, 'Maexxna, born deep within the mountains of Northrend many ages ago, she was captured within the dread citadel Naxxramas, where she gives birth to her brood, feeding them the corpses of all who dare venture too deeply into Naxxramas.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,23,0, 'Behold, Noth, the Plaguebringer. Responsible for the creation of the process that distills the souls of the living and places them within the cold cage of undeath, Noth was observed to be refining this process even now.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,24,0, 'Observe, Heigan the Unclean. The mastermind behind the plague cauldrons that turned the wilderness of Azeroth into the Plaguelands.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,25,0, 'It is said that Heigan has rigged the very walls and floors of Naxxramas itself with a vast array of traps, which he can trigger at will.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'),
+(27784,26,0, 'Loatheb. The hideous result of fusing the living plague of the plaguelands with the bog beasts of Azeroth, Loatheb is said to control the power of healing itself.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer');
+
+-- 7th Legion Sentinel SAI
+SET @ENTRY := 27162;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id`=@ENTRY) AND `emote`=376;
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,258,376, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,11,18950,0,0,0,0,0,1,0,0,0,0,0,0,0,"7th Legion Sentinel - On Spawn - Cast Invisibility and Stealth Detection"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,2300,3900,11,15547,64,0,0,0,0,2,0,0,0,0,0,0,0,"7th Legion Sentinel - In Combat CMC - Cast Shoot"),
+(@ENTRY,0,2,0,0,0,100,0,9000,14000,17000,22000,11,49481,1,0,0,0,0,5,0,0,0,0,0,0,0,"7th Legion Sentinel - In Combat - Cast Glaive Throw");
+
+-- Remove some duplicate spawns
+DELETE FROM `creature` WHERE `guid` IN (131126, 131132, 131133, 131251, 131253, 131182, 131183, 107389, 107814, 131184, 131249);
+DELETE FROM `creature_addon` WHERE `guid` IN (131126, 131132, 131133, 131251, 131253, 131182, 131183, 107389, 107814, 131184, 131249);
+
+-- remove random movement
+UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `guid`=133347;
+
+UPDATE `creature` SET `id`=27776 WHERE `guid`=107609;
+UPDATE `creature` SET `modelid`=0, `curhealth`=1 WHERE `id` IN (27766,27768,27773,27776,27779);
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (27766,27768,27773,27776,27779);
+
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` BETWEEN 27766 AND 27782;
+DELETE FROM `creature_template_addon` WHERE `entry` BETWEEN 27766 AND 27782;
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`) VALUES
+(27766,0,1),(27767,0,1),(27768,0,1),(27769,0,1),(27770,0,1),(27771,0,1),
+(27772,0,1),(27773,0,1),(27774,0,1),(27775,0,1),(27776,0,1),(27777,0,1),
+(27778,0,1),(27779,0,1),(27780,0,1),(27781,0,1),(27782,0,1);
+
+-- Commander Eligor Dawnbringer and gang
+UPDATE `creature` SET `position_x`=3798.05,`position_y`=-680.611,`position_z`=222.9825, `orientation`=6.038839 WHERE `guid`=133420;
+UPDATE `creature` SET `orientation`=3.384053 WHERE `guid`=131157;
+UPDATE `creature` SET `orientation`=3.649463 WHERE `guid`=131171;
+UPDATE `creature` SET `orientation`=3.633209 WHERE `guid`=133210;
+UPDATE `creature` SET `orientation`=1.793558 WHERE `guid`=131154;
+UPDATE `creature` SET `orientation`=1.942263 WHERE `guid`=131155;
+UPDATE `creature` SET `orientation`=2.368085 WHERE `guid`=131170;
+UPDATE `creature` SET `orientation`=2.026036 WHERE `guid`=133225;
+UPDATE `creature` SET `orientation`=3.397538 WHERE `guid`=133227;
+UPDATE `creature` SET `orientation`=3.839286 WHERE `guid`=131172;
+UPDATE `creature` SET `orientation`=2.225338 WHERE `guid`=131173;
+
+-- Condition for spell targets
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=49519;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 49519, 0, 0, 31, 0, 3, 23033, 0, 0, 0, 0, '', 'Heroic Image Channel Targets Invisible Stalker (Floating)');
+
+-- Pathing for Invisible Stalker (Floating) Entry: 23033
+SET @NPC := 131250;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3804.403,`position_y`=-695.9564,`position_z`=224.0008 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_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3804.403,-695.9564,224.0008,0,0,0,0,100,0),
+(@PATH,2,3805.12,-693.7753,224.1427,0,0,0,0,100,0),
+(@PATH,3,3807.3,-691.3777,224.4204,0,0,0,0,100,0),
+(@PATH,4,3811.286,-692.7845,224.0623,0,0,0,0,100,0),
+(@PATH,5,3813.058,-695.1207,224.999,0,0,0,0,100,0),
+(@PATH,6,3813.632,-697.7827,224.9997,0,0,0,0,100,0),
+(@PATH,7,3812.425,-700.1073,224.0008,0,0,0,0,100,0),
+(@PATH,8,3809.649,-700.7341,224.0008,0,0,0,0,100,0),
+(@PATH,9,3805.123,-698.4109,224.0008,0,0,0,0,100,0);
+
+-- Pathing for Invisible Stalker (Floating) Entry: 23033
+SET @NPC := 131252;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3804.225,`position_y`=-669.8109,`position_z`=224.8465 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_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3804.225,-669.8109,224.8465,0,0,0,0,100,0),
+(@PATH,2,3806.744,-669.3193,224.8465,0,0,0,0,100,0),
+(@PATH,3,3809.637,-670.4093,224.8465,0,0,0,0,100,0),
+(@PATH,4,3810.651,-674.6262,224.8465,0,0,0,0,100,0),
+(@PATH,5,3808.057,-677.2673,224.8465,0,0,0,0,100,0),
+(@PATH,6,3804.191,-676.4904,224.8465,0,0,0,0,100,0),
+(@PATH,7,3802.311,-673.4647,224.8465,0,0,0,0,100,0);
+
+-- Pathing for Invisible Stalker (Floating) Entry: 23033
+SET @NPC := 133899;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3816.468,`position_y`=-672.7212,`position_z`=224.0009 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_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3816.468,-672.7212,224.0009,0,0,0,0,100,0),
+(@PATH,2,3819.056,-673.5551,222.9989,0,0,0,0,100,0),
+(@PATH,3,3820.681,-676.2151,224.0009,0,0,0,0,100,0),
+(@PATH,4,3819.998,-679.0777,224.0009,0,0,0,0,100,0),
+(@PATH,5,3815.454,-680.2464,224.0009,0,0,0,0,100,0),
+(@PATH,6,3813.004,-677.2374,224.0009,0,0,0,0,100,0),
+(@PATH,7,3814.027,-673.7756,224.0009,0,0,0,0,100,0);
+
+-- Pathing for Invisible Stalker (Floating) Entry: 23033
+SET @NPC := 133894;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3805.747,`position_y`=-687.1393,`position_z`=224.1568 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_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3805.747,-687.1393,224.1568,0,0,0,0,100,0),
+(@PATH,2,3804.891,-684.0416,224.1568,0,0,0,0,100,0),
+(@PATH,3,3807.519,-679.4173,224.1568,0,0,0,0,100,0),
+(@PATH,4,3811.978,-681.2499,224.1568,0,0,0,0,100,0),
+(@PATH,5,3811.325,-686.3337,224.1568,0,0,0,0,100,0),
+(@PATH,6,3808.847,-687.7697,224.1568,0,0,0,0,100,0);
+
+-- Pathing for Invisible Stalker (Floating) Entry: 23033
+SET @NPC := 133900;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3794.607,`position_y`=-693.5101,`position_z`=224.7538 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_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3794.607,-693.5101,224.7538,0,0,0,0,100,0),
+(@PATH,2,3794.899,-689.9442,224.7538,0,0,0,0,100,0),
+(@PATH,3,3798.899,-687.9035,224.7538,0,0,0,0,100,0),
+(@PATH,4,3802.577,-690.2576,224.7538,0,0,0,0,100,0),
+(@PATH,5,3801.8,-694.2828,224.7538,0,0,0,0,100,0),
+(@PATH,6,3797.656,-695.3698,224.7538,0,0,0,0,100,0);
diff --git a/sql/updates/world/2013_12_18_01_world_sai.sql b/sql/updates/world/2013_12_18_01_world_sai.sql
new file mode 100644
index 00000000000..5c494ce9251
--- /dev/null
+++ b/sql/updates/world/2013_12_18_01_world_sai.sql
@@ -0,0 +1,173 @@
+-- Dragonflayer Metalworker SAI
+SET @ENTRY := 24078;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,1,233, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=4;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,4,0,11,0,100,6,0,0,0,0,11,43929,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonflayer Metalworker - On Spawn - Cast Fiery Weapon Proc");
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0, '%s goes into a frenzy!',16,0,100,0,0,0, 'Dragonflayer Metalworker');
+
+-- Zeth'Gor Quest Credit Marker, They Must Burn, Tower Foothill
+SET @ENTRY := 24078;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,4097,0, '');
+
+-- Plagued Dragonflayer Handler SAI
+SET @ENTRY := 24199;
+UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=10;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,10,0,11,0,100,6,0,0,0,0,11,21862,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonflayer Handler - On Spawn - Cast Radiation");
+
+-- Plagued Dragonflayer Tribesman SAI
+SET @ENTRY := 23564;
+UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=12;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,12,0,11,0,100,6,0,0,0,0,11,21862,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonflayer Tribesman - On Spawn - Cast Radiation");
+
+-- Murkgill Lord SAI
+SET @ENTRY := 4460;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`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,1,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,9800,11100,16100,25700,11,38033,1,1,0,0,0,1,0,0,0,0,0,0,0,"Murkgill Lord - In Combat - Cast Frost Nova"),
+(@ENTRY,0,3,0,2,0,100,1,0,0,0,0,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Murkgill Lord - Between 0-15% Health - Flee For Assist");
+
+-- Fordragon Marksman SAI
+SET @ENTRY := 27540;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,65536,258,0, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,5000,7000,11,32103,64,0,0,0,0,2,0,0,0,0,0,0,0,"Fordragon Marksman - In Combat CMC - Cast Shoot"),
+(@ENTRY,0,1,0,0,0,100,0,10000,17000,10000,17000,11,7896,0,0,0,0,0,5,0,0,0,0,0,0,0,"Fordragon Marksman - Between In Combat - Cast Exploding Shot"),
+(@ENTRY,0,2,0,0,0,100,0,12000,17000,22000,26000,11,49474,1,0,0,0,0,1,0,0,0,0,0,0,0,"Fordragon Marksman - In Combat - Cast Rapid Shot");
+
+-- Sunfury Nethermancer SAI
+SET @ENTRY := 20248;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id`=@ENTRY) AND `bytes1`=0 AND `emote`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`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,300000,300000,11,36477,1,0,0,0,0,1,0,0,0,0,0,0,0,"Sunfury Nethermancer - Out Of Combat - Cast Summon Mana Beast"),
+(@ENTRY,0,1,0,9,0,100,0,500,500,3400,4800,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Sunfury Nethermancer - Combat CMC - Cast Shadow Bolt"),
+(@ENTRY,0,2,0,0,0,100,0,0,0,30000,35000,11,35778,1,0,0,0,0,1,0,0,0,0,0,0,0,"Sunfury Nethermancer - In Combat - Cast Bloodcrystal Surge"),
+(@ENTRY,0,3,0,2,0,100,0,0,75,15000,20000,11,17173,1,0,0,0,0,2,0,0,0,0,0,0,0,"Sunfury Nethermancer - Between 0-75% Health - Cast Drain Life"),
+(@ENTRY,0,4,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Sunfury Nethermancer - Between 0-15% Health - Flee For Assist");
+
+-- Darkspear Axe Thrower SAI
+SET @ENTRY := 18970;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,4097,0, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`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,10277,64,0,0,0,0,2,0,0,0,0,0,0,0,"Darkspear Axe Thrower - In Combat CMC - Cast Throw"),
+(@ENTRY,0,1,0,2,0,100,1,0,0,0,0,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Darkspear Axe Thrower - Between 0-15% Health - Flee For Assist");
+
+-- Blood of the Old God SAI
+SET @ENTRY := 28854;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,11,52561,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blood of the Old God - On Spawn - Cast Oil Coat"),
+(@ENTRY,0,1,0,9,0,100,1,0,2,0,0,11,52564,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blood of the Old God - Range 2 yards - Cast Corruption of the Old God");
+
+-- Scourge Necromancer SAI
+SET @ENTRY := 31096;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`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,20298,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scourge Necromancer - In Combat CMC - Cast Shadow Bolt"),
+(@ENTRY,0,1,0,0,0,100,0,12000,15000,16000,19000,11,51337,1,0,0,0,0,1,0,0,0,0,0,0,0,"Scourge Necromancer - In Combat - Cast Shadowflame"),
+(@ENTRY,0,2,0,2,0,100,1,0,0,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scourge Necromancer - At 15% HP - Flee For Assist");
+
+-- Venture Co. Geologist SAI
+SET @ENTRY := 1096;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,4097,0, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`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,"Venture Co. Geologist - In Combat CMC - Cast 9532"),
+(@ENTRY,0,1,0,0,0,100,0,5400,9600,24000,37200,11,184,1,0,0,0,0,1,0,0,0,0,0,0,0,"Venture Co. Geologist - In Combat - Cast 184"),
+(@ENTRY,0,2,0,2,0,100,0,0,50,10100,19800,11,4979,1,0,0,0,0,1,0,0,0,0,0,0,0,"Venture Co. Geologist - Between 0-50% Health - Cast 4979"),
+(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Venture Co. Geologist - Between 0-15% Health - Flee For Assist");
+
+-- Death Knight Champion
+SET @ENTRY := 27288;
+UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY;
+
+-- Citizen of New Avalon
+SET @ENTRY := 28942;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id`=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,1,0, '');
+
+-- Deadwood Shaman SAI
+SET @ENTRY := 7158;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+UPDATE `creature_addon` SET `bytes2`=4097 WHERE `guid`=40394;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id`=@ENTRY) AND `path_id`=0;
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,4097,0, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`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,13585,1,0,0,0,0,1,0,0,0,0,0,0,0,"Deadwood Shaman - Out Of Combat - Cast 13585"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,2400,3800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Deadwood Shaman - In Combat CMC - Cast 9532"),
+(@ENTRY,0,2,0,0,0,100,0,2500,7000,120000,130000,11,13583,0,0,0,0,0,2,0,0,0,0,0,0,0,"Deadwood Shaman - In Combat - Cast 13583"),
+(@ENTRY,0,3,0,0,0,100,0,5500,9000,6500,9500,11,12058,1,0,0,0,0,2,0,0,0,0,0,0,0,"Deadwood Shaman - In Combat - Cast 12058");
+
+-- Ahn'kahar Swarmer SAI
+SET @ENTRY := 30338;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,1,0, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,11,0,100,6,0,0,0,0,11,56158,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ahn'kahar Swarmer - On Spawn - Cast Swarm (Dungeon Only)"),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,11,56281,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ahn'kahar Swarmer - On Spawn - Cast Swarm (Dungeon Only)"),
+(@ENTRY,0,2,0,0,0,100,6,1000,1000,35000,45000,11,56354,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ahn'kahar Swarmer - In Combat - Cast Sprint (Dungeon Only)");
+
+-- Deep Crawler SAI
+SET @ENTRY := 30279;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY) AND `path_id`=0;
+UPDATE `creature_addon` SET `auras`= '' WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY);
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,1,0, '');
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,11,0,100,6,0,0,0,0,11,56583,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Crawler - On Spawn - Cast Combined Toxins (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,4000,7000,9000,12000,11,56580,0,0,0,0,0,5,0,0,0,0,0,0,0,"Deep Crawler - In Combat - Cast 56580 (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,4,4000,7000,9000,12000,11,59108,0,0,0,0,0,5,0,0,0,0,0,0,0,"Deep Crawler - In Combat - Cast 59108 (Heroic Dungeon)"),
+(@ENTRY,0,3,0,12,0,100,2,0,20,14000,17000,11,56581,33,0,0,0,0,2,0,0,0,0,0,0,0,"Deep Crawler - On Target Between 0-20% Health - Cast 56581 (Normal Dungeon)"),
+(@ENTRY,0,4,0,12,0,100,4,0,20,14000,17000,11,59109,33,0,0,0,0,2,0,0,0,0,0,0,0,"Deep Crawler - On Target Between 0-20% Health - Cast 59109 (Heroic Dungeon)");
+
+UPDATE `smart_scripts` SET `comment`= "Inquisitor Salrand - On Spawn - Cast Cosmetic - Divine Shield Blue" WHERE `entryorguid`=25584 AND `source_type`=0 AND `id`=5;
+
+-- Tree Warden Chawn SAI
+SET @ENTRY := 22007;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`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,25000,25000,300000,300000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tree Warden Chawn - Out of Combat - Say text 0"),
+(@ENTRY,0,1,0,1,0,100,0,30000,30000,305000,305000,1,0,0,0,0,0,0,19,21983,10,0,0,0,0,0,"Tree Warden Chawn - Out of Combat - Samia Inkling Say text 0");
+DELETE FROM `creature_text` WHERE `entry` IN (22007,21983);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(22007,0,0, 'Samia, do you know who Kolphis Darkscale is?',12,0,100,6,0,0, 'Tree Warden Chawn OOC text'),
+(21983,0,0, 'Yes, he''s the second-in-command of the wyrmcult at the Blackwing Coven to the west.',12,0,100,1,0,0, 'Samia Inkling OOC text');
diff --git a/sql/updates/world/2013_12_18_02_world_misc.sql b/sql/updates/world/2013_12_18_02_world_misc.sql
new file mode 100644
index 00000000000..a52a71948b2
--- /dev/null
+++ b/sql/updates/world/2013_12_18_02_world_misc.sql
@@ -0,0 +1,332 @@
+-- Pathing for Razak Ironsides Entry: 21118
+SET @NPC := 74169;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1898.282,`position_y`=5588.863,`position_z`=267.5799 WHERE `guid`=@NPC;
+UPDATE `creature_template_addon` SET `path_id`=@PATH WHERE `entry`=21118;
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1898.282,5588.863,267.5799,0,0,0,0,100,0),
+(@PATH,2,1901.311,5591.437,267.5729,2.268928,12000,0,0,100,0),
+(@PATH,3,1898.282,5588.863,267.5799,0,0,0,0,100,0),
+(@PATH,4,1903.68,5582.878,263.0307,0,0,0,0,100,0),
+(@PATH,5,1912.105,5576.249,263.5081,0,0,0,0,100,0),
+(@PATH,6,1933.132,5582.547,263.7424,0,0,0,0,100,0),
+(@PATH,7,1936.292,5592.606,263.6276,0,0,0,0,100,0),
+(@PATH,8,1926.111,5594.334,267.2368,0,0,0,0,100,0),
+(@PATH,9,1926.288,5600.459,267.3679,0,0,0,0,100,0),
+(@PATH,10,1938.523,5601.16,267.3898,1.448623,10000,0,0,100,0),
+(@PATH,11,1926.537,5599.701,267.3592,0,0,0,0,100,0),
+(@PATH,12,1926.136,5594.247,267.2361,0,0,0,0,100,0),
+(@PATH,13,1935.867,5592.542,263.6276,0,0,0,0,100,0),
+(@PATH,14,1941.244,5582.967,263.5026,0,0,0,0,100,0),
+(@PATH,15,1947.379,5586.251,263.8776,0,0,0,0,100,0),
+(@PATH,16,1953.378,5591.493,268.5281,0,0,0,0,100,0),
+(@PATH,17,1956.4,5589.018,268.5525,0.715585,12000,0,0,100,0),
+(@PATH,18,1953.378,5591.493,268.5281,0,0,0,0,100,0),
+(@PATH,19,1946.525,5585.453,263.715,0,0,0,0,100,0),
+(@PATH,20,1941.921,5576.632,263.6276,0,0,0,0,100,0),
+(@PATH,21,1947.023,5567.701,263.2973,0,0,0,0,100,0),
+(@PATH,22,1952.134,5567.827,262.4904,0,14000,0,0,100,0),
+(@PATH,23,1941.256,5567.2,263.1159,0,0,0,0,100,0),
+(@PATH,24,1931.549,5558.535,263.5149,0,0,0,0,100,0),
+(@PATH,25,1921.011,5561.81,263.1283,0,0,0,0,100,0),
+(@PATH,26,1910.488,5564.503,262.6283,0,0,0,0,100,0),
+(@PATH,27,1899.725,5566.792,261.2341,2.80998,14000,0,0,100,0),
+(@PATH,28,1905.735,5566.743,262.228,0,0,0,0,100,0),
+(@PATH,29,1911.517,5567.898,262.866,0,0,0,0,100,0),
+(@PATH,30,1913.893,5572.75,263.3232,0,0,0,0,100,0),
+(@PATH,31,1910.438,5577.884,263.4108,0,0,0,0,100,0),
+(@PATH,32,1903.363,5583.145,263.0307,0,0,0,0,100,0);
+
+-- Pathing for Station Technician Entry: 21114
+SET @NPC := 74157;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1927.036,`position_y`=5599.061,`position_z`=267.3522 WHERE `guid`=@NPC;
+UPDATE `creature_addon` SET `path_id`=@PATH WHERE `guid`=74157;
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1927.036,5599.061,267.3522,0,0,0,0,100,0),
+(@PATH,2,1933.268,5600.586,267.3755,0,0,0,0,100,0),
+(@PATH,3,1942.31,5599.332,267.372,0,0,0,0,100,0),
+(@PATH,4,1933.268,5600.586,267.3755,0,0,0,0,100,0),
+(@PATH,5,1927.036,5599.061,267.3522,0,0,0,0,100,0),
+(@PATH,6,1933.268,5600.586,267.3755,0,0,0,0,100,0),
+(@PATH,7,1942.31,5599.332,267.372,0,0,0,0,100,0),
+(@PATH,8,1933.268,5600.586,267.3755,0,0,0,0,100,0),
+(@PATH,9,1927.036,5599.061,267.3522,0,0,0,0,100,0),
+(@PATH,10,1933.268,5600.586,267.3755,0,0,0,0,100,0),
+(@PATH,11,1942.31,5599.332,267.372,0,0,0,0,100,0),
+(@PATH,12,1944.908,5599.906,267.3809,0.541052,20000,0,0,100,0);
+
+UPDATE `creature` SET `spawndist`=5,`MovementType`=1 WHERE `guid`=74216;
+UPDATE `creature` SET `spawndist`=10,`MovementType`=1 WHERE `id`=21423;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=0 WHERE `guid` IN (74147,74148,74149,74151,74152,74153,74154,74156);
+UPDATE `Creature_template` SET InhabitType=4 WHERE `entry`=21757;
+UPDATE `creature_template` SET `InhabitType`=4, `flags_extra`=`flags_extra`|128 WHERE `entry` IN (21393,21413,21819);
+UPDATE `Creature_template_addon` SET bytes2=258 WHERE `entry`=21115;
+
+DELETE FROM `creature_template_addon` WHERE `entry`=21441;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`emote`,`auras`) VALUES (21441,0,258,214, '');
+
+-- Station Guard SAI "npc had no ai"
+SET @ENTRY := 21115;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,3000,3000,11,36246,64,0,0,0,0,2,0,0,0,0,0,0,0,"Station Guard - In Combat - Cast Shoot Tech Gun");
+
+-- Station Sharpshooter SAI "npc had no ai"
+SET @ENTRY := 21441;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,0,0,3000,3000,11,36246,64,0,0,0,0,2,0,0,0,0,0,0,0,"Station Sharpshooter - In Combat - Cast Shoot Tech Gun");
+
+UPDATE `creature_template` SET `InhabitType`=1 WHERE `entry`=21004;
+UPDATE `creature_template` SET `flags_extra`=`flags_extra`|128 WHERE `entry`=21203;
+UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `id`=21203;
+
+-- Pathing for Blade's Edge Invisible Stalker Entry: 21234
+SET @NPC := 74445;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1925.933,`position_y`=5574.994,`position_z`=263.9057 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_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1925.933,5574.994,263.9057,0,0,0,0,100,0),
+(@PATH,2,1923.862,5571.222,264.5634,0,0,0,0,100,0),
+(@PATH,3,1918.887,5573.768,263.9057,0,0,0,0,100,0),
+(@PATH,4,1918.378,5580.262,263.9057,0,0,0,0,100,0),
+(@PATH,5,1921.742,5581.211,263.9057,0,0,0,0,100,0),
+(@PATH,6,1921.567,5583.882,263.9057,0,0,0,0,100,0),
+(@PATH,7,1918.75,5579.688,263.9057,0,0,0,0,100,0),
+(@PATH,8,1918.887,5573.768,263.9057,0,0,0,0,100,0),
+(@PATH,9,1923.862,5571.222,264.5634,0,0,0,0,100,0);
+
+-- Pathing for Blade's Edge Invisible Stalker Entry: 21234
+SET @NPC := 74435;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1930.208,`position_y`=5586.458,`position_z`=263.7807 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_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1930.208,5586.458,263.7807,0,0,0,0,100,0),
+(@PATH,2,1924.03,5583.297,269.222,0,0,0,0,100,0),
+(@PATH,3,1920.99,5584.492,269.222,0,0,0,0,100,0),
+(@PATH,4,1917.851,5583.545,269.222,0,0,0,0,100,0),
+(@PATH,5,1917.235,5581.401,269.222,0,0,0,0,100,0),
+(@PATH,6,1918.989,5579.888,269.222,0,0,0,0,100,0),
+(@PATH,7,1923.064,5581.889,269.222,0,0,0,0,100,0),
+(@PATH,8,1921.47,5580.008,269.222,0,0,0,0,100,0),
+(@PATH,9,1917.235,5581.401,269.222,0,0,0,0,100,0),
+(@PATH,10,1920.99,5584.492,269.222,0,0,0,0,100,0),
+(@PATH,11,1923.452,5583.202,269.222,0,0,0,0,100,0);
+
+-- Pathing for Blade's Edge Invisible Stalker Entry: 21234
+SET @NPC := 74432;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1923.565,`position_y`=5554.142,`position_z`=264.0841 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_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1923.565,5554.142,264.0841,0,0,0,0,100,0),
+(@PATH,2,1919.271,5553.125,263.7533,0,0,0,0,100,0),
+(@PATH,3,1917.914,5550.622,263.8282,0,0,0,0,100,0),
+(@PATH,4,1919.061,5546.854,265.3362,0,0,0,0,100,0),
+(@PATH,5,1922.396,5545.313,267.0033,0,0,0,0,100,0),
+(@PATH,6,1924.869,5545.137,268.5815,0,0,0,0,100,0),
+(@PATH,7,1921.442,5545.314,266.4293,0,0,0,0,100,0),
+(@PATH,8,1918.229,5550.521,263.8783,0,0,0,0,100,0),
+(@PATH,9,1919.271,5552.083,263.8783,0,0,0,0,100,0);
+
+-- Pathing for Blade's Edge Invisible Stalker Entry: 21234
+SET @NPC := 74441;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1928.164,`position_y`=5571.725,`position_z`=269.162 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_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1928.164,5571.725,269.162,0,0,0,0,100,0),
+(@PATH,2,1928.04,5573.644,269.162,0,0,0,0,100,0),
+(@PATH,3,1926.483,5574.808,269.162,0,0,0,0,100,0),
+(@PATH,4,1928.04,5573.644,269.162,0,0,0,0,100,0),
+(@PATH,5,1924.417,5570.661,269.162,0,0,0,0,100,0),
+(@PATH,6,1923.467,5571.99,269.162,0,0,0,0,100,0),
+(@PATH,7,1924.153,5574.196,269.162,0,0,0,0,100,0),
+(@PATH,8,1923.467,5571.99,269.162,0,0,0,0,100,0);
+
+-- Pathing for Blade's Edge Invisible Stalker Entry: 21234
+SET @NPC := 74433;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1927.253,`position_y`=5578.909,`position_z`=263.9057 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_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1927.253,5578.909,263.9057,0,0,0,0,100,0),
+(@PATH,2,1931.318,5580.051,263.9057,0,0,0,0,100,0),
+(@PATH,3,1929.688,5578.125,263.9057,0,0,0,0,100,0),
+(@PATH,4,1925.712,5578.032,263.9057,0,0,0,0,100,0);
+
+-- Pathing for Blade's Edge Invisible Stalker Entry: 21234
+SET @NPC := 74434;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1929.118,`position_y`=5532.288,`position_z`=266.8577 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_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1929.118,5532.288,266.8577,0,0,0,0,100,0),
+(@PATH,2,1933.571,5532.64,267.3299,0,0,0,0,100,0),
+(@PATH,3,1929.192,5531.739,267.5261,0,0,0,0,100,0),
+(@PATH,4,1925.521,5531.25,266.7585,0,0,0,0,100,0),
+(@PATH,5,1929.192,5531.739,267.5261,0,0,0,0,100,0),
+(@PATH,6,1933.571,5532.64,267.3299,0,0,0,0,100,0),
+(@PATH,7,1929.192,5531.739,267.5261,0,0,0,0,100,0),
+(@PATH,8,1925.521,5531.25,266.7585,0,0,0,0,100,0),
+(@PATH,9,1929.192,5531.739,267.5261,0,0,0,0,100,0),
+(@PATH,10,1933.571,5532.64,267.3299,0,0,0,0,100,0),
+(@PATH,11,1929.192,5531.739,267.5261,0,0,0,0,100,0),
+(@PATH,12,1926.394,5530.808,266.6537,0,0,0,0,100,0),
+(@PATH,13,1929.192,5531.739,267.5261,0,0,0,0,100,0),
+(@PATH,14,1933.571,5532.64,267.3299,0,0,0,0,100,0),
+(@PATH,15,1929.192,5531.739,267.5261,0,0,0,0,100,0),
+(@PATH,16,1926.394,5530.808,266.6537,0,0,0,0,100,0),
+(@PATH,17,1929.192,5531.739,267.5261,0,0,0,0,100,0),
+(@PATH,18,1933.571,5532.64,267.3299,0,0,0,0,100,0),
+(@PATH,19,1929.192,5531.739,267.5261,0,0,0,0,100,0),
+(@PATH,20,1926.394,5530.808,266.6537,0,0,0,0,100,0),
+(@PATH,21,1929.192,5531.739,267.5261,0,0,0,0,100,0),
+(@PATH,22,1933.571,5532.64,267.3299,0,0,0,0,100,0),
+(@PATH,23,1926.394,5530.808,266.6537,0,0,0,0,100,0);
+
+-- Pathing for Blade's Edge Invisible Stalker Entry: 21234
+SET @NPC := 74447;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1938.432,`position_y`=5539.722,`position_z`=266.5296 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_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1938.432,5539.722,266.5296,0,0,0,0,100,0),
+(@PATH,2,1937.34,5536.819,266.5726,0,0,0,0,100,0),
+(@PATH,3,1937.305,5535.265,266.5568,0,0,0,0,100,0),
+(@PATH,4,1938.837,5533.25,266.4304,0,0,0,0,100,0),
+(@PATH,5,1937.302,5535.26,266.5613,0,0,0,0,100,0);
+
+-- Pathing for Blade's Edge Invisible Stalker Entry: 21234
+SET @NPC := 74448;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1958.761,`position_y`=5585.456,`position_z`=268.5192 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_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1958.761,5585.456,268.5192,0,0,0,0,100,0),
+(@PATH,2,1957.849,5587.807,268.5635,0,0,0,0,100,0);
+
+-- Pathing for Blade's Edge Invisible Stalker Entry: 21234
+SET @NPC := 74427;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1905.77,`position_y`=5550.124,`position_z`=263.926 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_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1905.77,5550.124,263.926,0,0,0,0,100,0),
+(@PATH,2,1906.093,5546.895,264.1884,0,0,0,0,100,0),
+(@PATH,3,1903.544,5544.234,264.8871,0,0,0,0,100,0),
+(@PATH,4,1898.493,5549.161,264.5766,0,0,0,0,100,0),
+(@PATH,5,1903.544,5544.234,264.8871,0,0,0,0,100,0),
+(@PATH,6,1906.093,5546.895,264.1884,0,0,0,0,100,0),
+(@PATH,7,1905.77,5550.124,263.926,0,0,0,0,100,0),
+(@PATH,8,1902.604,5552.604,263.7533,0,0,0,0,100,0);
+
+-- Pathing for Blade's Edge Invisible Stalker Entry: 21234
+SET @NPC := 74430;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1885.685,`position_y`=5573.016,`position_z`=260.2205 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_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1885.685,5573.016,260.2205,0,0,0,0,100,0),
+(@PATH,2,1903.292,5566.08,261.9607,0,0,0,0,100,0),
+(@PATH,3,1895.033,5554.773,264.8015,0,0,0,0,100,0),
+(@PATH,4,1879.357,5548.936,268.2559,0,0,0,0,100,0),
+(@PATH,5,1867.17,5544.657,273.0115,0,0,0,0,100,0),
+(@PATH,6,1853.044,5537.785,276.9887,0,0,0,0,100,0),
+(@PATH,7,1863.808,5542.95,274.4838,0,0,0,0,100,0),
+(@PATH,8,1871.133,5545.963,271.3029,0,0,0,0,100,0),
+(@PATH,9,1884.797,5550.7,266.1573,0,0,0,0,100,0),
+(@PATH,10,1900.419,5557.055,263.4814,0,0,0,0,100,0),
+(@PATH,11,1911.849,5555.216,263.1897,0,0,0,0,100,0),
+(@PATH,12,1915.648,5534.096,267.2911,0,0,0,0,100,0),
+(@PATH,13,1926.042,5532.813,266.6335,0,0,0,0,100,0),
+(@PATH,14,1934.861,5540.538,266.9522,0,0,0,0,100,0),
+(@PATH,15,1935.881,5550.045,265.9952,0,0,0,0,100,0),
+(@PATH,16,1919.127,5569.151,263.7807,0,0,0,0,100,0),
+(@PATH,17,1922.958,5581.576,263.9057,0,0,0,0,100,0),
+(@PATH,18,1897.795,5574.03,261.5737,0,0,0,0,100,0),
+(@PATH,19,1922.958,5581.576,263.9057,0,0,0,0,100,0),
+(@PATH,20,1919.127,5569.151,263.7807,0,0,0,0,100,0),
+(@PATH,21,1935.881,5550.045,265.9952,0,0,0,0,100,0),
+(@PATH,22,1934.861,5540.538,266.9522,0,0,0,0,100,0),
+(@PATH,23,1926.632,5533.106,266.6335,0,0,0,0,100,0),
+(@PATH,24,1915.648,5534.096,267.2911,0,0,0,0,100,0),
+(@PATH,25,1911.849,5555.216,263.1897,0,0,0,0,100,0),
+(@PATH,26,1900.419,5557.055,263.4814,0,0,0,0,100,0),
+(@PATH,27,1884.797,5550.7,266.1573,0,0,0,0,100,0),
+(@PATH,28,1871.133,5545.963,271.3029,0,0,0,0,100,0),
+(@PATH,29,1863.808,5542.95,274.4838,0,0,0,0,100,0),
+(@PATH,30,1853.044,5537.785,276.9887,0,0,0,0,100,0),
+(@PATH,31,1867.17,5544.657,273.0115,0,0,0,0,100,0),
+(@PATH,32,1879.357,5548.936,268.2559,0,0,0,0,100,0),
+(@PATH,33,1894.842,5554.514,264.766,0,0,0,0,100,0),
+(@PATH,34,1903.292,5566.08,261.9607,0,0,0,0,100,0);
+
+-- Station Technician text
+SET @ENTRY := 21114;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0, 'YEOW!!',12,0,100,0,0,0, 'Station Technician'),
+(@ENTRY,0,1, 'I''M ON FIRE!!!',12,0,100,0,0,0, 'Station Technician'),
+(@ENTRY,0,2, 'IT BURNS!!',12,0,100,0,0,0, 'Station Technician'),
+(@ENTRY,0,3, 'I''M ON FIRE!!! AGAIN!!',12,0,100,0,0,0, 'Station Technician'),
+(@ENTRY,0,4, 'WHY ME!?!',12,0,100,0,0,0, 'Station Technician'),
+(@ENTRY,0,5, 'Not again...',12,0,100,0,0,0, 'Station Technician');
+
+-- Razak Ironsides text
+SET @ENTRY := 21118;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0, 'LET''S ROCK!!',14,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event'),
+(@ENTRY,1,0, 'FIRE UP THE DEF GUNS!',14,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event'),
+(@ENTRY,2,0, 'Where''s our back up? I want them here now!',14,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event'),
+(@ENTRY,3,0, 'Last push boys! Let ''em have it!',14,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event'),
+(@ENTRY,4,0, 'Nice work Solders! This is the last of them!',14,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event'),
+(@ENTRY,4,1, 'This is the last of them. Don''t get sloppy!',14,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event'),
+(@ENTRY,5,0, 'We can handle it from here. Roughriders you are dismissed.',14,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event'),
+(@ENTRY,6,0, 'Come on you apes. You want to live forever?',12,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event random combat text'),
+(@ENTRY,6,1, 'Warm it up and give ''em everything you''ve got.',12,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event random combat text'),
+(@ENTRY,6,2, 'I have only one rule. Everyone fights. No one quits.',12,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event random combat text');
+
+-- Strider Jock text
+SET @ENTRY := 21427;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0, 'You boys need some help?',14,0,100,0,0,0, 'Strider Jock - Ravager invasion event');
+
+-- Gnome Defender 209 text
+SET @ENTRY := 21426;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0, 'Cavalry, let''s roll out!',14,0,100,0,0,0, 'Gnome Defender 209 - Ravager invasion event');
+
+-- Remove some spawns that should only be spawned with attck script
+DELETE FROM `creature` WHERE `guid` IN (84336,84341,84342,84346,84347,84348,84349);
+DELETE FROM `creature_addon` WHERE `guid` IN (84336,84341,84342,84346,84347,84348,84349);
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index 1c78b97866f..1ced9e79672 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -339,27 +339,10 @@ void SmartAI::UpdateAI(uint32 diff)
{
if (me->FindNearestCreature(mFollowArrivedEntry, INTERACTION_DISTANCE, true))
{
- if (Player* player = ObjectAccessor::GetPlayer(*me, mFollowGuid))
- {
- if (!mFollowCreditType)
- player->RewardPlayerAndGroupAtEvent(mFollowCredit, me);
- else
- player->GroupEventHappens(mFollowCredit, me);
- }
- mFollowGuid = 0;
- mFollowDist = 0;
- mFollowAngle = 0;
- mFollowCredit = 0;
- mFollowArrivedTimer = 1000;
- mFollowArrivedEntry = 0;
- mFollowCreditType = 0;
- SetDespawnTime(5000);
- me->StopMoving();
- me->GetMotionMaster()->MoveIdle();
- StartDespawn();
- GetScript()->ProcessEventsFor(SMART_EVENT_FOLLOW_COMPLETED);
+ StopFollow();
return;
}
+
mFollowArrivedTimer = 1000;
}
else
@@ -803,7 +786,11 @@ void SmartAI::SetCombatMove(bool on)
void SmartAI::SetFollow(Unit* target, float dist, float angle, uint32 credit, uint32 end, uint32 creditType)
{
if (!target)
+ {
+ StopFollow();
return;
+ }
+
SetRun(mRun);
mFollowGuid = target->GetGUID();
mFollowDist = dist >= 0.0f ? dist : PET_FOLLOW_DIST;
@@ -815,6 +802,29 @@ void SmartAI::SetFollow(Unit* target, float dist, float angle, uint32 credit, ui
mFollowCreditType = creditType;
}
+void SmartAI::StopFollow()
+{
+ if (Player* player = ObjectAccessor::GetPlayer(*me, mFollowGuid))
+ {
+ if (!mFollowCreditType)
+ player->RewardPlayerAndGroupAtEvent(mFollowCredit, me);
+ else
+ player->GroupEventHappens(mFollowCredit, me);
+ }
+
+ mFollowGuid = 0;
+ mFollowDist = 0;
+ mFollowAngle = 0;
+ mFollowCredit = 0;
+ mFollowArrivedTimer = 1000;
+ mFollowArrivedEntry = 0;
+ mFollowCreditType = 0;
+ SetDespawnTime(5000);
+ me->StopMoving();
+ me->GetMotionMaster()->MoveIdle();
+ StartDespawn();
+ GetScript()->ProcessEventsFor(SMART_EVENT_FOLLOW_COMPLETED);
+}
void SmartAI::SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker)
{
if (invoker)
diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h
index 085859a6d85..5c56736a673 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.h
+++ b/src/server/game/AI/SmartScripts/SmartAI.h
@@ -63,6 +63,7 @@ class SmartAI : public CreatureAI
void SetCombatMove(bool on);
bool CanCombatMove() { return mCanCombatMove; }
void SetFollow(Unit* target, float dist = 0.0f, float angle = 0.0f, uint32 credit = 0, uint32 end = 0, uint32 creditType = 0);
+ void StopFollow();
void SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker);
SmartScript* GetScript() { return &mScript; }
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 138c610ac46..6af09f3bb2b 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -367,12 +367,14 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
{
if (IsPlayer(*itr))
+ {
if (Quest const* q = sObjectMgr->GetQuestTemplate(e.action.quest.quest))
{
(*itr)->ToPlayer()->AddQuestAndCheckCompletion(q, NULL);
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_ADD_QUEST: Player guidLow %u add quest %u",
(*itr)->GetGUIDLow(), e.action.quest.quest);
}
+ }
}
delete targets;
@@ -380,12 +382,18 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
}
case SMART_ACTION_SET_REACT_STATE:
{
- if (!me)
+ ObjectList* targets = GetTargets(e, unit);
+ if (!targets)
break;
- me->SetReactState(ReactStates(e.action.react.state));
- TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_REACT_STATE: Creature guidLow %u set reactstate %u",
- me->GetGUIDLow(), e.action.react.state);
+ for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
+ {
+ if (!IsCreature(*itr))
+ continue;
+
+ (*itr)->ToCreature()->SetReactState(ReactStates(e.action.react.state));
+ }
+
break;
}
case SMART_ACTION_RANDOM_EMOTE:
@@ -825,7 +833,10 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
ObjectList* targets = GetTargets(e, unit);
if (!targets)
+ {
+ CAST_AI(SmartAI, me->AI())->StopFollow();
break;
+ }
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
{
@@ -1029,25 +1040,41 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
}
case SMART_ACTION_FORCE_DESPAWN:
{
- if (!IsSmart())
+ ObjectList* targets = GetTargets(e, unit);
+
+ if (!targets)
break;
- // The AI is only updated if the creature is alive
- if (me->IsAlive())
+ for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
{
- CAST_AI(SmartAI, me->AI())->SetDespawnTime(e.action.forceDespawn.delay + 1); // Next tick
- CAST_AI(SmartAI, me->AI())->StartDespawn();
+ if (!IsCreature(*itr))
+ continue;
+
+ if ((*itr)->ToUnit()->IsAlive() && IsSmart((*itr)->ToCreature()))
+ {
+ CAST_AI(SmartAI, (*itr)->ToCreature()->AI())->SetDespawnTime(e.action.forceDespawn.delay + 1); // Next tick
+ CAST_AI(SmartAI, (*itr)->ToCreature()->AI())->StartDespawn();
+ }
+ else
+ (*itr)->ToCreature()->DespawnOrUnsummon(e.action.forceDespawn.delay);
}
- // Otherwise we call the despawn directly
- else
- me->DespawnOrUnsummon(e.action.forceDespawn.delay);
break;
}
case SMART_ACTION_SET_INGAME_PHASE_MASK:
{
- if (WorldObject* baseObj = GetBaseObject())
- baseObj->SetPhaseMask(e.action.ingamePhaseMask.mask, true);
+ ObjectList* targets = GetTargets(e, unit);
+
+ if (!targets)
+ break;
+
+ for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
+ {
+ if (IsUnit(*itr))
+ (*itr)->ToUnit()->SetPhaseMask(e.action.ingamePhaseMask.mask, true);
+ else if (IsGameObject(*itr))
+ (*itr)->ToGameObject()->SetPhaseMask(e.action.ingamePhaseMask.mask, true);
+ }
break;
}
@@ -1132,6 +1159,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
if (WorldObject* baseObj = GetBaseObject())
baseObj->setActive(e.action.active.state);
+
break;
}
case SMART_ACTION_ATTACK_START:
@@ -1647,7 +1675,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
break;
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
- if (IsUnit(*itr))
+ if (IsCreature(*itr))
(*itr)->ToUnit()->SetUInt32Value(UNIT_NPC_FLAGS, e.action.unitFlag.flag);
delete targets;
@@ -1660,7 +1688,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
break;
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
- if (IsUnit(*itr))
+ if (IsCreature(*itr))
(*itr)->ToUnit()->SetFlag(UNIT_NPC_FLAGS, e.action.unitFlag.flag);
delete targets;
@@ -1673,7 +1701,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
break;
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
- if (IsUnit(*itr))
+ if (IsCreature(*itr))
(*itr)->ToUnit()->RemoveFlag(UNIT_NPC_FLAGS, e.action.unitFlag.flag);
delete targets;
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index b14d22e77b2..e416500f77f 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -1540,7 +1540,11 @@ void Creature::Respawn(bool force)
//Call AI respawn virtual function
if (IsAIEnabled)
+ {
+ //reset the AI to be sure no dirty or uninitialized values will be used till next tick
+ AI()->Reset();
TriggerJustRespawned = true;//delay event to next tick so all creatures are created on the map before processing
+ }
uint32 poolid = GetDBTableGUIDLow() ? sPoolMgr->IsPartOfAPool<Creature>(GetDBTableGUIDLow()) : 0;
if (poolid)
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 9f8fb0a1064..ec087de0a06 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -15468,7 +15468,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
if (quest->GetRewSpellCast() > 0)
{
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(quest->GetRewSpellCast());
- if (questGiver->isType(TYPEMASK_UNIT) && (!spellInfo->HasEffect(SPELL_EFFECT_LEARN_SPELL) || !spellInfo->HasEffect(SPELL_EFFECT_CREATE_ITEM)))
+ if (questGiver->isType(TYPEMASK_UNIT) && !spellInfo->HasEffect(SPELL_EFFECT_LEARN_SPELL) && !spellInfo->HasEffect(SPELL_EFFECT_CREATE_ITEM))
{
if (Creature* creature = GetMap()->GetCreature(questGiver->GetGUID()))
creature->CastSpell(this, quest->GetRewSpellCast(), true);
@@ -15479,7 +15479,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
else if (quest->GetRewSpell() > 0)
{
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(quest->GetRewSpell());
- if (questGiver->isType(TYPEMASK_UNIT) && (!spellInfo->HasEffect(SPELL_EFFECT_LEARN_SPELL) || !spellInfo->HasEffect(SPELL_EFFECT_CREATE_ITEM)))
+ if (questGiver->isType(TYPEMASK_UNIT) && !spellInfo->HasEffect(SPELL_EFFECT_LEARN_SPELL) && !spellInfo->HasEffect(SPELL_EFFECT_CREATE_ITEM))
{
if (Creature* creature = GetMap()->GetCreature(questGiver->GetGUID()))
creature->CastSpell(this, quest->GetRewSpell(), true);
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 9fd9e1f3606..02bdc5f3a8c 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -11898,6 +11898,9 @@ void CharmInfo::InitPossessCreateSpells()
switch (_unit->GetEntry())
{
case 23575: // Mindless Abomination
+ case 24783: // Trained Rock Falcon
+ case 27664: // Crashin' Thrashin' Racer
+ case 40281: // Crashin' Thrashin' Racer
break;
default:
InitEmptyActionBar();
@@ -14165,7 +14168,6 @@ void Unit::RemoveCharmedBy(Unit* charmer)
}
}
break;
- default:
case CHARM_TYPE_CONVERT:
break;
}
diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp
index 50e21edb1fd..053746654b7 100644
--- a/src/server/game/Handlers/AuctionHouseHandler.cpp
+++ b/src/server/game/Handlers/AuctionHouseHandler.cpp
@@ -362,6 +362,7 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
item2->DeleteFromInventoryDB(trans);
item2->DeleteFromDB(trans);
CharacterDatabase.CommitTransaction(trans);
+ delete item2;
}
else // Item stack count is bigger than required count, update item stack count and save to database - cloned item will be used for auction
{
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 3c0837676c2..4f3640fe73b 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -68,12 +68,8 @@ Map::~Map()
Transport* transport = *itr;
++itr;
- // Destroy local transports
- if (transport->GetTransportTemplate()->inInstance)
- {
- transport->RemoveFromWorld();
- delete transport;
- }
+ transport->RemoveFromWorld();
+ delete transport;
}
if (!m_scriptSchedule.empty())
diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp
index 1837546d375..e9b12f2db58 100644
--- a/src/server/game/Maps/MapManager.cpp
+++ b/src/server/game/Maps/MapManager.cpp
@@ -37,14 +37,10 @@
#include "WorldSession.h"
#include "Opcodes.h"
-extern GridState* si_GridStates[]; // debugging code, should be deleted some day
-
MapManager::MapManager()
{
i_gridCleanUpDelay = sWorld->getIntConfig(CONFIG_INTERVAL_GRIDCLEAN);
i_timer.SetInterval(sWorld->getIntConfig(CONFIG_INTERVAL_MAPUPDATE));
- memset(i_GridStates, 0, sizeof(i_GridStates));
- i_GridStateErrorCount = 0;
_nextInstanceId = 0;
}
@@ -54,13 +50,6 @@ void MapManager::Initialize()
{
Map::InitStateMachine();
- // debugging code, should be deleted some day
- {
- for (uint8 i = 0; i < MAX_GRID_STATE; ++i)
- i_GridStates[i] = si_GridStates[i];
-
- i_GridStateErrorCount = 0;
- }
int num_threads(sWorld->getIntConfig(CONFIG_NUMTHREADS));
// Start mtmaps if needed.
if (num_threads > 0 && m_updater.activate(num_threads) == -1)
@@ -73,31 +62,6 @@ void MapManager::InitializeVisibilityDistanceInfo()
(*iter).second->InitVisibilityDistance();
}
-// debugging code, should be deleted some day
-void MapManager::checkAndCorrectGridStatesArray()
-{
- bool ok = true;
- for (int i=0; i<MAX_GRID_STATE; i++)
- {
- if (i_GridStates[i] != si_GridStates[i])
- {
- TC_LOG_ERROR("maps", "MapManager::checkGridStates(), GridState: si_GridStates is currupt !!!");
- ok = false;
- si_GridStates[i] = i_GridStates[i];
- }
- #ifdef TRINITY_DEBUG
- // inner class checking only when compiled with debug
- if (!si_GridStates[i]->checkMagic())
- {
- ok = false;
- si_GridStates[i]->setMagic();
- }
- #endif
- }
- if (!ok)
- ++i_GridStateErrorCount;
-}
-
Map* MapManager::CreateBaseMap(uint32 id)
{
Map* map = FindBaseMap(id);
diff --git a/src/server/game/Maps/MapManager.h b/src/server/game/Maps/MapManager.h
index 230b4648f4a..48537558057 100644
--- a/src/server/game/Maps/MapManager.h
+++ b/src/server/game/Maps/MapManager.h
@@ -129,11 +129,6 @@ class MapManager
typedef UNORDERED_MAP<uint32, Map*> MapMapType;
typedef std::vector<bool> InstanceIds;
- // debugging code, should be deleted some day
- void checkAndCorrectGridStatesArray(); // just for debugging to find some memory overwrites
- GridState* i_GridStates[MAX_GRID_STATE]; // shadow entries to the global array in Map.cpp
- int i_GridStateErrorCount;
-
MapManager();
~MapManager();
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
index 6787144e2e5..a20a8a30de5 100755
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
@@ -74,19 +74,24 @@ void WaypointMovementGenerator<Creature>::OnArrived(Creature* creature)
if (m_isArrivalDone)
return;
- creature->ClearUnitState(UNIT_STATE_ROAMING_MOVE);
m_isArrivalDone = true;
if (i_path->at(i_currentNode)->event_id && urand(0, 99) < i_path->at(i_currentNode)->event_chance)
{
TC_LOG_DEBUG("maps.script", "Creature movement start script %u at point %u for " UI64FMTD ".", i_path->at(i_currentNode)->event_id, i_currentNode, creature->GetGUID());
+ creature->ClearUnitState(UNIT_STATE_ROAMING_MOVE);
creature->GetMap()->ScriptsStart(sWaypointScripts, i_path->at(i_currentNode)->event_id, creature, NULL);
}
// Inform script
MovementInform(creature);
creature->UpdateWaypointID(i_currentNode);
- Stop(i_path->at(i_currentNode)->delay);
+
+ if (i_path->at(i_currentNode)->delay)
+ {
+ creature->ClearUnitState(UNIT_STATE_ROAMING_MOVE);
+ Stop(i_path->at(i_currentNode)->delay);
+ }
}
bool WaypointMovementGenerator<Creature>::StartMove(Creature* creature)
@@ -188,7 +193,8 @@ bool WaypointMovementGenerator<Creature>::DoUpdate(Creature* creature, uint32 di
{
if (creature->IsStopped())
Stop(STOP_TIME_FOR_PLAYER);
- else if (creature->movespline->Finalized())
+ // Checking just before reaching waypoint gives smother movement than using FinalDestination
+ else if (creature->movespline->timeElapsed() < 150)
{
OnArrived(creature);
return StartMove(creature);
diff --git a/src/server/game/Movement/Spline/MoveSpline.h b/src/server/game/Movement/Spline/MoveSpline.h
index 209f978d658..5a788201e7f 100644
--- a/src/server/game/Movement/Spline/MoveSpline.h
+++ b/src/server/game/Movement/Spline/MoveSpline.h
@@ -79,10 +79,10 @@ namespace Movement
UpdateResult _updateState(int32& ms_time_diff);
int32 next_timestamp() const { return spline.length(point_Idx + 1); }
int32 segment_time_elapsed() const { return next_timestamp() - time_passed; }
- int32 timeElapsed() const { return Duration() - time_passed; }
int32 timePassed() const { return time_passed; }
public:
+ int32 timeElapsed() const { return Duration() - time_passed; }
int32 Duration() const { return spline.length(); }
MySpline const& _Spline() const { return spline; }
int32 _currentSplineIdx() const { return point_Idx; }
diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp
index 76ce586aa9d..2c311e20a79 100644
--- a/src/server/scripts/Northrend/zone_dragonblight.cpp
+++ b/src/server/scripts/Northrend/zone_dragonblight.cpp
@@ -37,6 +37,331 @@ EndContentData */
#include "CombatAI.h"
#include "Player.h"
+/*#####
+# npc_commander_eligor_dawnbringer
+#####*/
+
+enum CommanderEligorDawnbringer
+{
+ MODEL_IMAGE_OF_KELTHUZAD = 24787, // Image of Kel'Thuzad
+ MODEL_IMAGE_OF_SAPPHIRON = 24788, // Image of Sapphiron
+ MODEL_IMAGE_OF_RAZUVIOUS = 24799, // Image of Razuvious
+ MODEL_IMAGE_OF_GOTHIK = 24804, // Image of Gothik
+ MODEL_IMAGE_OF_THANE = 24802, // Image of Thane Korth'azz
+ MODEL_IMAGE_OF_BLAUMEUX = 24794, // Image of Lady Blaumeux
+ MODEL_IMAGE_OF_ZELIEK = 24800, // Image of Sir Zeliek
+ MODEL_IMAGE_OF_PATCHWERK = 24798, // Image of Patchwerk
+ MODEL_IMAGE_OF_GROBBULUS = 24792, // Image of Grobbulus
+ MODEL_IMAGE_OF_THADDIUS = 24801, // Image of Thaddius
+ MODEL_IMAGE_OF_GLUTH = 24803, // Image of Gluth
+ MODEL_IMAGE_OF_ANUBREKHAN = 24789, // Image of Anub'rekhan
+ MODEL_IMAGE_OF_FAERLINA = 24790, // Image of Faerlina
+ MODEL_IMAGE_OF_MAEXXNA = 24796, // Image of Maexxna
+ MODEL_IMAGE_OF_NOTH = 24797, // Image of Noth
+ MODEL_IMAGE_OF_HEIGAN = 24793, // Image of Heigan
+ MODEL_IMAGE_OF_LOATHEB = 24795, // Image of Loatheb
+
+ NPC_IMAGE_OF_KELTHUZAD = 27766, // Image of Kel'Thuzad
+ NPC_IMAGE_OF_SAPPHIRON = 27767, // Image of Sapphiron
+ NPC_IMAGE_OF_RAZUVIOUS = 27768, // Image of Razuvious
+ NPC_IMAGE_OF_GOTHIK = 27769, // Image of Gothik
+ NPC_IMAGE_OF_THANE = 27770, // Image of Thane Korth'azz
+ NPC_IMAGE_OF_BLAUMEUX = 27771, // Image of Lady Blaumeux
+ NPC_IMAGE_OF_ZELIEK = 27772, // Image of Sir Zeliek
+ NPC_IMAGE_OF_PATCHWERK = 27773, // Image of Patchwerk
+ NPC_IMAGE_OF_GROBBULUS = 27774, // Image of Grobbulus
+ NPC_IMAGE_OF_THADDIUS = 27775, // Image of Thaddius
+ NPC_IMAGE_OF_GLUTH = 27782, // Image of Gluth
+ NPC_IMAGE_OF_ANUBREKHAN = 27776, // Image of Anub'rekhan
+ NPC_IMAGE_OF_FAERLINA = 27777, // Image of Faerlina
+ NPC_IMAGE_OF_MAEXXNA = 27778, // Image of Maexxna
+ NPC_IMAGE_OF_NOTH = 27779, // Image of Noth
+ NPC_IMAGE_OF_HEIGAN = 27780, // Image of Heigan
+ NPC_IMAGE_OF_LOATHEB = 27781, // Image of Loatheb
+
+ NPC_INFANTRYMAN = 27160, // Add in case I randomize the spawning
+ NPC_SENTINAL = 27162,
+ NPC_BATTLE_MAGE = 27164,
+
+ // Five platforms to choose from
+ SAY_PINNACLE = 0,
+ SAY_DEATH_KNIGHT_WING = 1,
+ SAY_ABOMINATION_WING = 2,
+ SAY_SPIDER_WING = 3,
+ SAY_PLAGUE_WING = 4,
+ // Used in all talks
+ SAY_TALK_COMPLETE = 5,
+ // Pinnacle of Naxxramas
+ SAY_SAPPHIRON = 6,
+ SAY_KELTHUZAD_1 = 7,
+ SAY_KELTHUZAD_2 = 8,
+ SAY_KELTHUZAD_3 = 9,
+ // Death knight wing of Naxxramas
+ SAY_RAZUVIOUS = 10,
+ SAY_GOTHIK = 11,
+ SAY_DEATH_KNIGHTS_1 = 12,
+ SAY_DEATH_KNIGHTS_2 = 13,
+ SAY_DEATH_KNIGHTS_3 = 14,
+ SAY_DEATH_KNIGHTS_4 = 15,
+ // Blighted abomination wing of Naxxramas
+ SAY_PATCHWERK = 16,
+ SAY_GROBBULUS = 17,
+ SAY_GLUTH = 18,
+ SAY_THADDIUS = 19,
+ // Accursed spider wing of Naxxramas
+ SAY_ANUBREKHAN = 20,
+ SAY_FAERLINA = 21,
+ SAY_MAEXXNA = 22,
+ // Dread plague wing of Naxxramas
+ SAY_NOTH = 23,
+ SAY_HEIGAN_1 = 24,
+ SAY_HEIGAN_2 = 25,
+ SAY_LOATHEB = 26,
+
+ SPELL_HEROIC_IMAGE_CHANNEL = 49519,
+
+ EVENT_START_RANDOM = 1,
+ EVENT_MOVE_TO_POINT = 2,
+ EVENT_TALK_COMPLETE = 3,
+ EVENT_GET_TARGETS = 4,
+ EVENT_KELTHUZAD_2 = 5,
+ EVENT_KELTHUZAD_3 = 6,
+ EVENT_DEATH_KNIGHTS_2 = 7,
+ EVENT_DEATH_KNIGHTS_3 = 8,
+ EVENT_DEATH_KNIGHTS_4 = 9,
+ EVENT_HEIGAN_2 = 10
+};
+
+uint32 const AudienceMobs[3] = { NPC_INFANTRYMAN, NPC_SENTINAL, NPC_BATTLE_MAGE };
+
+Position const PosTalkLocations[6] =
+{
+ { 3805.453f, -682.9075f, 222.2917f, 2.793398f }, // Pinnacle of Naxxramas
+ { 3807.508f, -691.0882f, 221.9688f, 2.094395f }, // Death knight wing of Naxxramas
+ { 3797.228f, -690.3555f, 222.5019f, 1.134464f }, // Blighted abomination wing of Naxxramas
+ { 3804.038f, -672.3098f, 222.5019f, 4.578917f }, // Accursed spider wing of Naxxramas
+ { 3815.097f, -680.2596f, 221.9777f, 2.86234f }, // Dread plague wing of Naxxramas
+ { 3798.05f, -680.611f, 222.9825f, 6.038839f }, // Home
+};
+
+class npc_commander_eligor_dawnbringer : public CreatureScript
+{
+ public: npc_commander_eligor_dawnbringer() : CreatureScript("npc_commander_eligor_dawnbringer") {}
+
+ struct npc_commander_eligor_dawnbringerAI : public ScriptedAI
+ {
+ npc_commander_eligor_dawnbringerAI(Creature* creature) : ScriptedAI(creature) { }
+
+ void Reset() OVERRIDE
+ {
+ talkWing = 0;
+ memset(audienceList, 0, sizeof(audienceList));
+ memset(imageList, 0, sizeof(imageList));
+ _events.ScheduleEvent(EVENT_GET_TARGETS, 5000);
+ _events.ScheduleEvent(EVENT_START_RANDOM, 20000);
+ }
+
+ void MovementInform(uint32 type, uint32 id) OVERRIDE
+ {
+ if (type == POINT_MOTION_TYPE)
+ {
+ if (id == 1)
+ {
+ me->SetFacingTo(PosTalkLocations[talkWing].m_orientation);
+ TurnAudience();
+
+ switch (talkWing)
+ {
+ case 0: // Pinnacle of Naxxramas
+ {
+ switch (urand (0, 1))
+ {
+ case 0: ChangeImage(NPC_IMAGE_OF_KELTHUZAD, MODEL_IMAGE_OF_KELTHUZAD, SAY_KELTHUZAD_1);
+ _events.ScheduleEvent(EVENT_KELTHUZAD_2, 8000); break;
+ case 1: ChangeImage(NPC_IMAGE_OF_SAPPHIRON, MODEL_IMAGE_OF_SAPPHIRON, SAY_SAPPHIRON); break;
+ }
+ }
+ break;
+ case 1: // Death knight wing of Naxxramas
+ {
+ switch (urand (0, 2))
+ {
+ case 0: ChangeImage(NPC_IMAGE_OF_RAZUVIOUS, MODEL_IMAGE_OF_RAZUVIOUS, SAY_RAZUVIOUS); break;
+ case 1: ChangeImage(NPC_IMAGE_OF_GOTHIK, MODEL_IMAGE_OF_GOTHIK, SAY_GOTHIK); break;
+ case 2: ChangeImage(NPC_IMAGE_OF_THANE, MODEL_IMAGE_OF_THANE, SAY_DEATH_KNIGHTS_1);
+ _events.ScheduleEvent(EVENT_DEATH_KNIGHTS_2, 10000); break;
+ }
+ }
+ break;
+ case 2: // Blighted abomination wing of Naxxramas
+ {
+ switch (urand (0, 3))
+ {
+ case 0: ChangeImage(NPC_IMAGE_OF_PATCHWERK, MODEL_IMAGE_OF_PATCHWERK, SAY_PATCHWERK); break;
+ case 1: ChangeImage(NPC_IMAGE_OF_GROBBULUS, MODEL_IMAGE_OF_GROBBULUS, SAY_GROBBULUS); break;
+ case 2: ChangeImage(NPC_IMAGE_OF_THADDIUS, MODEL_IMAGE_OF_THADDIUS, SAY_THADDIUS); break;
+ case 3: ChangeImage(NPC_IMAGE_OF_GLUTH, MODEL_IMAGE_OF_GLUTH, SAY_GLUTH); break;
+ }
+ }
+ break;
+ case 3: // Accursed spider wing of Naxxramas
+ {
+ switch (urand (0, 2))
+ {
+ case 0: ChangeImage(NPC_IMAGE_OF_ANUBREKHAN, MODEL_IMAGE_OF_ANUBREKHAN, SAY_ANUBREKHAN); break;
+ case 1: ChangeImage(NPC_IMAGE_OF_FAERLINA, MODEL_IMAGE_OF_FAERLINA, SAY_FAERLINA); break;
+ case 2: ChangeImage(NPC_IMAGE_OF_MAEXXNA, MODEL_IMAGE_OF_MAEXXNA, SAY_MAEXXNA); break;
+ }
+ }
+ break;
+ case 4: // Dread plague wing of Naxxramas
+ {
+ switch (urand (0, 2))
+ {
+ case 0: ChangeImage(NPC_IMAGE_OF_NOTH, MODEL_IMAGE_OF_NOTH, SAY_NOTH); break;
+ case 1: ChangeImage(NPC_IMAGE_OF_HEIGAN, MODEL_IMAGE_OF_HEIGAN, SAY_HEIGAN_1);
+ _events.ScheduleEvent(EVENT_HEIGAN_2, 8000); break;
+ case 2: ChangeImage(NPC_IMAGE_OF_LOATHEB, MODEL_IMAGE_OF_LOATHEB, SAY_LOATHEB); break;
+ }
+ }
+ break;
+ case 5: // Home
+ _events.ScheduleEvent(EVENT_START_RANDOM, 30000);
+ break;
+ }
+ }
+ }
+ }
+
+ void StoreTargets()
+ {
+ uint8 creaturecount;
+
+ creaturecount = 0;
+
+ for (uint8 ii = 0; ii < 3; ++ii)
+ {
+ std::list<Creature*> creatureList;
+ GetCreatureListWithEntryInGrid(creatureList, me, AudienceMobs[ii], 15.0f);
+ for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
+ {
+ if (Creature* creatureList = *itr)
+ {
+ audienceList[creaturecount] = creatureList->GetGUID();
+ ++creaturecount;
+ }
+ }
+ }
+
+ if (Creature* creature = me->FindNearestCreature(NPC_IMAGE_OF_KELTHUZAD, 20.0f, true))
+ imageList[0] = creature->GetGUID();
+ if (Creature* creature = me->FindNearestCreature(NPC_IMAGE_OF_RAZUVIOUS, 20.0f, true))
+ imageList[1] = creature->GetGUID();
+ if (Creature* creature = me->FindNearestCreature(NPC_IMAGE_OF_PATCHWERK, 20.0f, true))
+ imageList[2] = creature->GetGUID();
+ if (Creature* creature = me->FindNearestCreature(NPC_IMAGE_OF_ANUBREKHAN, 20.0f, true))
+ imageList[3] = creature->GetGUID();
+ if (Creature* creature = me->FindNearestCreature(NPC_IMAGE_OF_NOTH, 20.0f, true))
+ imageList[4] = creature->GetGUID();
+ }
+
+ void ChangeImage(uint32 entry, uint32 model, uint8 text)
+ {
+ if (Creature* creature = ObjectAccessor::GetCreature(*me, imageList[talkWing]))
+ {
+ Talk(text);
+ creature->SetEntry(entry);
+ creature->SetDisplayId(model);
+ creature->CastSpell(creature, SPELL_HEROIC_IMAGE_CHANNEL);
+ _events.ScheduleEvent(EVENT_TALK_COMPLETE, 40000);
+ }
+ }
+
+ void TurnAudience()
+ {
+ for (uint8 i = 0; i < 10; ++i)
+ {
+ if (Creature* creature = ObjectAccessor::GetCreature(*me, audienceList[i]))
+ creature->SetFacingToObject(me);
+ }
+ }
+
+ void UpdateAI(uint32 diff) OVERRIDE
+ {
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_START_RANDOM:
+ talkWing = urand (0, 4);
+ Talk(talkWing);
+ _events.ScheduleEvent(EVENT_MOVE_TO_POINT, 8000);
+ break;
+ case EVENT_MOVE_TO_POINT:
+ me->SetWalk(true);
+ me->GetMotionMaster()->Clear();
+ me->GetMotionMaster()->MovePoint(1, PosTalkLocations[talkWing].m_positionX, PosTalkLocations[talkWing].m_positionY, PosTalkLocations[talkWing].m_positionZ);
+ break;
+ case EVENT_TALK_COMPLETE:
+ talkWing = 5;
+ Talk(talkWing);
+ _events.ScheduleEvent(EVENT_MOVE_TO_POINT, 5000);
+ break;
+ case EVENT_GET_TARGETS:
+ StoreTargets();
+ break;
+ case EVENT_KELTHUZAD_2:
+ Talk(SAY_KELTHUZAD_2);
+ _events.ScheduleEvent(EVENT_KELTHUZAD_3, 8000);
+ break;
+ case EVENT_KELTHUZAD_3:
+ Talk(SAY_KELTHUZAD_3);
+ break;
+ case EVENT_DEATH_KNIGHTS_2:
+ Talk(SAY_DEATH_KNIGHTS_2);
+ if (Creature* creature = ObjectAccessor::GetCreature(*me, imageList[talkWing]))
+ {
+ creature->SetEntry(NPC_IMAGE_OF_BLAUMEUX);
+ creature->SetDisplayId(MODEL_IMAGE_OF_BLAUMEUX);
+ }
+ _events.ScheduleEvent(EVENT_DEATH_KNIGHTS_3, 10000);
+ break;
+ case EVENT_DEATH_KNIGHTS_3:
+ Talk(SAY_DEATH_KNIGHTS_3);
+ if (Creature* creature = ObjectAccessor::GetCreature(*me, imageList[talkWing]))
+ {
+ creature->SetEntry(NPC_IMAGE_OF_ZELIEK);
+ creature->SetDisplayId(MODEL_IMAGE_OF_ZELIEK);
+ }
+ _events.ScheduleEvent(EVENT_DEATH_KNIGHTS_4, 10000);
+ break;
+ case EVENT_DEATH_KNIGHTS_4:
+ Talk(SAY_DEATH_KNIGHTS_4);
+ break;
+ case EVENT_HEIGAN_2:
+ Talk(SAY_HEIGAN_2);
+ break;
+ default:
+ break;
+ }
+ }
+ DoMeleeAttackIfReady();
+ }
+ private:
+ EventMap _events;
+ uint64 audienceList[10];
+ uint64 imageList[5];
+ uint8 talkWing;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_commander_eligor_dawnbringerAI(creature);
+ }
+};
+
enum AlexstraszaWrGate
{
// Quest
@@ -405,9 +730,10 @@ class npc_torturer_lecraft : public CreatureScript
void AddSC_dragonblight()
{
- new npc_alexstrasza_wr_gate;
- new spell_q12096_q12092_dummy;
- new spell_q12096_q12092_bark;
- new npc_wyrmrest_defender;
- new npc_torturer_lecraft;
+ new npc_commander_eligor_dawnbringer();
+ new npc_alexstrasza_wr_gate();
+ new spell_q12096_q12092_dummy();
+ new spell_q12096_q12092_bark();
+ new npc_wyrmrest_defender();
+ new npc_torturer_lecraft();
}