aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2016_01_23_00_world.sql43
-rw-r--r--sql/updates/world/2016_01_24_00_world.sql62
-rw-r--r--sql/updates/world/2016_01_26_00_world.sql11
-rw-r--r--sql/updates/world/2016_01_28_00_world_335.sql12
-rw-r--r--sql/updates/world/2016_01_28_01_world.sql194
-rw-r--r--sql/updates/world/2016_01_30_00_world_335.sql65
-rw-r--r--sql/updates/world/2016_01_30_01_world.sql6
-rw-r--r--sql/updates/world/2016_01_30_02_world.sql336
-rw-r--r--sql/updates/world/2016_01_30_03_world.sql136
-rw-r--r--sql/updates/world/2016_01_30_04_world.sql11
-rw-r--r--sql/updates/world/2016_01_30_05_world.sql2
-rw-r--r--sql/updates/world/2016_01_31_00_world.sql2
-rw-r--r--sql/updates/world/2016_02_02_00_world.sql5
-rw-r--r--sql/updates/world/2016_02_02_01_world.sql4
-rw-r--r--src/common/Utilities/Util.h1
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp25
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp15
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h29
-rw-r--r--src/server/game/Entities/Creature/Creature.h39
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp10
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp13
-rw-r--r--src/server/game/Groups/Group.cpp2
-rw-r--r--src/server/game/Miscellaneous/Formulas.h3
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp7
-rw-r--r--src/server/game/Spells/Spell.cpp2
-rw-r--r--src/server/game/Spells/SpellEffects.cpp10
-rw-r--r--src/server/game/Spells/SpellHistory.cpp13
-rw-r--r--src/server/game/Spells/SpellHistory.h6
-rw-r--r--src/server/game/Spells/SpellMgr.cpp1
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp5
-rw-r--r--src/server/scripts/EasternKingdoms/zone_undercity.cpp54
-rw-r--r--src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp53
-rw-r--r--src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp14
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp1
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp5
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp43
-rw-r--r--src/server/scripts/Pet/pet_mage.cpp6
-rw-r--r--src/server/scripts/Spells/spell_paladin.cpp2
-rw-r--r--src/server/scripts/World/duel_reset.cpp43
-rw-r--r--src/server/scripts/World/npc_professions.cpp106
44 files changed, 1220 insertions, 189 deletions
diff --git a/sql/updates/world/2016_01_23_00_world.sql b/sql/updates/world/2016_01_23_00_world.sql
new file mode 100644
index 00000000000..02eaa7c370d
--- /dev/null
+++ b/sql/updates/world/2016_01_23_00_world.sql
@@ -0,0 +1,43 @@
+DELETE FROM `creature_formations` WHERE `leaderGUID`=63381;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(63381, 63381, 0, 0, 1),
+(63381, 63380, 2, 270, 2);
+
+-- Pathing for Blade of Argus Entry: 17659 'TDB FORMAT'
+SET @NPC := 63381;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2393.32,`position_y`=-12009.38,`position_z`=26.83788 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2393.32,-12009.38,26.83788,0,0,0,0,100,0), -- 09:35:02
+(@PATH,2,-2430.895,-12030.52,28.6322,0,0,0,0,100,0), -- 09:35:35
+(@PATH,3,-2449.131,-12041.39,30.04015,0,0,0,0,100,0), -- 09:35:47
+(@PATH,4,-2469.279,-12052.41,30.91039,0,0,0,0,100,0), -- 09:35:58
+(@PATH,5,-2485.917,-12057.62,31.67413,0,0,0,0,100,0), -- 09:36:06
+(@PATH,6,-2499.339,-12060.41,32.19662,0,0,0,0,100,0), -- 09:36:16
+(@PATH,7,-2551.131,-12097.43,31.56079,0,0,0,0,100,0), -- 09:36:26
+(@PATH,8,-2561.849,-12106.37,30.36333,0,0,0,0,100,0), -- 09:36:45
+(@PATH,9,-2594.441,-12132.8,25.2879,0,0,0,0,100,0), -- 09:36:59
+(@PATH,10,-2614.055,-12144.08,22.40907,0,0,0,0,100,0), -- 09:37:10
+(@PATH,11,-2646.337,-12163.92,17.16356,0,0,0,0,100,0), -- 09:37:24
+(@PATH,12,-2662.804,-12174.26,14.88417,0,0,0,0,100,0), -- 09:37:33
+(@PATH,13,-2684.956,-12188.63,12.24028,0,0,0,0,100,0), -- 09:37:43
+(@PATH,14,-2717.39,-12205.54,9.461565,0,0,0,0,100,0), -- 09:37:57
+(@PATH,15,-2734.083,-12209.19,8.946226,0,0,0,0,100,0), -- 09:38:09
+(@PATH,16,-2734.196,-12209.07,8.88302,0,0,0,0,100,0), -- 09:38:21
+(@PATH,17,-2716.481,-12205.85,9.632504,0,0,0,0,100,0), -- 09:38:31
+(@PATH,18,-2690.927,-12193.18,11.25666,0,0,0,0,100,0), -- 09:38:43
+(@PATH,19,-2673.976,-12180.86,13.79457,0,0,0,0,100,0), -- 09:38:55
+(@PATH,20,-2653.271,-12168.26,16.31552,0,0,0,0,100,0), -- 09:39:06
+(@PATH,21,-2634.485,-12156.3,19.4272,0,0,0,0,100,0), -- 09:39:16
+(@PATH,22,-2600.122,-12135.83,24.54786,0,0,0,0,100,0), -- 09:39:29
+(@PATH,23,-2580.325,-12122.89,27.64962,0,0,0,0,100,0), -- 09:39:40
+(@PATH,24,-2535.282,-12085.34,32.13941,0,0,0,0,100,0), -- 09:39:54
+(@PATH,25,-2520.165,-12073.53,32.51933,0,0,0,0,100,0), -- 09:40:14
+(@PATH,26,-2475.724,-12055.97,31.22906,0,0,0,0,100,0), -- 09:40:24
+(@PATH,27,-2463.655,-12049.68,30.5184,0,0,0,0,100,0), -- 09:40:33
+(@PATH,28,-2435.532,-12033.4,29.11832,0,0,0,0,100,0), -- 09:40:42
+(@PATH,29,-2407.538,-12018.4,27.76891,0,0,0,0,100,0), -- 09:40:53
+(@PATH,30,-2393.296,-12009.36,26.8369,0,0,0,0,100,0); -- 09:41:05
diff --git a/sql/updates/world/2016_01_24_00_world.sql b/sql/updates/world/2016_01_24_00_world.sql
new file mode 100644
index 00000000000..a28b3fa25b8
--- /dev/null
+++ b/sql/updates/world/2016_01_24_00_world.sql
@@ -0,0 +1,62 @@
+--
+SET @guid:=134881;
+DELETE FROM `creature` WHERE `guid` BETWEEN @guid+0 AND @guid+53;
+INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `VerifiedBuild`) VALUES
+(@guid+0, 18927, 571, 0, 0, 1, 1, 18800, 0, 5740.71, 686.122, 643.896, 3.82227, 120, 0, 0, 1, 0, 0, 0, 0, 0, 0),
+(@guid+1, 18927, 571, 0, 0, 1, 1, 18801, 0, 5739.36, 684.622, 644.191, 0.872665, 120, 0, 0, 1, 0, 0, 0, 0, 0, 0),
+(@guid+2, 18927, 571, 0, 0, 1, 1, 18800, 0, 5664.31, 666.273, 652.064, 1.39626, 120, 0, 0, 1, 0, 0, 0, 0, 0, 0),
+(@guid+3, 18927, 571, 0, 0, 1, 1, 18801, 0, 5664.37, 668.047, 652.051, 4.90438, 120, 0, 0, 1, 0, 0, 0, 0, 0, 0),
+(@guid+4, 18927, 0, 0, 0, 1, 1, 18800, 0, -8364.87207, 617.860, 95.345, 2.580013, 120, 0, 0, 1, 0, 0, 0, 0, 0, 0),
+(@guid+5, 18927, 0, 0, 0, 1, 1, 18801, 0, -8367.4511, 619.1992, 95.2811, 5.804225, 120, 0, 0, 1, 0, 0, 0, 0, 0, 0),
+(@guid+6, 19169, 530, 0, 0, 1, 1, 18785, 0, 9375.07, -7157.06, 9.25588, 1.6057, 5, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+7, 19169, 530, 0, 0, 1, 1, 18793, 0, 9374.67, -7155.09, 9.33675, 4.95674, 5, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+8, 19169, 530, 0, 0, 1, 1, 18785, 0, 9689.33, -7345.39, 11.9144, 4.20624, 180, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+9, 19169, 530, 0, 0, 1, 1, 18793, 0, 9687.96, -7346.09, 11.956, 1.50098, 180, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+10, 19169, 530, 0, 0, 1, 1, 18785, 0, 9556.56, -7157.38, 14.2799, 6.10865, 120, 0, 0, 1, 0, 0, 3, 0, 0, 0),
+(@guid+11, 19169, 530, 0, 0, 1, 1, 18793, 0, 9558.34, -7157.94, 14.3132, 2.63545, 120, 0, 0, 1, 0, 0, 0, 0, 0, 0),
+(@guid+12, 19169, 530, 0, 0, 1, 1, 18785, 0, 9757.39, -7485.7, 13.6171, 4.76475, 120, 0, 0, 1, 0, 0, 3, 0, 0, 0),
+(@guid+13, 19169, 530, 0, 0, 1, 1, 18793, 0, 9757.64, -7487.37, 13.6167, 1.55334, 120, 0, 0, 1, 0, 0, 0, 0, 0, 0),
+(@guid+14, 19169, 571, 0, 0, 1, 1, 18785, 0, 5942.95, 629.234, 650.668, 1.5708, 120, 0, 0, 1, 0, 0, 0, 0, 0, 0),
+(@guid+15, 19169, 571, 0, 0, 1, 1, 18793, 0, 5943.17, 630.894, 650.666, 4.90438, 120, 0, 0, 1, 0, 0, 0, 0, 0, 0),
+(@guid+16, 19169, 571, 0, 0, 1, 1, 18785, 0, 5899.04, 532.766, 640.979, 4.90438, 120, 0, 0, 1, 0, 0, 0, 0, 0, 0),
+(@guid+17, 19169, 571, 0, 0, 1, 1, 18793, 0, 5899.1, 530.898, 641.056, 1.67552, 120, 0, 0, 1, 0, 0, 0, 0, 0, 0),
+(@guid+18, 19171, 530, 0, 0, 1, 1, 18795, 0, -4270.06, -11333.1, 5.57545, 4.67748, 120, 0, 0, 1, 0, 0, 0, 0, 0, 0),
+(@guid+19, 19171, 530, 0, 0, 1, 1, 18794, 0, -4269.71, -11336.5, 5.80931, 1.69297, 120, 0, 0, 1, 0, 0, 3, 0, 0, 0),
+(@guid+20, 19175, 1, 0, 0, 1, 1, 18804, 0, 1609.47, -4323.21, 2.33176, 3.34811, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+21, 19175, 1, 0, 0, 1, 1, 18805, 0, 1605.95, -4324.2, 2.19915, 0.0101724, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+22, 19177, 1, 0, 0, 1, 1, 18808, 0, 1748.94, -4497.53, 28.793, 5.47104, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+23, 19177, 1, 0, 0, 1, 1, 18808, 0, 1752.58, -4499.43, 28.2911, 2.89886, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+24, 19178, 0, 0, 0, 1, 1, 18810, 0, 1629.95, 219.238, -43.1027, 1.91079, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+25, 20102, 0, 0, 0, 1, 1, 19342, 0, -14313.5, 508.853, 8.69121, 4.27606, 180, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+26, 20102, 0, 0, 0, 1, 1, 19339, 0, -14314, 507.109, 8.68829, 1.22173, 180, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+27, 20102, 1, 0, 0, 1, 1, 19342, 0, -1030.97, -3678.41, 23.2479, 1.62316, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+28, 20102, 1, 0, 0, 1, 1, 19339, 0, -1031.03, -3676.2, 23.1851, 4.69494, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+29, 20102, 1, 0, 0, 1, 1, 19342, 0, -924.656, -3715.91, 9.13173, 5.06145, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+30, 20102, 1, 0, 0, 1, 1, 19339, 0, -924.099, -3718, 9.18514, 1.69297, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+31, 20102, 1, 0, 0, 1, 1, 19342, 0, 6791.34, -4747.01, 701.617, 2.21657, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+32, 20102, 1, 0, 0, 1, 1, 19339, 0, -7144.12, -3830.95, 8.50543, 3.26377, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+33, 20102, 1, 0, 0, 1, 1, 19342, 0, -7147.06, -3830.22, 8.51396, 6.05629, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+34, 20102, 1, 0, 0, 1, 1, 19339, 0, -7217.57, -3735.16, 8.45314, 2.28638, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+35, 20102, 1, 0, 0, 1, 1, 19342, 0, -7219.66, -3731.91, 8.4635, 5.13127, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+36, 20102, 1, 0, 0, 1, 1, 19339, 0, -7053.62, -3777.21, 10.2047, 5.25344, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+37, 20102, 1, 0, 0, 1, 1, 19342, 0, -7053, -3779.9, 10.1478, 1.53589, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+38, 20102, 530, 0, 0, 1, 1, 19339, 0, -1818.99, 5305.67, -12.3448, 4.03171, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+39, 20102, 530, 0, 0, 1, 1, 19342, 0, -1821.12, 5303.35, -12.3448, 0.767945, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+40, 20102, 530, 0, 0, 1, 1, 19339, 0, -1748.08, 5493.86, -12.3448, 4.2586, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+41, 20102, 530, 0, 0, 1, 1, 19342, 0, -1747.9, 5492.11, -12.3448, 1.3439, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+42, 20102, 530, 0, 0, 1, 1, 19339, 0, -1978.82, 5365.21, -12.3448, 3.63029, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+43, 20102, 530, 0, 0, 1, 1, 19342, 0, -1980.72, 5364.88, -12.3225, 0.226893, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+44, 20102, 530, 0, 0, 1, 1, 19339, 0, -1875.93, 5376.2, -12.3448, 0.820305, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+45, 20102, 530, 0, 0, 1, 1, 19342, 0, -1875.06, 5378.04, -12.3448, 4.36332, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+46, 20102, 530, 0, 0, 1, 1, 19339, 0, -2175.76, 5414.62, 50.3112, 5.60251, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+47, 20102, 530, 0, 0, 1, 1, 19342, 0, -2174.14, 5413.06, 50.3112, 2.56563, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+48, 20102, 530, 0, 0, 1, 1, 19339, 0, -1809.92, 5418.64, -12.3448, 5.55015, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+49, 20102, 530, 0, 0, 1, 1, 19342, 0, -1808.36, 5417.01, -12.3448, 2.32129, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+50, 20102, 530, 0, 0, 1, 1, 19339, 0, -1917.81, 5441.85, -12.3448, 2.35619, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+51, 20102, 530, 0, 0, 1, 1, 19342, 0, -1920.17, 5443.52, -12.3448, 5.86431, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+52, 20102, 530, 0, 0, 1, 1, 19339, 0, -1883.61, 5769.28, 129.641, 4.15388, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0),
+(@guid+53, 20102, 530, 0, 0, 1, 1, 19342, 0, -1884.14, 5766.55, 129.641, 1.309, 300, 0, 0, 42, 0, 0, 0, 0, 0, 0);
+
+SET @Event=2;
+DELETE FROM `game_event_creature` WHERE `guid` BETWEEN @guid+0 AND @guid+53 AND `eventEntry`=@Event;
+INSERT INTO `game_event_creature` SELECT @Event, creature.guid FROM `creature` WHERE creature.guid BETWEEN @guid+0 AND @guid+53;
diff --git a/sql/updates/world/2016_01_26_00_world.sql b/sql/updates/world/2016_01_26_00_world.sql
new file mode 100644
index 00000000000..71fe8dc21e3
--- /dev/null
+++ b/sql/updates/world/2016_01_26_00_world.sql
@@ -0,0 +1,11 @@
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=28931;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(28931, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 19, 256, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Blightblood Troll - On Data Set 1 1 - Set Unit Flags'),
+(28931, 0, 1, 6, 7, 0, 100, 0, 0, 0, 0, 0, 19, 256, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Blightblood Troll - On Evade - Set Unit Flags'),
+(28931, 0, 2, 0, 8, 0, 100, 0, 61492, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Blightblood Troll - On Spellhit (Despawn Blightblood) - Despawn'),
+(28931, 0, 3, 7, 54, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Blightblood Troll - On Just Summoned - Set Phase 1'),
+(28931, 0, 4, 0, 4, 0, 100, 1, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Blightblood Troll - On Agro - Set Phase 2'),
+(28931, 0, 5, 6, 8, 0, 100, 0, 53103, 0, 30000, 30000, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Blightblood Troll - On Spellhit (Charm Blightblood Troll) - Set Phase 2'),
+(28931, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Blightblood Troll - On Spellhit (Charm Blightblood Troll) - Set Aggresie'),
+(28931, 0, 7, 0, 61, 0, 100, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Blightblood Troll - On Just Summoned - Set Passive'),
+(28931, 0, 8, 0, 1, 2, 100, 1, 0, 0, 0, 0, 45, 3, 3, 0, 0, 0, 0, 19, 29100, 10, 0, 0, 0, 0, 0, 'Blightblood Troll - OOC (Phase 2) - Set Data 3 3 on Totally Generic Bunny (JSB)');
diff --git a/sql/updates/world/2016_01_28_00_world_335.sql b/sql/updates/world/2016_01_28_00_world_335.sql
new file mode 100644
index 00000000000..64b32cb2d89
--- /dev/null
+++ b/sql/updates/world/2016_01_28_00_world_335.sql
@@ -0,0 +1,12 @@
+-- Create new gossip_menu_option 3223 for Apothecary Dithers and 3228 for Alchemist Arbington:
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (3223,3228,3229) AND `OptionBroadcastTextID` IN (6516,6517,6518,6519,6531);
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`OptionBroadcastTextID`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`,`BoxBroadcastTextID`) VALUES
+(3223,0,0,"What's needed for the cauldron at Felstone Field?",6516,3,131,0,0,0,0,'',0),
+(3223,1,0,"What's needed for the cauldron at Dalson's Tears?",6517,3,131,0,0,0,0,'',0),
+(3223,2,0,"What's needed for the cauldron at the Writhing Haunt?",6518,3,131,0,0,0,0,'',0),
+(3223,3,0,"What's needed for the cauldron at Gahrron's Withering?",6519,3,131,0,0,0,0,'',0),
+(3228,0,0,"What's needed for the cauldron at Felstone Field?",6516,3,131,0,0,0,0,'',0),
+(3228,1,0,"What's needed for the cauldron at Dalson's Tears?",6517,3,131,0,0,0,0,'',0),
+(3228,2,0,"What's needed for the cauldron at the Writhing Haunt?",6518,3,131,0,0,0,0,'',0),
+(3228,3,0,"What's needed for the cauldron at Gahrron's Withering?",6519,3,131,0,0,0,0,'',0),
+(3229,0,0,"I need a Vitreous Focuser.",6531,3,131,0,0,0,0,'',0);
diff --git a/sql/updates/world/2016_01_28_01_world.sql b/sql/updates/world/2016_01_28_01_world.sql
new file mode 100644
index 00000000000..3c4cadb310d
--- /dev/null
+++ b/sql/updates/world/2016_01_28_01_world.sql
@@ -0,0 +1,194 @@
+SET @ENTRY := 177226;
+SET @GOSSIP_ID := 7058;
+SET @NPC_TEXT_UNLEARN := 8321;
+SET @NPC_TEXT_LEARN_ENG := 6;
+SET @NPC_TEXT_LEARN_LW := 7;
+UPDATE `gameobject_template` SET `ScriptName`='go_soothsaying_for_dummies' WHERE `entry`=@ENTRY;
+-- Missing gossip texts
+DELETE FROM `npc_text` WHERE `ID` IN (@NPC_TEXT_LEARN_ENG,@NPC_TEXT_LEARN_LW);
+INSERT INTO `npc_text` (`ID`,`text0_0`,`text0_1`,`BroadcastTextID0`,`lang0`,`Probability0`,`em0_0`,`em0_1`,`em0_2`,`em0_3`,`em0_4`,`em0_5`,`text1_0`,`text1_1`,`BroadcastTextID1`,`lang1`,`Probability1`,`em1_0`,`em1_1`,`em1_2`,`em1_3`,`em1_4`,`em1_5`,`text2_0`,`text2_1`,`BroadcastTextID2`,`lang2`,`Probability2`,`em2_0`,`em2_1`,`em2_2`,`em2_3`,`em2_4`,`em2_5`,`text3_0`,`text3_1`,`BroadcastTextID3`,`lang3`,`Probability3`,`em3_0`,`em3_1`,`em3_2`,`em3_3`,`em3_4`,`em3_5`,`text4_0`,`text4_1`,`BroadcastTextID4`,`lang4`,`Probability4`,`em4_0`,`em4_1`,`em4_2`,`em4_3`,`em4_4`,`em4_5`,`text5_0`,`text5_1`,`BroadcastTextID5`,`lang5`,`Probability5`,`em5_0`,`em5_1`,`em5_2`,`em5_3`,`em5_4`,`em5_5`,`text6_0`,`text6_1`,`BroadcastTextID6`,`lang6`,`Probability6`,`em6_0`,`em6_1`,`em6_2`,`em6_3`,`em6_4`,`em6_5`,`text7_0`,`text7_1`,`BroadcastTextID7`,`lang7`,`Probability7`,`em7_0`,`em7_1`,`em7_2`,`em7_3`,`em7_4`,`em7_5`,`VerifiedBuild`) VALUES
+(@NPC_TEXT_LEARN_ENG,'Hundreds of various diagrams and schematics begin to take shape on the pages of the book. You recognize some of the diagrams while others remain foreign but familiar.','Hundreds of various diagrams and schematics begin to take shape on the pages of the book. You recognize some of the diagrams while others remain foreign but familiar.',11875,0,0,0,0,0,0,0,0,'','',0,0,0,0,0,0,0,0,0,'','',0,0,0,0,0,0,0,0,0,'','',0,0,0,0,0,0,0,0,0,'','',0,0,0,0,0,0,0,0,0,'','',0,0,0,0,0,0,0,0,0,'','',0,0,0,0,0,0,0,0,0,'','',0,0,0,0,0,0,0,0,0,0),
+(@NPC_TEXT_LEARN_LW,'The assortment of images, shapes, and markings come together before your eyes. The book seems to know your skill with leatherworking and offers you a choice - but be warned - you may only select one and once you have done so, may not change your mind!:','The assortment of images, shapes, and markings come together before your eyes. The book seems to know your skill with leatherworking and offers you a choice - but be warned - you may only select one and once you have done so, may not change your mind!:',11892,0,0,0,0,0,0,0,0,'','',0,0,0,0,0,0,0,0,0,'','',0,0,0,0,0,0,0,0,0,'','',0,0,0,0,0,0,0,0,0,'','',0,0,0,0,0,0,0,0,0,'','',0,0,0,0,0,0,0,0,0,'','',0,0,0,0,0,0,0,0,0,'','',0,0,0,0,0,0,0,0,0,0);
+-- Link gossip to menu
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP_ID AND `text_id` IN (@NPC_TEXT_LEARN_ENG,@NPC_TEXT_LEARN_LW);
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES
+(@GOSSIP_ID, @NPC_TEXT_LEARN_ENG),
+(@GOSSIP_ID, @NPC_TEXT_LEARN_LW);
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=@GOSSIP_ID;
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`OptionBroadcastTextID`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`,`BoxBroadcastTextID`) VALUES
+(@GOSSIP_ID,0,0,'I wish to unlearn my Gnomish Engineering specialization!',36143,1,0,0,0,0,1500000,'Do you really want to unlearn your Gnomish Engineering specialization and lose all associated recipes?',36144),
+(@GOSSIP_ID,1,0,'I wish to unlearn my Goblin Engineering specialization!',36146,1,0,0,0,0,1500000,'Do you really want to unlearn your Goblin Engineering specialization and lose all associated recipes?',36145),
+(@GOSSIP_ID,2,0,'I am 100% confident that I wish to learn in the ways of gnomish engineering.',11878,1,0,0,0,0,0,'',0),
+(@GOSSIP_ID,3,0,'I am 100% confident that I wish to learn in the ways of goblin engineering.',11876,1,0,0,0,0,0,'',0),
+(@GOSSIP_ID,4,0,'I am absolutely certain that I want to learn dragonscale leatherworking.',11889,1,0,0,0,0,0,'',0),
+(@GOSSIP_ID,5,0,'I am absolutely certain that I want to learn elemental leatherworking.',11890,1,0,0,0,0,0,'',0),
+(@GOSSIP_ID,6,0,'I am absolutely certain that I want to learn tribal leatherworking.',11891,1,0,0,0,0,0,'',0);
+
+-- Conditions
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14,15) AND `SourceGroup`=@GOSSIP_ID;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_ENG,0,0,7,0,202,200,0,0,0,0,'','Show this menu if player has engineering'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_ENG,0,0,8,0,3639,0,0,0,0,0,'','Show this menu if player has rewarded Show your Work [Goblin]'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_ENG,0,0,25,0,20219,0,0,1,0,0,'','Show this menu if player doesn''t have Gnomish Engineering'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_ENG,0,0,25,0,20222,0,0,1,0,0,'','Show this menu if player doesn''t have Goblin Engineering'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_ENG,0,1,7,0,202,200,0,0,0,0,'','Show this menu if player has engineering'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_ENG,0,1,8,0,3641,0,0,0,0,0,'','Show this menu if player has rewarded Show your Work [Alliance]'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_ENG,0,1,25,0,20219,0,0,1,0,0,'','Show this menu if player doesn''t have Gnomish Engineering'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_ENG,0,1,25,0,20222,0,0,1,0,0,'','Show this menu if player doesn''t have Goblin Engineering'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_ENG,0,2,7,0,202,200,0,0,0,0,'','Show this menu if player has engineering'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_ENG,0,2,8,0,3643,0,0,0,0,0,'','Show this menu if player has rewarded Show your Work [Horde]'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_ENG,0,2,25,0,20219,0,0,1,0,0,'','Show this menu if player doesn''t have Gnomish Engineering'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_ENG,0,2,25,0,20222,0,0,1,0,0,'','Show this menu if player doesn''t have Goblin Engineering'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,0,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,0,8,0,5141,0,0,0,0,0,'','Show this menu if player has rewarded Dragonscale Leatherworking [Alliance]'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,0,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,0,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,0,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,1,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,1,8,0,5143,0,0,0,0,0,'','Show this menu if player has rewarded Tribal Leatherworking [Alliance]'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,1,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,1,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,1,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,2,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,2,8,0,5144,0,0,0,0,0,'','Show this menu if player has rewarded Elemental Leatherworking [Alliance]'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,2,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,2,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,2,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,3,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,3,8,0,5145,0,0,0,0,0,'','Show this menu if player has rewarded Dragonscale Leatherworking [Horde]'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,3,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,3,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,3,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,4,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,4,8,0,5148,0,0,0,0,0,'','Show this menu if player has rewarded Tribal Leatherworking [Horde]'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,4,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,4,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,4,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,5,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,5,8,0,5146,0,0,0,0,0,'','Show this menu if player has rewarded Elemental Leatherworking [Horde]'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,5,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,5,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_LEARN_LW,0,5,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(14,@GOSSIP_ID,@NPC_TEXT_UNLEARN,0,0,7,0,202,200,0,0,0,0,'','Show this menu if player has engineering'),
+(14,@GOSSIP_ID,@NPC_TEXT_UNLEARN,0,0,25,0,20219,0,0,0,0,0,'','Show this menu if player does have Gnomish Engineering'),
+(14,@GOSSIP_ID,@NPC_TEXT_UNLEARN,0,1,7,0,202,200,0,0,0,0,'','Show this menu if player has engineering'),
+(14,@GOSSIP_ID,@NPC_TEXT_UNLEARN,0,1,25,0,20222,0,0,0,0,0,'','Show this menu if player does have Goblin Engineering'),
+(15,@GOSSIP_ID,0,0,0,7,0,202,200,0,0,0,0,'','Show option if player has engineering'),
+(15,@GOSSIP_ID,0,0,0,25,0,20219,0,0,0,0,0,'','Show option if player does have Gnomish Engineering'),
+(15,@GOSSIP_ID,1,0,0,7,0,202,200,0,0,0,0,'','Show option if player has engineering'),
+(15,@GOSSIP_ID,1,0,0,25,0,20222,0,0,0,0,0,'','Show option if player does have Gnomish Engineering'),
+(15,@GOSSIP_ID,2,0,0,7,0,202,200,0,0,0,0,'','Show option if player has engineering'),
+(15,@GOSSIP_ID,2,0,0,8,0,3639,0,0,0,0,0,'','Show option if player has rewarded Show your Work [Goblin]'),
+(15,@GOSSIP_ID,2,0,0,25,0,20219,0,0,1,0,0,'','Show option if player doesn''t have Gnomish Engineering'),
+(15,@GOSSIP_ID,2,0,0,25,0,20222,0,0,1,0,0,'','Show option if player doesn''t have Goblin Engineering'),
+(15,@GOSSIP_ID,2,0,1,7,0,202,200,0,0,0,0,'','Show option if player has engineering'),
+(15,@GOSSIP_ID,2,0,1,8,0,3641,0,0,0,0,0,'','Show option if player has rewarded Show your Work [Alliance]'),
+(15,@GOSSIP_ID,2,0,1,25,0,20219,0,0,1,0,0,'','Show option if player doesn''t have Gnomish Engineering'),
+(15,@GOSSIP_ID,2,0,1,25,0,20222,0,0,1,0,0,'','Show option if player doesn''t have Goblin Engineering'),
+(15,@GOSSIP_ID,2,0,2,7,0,202,200,0,0,0,0,'','Show option if player has engineering'),
+(15,@GOSSIP_ID,2,0,2,8,0,3643,0,0,0,0,0,'','Show option if player has rewarded Show your Work [Horde]'),
+(15,@GOSSIP_ID,2,0,2,25,0,20219,0,0,1,0,0,'','Show option if player doesn''t have Gnomish Engineering'),
+(15,@GOSSIP_ID,2,0,2,25,0,20222,0,0,1,0,0,'','Show option if player doesn''t have Goblin Engineering'),
+(15,@GOSSIP_ID,3,0,0,7,0,202,200,0,0,0,0,'','Show option if player has engineering'),
+(15,@GOSSIP_ID,3,0,0,8,0,3639,0,0,0,0,0,'','Show option if player has rewarded Show your Work [Goblin]'),
+(15,@GOSSIP_ID,3,0,0,25,0,20219,0,0,1,0,0,'','Show option if player doesn''t have Gnomish Engineering'),
+(15,@GOSSIP_ID,3,0,0,25,0,20222,0,0,1,0,0,'','Show option if player doesn''t have Goblin Engineering'),
+(15,@GOSSIP_ID,3,0,1,7,0,202,200,0,0,0,0,'','Show option if player has engineering'),
+(15,@GOSSIP_ID,3,0,1,8,0,3641,0,0,0,0,0,'','Show option if player has rewarded Show your Work [Alliance]'),
+(15,@GOSSIP_ID,3,0,1,25,0,20219,0,0,1,0,0,'','Show option if player doesn''t have Gnomish Engineering'),
+(15,@GOSSIP_ID,3,0,1,25,0,20222,0,0,1,0,0,'','Show option if player doesn''t have Goblin Engineering'),
+(15,@GOSSIP_ID,3,0,2,7,0,202,200,0,0,0,0,'','Show option if player has engineering'),
+(15,@GOSSIP_ID,3,0,2,8,0,3643,0,0,0,0,0,'','Show option if player has rewarded Show your Work [Horde]'),
+(15,@GOSSIP_ID,3,0,2,25,0,20219,0,0,1,0,0,'','Show option if player doesn''t have Gnomish Engineering'),
+(15,@GOSSIP_ID,3,0,2,25,0,20222,0,0,1,0,0,'','Show option if player doesn''t have Goblin Engineering'),
+(15,@GOSSIP_ID,4,0,0,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,4,0,0,8,0,5141,0,0,0,0,0,'','Show this menu if player has rewarded Dragonscale Leatherworking [Alliance]'),
+(15,@GOSSIP_ID,4,0,0,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,4,0,0,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,4,0,0,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,4,0,1,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,4,0,1,8,0,5143,0,0,0,0,0,'','Show this menu if player has rewarded Tribal Leatherworking [Alliance]'),
+(15,@GOSSIP_ID,4,0,1,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,4,0,1,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,4,0,1,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,4,0,2,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,4,0,2,8,0,5144,0,0,0,0,0,'','Show this menu if player has rewarded Elemental Leatherworking [Alliance]'),
+(15,@GOSSIP_ID,4,0,2,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,4,0,2,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,4,0,2,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,4,0,3,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,4,0,3,8,0,5145,0,0,0,0,0,'','Show this menu if player has rewarded Dragonscale Leatherworking [Horde]'),
+(15,@GOSSIP_ID,4,0,3,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,4,0,3,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,4,0,3,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,4,0,4,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,4,0,4,8,0,5148,0,0,0,0,0,'','Show this menu if player has rewarded Tribal Leatherworking [Horde]'),
+(15,@GOSSIP_ID,4,0,4,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,4,0,4,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,4,0,4,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,4,0,5,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,4,0,5,8,0,5146,0,0,0,0,0,'','Show this menu if player has rewarded Elemental Leatherworking [Horde]'),
+(15,@GOSSIP_ID,4,0,5,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,4,0,5,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,4,0,5,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,5,0,0,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,5,0,0,8,0,5141,0,0,0,0,0,'','Show this menu if player has rewarded Dragonscale Leatherworking [Alliance]'),
+(15,@GOSSIP_ID,5,0,0,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,5,0,0,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,5,0,0,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,5,0,1,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,5,0,1,8,0,5143,0,0,0,0,0,'','Show this menu if player has rewarded Tribal Leatherworking [Alliance]'),
+(15,@GOSSIP_ID,5,0,1,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,5,0,1,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,5,0,1,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,5,0,2,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,5,0,2,8,0,5144,0,0,0,0,0,'','Show this menu if player has rewarded Elemental Leatherworking [Alliance]'),
+(15,@GOSSIP_ID,5,0,2,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,5,0,2,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,5,0,2,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,5,0,3,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,5,0,3,8,0,5145,0,0,0,0,0,'','Show this menu if player has rewarded Dragonscale Leatherworking [Horde]'),
+(15,@GOSSIP_ID,5,0,3,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,5,0,3,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,5,0,3,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,5,0,4,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,5,0,4,8,0,5148,0,0,0,0,0,'','Show this menu if player has rewarded Tribal Leatherworking [Horde]'),
+(15,@GOSSIP_ID,5,0,4,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,5,0,4,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,5,0,4,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,5,0,5,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,5,0,5,8,0,5146,0,0,0,0,0,'','Show this menu if player has rewarded Elemental Leatherworking [Horde]'),
+(15,@GOSSIP_ID,5,0,5,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,5,0,5,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,5,0,5,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,6,0,0,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,6,0,0,8,0,5141,0,0,0,0,0,'','Show this menu if player has rewarded Dragonscale Leatherworking [Alliance]'),
+(15,@GOSSIP_ID,6,0,0,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,6,0,0,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,6,0,0,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,6,0,1,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,6,0,1,8,0,5143,0,0,0,0,0,'','Show this menu if player has rewarded Tribal Leatherworking [Alliance]'),
+(15,@GOSSIP_ID,6,0,1,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,6,0,1,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,6,0,1,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,6,0,2,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,6,0,2,8,0,5144,0,0,0,0,0,'','Show this menu if player has rewarded Elemental Leatherworking [Alliance]'),
+(15,@GOSSIP_ID,6,0,2,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,6,0,2,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,6,0,2,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,6,0,3,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,6,0,3,8,0,5145,0,0,0,0,0,'','Show this menu if player has rewarded Dragonscale Leatherworking [Horde]'),
+(15,@GOSSIP_ID,6,0,3,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,6,0,3,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,6,0,3,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,6,0,4,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,6,0,4,8,0,5148,0,0,0,0,0,'','Show this menu if player has rewarded Tribal Leatherworking [Horde]'),
+(15,@GOSSIP_ID,6,0,4,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,6,0,4,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,6,0,4,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking'),
+(15,@GOSSIP_ID,6,0,5,7,0,165,225,0,0,0,0,'','Show this menu if player has leatherworking'),
+(15,@GOSSIP_ID,6,0,5,8,0,5146,0,0,0,0,0,'','Show this menu if player has rewarded Elemental Leatherworking [Horde]'),
+(15,@GOSSIP_ID,6,0,5,25,0,10656,0,0,1,0,0,'','Show this menu if player doesn''t have Dragonscale Leatherworking'),
+(15,@GOSSIP_ID,6,0,5,25,0,10658,0,0,1,0,0,'','Show this menu if player doesn''t have Elemental Leatherworking'),
+(15,@GOSSIP_ID,6,0,5,25,0,10660,0,0,1,0,0,'','Show this menu if player doesn''t have Tribal Leatherworking');
diff --git a/sql/updates/world/2016_01_30_00_world_335.sql b/sql/updates/world/2016_01_30_00_world_335.sql
new file mode 100644
index 00000000000..43025f581d7
--- /dev/null
+++ b/sql/updates/world/2016_01_30_00_world_335.sql
@@ -0,0 +1,65 @@
+-- NPC 4488 Parqual Fintallas creature_template script name update:
+UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName`= '' WHERE `entry` = 4488;
+
+-- new gossip_menu_option 4764:
+DELETE FROM `gossip_menu_option` WHERE `menu_id`= 4764 AND `id` IN (0,1,2,3);
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`OptionBroadcastTextID`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`,`BoxBroadcastTextID`) VALUES
+(4764, 0, 0, "Kel'Thuzad is my answer.", 8377, 1, 1, 0,0,0,0,'',0),
+(4764, 1, 0, "Gul'dan is my answer.", 8378, 1, 1, 0,0,0,0,'',0),
+(4764, 2, 0, "Kil'jaeden is my answer.", 8379, 1, 1, 0,0,0,0,'',0),
+(4764, 3, 0, "Ner'zhul is my answer.", 8380, 1, 1, 0,0,0,0,'',0);
+
+-- new gossip_menu.entry linking quest text to gossip menu:
+DELETE FROM `gossip_menu` WHERE `entry`= 4764 AND `text_id`= 5822;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (4764, 5822);
+
+-- broadcast_text English grammar correction:
+UPDATE `broadcast_text` SET `MaleText`= "Kel'Thuzad? If you know that name at all, then perhaps you did read the book I sent you to get.$B$BUnfortunately, your answer is incorrect." WHERE `ID`= 8373;
+
+-- creature_text (say lines) in reply to the selected options:
+DELETE FROM `creature_text` WHERE `entry` = 4488 AND `groupid` IN (0,1,2,3,4);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
+(4488,0,0,"Kel'Thuzad? If you know that name at all, then perhaps you did read the book I sent you to get.$B$BUnfortunately, your answer is incorrect.",12,0,100,1,5000,0,8373,0,'Parqual replies to option 1'),
+(4488,1,0,"Gul'dan. Not a name many have heard on Azeroth.$B$BUnfortunately, not the correct answer.", 12,0,100,1,5000,0,8374,0,'Parqual replies to option 2'),
+(4488,2,0,'An interesting response to my question... and the wrong one.', 12,0,100,1,5000,0,8375,0,'Parqual replies to option 3'),
+(4488,3,0,"Ah, Ner'zhul. Not a name that should be uttered lightly, but I did ask you for an answer.$B$BAnd Ner'zhul is the correct one.", 12,0,100,1,5000,0,8376,0,'Parqual replies to option 4'),
+(4488,4,0,"I'm afraid not, $n. Now, feel the shame you have brought upon yourself.", 12,0,100,1,3000,0,8394,0,'Parqual, reply 2 to option 1-3');
+
+-- new SmartAI script for NPC 4488 Parqual Fintallas:
+DELETE FROM `smart_scripts` WHERE `entryorguid` = 4488 AND `source_type` = 0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(4488,0, 0, 1, 62,0,100,0, 4764, 0,0,0, 83, 3, 0,0,0,0,0, 10, 32022, 4488,0,0,0,0,0,'Parqual Fintallas - On Gossip Option 0 Selected - Remove npcflags Gossip & Questgiver'),
+(4488,0, 1, 2, 61,0,100,0, 0, 0,0,0, 72, 0, 0,0,0,0,0, 7, 0, 0,0,0,0,0,0,'Parqual Fintallas - On Gossip Option 0 Selected - Close Gossip'),
+(4488,0, 2, 0, 61,0,100,0, 0, 0,0,0, 1, 0, 5000,0,0,0,0, 7, 0, 0,0,0,0,0,0,'Parqual Fintallas - On Gossip Option 0 Selected - Say Text 0'),
+(4488,0, 3, 0, 52,0,100,0, 0, 4488,0,0, 1, 4, 3000,0,0,0,0, 7, 0, 0,0,0,0,0,0,'Parqual Fintallas - On Text 0 Over - Say Text 4'),
+(4488,0, 4, 5, 52,0,100,0, 4, 4488,0,0, 11, 6767, 2,0,0,0,0, 7, 0, 0,0,0,0,0,0,'Parqual Fintallas - On Text 4 Over - Cast \'Mark of Shame\''),
+(4488,0, 5, 0, 61,0,100,0, 0, 0,0,0, 81, 3, 0,0,0,0,0, 10, 32022, 4488,0,0,0,0,0,'Parqual Fintallas - On Text 4 Over - Set npcflags Gossip & Questgiver'),
+(4488,0, 6, 7, 62,0,100,0, 4764, 1,0,0, 83, 3, 0,0,0,0,0, 10, 32022, 4488,0,0,0,0,0,'Parqual Fintallas - On Gossip Option 1 Selected - Remove npcflags Gossip & Questgiver'),
+(4488,0, 7, 8, 61,0,100,0, 0, 0,0,0, 72, 0, 0,0,0,0,0, 7, 0, 0,0,0,0,0,0,'Parqual Fintallas - On Gossip Option 1 Selected - Close Gossip'),
+(4488,0, 8, 0, 61,0,100,0, 0, 0,0,0, 1, 1, 5000,0,0,0,0, 7, 0, 0,0,0,0,0,0,'Parqual Fintallas - On Gossip Option 1 Selected - Say Text 1'),
+(4488,0, 9, 0, 52,0,100,0, 1, 4488,0,0, 1, 4, 3000,0,0,0,0, 7, 0, 0,0,0,0,0,0,'Parqual Fintallas - On Text 1 Over - Say Text 4'),
+(4488,0, 10, 11, 62,0,100,0, 4767, 2,0,0, 83, 3, 0,0,0,0,0, 10, 32022, 4488,0,0,0,0,0,'Parqual Fintallas - On Gossip Option 2 Selected - Remove npcflags Gossip & Questgiver'),
+(4488,0, 11, 12, 61,0,100,0, 0, 0,0,0, 72, 0, 0,0,0,0,0, 7, 0, 0,0,0,0,0,0,'Parqual Fintallas - On Gossip Option 2 Selected - Close Gossip'),
+(4488,0, 12, 0, 61,0,100,0, 0, 0,0,0, 1, 2, 5000,0,0,0,0, 7, 0, 0,0,0,0,0,0,'Parqual Fintallas - On Gossip Option 2 Selected - Say Text 2'),
+(4488,0, 13, 0, 52,0,100,0, 2, 4488,0,0, 1, 4, 3000,0,0,0,0, 7, 0, 0,0,0,0,0,0,'Parqual Fintallas - On Text 2 Over - Say Text 4'),
+(4488,0, 14, 15, 62,0,100,0, 4764, 3,0,0, 83, 3, 0,0,0,0,0, 10, 32022, 4488,0,0,0,0,0,'Parqual Fintallas - On Gossip Option 3 Selected - Remove npcflags Gossip & Questgiver'),
+(4488,0, 15, 16, 61,0,100,0, 0, 0,0,0, 72, 0, 0,0,0,0,0, 7, 0, 0,0,0,0,0,0,'Parqual Fintallas - On Gossip Option 3 Selected - Close Gossip'),
+(4488,0, 16, 17, 61,0,100,0, 0, 0,0,0, 1, 3, 3000,0,0,0,0, 7, 0, 0,0,0,0,0,0,'Parqual Fintallas - On Gossip Option 3 Selected - Say Text 3'),
+(4488,0, 17, 18, 61,0,100,0, 0, 0,0,0, 5, 2, 0,0,0,0,0, 7, 0, 0,0,0,0,0,0,'Parqual Fintallas - On Gossip Option 3 Selected - Play Emote 2 '),
+(4488,0, 18, 19, 61,0,100,0, 0, 0,0,0, 15, 6628, 0,0,0,0,0, 7, 0, 0,0,0,0,0,0,'Parqual Fintallas - On Gossip Option 3 Selected - Credit quest 6628 \'Test of Lore\''),
+(4488,0, 19, 0, 61,0,100,0, 0, 0,0,0, 81, 3, 0,0,0,0,0, 10, 32022, 4488,0,0,0,0,0,'Parqual Fintallas - On Gossip Option 3 Selected - Set npcflags Gossip & Questgiver');
+
+-- conditions showing gossip menu and gossip menu options only when Quest 6628 is active and Mark of Shame is not.
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`= 14 AND `SourceGroup`= 4764 AND `SourceEntry` IN (5821,5822);
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`= 15 AND `SourceGroup`= 4764 AND `SourceEntry` IN (0,1,2,3);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(14, 4764, 5821, 0, 0, 9, 0, 6628, 0, 0, 1, 0, 0, '', 'Show gossip dialog text 5821 if Quest 6628 is NOT taken'),
+(14, 4764, 5822, 0, 0, 9, 0, 6628, 0, 0, 0, 0, 0, '', 'Show gossip dialog text 5822 if Quest 6628 is taken (active)'),
+(15, 4764, 0, 0, 0, 9, 0, 6628, 0, 0, 0, 0, 0, '', 'Show gossip option 4764 id 0 if Quest 6628 is taken (active)'),
+(15, 4764, 1, 0, 0, 9, 0, 6628, 0, 0, 0, 0, 0, '', 'Show gossip option 4764 id 1 if Quest 6628 is taken (active)'),
+(15, 4764, 2, 0, 0, 9, 0, 6628, 0, 0, 0, 0, 0, '', 'Show gossip option 4764 id 2 if Quest 6628 is taken (active)'),
+(15, 4764, 3, 0, 0, 9, 0, 6628, 0, 0, 0, 0, 0, '', 'Show gossip option 4764 id 3 if Quest 6628 is taken (active)'),
+(15, 4764, 0, 0, 0, 1, 0, 6767, 0, 0, 1, 0, 0, '', 'Show gossip option 4764 id 0 if Player does NOT have Aura from spell 6767'),
+(15, 4764, 1, 0, 0, 1, 0, 6767, 0, 0, 1, 0, 0, '', 'Show gossip option 4764 id 1 if Player does NOT have Aura from spell 6767'),
+(15, 4764, 2, 0, 0, 1, 0, 6767, 0, 0, 1, 0, 0, '', 'Show gossip option 4764 id 2 if Player does NOT have Aura from spell 6767'),
+(15, 4764, 3, 0, 0, 1, 0, 6767, 0, 0, 1, 0, 0, '', 'Show gossip option 4764 id 3 if Player does NOT have Aura from spell 6767');
diff --git a/sql/updates/world/2016_01_30_01_world.sql b/sql/updates/world/2016_01_30_01_world.sql
new file mode 100644
index 00000000000..c9405c4ee61
--- /dev/null
+++ b/sql/updates/world/2016_01_30_01_world.sql
@@ -0,0 +1,6 @@
+--
+SET @Guid:=6177;
+DELETE FROM `gameobject` WHERE `guid` IN (@Guid+0, @Guid+1);
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES
+(@Guid+0, 201888, 631, 0, 0, 15, 1, 4312.29, 3025.22, 360.518, 2.92954, 0, 0, 0.994384, 0.105829, 604800, 0, 1, 0),
+(@Guid+1, 201889, 631, 0, 0, 15, 1, 4403.27, 3027.19, 360.52, 0.0274907, 0, 0, 0.0137449, 0.999906, 604800, 0, 1, 0);
diff --git a/sql/updates/world/2016_01_30_02_world.sql b/sql/updates/world/2016_01_30_02_world.sql
new file mode 100644
index 00000000000..25325dddd7a
--- /dev/null
+++ b/sql/updates/world/2016_01_30_02_world.sql
@@ -0,0 +1,336 @@
+SET @CGUID := 106855;
+
+UPDATE `creature_template` SET `unit_flags`=33536 WHERE `entry`=31029;
+UPDATE `creature_template` SET `unit_flags`=33088 WHERE `entry`=31016;
+UPDATE `creature_template` SET `unit_flags`=768 WHERE `entry`=31083;
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN(31050,31030,31029,31087);
+UPDATE `creature_template` SET `unit_flags`=256 WHERE `entry`=31050;
+UPDATE `creature_template` SET `unit_flags`=33555200 WHERE `entry`=31077;
+UPDATE `creature_template_addon` SET `auras`='0' WHERE `entry`=31083;
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN(4020);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 4020, 0, 0, 31, 0, 3, 31077, 0, 0, 0, 0, '', '');
+
+DELETE FROM `creature` WHERE `id`=31077;
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+23 AND `id` IN(31030,31077);
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 31030, 571, 1, 1, 7108.229, 4428.539, 837.9857, 4.782202, 120, 0, 0), -- 31030 (Area: 210) (Auras: 4366 - 4366) (possible waypoints or random movement)
+(@CGUID+1, 31030, 571, 1, 1, 7092.146, 4431.81, 836.628, 4.590216, 120, 0, 0), -- 31030 (Area: 210) (Auras: 4366 - 4366) (possible waypoints or random movement)
+(@CGUID+2, 31030, 571, 1, 1, 7118.42, 4432.598, 837.9554, 4.869469, 120, 0, 0), -- 31030 (Area: 210) (Auras: 4366 - 4366) (possible waypoints or random movement)
+(@CGUID+3, 31030, 571, 1, 1, 7083.883, 4438.466, 834.9834, 4.572762, 120, 0, 0), -- 31030 (Area: 210) (Auras: 4366 - 4366) (possible waypoints or random movement)
+(@CGUID+4, 31030, 571, 1, 1, 7111.272, 4445.171, 838.5065, 4.834562, 120, 0, 0), -- 31030 (Area: 210) (Auras: 4366 - 4366) (possible waypoints or random movement)
+(@CGUID+5, 31030, 571, 1, 1, 7090.73, 4446.96, 837.0818, 3.402185, 120, 0, 0), -- 31030 (Area: 210) (Auras: 4366 - 4366)
+(@CGUID+6, 31077, 571, 1, 1, 7081.854, 4311.559, 871.1456, 0.8552113, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+7, 31077, 571, 1, 1, 7097.221, 4343.909, 871.829, 4.24115, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+8, 31077, 571, 1, 1, 7073.036, 4321.123, 871.2318, 4.118977, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+9, 31077, 571, 1, 1, 7058.097, 4318.563, 871.0363, 2.216568, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+10, 31077, 571, 1, 1, 7069.263, 4307.413, 870.969, 3.769911, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+11, 31077, 571, 1, 1, 7091.653, 4324.766, 871.4558, 6.161012, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+12, 31077, 571, 1, 1, 7105.507, 4331.751, 871.8961, 5.270895, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+13, 31077, 571, 1, 1, 7081.499, 4355.459, 871.8806, 3.089233, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+14, 31077, 571, 1, 1, 7107.956, 4349.756, 872.166, 3.316126, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+15, 31077, 571, 1, 1, 7060.825, 4333.478, 871.3121, 2.565634, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+16, 31077, 571, 1, 1, 7077.684, 4338.44, 871.5625, 1.710423, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+17, 31077, 571, 1, 1, 7103.35, 4365.286, 872.2496, 2.792527, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+18, 31077, 571, 1, 1, 7069.498, 4374.775, 872.0762, 3.700098, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+19, 31077, 571, 1, 1, 7056.396, 4366.188, 871.9349, 4.415683, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+20, 31077, 571, 1, 1, 7088.755, 4385.249, 872.4426, 0.4014257, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+21, 31077, 571, 1, 1, 7084.891, 4370.708, 872.1652, 3.525565, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+22, 31077, 571, 1, 1, 7065.018, 4353.726, 871.6901, 5.899213, 120, 0, 0), -- 31077 (Area: 210)
+(@CGUID+23, 31077, 571, 1, 1, 7048.843, 4346.518, 871.6175, 2.984513, 120, 0, 0); -- 31077 (Area: 210)
+
+DELETE FROM `vehicle_template_accessory` WHERE `entry`=31050;
+INSERT INTO `vehicle_template_accessory` (`entry`, `accessory_entry`, `seat_id`, `minion`, `description`, `summontype`, `summontimer`) VALUES
+(31050, 31016, 0, 0, '31050 - 31016', 6, 30000); -- 31050 - 31016
+
+DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`=31050;
+INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `user_type`) VALUES
+(31050, 46598, 1, 0);
+
+DELETE FROM `spell_group` WHERE `id`=4307;
+
+DELETE FROM `spell_group_stack_rules` WHERE `group_id`=4307;
+
+DELETE FROM `creature_addon` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+5;
+INSERT INTO `creature_addon` (`guid`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES
+(@CGUID+0, 26882, 0x3000000, 0x1, '4366'), -- 31030 - 4366 - 4366 0xF130793600719D57
+(@CGUID+1, 26882, 0x3000000, 0x1, '4366'), -- 31030 - 4366 - 4366 0xF130793600719D58
+(@CGUID+2, 26882, 0x3000000, 0x1, '4366'), -- 31030 - 4366 - 4366 0xF130793600719D59
+(@CGUID+3, 26882, 0x3000000, 0x1, '4366'), -- 31030 - 4366 - 4366 0xF130793600719D5A
+(@CGUID+4, 26882, 0x3000000, 0x1, '4366'), -- 31030 - 4366 - 4366 0xF130793600719D5B
+(@CGUID+5, 26882, 0x3000000, 0x1, '4366'); -- 31030 - 4366 - 4366 0xF130793600719D5C
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN(31016,31083,31029,31050);
+INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES
+(31016, 0, 0x0, 0x1, '61081'), -- 31016 - 61081
+(31083, 0, 0x0, 0x1, '34427'), -- 31083 - 34427
+(31029, 0, 0x3000000, 0x1, '58102'), -- 31029 - 58102
+(31050, 0, 0x3000000, 0x1, ''); -- 31050 - 4366
+
+DELETE FROM `event_scripts` WHERE `id`=20108;
+INSERT INTO `event_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`dataint`,`x`,`y`,`z`,`o`) VALUES
+(20108,0,10,31029,1800000,0,7116.824,4308.362,883.3842,2.46227), -- Possessed Vardmadra 0xF130793500719D55
+(20108,0,16,14969,0,0,0,0,0,0);
+
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=193028;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`IN(31016,31029,31030,31050,31083,31087,31077);
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`IN(31016,31029,31030,31050,31083,31087,31077);
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid` BETWEEN -@CGUID-5 AND -@CGUID-0;
+DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid`IN(3105000,3105001,3101600,3108300,3108301,19302800);
+DELETE FROM `smart_scripts` WHERE `source_type`=1 AND `entryorguid`IN(193028);
+
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(31077, 0, 0, 0, 8, 0, 100, 0, 4020, 0, 0, 0, 11, 4307, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Safirdrangs Chill target - On Spell Hit Safirdrangs Chill - Cast Safirdrangs Chill'),
+(31077, 0, 1, 2, 25, 0, 100, 0, 0, 0, 0, 0, 19, 256, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Safirdrangs Chill target - On Reset - Set Unit Flags'),
+(31077, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 2, 14, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Safirdrangs Chill target - On Reset - Set Faction'),
+(193028, 1, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 32, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'War Horn of Jotunheim - On Data Set - Reset Go'),
+(31083, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 80, 3108300, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - On Just Summoned Run Script'),
+(31083, 0, 1, 0, 38, 0, 100, 0, 1, 1, 0, 0, 53, 0, 3108300, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - On Data Set - Start WP (Path 2)'),
+(31083, 0, 2, 0, 40, 0, 100, 0, 1, 3108300, 0, 0, 80, 3108301, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - On Reached WP1 (Path 2) - Run Script 2'),
+(31083, 0, 3, 0, 40, 0, 100, 0, 4, 31083, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 4.468043, 'The Lich King - On Reached WP4 (Path 1) - Set Orientation'),
+(31083, 0, 4, 5, 40, 0, 100, 0, 2, 31083, 0, 0, 54, 35600, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - On Reached WP2 (Path 1) - Set Pause WP'),
+(31083, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 31029, 0, 0, 0, 0, 0, 0, 'The Lich King - On Reached WP2 (Path 1) - Face Possessed Vardmadra'),
+(3108300, 9, 0, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 11, 34427, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Cast Ethereal Teleport'),
+(3108300, 9, 1, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 45, 3, 3, 0, 0, 0, 0, 10, @CGUID+0, 31030, 0, 0, 0, 0, 0, 'The Lich King - Script - Despawn Balargarde Elite'),
+(3108300, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 3, 3, 0, 0, 0, 0, 10, @CGUID+1, 31030, 0, 0, 0, 0, 0, 'The Lich King - Script - Despawn Balargarde Elite'),
+(3108300, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 3, 3, 0, 0, 0, 0, 10, @CGUID+2, 31030, 0, 0, 0, 0, 0, 'The Lich King - Script - Despawn Balargarde Elite'),
+(3108300, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 3, 3, 0, 0, 0, 0, 10, @CGUID+3, 31030, 0, 0, 0, 0, 0, 'The Lich King - Script - Despawn Balargarde Elite'),
+(3108300, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 3, 3, 0, 0, 0, 0, 10, @CGUID+4, 31030, 0, 0, 0, 0, 0, 'The Lich King - Script - Despawn Balargarde Elite'),
+(3108300, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 3, 3, 0, 0, 0, 0, 10, @CGUID+5, 31030, 0, 0, 0, 0, 0, 'The Lich King - Script - Despawn Balargarde Elite'),
+(3108300, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 53274, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Cast Icebound Visage'),
+(3108300, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 31029, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Face Possessed Vardmadra'),
+(3108300, 9, 9, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Say Line 0 '),
+(3108300, 9, 10, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 45, 3, 3, 0, 0, 0, 0, 19, 31029, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Set Data on Possessed Vardmadra'),
+(3108300, 9, 11, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Say Line 1 '),
+(3108300, 9, 12, 0, 0, 0, 100, 0, 0, 0, 0, 0, 53, 0, 31083, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Start WP '),
+(3108300, 9, 13, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 31029, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Say Line 2 on Possessed Vardmadra '),
+(3108300, 9, 14, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Say Line 2 '),
+(3108300, 9, 15, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 11, 42904, 0, 0, 0, 0, 0, 19, 31029, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Cast Cosmetic - Combat Special Attack 2H (Whirlwind SFX) '),
+(3108300, 9, 16, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 31029, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Set Data on Possessed Vardmadra '),
+(3108300, 9, 17, 0, 0, 0, 100, 0, 600, 600, 0, 0, 45, 5, 5, 0, 0, 0, 0, 19, 31029, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Set Data on Possessed Vardmadra '),
+(3108300, 9, 18, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 4, 15714, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Play sound 15714'),
+(3108300, 9, 19, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Say Line 3 '),
+(3108300, 9, 20, 0, 0, 0, 100, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 31016, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Face Overthane Balargarde <Master of Jotunheim>'),
+(3108300, 9, 21, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 19, 31016, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Say Line 6 on Overthane Balargarde <Master of Jotunheim> '),
+(3108300, 9, 22, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Say Line 4 '),
+(3108300, 9, 23, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 7, 0, 0, 0, 0, 0, 19, 31016, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Say Line 7 on Overthane Balargarde <Master of Jotunheim> '),
+(3108300, 9, 24, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 45, 3, 3, 0, 0, 0, 0, 19, 31016, 0, 0, 0, 0, 0, 0, 'The Lich King - Script - Set Data on Overthane Balargarde <Master of Jotunheim> '),
+(3108301, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 4, 4, 0, 0, 0, 0, 19, 31050, 0, 0, 0, 0, 0, 0, 'The Lich King - Script 2 - Set Data on Safirdrang '),
+(3108301, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 21, 100, 0, 0, 0, 0, 0, 0, 'The Lich King - Script 2 - Face Player'),
+(3108301, 9, 2, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - Script 2 - Say Line 5'),
+(3108301, 9, 3, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - Script 2 - Say Line 6'),
+(3108301, 9, 4, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 11, 34427, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - Script 2 - Cast Ethereal Teleport'),
+(3108301, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, @CGUID+0, 31030, 0, 0, 0, 0, 0, 'The Lich King - Script 2 - Despawn Balargarde Elite'),
+(3108301, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, @CGUID+1, 31030, 0, 0, 0, 0, 0, 'The Lich King - Script 2 - Despawn Balargarde Elite'),
+(3108301, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, @CGUID+2, 31030, 0, 0, 0, 0, 0, 'The Lich King - Script 2 - Despawn Balargarde Elite'),
+(3108301, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, @CGUID+3, 31030, 0, 0, 0, 0, 0, 'The Lich King - Script 2 - Despawn Balargarde Elite'),
+(3108301, 9, 9, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, @CGUID+4, 31030, 0, 0, 0, 0, 0, 'The Lich King - Script 2 - Despawn Balargarde Elite'),
+(3108301, 9, 10, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, @CGUID+5, 31030, 0, 0, 0, 0, 0, 'The Lich King - Script 2 - Despawn Balargarde Elite'),
+(3108301, 9, 11, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 31050, 0, 0, 0, 0, 0, 0, 'The Lich King - Script 2 - Despawn Safirdrang'),
+(3108301, 9, 12, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 31087, 0, 0, 0, 0, 0, 0, 'The Lich King - Script 2 - Despawn Lady Nightswood'),
+(3108301, 9, 13, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - Script 2 - Despawn'),
+(31087, 0, 0, 0, 1, 0, 100, 1, 20000, 20000, 0, 0, 53, 1, 31087, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Nightswood - OOC (No repeat) - Start WP'),
+(31087, 0, 1, 0, 40, 0, 100, 0, 3, 31087, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Nightswood - On Reached WP3 - Despawn'),
+(31087, 0, 2, 0, 54, 0, 100, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 31083, 0, 0, 0, 0, 0, 0, 'Lady Nightswood - On Just Summoned - Face The Lich King'),
+(31016, 0, 1, 2, 38, 0, 100, 0, 1, 1, 0, 0, 19, 256, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Data Set - Remove Flags Immune to PC'),
+(31016, 0, 2, 3, 61, 0, 100, 0, 1, 1, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Data Set - Set Home Position'),
+(31016, 0, 3, 0, 61, 0, 100, 0, 1, 1, 0, 0, 49, 0, 0, 0, 0, 0, 0, 21, 100, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Data Set - Start Attack'),
+(31016, 0, 4, 18, 4, 0, 100, 0, 0, 0, 0, 0, 42, 0, 49, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Agro - Set Invincibility HP'),
+(31016, 0, 5, 6, 7, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 31050, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Evade - Set Data Safirdrang'),
+(31016, 0, 6, 7, 61, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, @CGUID+0, 31030, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Evade - Set Data Balargarde Elite'),
+(31016, 0, 7, 8, 61, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, @CGUID+1, 31030, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Evade - Set Data Balargarde Elite'),
+(31016, 0, 8, 9, 61, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, @CGUID+2, 31030, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Evade - Set Data Balargarde Elite'),
+(31016, 0, 9, 10, 61, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, @CGUID+3, 31030, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Evade - Set Data Balargarde Elite'),
+(31016, 0, 10, 11, 61, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, @CGUID+4, 31030, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Evade - Set Data Balargarde Elite'),
+(31016, 0, 11, 12, 61, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, @CGUID+5, 31030, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Evade - Set Data Balargarde Elite'),
+(31016, 0, 12, 22, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 31029, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - Evade - Despawn'),
+(31016, 0, 13, 0, 38, 0, 100, 0, 2, 2, 0, 0, 28, 4366, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Data Set - Set Visible'),
+(31016,0,14,0,0,3,100,0,20000,30000,25000,32000,11,60108,0,0,0,0,0,5,0,0,0,0,0,0,0,"Overthane Balargarde - In Combat (Phase 1 & 2) - Cast 'Heroic Leap'"),
+(31016,0,15,0,9,3,100,0,0,5,60000,90000,11,61076,0,0,0,0,0,1,0,0,0,0,0,0,0,"Overthane Balargarde - On Range (Phase 1 & 2) - Cast 'Whirlwind'"),
+(31016,0,16,0,0,3,100,0,20000,25000,25000,30000,11,15043,0,0,0,0,0,2,0,0,0,0,0,0,0,"Overthane Balargarde - In Combat (Phase 1 & 2) - Cast 'Frostbolt'"),
+(31016,0,17,0,0,3,100,0,15000,25000,25000,35000,11,61085,0,0,0,0,0,5,0,0,0,0,0,0,0,"Overthane Balargarde - In Combat (Phase 1 & 2) - Cast 'Blizzard'"),
+(31016, 0, 18, 0, 61, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Agro - Set Phase 1'),
+(31016, 0, 19, 20, 2, 0, 100, 1, 0, 80, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - At 80% HP - Say Line 4'),
+(31016, 0, 20, 0, 61, 0, 100, 0, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - At 80% HP - Set Phase 2'),
+(31016, 0, 21, 0, 2, 0, 100, 1, 0, 50, 0, 0, 80, 3101600, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - At 50% HP - Run Script'),
+(31016, 0, 22, 28, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 31083, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Agro - Set Phase 1'),
+(31016, 0, 23, 24, 38, 0, 100, 0, 3, 3, 0, 0, 20, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Data Set - Enable Attack'),
+(31016, 0, 24, 25, 61, 0, 100, 0, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Data Set - Enable Comabt Movement'),
+(31016, 0, 25, 26, 61, 0, 100, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Data Set - Turn Invincebility HP Off'),
+(31016, 0, 26, 33, 61, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Data Set - Set Phase 1'),
+(31016, 0, 27, 29, 6, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 31083, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Death - Set Data on the Lich King'),
+(31016, 0, 28, 29, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 31087, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Agro - Set Phase 1'),
+(31016, 0, 29, 32, 61, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 14, 62011, 193028, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - Link - Set Data on War Horn of Jotunheim'),
+(31016,0,31,0,0,2,100,0,3000,5000,13000,14000,45,3,3,0,0,0,0,19,31050,0,0,0,0,0,0,"Overthane Balargarde - In Combat (Phase 2) - Set Data on Safirdrang"),
+(31016, 0, 32, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - On Agro - Set Phase 1'),
+(31016, 0, 33, 0, 61, 0, 100, 0, 0, 0, 0, 0, 91, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - Script - Remove Bytes 1'),
+(31016, 0, 34, 0, 0, 4, 100, 0, 1000, 1000, 1000, 1000, 66, 0, 0, 0, 0, 0, 0, 19, 31083, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - IC (Phase 3) - Face the Lich King'),
+(3101600, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 22, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - Script - Set Phase 3'),
+(3101600, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - Script - Stop Attack'),
+(3101600, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - Script - Disable Combat Movement'),
+(3101600, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - Script - Say Line 5'),
+(3101600, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 31083, 8, 0, 0, 0, 0, 8, 0, 0, 0, 7088.768, 4385.59, 872.4484, 4.468043, 'Overthane Balargarde <Master of Jotunheim> - Script - Summon The Lich King'),
+(3101600, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 18, 33554432, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - Script - Add Unit Flags UNIT_FLAG_NOT_SELECTABLE'),
+(3101600, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 90, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - Script - Set Bytes 1'),
+(3101600, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 31083, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - Script - Face the Lich King'),
+(3101600, 9, 8, 0, 0, 0, 100, 0, 100, 100, 0, 0, 19, 33554432, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overthane Balargarde <Master of Jotunheim> - Script - Remove Unit Flags UNIT_FLAG_NOT_SELECTABLE'),
+(31029, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 53, 1, 31029, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Just Summoned - Start WP'),
+(31029, 0, 1, 2, 40, 0, 100, 0, 4, 31029, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, @CGUID+0, 31030, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Reached WP4 - Set Data Balargarde Elite'),
+(31029, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, @CGUID+1, 31030, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Reached WP4 - Set Data Balargarde Elite'),
+(31029, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, @CGUID+2, 31030, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Reached WP4 - Set Data Balargarde Elite'),
+(31029, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, @CGUID+3, 31030, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Reached WP4 - Set Data Balargarde Elite'),
+(31029, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, @CGUID+4, 31030, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Reached WP4 - Set Data Balargarde Elite'),
+(31029, 0, 6, 7, 61, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, @CGUID+5, 31030, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Reached WP4 - Set Data Balargarde Elite'),
+(31029, 0, 7, 8, 61, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 31016, 0, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Just Summoned - Set Data Balargarde Elite'),
+(31029, 0, 8, 0, 61, 0, 100, 0, 0, 0, 0, 0, 12, 31050, 8, 0, 0, 0, 0, 8, 0, 0, 0, 7097.292,4416.581,831.8486,4.485496, 'Possessed Vardmadra - On Data Set - Start WP Path 2'),
+(31029, 0, 9, 10, 38, 0, 100, 0, 1, 1, 0, 0, 11, 58359, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Data Set - Cast Banshees Revenge: Summon Lady Nightswood'),
+(31029, 0, 10, 16, 61, 0, 100, 0, 0, 0, 0, 0, 11, 51744, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Data Set - Cast Suicide (No Log)'),
+(31029, 0, 12, 13, 38, 0, 100, 0, 3, 3, 0, 0, 90, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Data Set - Set Bytes 1'),
+(31029, 0, 13, 14, 61, 0, 100, 0, 0, 0, 0, 0, 53, 1, 3102900, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Data Set - Start WP (Path 2)'),
+(31029, 0, 14, 0, 61, 0, 100, 0, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Data Set - Turn Fly Off'),
+(31029, 0, 15, 0, 40, 0, 100, 0, 4, 31029, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Reached WP4 - Say Line 0'),
+(31029, 0, 16, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 15000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Data Set - Despawn after 15 seconds'),
+(31029, 0, 17, 0, 38, 0, 100, 0, 5, 5, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Possessed Vardmadra - On Data Set - Say Line 3'),
+(31050, 0, 0, 3, 54, 0, 100, 0, 0, 0, 0, 0, 53, 1, 31050, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Safirdrang - On Data Set - Start WP'),
+(31050, 0, 1, 0, 40, 0, 100, 0, 6, 31050, 0, 0, 80, 3105000, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Safirdrang - On Reached WP6 - Run Script'),
+(31050, 0, 2, 0, 38, 0, 100, 0, 2, 2, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Safirdrang - On Data Set - Despawn'),
+(31050, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 28, 4366, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Safirdrang - On Data Set - Set Visible'),
+(31050, 0, 4, 0, 38, 0, 100, 0, 3, 3, 0, 0, 80, 3105001, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Safirdrang - On Data Set - Run Script'),
+(31050, 0, 5, 0, 38, 0, 100, 0, 4, 4, 0, 0, 53, 1, 3105000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Safirdrang - On Data Set - Start WP (Path 2)'),
+(31050, 0, 6, 0, 40, 0, 100, 0, 4, 3105000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Safirdrang - On Reached WP4 (Path 2) - Despawn'),
+(3105001, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 21, 100, 0, 0, 0, 0, 0, 0, 'Safirdrang - Script 2 - Face Player'),
+(3105001, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 4020, 0, 0, 0, 0, 0, 21, 100, 0, 0, 0, 0, 0, 0, 'Safirdrang - Script 2 - Cast Safirdrangs Chill'),
+(3105001, 9, 2, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 21, 100, 0, 0, 0, 0, 0, 0, 'Safirdrang - Script 2 - Face Player'),
+(3105000, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 31016, 0, 0, 0, 0, 0, 0, 'Safirdrang - Script - Say Line 1 on Overthane Balargarde'), -- 20:05:22.766
+(3105000, 9, 1, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 31029, 0, 0, 0, 0, 0, 0, 'Safirdrang - Script - Say Line 1 on Possessed Vardmadra'), -- 20:05:28.375
+(3105000, 9, 2, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 31016, 0, 0, 0, 0, 0, 0, 'Safirdrang - Script - Say Line 2 on Overthane Balargarde'), -- 20:05:34.422
+(3105000, 9, 3, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 19, 31016, 0, 0, 0, 0, 0, 0, 'Safirdrang - Script - Say Line 3 on Overthane Balargarde'), -- 20:05:40.828
+(3105000, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 28, 46598, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Safirdrang - Script - Eject Overthane Balargarde'), -- 20:05:22.766
+(3105000, 9, 5, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 31016, 0, 0, 0, 0, 0, 0, 'Safirdrang - Script - Eject Overthane Balargarde'), -- 20:05:22.766
+(3105000, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Safirdrang - Script - Set Home Position'), -- 20:05:22.766
+(-@CGUID-0, 0, 0, 3, 38, 0, 100, 0, 1, 1, 0, 0, 53, 1, 3103001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Start WP'),
+(-@CGUID-1, 0, 0, 3, 38, 0, 100, 0, 1, 1, 0, 0, 53, 1, 3103002, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Start WP'),
+(-@CGUID-2, 0, 0, 3, 38, 0, 100, 0, 1, 1, 0, 0, 53, 1, 3103003, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Start WP'),
+(-@CGUID-3, 0, 0, 3, 38, 0, 100, 0, 1, 1, 0, 0, 53, 1, 3103004, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Start WP'),
+(-@CGUID-4, 0, 0, 3, 38, 0, 100, 0, 1, 1, 0, 0, 53, 1, 3103005, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Start WP'),
+(-@CGUID-5, 0, 0, 3, 38, 0, 100, 0, 1, 1, 0, 0, 53, 1, 3103006, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Start WP'),
+(-@CGUID-0, 0, 1, 0, 40, 0, 100, 0, 5, 3103001, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Reached WP5 - Set Phase 1'),
+(-@CGUID-1, 0, 1, 0, 40, 0, 100, 0, 5, 3103002, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Reached WP5 - Set Phase 1'),
+(-@CGUID-2, 0, 1, 0, 40, 0, 100, 0, 5, 3103003, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Reached WP5 - Set Phase 1'),
+(-@CGUID-3, 0, 1, 0, 40, 0, 100, 0, 6, 3103004, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Reached WP6 - Set Phase 1'),
+(-@CGUID-4, 0, 1, 0, 40, 0, 100, 0, 5, 3103005, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Reached WP5 - Set Phase 1'),
+(-@CGUID-5, 0, 1, 0, 40, 0, 100, 0, 8, 3103006, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Reached WP8 - Set Phase 1'),
+(-@CGUID-0, 0, 2, 0, 38, 0, 100, 0, 2, 2, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Evade'),
+(-@CGUID-1, 0, 2, 0, 38, 0, 100, 0, 2, 2, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Evade'),
+(-@CGUID-2, 0, 2, 0, 38, 0, 100, 0, 2, 2, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Evade'),
+(-@CGUID-3, 0, 2, 0, 38, 0, 100, 0, 2, 2, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Evade'),
+(-@CGUID-4, 0, 2, 0, 38, 0, 100, 0, 2, 2, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Evade'),
+(-@CGUID-5, 0, 2, 0, 38, 0, 100, 0, 2, 2, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Evade'),
+(-@CGUID-0, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 28, 4366, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Remove Aura'),
+(-@CGUID-1, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 28, 4366, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Remove Aura'),
+(-@CGUID-2, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 28, 4366, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Remove Aura'),
+(-@CGUID-3, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 28, 4366, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Remove Aura'),
+(-@CGUID-4, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 28, 4366, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Remove Aura'),
+(-@CGUID-5, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 28, 4366, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Remove Aura'),
+(-@CGUID-0, 0, 4, 0, 38, 0, 100, 0, 3, 3, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Set Phase 2'),
+(-@CGUID-1, 0, 4, 0, 38, 0, 100, 0, 3, 3, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Set Phase 2'),
+(-@CGUID-2, 0, 4, 0, 38, 0, 100, 0, 3, 3, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Set Phase 2'),
+(-@CGUID-3, 0, 4, 0, 38, 0, 100, 0, 3, 3, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Set Phase 2'),
+(-@CGUID-4, 0, 4, 0, 38, 0, 100, 0, 3, 3, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Set Phase 2'),
+(-@CGUID-5, 0, 4, 0, 38, 0, 100, 0, 3, 3, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - On Data Set - Set Phase 2'),
+(-@CGUID-0, 0, 5, 0, 1, 1, 100, 0, 1000, 1000, 1000, 1000, 66, 0, 0, 0, 0, 0, 0, 19, 31029, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - OOC (Phase 1) - Face Possessed Vardmadra'),
+(-@CGUID-1, 0, 5, 0, 1, 1, 100, 0, 1000, 1000, 1000, 1000, 66, 0, 0, 0, 0, 0, 0, 19, 31029, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - OOC (Phase 1) - Face Possessed Vardmadra'),
+(-@CGUID-2, 0, 5, 0, 1, 1, 100, 0, 1000, 1000, 1000, 1000, 66, 0, 0, 0, 0, 0, 0, 19, 31029, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - OOC (Phase 1) - Face Possessed Vardmadra'),
+(-@CGUID-3, 0, 5, 0, 1, 1, 100, 0, 1000, 1000, 1000, 1000, 66, 0, 0, 0, 0, 0, 0, 19, 31029, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - OOC (Phase 1) - Face Possessed Vardmadra'),
+(-@CGUID-4, 0, 5, 0, 1, 1, 100, 0, 1000, 1000, 1000, 1000, 66, 0, 0, 0, 0, 0, 0, 19, 31029, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - OOC (Phase 1) - Face Possessed Vardmadra'),
+(-@CGUID-5, 0, 5, 0, 1, 1, 100, 0, 1000, 1000, 1000, 1000, 66, 0, 0, 0, 0, 0, 0, 19, 31029, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - OOC (Phase 1) - Face Possessed Vardmadra'),
+(-@CGUID-0, 0, 6, 0, 1, 2, 100, 0, 1000, 1000, 1000, 1000, 66, 0, 0, 0, 0, 0, 0, 19, 31083, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - OOC (Phase 2) - Face The Lich King'),
+(-@CGUID-1, 0, 6, 0, 1, 2, 100, 0, 1000, 1000, 1000, 1000, 66, 0, 0, 0, 0, 0, 0, 19, 31083, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - OOC (Phase 2) - Face The Lich King'),
+(-@CGUID-2, 0, 6, 0, 1, 2, 100, 0, 1000, 1000, 1000, 1000, 66, 0, 0, 0, 0, 0, 0, 19, 31083, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - OOC (Phase 2) - Face The Lich King'),
+(-@CGUID-3, 0, 6, 0, 1, 2, 100, 0, 1000, 1000, 1000, 1000, 66, 0, 0, 0, 0, 0, 0, 19, 31083, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - OOC (Phase 2) - Face The Lich King'),
+(-@CGUID-4, 0, 6, 0, 1, 2, 100, 0, 1000, 1000, 1000, 1000, 66, 0, 0, 0, 0, 0, 0, 19, 31083, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - OOC (Phase 2) - Face The Lich King'),
+(-@CGUID-5, 0, 6, 0, 1, 2, 100, 0, 1000, 1000, 1000, 1000, 66, 0, 0, 0, 0, 0, 0, 19, 31083, 0, 0, 0, 0, 0, 0, 'Balargarde Elite - OOC (Phase 2) - Face The Lich King');
+
+-- Texts
+DELETE FROM `creature_text` WHERE `entry` IN(31016,31029,31083);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES
+(31016, 1, 0, 'You dare to challenge me? You haven''t earned the right!', 14, 0, 100, 25, 0, 15633, 31597, 'Overthane Balargarde to Safirdrang'),
+(31016, 2, 0, 'Vardmadra?! Did the Lich King send you personally?', 14, 0, 100, 66, 0, 15634, 31599, 'Overthane Balargarde to Possessed Vardmadra'),
+(31016, 3, 0, 'Very well. I will dispatch these creatures. It is only an inconvenience. Prepare to die!', 14, 0, 100, 0, 0, 15635, 31600, 'Overthane Balargarde to Possessed Vardmadra'),
+(31016, 4, 0, 'Safirdrang, let them feel the chill of Icecrown!', 14, 0, 100, 0, 0, 15636, 31601, 'Overthane Balargarde to 0'),
+(31016, 5, 0, 'STOP! Kneel you fools, it''s the Lich King!', 14, 0, 100, 0, 0, 15637, 31627, 'Overthane Balargarde to The Lich King'),
+(31016, 6, 0, 'But, my lord...?', 14, 0, 100, 0, 0, 15638, 31635, 'Overthane Balargarde to The Lich King'),
+(31016, 7, 0, 'DIE DOGS!', 14, 0, 100, 0, 0, 15639, 31637, 'Overthane Balargarde to The Lich King'),
+(31029, 0, 0, 'He''s on his way!', 14, 0, 100, 457, 0, 15643, 31595, 'Possessed Vardmadra to Player'),
+(31029, 1, 0, 'Wrong, Balargarde. You WILL accept this challenge!', 14, 0, 100, 457, 0, 15644, 31598, 'Possessed Vardmadra to Overthane Balargarde'),
+(31029, 2, 0, 'My lord.', 14, 0, 100, 457, 0, 15645, 31631, 'Possessed Vardmadra to The Lich King'),
+(31029, 3, 0, 'But...!', 14, 0, 100, 0, 0, 15646, 31633, 'Possessed Vardmadra to The Lich King'),
+(31083, 0, 0, 'Honor guard stay where you are.', 14, 0, 100, 1, 0, 15600, 31628, 'The Lich King to 0'),
+(31083, 1, 0, 'Vardmadra. I''d wondered where you disappeared to. How is Iskalder?', 14, 0, 100, 6, 0, 15601, 31629, 'The Lich King to 0'),
+(31083, 2, 0, 'I see through your disguise, Lady Nightswood. YOU THINK THAT YOU CAN FOOL ME?!', 14, 0, 100, 5, 0, 15602, 31632, 'The Lich King to 0'),
+(31083, 3, 0, 'You may continue your combat, overthane.', 14, 0, 100, 25, 0, 15603, 31634, 'The Lich King to 0'),
+(31083, 4, 0, 'But nothing! Finish them! DO NOT FAIL ME, BALARGARDE!', 14, 0, 100, 5, 0, 15604, 31636, 'The Lich King to Overthane Balargarde'),
+(31083, 5, 0, 'You have bested one of my finest, but your efforts are for naught.', 14, 0, 100, 1, 0, 15605, 31693, 'The Lich King to 0'),
+(31083, 6, 0, 'The frozen heart of Icecrown awaits....', 14, 0, 100, 1, 0, 15606, 31695, 'The Lich King to 0');
+
+-- Waypoints
+DELETE FROM `waypoints` WHERE `entry` IN(31029,31050,3103001,3103002,3103003,3103004,3103005,3103006,31087,3105000,31083,3108300,3102900);
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(31029, 1, 7119.714 , 4305.82 , 883.7371, 'Possessed Vardmadra'),
+(31029, 2, 7119.045 , 4306.563 , 883.7371, 'Possessed Vardmadra'),
+(31029, 3, 7094.592 , 4326.246 , 879.7935, 'Possessed Vardmadra'),
+(31029, 4, 7094.592 , 4326.246 , 879.7935, 'Possessed Vardmadra'),
+(3102900, 1, 7094.592, 4326.246, 871.4232, 'Possessed Vardmadra (Path 2)'),
+(31087, 1, 7079.599, 4301.017, 874.3533, 'Lady Nightswood'),
+(31087, 2, 7082.374, 4283.685, 878.2528, 'Lady Nightswood'),
+(31087, 3, 7093.269, 4251.247, 855.1418, 'Lady Nightswood'),
+(31050, 1, 7097.518 ,4417.555 ,831.8486, 'Safirdrang'),
+(31050, 2, 7097.292 ,4416.581 ,831.8486, 'Safirdrang'),
+(31050, 3, 7097.876 ,4416.293 ,832.2352, 'Safirdrang'),
+(31050, 4, 7096.67 ,4412.85 ,892.0963, 'Safirdrang'),
+(31050, 5, 7083.72 ,4365.534 ,886.1511, 'Safirdrang'),
+(31050, 6, 7083.72 ,4365.534 ,886.1511, 'Safirdrang'),
+(3105000, 1, 7053.937, 4377.317, 901.5513, 'Safirdrang (Path 2)'),
+(3105000, 2, 7020.913, 4415.733, 938.7733, 'Safirdrang (Path 2)'),
+(3105000, 3, 7014.491, 4475.228, 933.1346, 'Safirdrang (Path 2)'),
+(3105000, 4, 7053.163, 4507.731, 899.1902, 'Safirdrang (Path 2)'),
+(3103001, 1, 7108.212 ,4429.457 ,837.8948, 'Balargarde Elite Path 1'),
+(3103001, 2, 7108.282 ,4428.459 ,837.8948, 'Balargarde Elite Path 1'),
+(3103001, 3, 7106.677 ,4418.644 ,890.2556, 'Balargarde Elite Path 1'),
+(3103001, 4, 7105.132 ,4316.933 ,890.2556, 'Balargarde Elite Path 1'),
+(3103001, 5, 7105.132 ,4316.933 ,890.2556, 'Balargarde Elite Path 1'),
+(3103002, 1, 7092.335 ,4432.937 ,836.562, 'Balargarde Elite Path 2'),
+(3103002, 2, 7092.213 ,4431.944 ,836.562, 'Balargarde Elite Path 2'),
+(3103002, 3, 7088.707 ,4422.627 ,890.4507, 'Balargarde Elite Path 2'),
+(3103002, 4, 7042.402 ,4334.195 ,890.4507, 'Balargarde Elite Path 2'),
+(3103002, 5, 7042.402 ,4334.195 ,890.4507, 'Balargarde Elite Path 2'),
+(3103003, 1, 7118.292 ,4433.163 ,837.6826, 'Balargarde Elite Path 3'),
+(3103003, 2, 7118.448 ,4432.175 ,837.6826, 'Balargarde Elite Path 3'),
+(3103003, 3, 7118.339 ,4415.652 ,891.2397, 'Balargarde Elite Path 3'),
+(3103003, 4, 7116.423 ,4360.689 ,891.2397, 'Balargarde Elite Path 3'),
+(3103003, 5, 7116.423 ,4360.689 ,891.2397, 'Balargarde Elite Path 3'),
+(3103004, 1, 7084.022 ,4439.456 ,834.9834, 'Balargarde Elite Path 4'),
+(3103004, 2, 7083.883 ,4438.466 ,834.9834, 'Balargarde Elite Path 4'),
+(3103004, 3, 7084.125 ,4439.286 ,835.0841, 'Balargarde Elite Path 4'),
+(3103004, 4, 7078.116 ,4422.103 ,891.0005, 'Balargarde Elite Path 4'),
+(3103004, 5, 7052.648 ,4376.112 ,891.0005, 'Balargarde Elite Path 4'),
+(3103004, 6, 7052.648 ,4376.112 ,891.0005, 'Balargarde Elite Path 4'),
+(3103005, 1, 7111.17 ,4446.118 ,838.3093, 'Balargarde Elite Path 5'),
+(3103005, 2, 7111.292 ,4445.125 ,838.3093, 'Balargarde Elite Path 5'),
+(3103005, 3, 7097.193 ,4415.753 ,886.4199, 'Balargarde Elite Path 5'),
+(3103005, 4, 7091.205 ,4393.473 ,886.4199, 'Balargarde Elite Path 5'),
+(3103005, 5, 7091.205 ,4393.473 ,886.4199, 'Balargarde Elite Path 5'),
+(3103006, 1, 7095.478 ,4449.356 ,836.9002, 'Balargarde Elite Path 6'),
+(3103006, 2, 7095.443 ,4448.357 ,836.9002, 'Balargarde Elite Path 6'),
+(3103006, 3, 7052.521 ,4434.108 ,838.8722, 'Balargarde Elite Path 6'),
+(3103006, 4, 7003.175 ,4398.929 ,844.0392, 'Balargarde Elite Path 6'),
+(3103006, 5, 6988.518 ,4335.11 ,856.9001, 'Balargarde Elite Path 6'),
+(3103006, 6, 7018.119 ,4279.629 ,875.7885, 'Balargarde Elite Path 6'),
+(3103006, 7, 7067.475 ,4300.513 ,892.5076, 'Balargarde Elite Path 6'),
+(3103006, 8, 7067.475 ,4300.513 ,892.5076, 'Balargarde Elite Path 6'),
+(31083, 1, 7092.936, 4343.906, 871.9753, 'The Lich King'),
+(31083, 2, 7094.104, 4331.222, 871.5023, 'The Lich King'),
+(31083, 3, 7092.936, 4343.906, 871.9331, 'The Lich King'),
+(31083, 4, 7088.768, 4385.59, 872.3639, 'The Lich King'),
+(3108300, 1, 7091.374, 4344.362, 871.9679, 'The Lich King Path 2');
diff --git a/sql/updates/world/2016_01_30_03_world.sql b/sql/updates/world/2016_01_30_03_world.sql
new file mode 100644
index 00000000000..06c4b0826c0
--- /dev/null
+++ b/sql/updates/world/2016_01_30_03_world.sql
@@ -0,0 +1,136 @@
+-- Pathing for Bloodcursed Naga Entry: 17713 'TDB FORMAT'
+SET @NPC := 63485;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-1928.789,`position_y`=-12869.43,`position_z`=86.3521 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-1928.789,-12869.43,86.3521,0,0,0,0,100,0), -- 09:15:24
+(@PATH,2,-1926.808,-12868.42,86.50182,0,0,0,0,100,0), -- 09:15:32
+(@PATH,3,-1915.362,-12863.29,87.48274,0,0,0,0,100,0), -- 09:15:37
+(@PATH,4,-1895.262,-12862.47,87.17763,0,0,0,0,100,0), -- 09:15:44
+(@PATH,5,-1888.151,-12870.06,85.72816,0,0,0,0,100,0), -- 09:15:50
+(@PATH,6,-1881.628,-12885.19,81.05202,0,0,0,0,100,0), -- 09:15:58
+(@PATH,7,-1882.931,-12895.07,76.1616,0,0,0,0,100,0), -- 09:16:03
+(@PATH,8,-1896.266,-12915.07,69.35283,0,0,0,0,100,0), -- 09:16:13
+(@PATH,9,-1908.279,-12924.68,66.72368,0,0,0,0,100,0), -- 09:16:19
+(@PATH,10,-1933.388,-12933.09,64.4604,0,0,0,0,100,0), -- 09:16:28
+(@PATH,11,-1947.921,-12933.25,61.58389,0,0,0,0,100,0), -- 09:16:36
+(@PATH,12,-1964.046,-12931.37,54.13368,0,0,0,0,100,0), -- 09:16:45
+(@PATH,13,-1985.971,-12921.06,46.1943,0,0,0,0,100,0), -- 09:16:54
+(@PATH,14,-2008.113,-12899.47,43.04699,0,0,0,0,100,0), -- 09:17:06
+(@PATH,15,-2009.894,-12861.36,40.86951,0,0,0,0,100,0), -- 09:17:15
+(@PATH,16,-2002.674,-12851.02,38.75832,0,0,0,0,100,0), -- 09:17:26
+(@PATH,17,-1982.862,-12829.53,35.24951,0,0,0,0,100,0), -- 09:17:38
+(@PATH,18,-1963.942,-12804.68,29.6003,0,0,0,0,100,0), -- 09:17:50
+(@PATH,19,-1947.879,-12792.53,25.92624,0,0,0,0,100,0), -- 09:18:00
+(@PATH,20,-1936.599,-12789.01,24.07749,0,0,0,0,100,0), -- 09:18:06
+(@PATH,21,-1922.057,-12789.15,21.28288,0,0,0,0,100,0), -- 09:18:15
+(@PATH,22,-1919.057,-12789.16,20.79777,0,0,0,0,100,0), -- 09:18:16
+(@PATH,23,-1910.856,-12787.78,18.40594,0,0,0,0,100,0), -- 09:18:17
+(@PATH,24,-1865.516,-12783.02,8.171058,0,0,0,0,100,0), -- 09:18:33
+(@PATH,25,-1828.088,-12780.68,5.281821,0,0,0,0,100,0), -- 09:18:47
+(@PATH,26,-1821.925,-12778.83,4.372193,0,0,0,0,100,0), -- 09:18:55
+(@PATH,27,-1808.465,-12775.22,3.311753,0,0,0,0,100,0), -- 09:19:11
+(@PATH,28,-1840.72,-12785.45,6.14157,0,0,0,0,100,0), -- 09:19:26
+(@PATH,29,-1857.858,-12783.72,7.100934,0,0,0,0,100,0), -- 09:19:32
+(@PATH,30,-1882.401,-12782.23,10.96099,0,0,0,0,100,0), -- 09:19:47
+(@PATH,31,-1918.945,-12788.79,20.91866,0,0,0,0,100,0), -- 09:20:03
+(@PATH,32,-1946.804,-12792.22,25.9647,0,0,0,0,100,0), -- 09:20:12
+(@PATH,33,-1957.95,-12798.83,28.51275,0,0,0,0,100,0), -- 09:20:18
+(@PATH,34,-1972.832,-12814.32,31.96672,0,0,0,0,100,0), -- 09:20:28
+(@PATH,35,-1998.71,-12847.28,38.17815,0,0,0,0,100,0), -- 09:20:41
+(@PATH,36,-2010.876,-12865.39,41.37553,0,0,0,0,100,0), -- 09:20:52
+(@PATH,37,-2008.604,-12898.32,42.78571,0,0,0,0,100,0), -- 09:21:03
+(@PATH,38,-1999.134,-12909.23,44.42824,0,0,0,0,100,0), -- 09:21:12
+(@PATH,39,-1977.069,-12925.9,48.62286,0,0,0,0,100,0), -- 09:21:25
+(@PATH,40,-1960.811,-12931.79,56.09935,0,0,0,0,100,0), -- 09:21:34
+(@PATH,41,-1938.755,-12933.6,63.95058,0,0,0,0,100,0), -- 09:21:43
+(@PATH,42,-1901.555,-12919.94,68.1657,0,0,0,0,100,0), -- 09:21:59
+(@PATH,43,-1892.329,-12910.31,70.69868,0,0,0,0,100,0), -- 09:22:05
+(@PATH,44,-1881.857,-12893.26,77.24239,0,0,0,0,100,0), -- 09:22:15
+(@PATH,45,-1882.775,-12878.57,83.94725,0,0,0,0,100,0), -- 09:22:21
+(@PATH,46,-1903.748,-12860.37,87.55596,0,0,0,0,100,0), -- 09:22:30
+(@PATH,47,-1921.45,-12865.49,86.99675,0,0,0,0,100,0), -- 09:22:34
+(@PATH,48,-1928.858,-12869.55,86.33754,0,0,0,0,100,0); -- 09:22:43
+-- 0x1C09E44240114C4000002500002C696C .go -1928.789 -12869.43 86.3521
+
+-- Pathing for Bloodcursed Naga Entry: 17713 'TDB FORMAT'
+SET @NPC := 63492;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-1796.121,`position_y`=-12771.99,`position_z`=2.181608 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-1796.121,-12771.99,2.181608,0,0,0,0,100,0), -- 09:11:36
+(@PATH,2,-1808.465,-12775.22,3.311753,0,0,0,0,100,0), -- 09:11:53
+(@PATH,3,-1840.747,-12785.32,6.340456,0,0,0,0,100,0), -- 09:12:08
+(@PATH,4,-1857.898,-12783.8,7.071639,0,0,0,0,100,0), -- 09:12:14
+(@PATH,5,-1882.401,-12782.29,10.8823,0,0,0,0,100,0), -- 09:12:29
+(@PATH,6,-1921.118,-12788.98,21.68076,0,0,0,0,100,0), -- 09:12:45
+(@PATH,7,-1946.973,-12792.21,25.87914,0,0,0,0,100,0), -- 09:12:55
+(@PATH,8,-1957.784,-12798.69,28.39876,0,0,0,0,100,0), -- 09:13:01
+(@PATH,9,-1972.893,-12814.4,31.85242,0,0,0,0,100,0), -- 09:13:10
+(@PATH,10,-1998.871,-12847.28,38.12544,0,0,0,0,100,0), -- 09:13:23
+(@PATH,11,-2009.722,-12860.75,40.77156,0,0,0,0,100,0), -- 09:13:34
+(@PATH,12,-2008.599,-12898.46,42.77578,0,0,0,0,100,0), -- 09:13:46
+(@PATH,13,-1998.956,-12909.28,44.34562,0,0,0,0,100,0), -- 09:13:55
+(@PATH,14,-1977.231,-12926.03,48.51125,0,0,0,0,100,0), -- 09:14:07
+(@PATH,15,-1960.969,-12931.87,56.10593,0,0,0,0,100,0), -- 09:14:15
+(@PATH,16,-1938.779,-12933.54,63.8186,0,0,0,0,100,0), -- 09:14:25
+(@PATH,17,-1913.007,-12927.43,66.26051,0,0,0,0,100,0), -- 09:14:34
+(@PATH,18,-1898.97,-12917.32,68.56851,0,0,0,0,100,0), -- 09:14:42
+(@PATH,19,-1893.777,-12912.74,70.14345,0,0,0,0,100,0), -- 09:14:47
+(@PATH,20,-1881.76,-12893.25,77.15878,0,0,0,0,100,0), -- 09:14:57
+(@PATH,21,-1882.529,-12878.56,83.82611,0,0,0,0,100,0), -- 09:15:03
+(@PATH,22,-1903.836,-12860.37,87.51022,0,0,0,0,100,0), -- 09:15:11
+(@PATH,23,-1921.361,-12865.68,87.0482,0,0,0,0,100,0), -- 09:15:17
+(@PATH,24,-1928.789,-12869.43,86.3521,0,0,0,0,100,0), -- 09:15:24
+(@PATH,25,-1926.808,-12868.42,86.50182,0,0,0,0,100,0), -- 09:15:32
+(@PATH,26,-1915.362,-12863.29,87.48274,0,0,0,0,100,0), -- 09:15:37
+(@PATH,27,-1895.262,-12862.47,87.17763,0,0,0,0,100,0), -- 09:15:44
+(@PATH,28,-1888.151,-12870.06,85.72816,0,0,0,0,100,0), -- 09:15:50
+(@PATH,29,-1881.628,-12885.19,81.05202,0,0,0,0,100,0), -- 09:15:58
+(@PATH,30,-1882.931,-12895.07,76.1616,0,0,0,0,100,0), -- 09:16:03
+(@PATH,31,-1896.266,-12915.07,69.35283,0,0,0,0,100,0), -- 09:16:13
+(@PATH,32,-1908.279,-12924.68,66.72368,0,0,0,0,100,0), -- 09:16:19
+(@PATH,33,-1933.388,-12933.09,64.4604,0,0,0,0,100,0), -- 09:16:28
+(@PATH,34,-1947.921,-12933.25,61.58389,0,0,0,0,100,0), -- 09:16:36
+(@PATH,35,-1964.046,-12931.37,54.13368,0,0,0,0,100,0), -- 09:16:45
+(@PATH,36,-1985.971,-12921.06,46.1943,0,0,0,0,100,0), -- 09:16:54
+(@PATH,37,-2008.113,-12899.47,43.04699,0,0,0,0,100,0), -- 09:17:06
+(@PATH,38,-2009.894,-12861.36,40.86951,0,0,0,0,100,0), -- 09:17:15
+(@PATH,39,-2002.674,-12851.02,38.75832,0,0,0,0,100,0), -- 09:17:26
+(@PATH,40,-1982.862,-12829.53,35.24951,0,0,0,0,100,0), -- 09:17:38
+(@PATH,41,-1963.942,-12804.68,29.6003,0,0,0,0,100,0), -- 09:17:50
+(@PATH,42,-1947.879,-12792.53,25.92624,0,0,0,0,100,0), -- 09:18:00
+(@PATH,43,-1936.599,-12789.01,24.07749,0,0,0,0,100,0), -- 09:18:06
+(@PATH,44,-1922.057,-12789.15,21.28288,0,0,0,0,100,0), -- 09:18:15
+(@PATH,45,-1919.057,-12789.16,20.79777,0,0,0,0,100,0), -- 09:18:16
+(@PATH,46,-1910.856,-12787.78,18.40594,0,0,0,0,100,0), -- 09:18:17
+(@PATH,47,-1870.516,-12782.52,8.421058,0,0,0,0,100,0), -- 09:18:33
+(@PATH,48,-1828.088,-12780.68,5.281821,0,0,0,0,100,0), -- 09:18:47
+(@PATH,49,-1821.925,-12778.83,4.372193,0,0,0,0,100,0), -- 09:18:55
+(@PATH,50,-1808.465,-12775.22,3.311753,0,0,0,0,100,0); -- 09:19:11
+-- 0x1C09E44240114C4000002500002C696C .go -1796.121 -12771.99 2.181608
+
+-- Bloodcursed Naga SAI
+SET @ENTRY := 17713;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,25,0,100,0,0,0,0,0,11,12544,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodcursed Naga - On Reset - Cast 'Frost Armor'");
+
+-- Pathing for Lord Xiz Entry: 17701 'TDB FORMAT'
+SET @NPC := 63448;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2226.604,`position_y`=-12321.21,`position_z`=57.54912 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2253.258,-12320.91,57.29495,0,0,0,0,100,0), -- 09:08:14
+(@PATH,2,-2214.95,-12321.52,57.30329,0,0,0,0,100,0); -- 09:08:29
+-- 0x1C09E4424011494000002500002C576E .go -2226.604 -12321.21 57.54912
diff --git a/sql/updates/world/2016_01_30_04_world.sql b/sql/updates/world/2016_01_30_04_world.sql
new file mode 100644
index 00000000000..b90e7b95810
--- /dev/null
+++ b/sql/updates/world/2016_01_30_04_world.sql
@@ -0,0 +1,11 @@
+-- Pathing for Mine Car Entry: 23289 'TDB FORMAT'
+SET @NPC := 143599;
+SET @PATH := @NPC * 10;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '40684');
+
+-- Pathing for Mine Car Entry: 23289 'TDB FORMAT'
+SET @NPC := 143600;
+SET @PATH := @NPC * 10;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '40684');
diff --git a/sql/updates/world/2016_01_30_05_world.sql b/sql/updates/world/2016_01_30_05_world.sql
new file mode 100644
index 00000000000..1e341506dfc
--- /dev/null
+++ b/sql/updates/world/2016_01_30_05_world.sql
@@ -0,0 +1,2 @@
+UPDATE `smart_scripts` SET `event_param1`=60600, `event_param2`=60600 WHERE `entryorguid`=3101600 AND `source_type`=9 AND `id`=8 AND `link`=0;
+UPDATE `smart_scripts` SET `action_param1`=2, `comment`='Overthane Balargarde <Master of Jotunheim> - On Data Set - Set Phase 2' WHERE `entryorguid`=31016 AND `source_type`=0 AND `id`=26 AND `link`=33;
diff --git a/sql/updates/world/2016_01_31_00_world.sql b/sql/updates/world/2016_01_31_00_world.sql
new file mode 100644
index 00000000000..f64d9182784
--- /dev/null
+++ b/sql/updates/world/2016_01_31_00_world.sql
@@ -0,0 +1,2 @@
+-- fix cyanigosa hitbox
+UPDATE `creature_model_info` SET `BoundingRadius`=0.2325, `CombatReach`=6.25 WHERE `DisplayID`=27340;
diff --git a/sql/updates/world/2016_02_02_00_world.sql b/sql/updates/world/2016_02_02_00_world.sql
new file mode 100644
index 00000000000..ce561af3a61
--- /dev/null
+++ b/sql/updates/world/2016_02_02_00_world.sql
@@ -0,0 +1,5 @@
+-- Transition some creatures to use new CREATURE_FLAGS_EXTRA_NO_PLAYER_DAMAGE_REQ
+-- 27685/27686/27531: Target creatures for Quest 12416 ("Heated Battle")
+-- 24051/24063: Target creatures for Quest 11243 ("If Valgarde Falls...")
+-- 28034/28035/28036: Targets for Quest 12508 ("Mopping Up")
+UPDATE `creature_template` SET `flags_extra`=(`flags_extra`|2097152) WHERE `entry` IN (27685,27686,27531,24051,24063,28034,28035,28036);
diff --git a/sql/updates/world/2016_02_02_01_world.sql b/sql/updates/world/2016_02_02_01_world.sql
new file mode 100644
index 00000000000..f1b181a29e3
--- /dev/null
+++ b/sql/updates/world/2016_02_02_01_world.sql
@@ -0,0 +1,4 @@
+-- new gossip_menu for NPC 3678 Disciple of Naralex:
+DELETE FROM `gossip_menu_option` WHERE `menu_id`= 201 AND `OptionBroadcastTextID`= 2662;
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`OptionBroadcastTextID`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`,`BoxBroadcastTextID`) VALUES
+(201, 0, 0, 'Let the event begin!', 2662, 1, 1, 0, 0, 0, 0, '', 0);
diff --git a/src/common/Utilities/Util.h b/src/common/Utilities/Util.h
index f72c1430370..1f3b78a8d56 100644
--- a/src/common/Utilities/Util.h
+++ b/src/common/Utilities/Util.h
@@ -27,6 +27,7 @@
#include <vector>
#include <list>
#include <map>
+#include <ctime>
// Searcher for map of structs
template<typename T, class S> struct Finder
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 69a0f684a84..808491495a9 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -2305,6 +2305,31 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
}
break;
}
+ case SMART_ACTION_RANDOM_SOUND:
+ {
+ std::vector<uint32> sounds;
+ std::copy_if(e.action.randomSound.sounds.begin(), e.action.randomSound.sounds.end(),
+ std::back_inserter(sounds), [](uint32 sound) { return sound != 0; });
+
+ bool onlySelf = e.action.randomSound.onlySelf != 0;
+
+ if (ObjectList* targets = GetTargets(e, unit))
+ {
+ for (WorldObject* const obj : *targets)
+ {
+ if (IsUnit(obj))
+ {
+ uint32 sound = Trinity::Containers::SelectRandomContainerElement(sounds);
+ obj->PlayDirectSound(sound, onlySelf ? obj->ToPlayer() : nullptr);
+ TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_RANDOM_SOUND: target: %s (%s), sound: %u, onlyself: %s",
+ obj->GetName().c_str(), obj->GetGUID().ToString().c_str(), sound, onlySelf ? "true" : "false");
+ }
+ }
+
+ delete targets;
+ break;
+ }
+ }
default:
TC_LOG_ERROR("sql.sql", "SmartScript::ProcessAction: Entry %d SourceType %u, Event %u, Unhandled Action type %u", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
break;
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index d56983924b4..977847e60c9 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -827,6 +827,21 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
if (e.action.randomEmote.emote6 && !IsEmoteValid(e, e.action.randomEmote.emote6))
return false;
break;
+ case SMART_ACTION_RANDOM_SOUND:
+ {
+ if (std::all_of(e.action.randomSound.sounds.begin(), e.action.randomSound.sounds.end(), [](uint32 sound) { return sound == 0; }))
+ {
+ TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry %d SourceType %u Event %u Action %u does not have any non-zero sound",
+ e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
+ return false;
+ }
+
+ for (uint32 sound : e.action.randomSound.sounds)
+ if (sound && !IsSoundValid(e, sound))
+ return false;
+
+ break;
+ }
case SMART_ACTION_CAST:
{
if (!IsSpellValid(e, e.action.cast.spell))
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index 91ee0a1d1e0..c0ea648462d 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -43,6 +43,16 @@ struct WayPoint
float z;
};
+enum eSmartAI
+{
+ SMART_EVENT_PARAM_COUNT = 4,
+ SMART_ACTION_PARAM_COUNT = 6,
+ SMART_SUMMON_COUNTER = 0xFFFFFF,
+ SMART_ESCORT_LAST_OOC_POINT = 0xFFFFFF,
+ SMART_RANDOM_POINT = 0xFFFFFE,
+ SMART_ESCORT_TARGETS = 0xFFFFFF
+};
+
enum SMART_EVENT_PHASE
{
SMART_EVENT_PHASE_ALWAYS = 0,
@@ -540,8 +550,9 @@ enum SMART_ACTION
SMART_ACTION_GAME_EVENT_START = 112, // GameEventId
SMART_ACTION_START_CLOSEST_WAYPOINT = 113, // wp1, wp2, wp3, wp4, wp5, wp6, wp7
SMART_ACTION_RISE_UP = 114, // distance
+ SMART_ACTION_RANDOM_SOUND = 115, // soundId1, soundId2, soundId3, soundId4, soundId5, onlySelf
- SMART_ACTION_END = 115
+ SMART_ACTION_END = 116
};
struct SmartAction
@@ -1017,6 +1028,12 @@ struct SmartAction
uint32 wp6;
} closestWaypointFromList;
+ struct
+ {
+ std::array<uint32, SMART_ACTION_PARAM_COUNT - 1> sounds;
+ uint32 onlySelf;
+ } randomSound;
+
//! Note for any new future actions
//! All parameters must have type uint32
@@ -1180,16 +1197,6 @@ struct SmartTarget
};
};
-enum eSmartAI
-{
- SMART_EVENT_PARAM_COUNT = 4,
- SMART_ACTION_PARAM_COUNT = 6,
- SMART_SUMMON_COUNTER = 0xFFFFFF,
- SMART_ESCORT_LAST_OOC_POINT = 0xFFFFFF,
- SMART_RANDOM_POINT = 0xFFFFFE,
- SMART_ESCORT_TARGETS = 0xFFFFFF
-};
-
enum SmartScriptType
{
SMART_SCRIPT_TYPE_CREATURE = 0, //done
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index 3ee1ba7db7b..d0b25971358 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -39,23 +39,24 @@ class WorldSession;
enum CreatureFlagsExtra
{
- CREATURE_FLAG_EXTRA_INSTANCE_BIND = 0x00000001, // creature kill bind instance with killer and killer's group
- CREATURE_FLAG_EXTRA_CIVILIAN = 0x00000002, // not aggro (ignore faction/reputation hostility)
- CREATURE_FLAG_EXTRA_NO_PARRY = 0x00000004, // creature can't parry
- CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN = 0x00000008, // creature can't counter-attack at parry
- CREATURE_FLAG_EXTRA_NO_BLOCK = 0x00000010, // creature can't block
- CREATURE_FLAG_EXTRA_NO_CRUSH = 0x00000020, // creature can't do crush attacks
- CREATURE_FLAG_EXTRA_NO_XP_AT_KILL = 0x00000040, // creature kill not provide XP
- CREATURE_FLAG_EXTRA_TRIGGER = 0x00000080, // trigger creature
- CREATURE_FLAG_EXTRA_NO_TAUNT = 0x00000100, // creature is immune to taunt auras and effect attack me
- CREATURE_FLAG_EXTRA_WORLDEVENT = 0x00004000, // custom flag for world event creatures (left room for merging)
- CREATURE_FLAG_EXTRA_GUARD = 0x00008000, // Creature is guard
- CREATURE_FLAG_EXTRA_NO_CRIT = 0x00020000, // creature can't do critical strikes
- CREATURE_FLAG_EXTRA_NO_SKILLGAIN = 0x00040000, // creature won't increase weapon skills
- CREATURE_FLAG_EXTRA_TAUNT_DIMINISH = 0x00080000, // Taunt is a subject to diminishing returns on this creautre
- CREATURE_FLAG_EXTRA_ALL_DIMINISH = 0x00100000, // Creature is subject to all diminishing returns as player are
- CREATURE_FLAG_EXTRA_DUNGEON_BOSS = 0x10000000, // creature is a dungeon boss (SET DYNAMICALLY, DO NOT ADD IN DB)
- CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING = 0x20000000 // creature ignore pathfinding
+ CREATURE_FLAG_EXTRA_INSTANCE_BIND = 0x00000001, // creature kill bind instance with killer and killer's group
+ CREATURE_FLAG_EXTRA_CIVILIAN = 0x00000002, // not aggro (ignore faction/reputation hostility)
+ CREATURE_FLAG_EXTRA_NO_PARRY = 0x00000004, // creature can't parry
+ CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN = 0x00000008, // creature can't counter-attack at parry
+ CREATURE_FLAG_EXTRA_NO_BLOCK = 0x00000010, // creature can't block
+ CREATURE_FLAG_EXTRA_NO_CRUSH = 0x00000020, // creature can't do crush attacks
+ CREATURE_FLAG_EXTRA_NO_XP_AT_KILL = 0x00000040, // creature kill not provide XP
+ CREATURE_FLAG_EXTRA_TRIGGER = 0x00000080, // trigger creature
+ CREATURE_FLAG_EXTRA_NO_TAUNT = 0x00000100, // creature is immune to taunt auras and effect attack me
+ CREATURE_FLAG_EXTRA_WORLDEVENT = 0x00004000, // custom flag for world event creatures (left room for merging)
+ CREATURE_FLAG_EXTRA_GUARD = 0x00008000, // Creature is guard
+ CREATURE_FLAG_EXTRA_NO_CRIT = 0x00020000, // creature can't do critical strikes
+ CREATURE_FLAG_EXTRA_NO_SKILLGAIN = 0x00040000, // creature won't increase weapon skills
+ CREATURE_FLAG_EXTRA_TAUNT_DIMINISH = 0x00080000, // Taunt is a subject to diminishing returns on this creautre
+ CREATURE_FLAG_EXTRA_ALL_DIMINISH = 0x00100000, // creature is subject to all diminishing returns as player are
+ CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ = 0x00200000, // creature does not need to take player damage for kill credit
+ CREATURE_FLAG_EXTRA_DUNGEON_BOSS = 0x10000000, // creature is a dungeon boss (SET DYNAMICALLY, DO NOT ADD IN DB)
+ CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING = 0x20000000 // creature ignore pathfinding
};
#define CREATURE_FLAG_EXTRA_DB_ALLOWED (CREATURE_FLAG_EXTRA_INSTANCE_BIND | CREATURE_FLAG_EXTRA_CIVILIAN | \
@@ -63,7 +64,7 @@ enum CreatureFlagsExtra
CREATURE_FLAG_EXTRA_NO_CRUSH | CREATURE_FLAG_EXTRA_NO_XP_AT_KILL | CREATURE_FLAG_EXTRA_TRIGGER | \
CREATURE_FLAG_EXTRA_NO_TAUNT | CREATURE_FLAG_EXTRA_WORLDEVENT | CREATURE_FLAG_EXTRA_NO_CRIT | \
CREATURE_FLAG_EXTRA_NO_SKILLGAIN | CREATURE_FLAG_EXTRA_TAUNT_DIMINISH | CREATURE_FLAG_EXTRA_ALL_DIMINISH | \
- CREATURE_FLAG_EXTRA_GUARD | CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING)
+ CREATURE_FLAG_EXTRA_GUARD | CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING | CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ)
#define CREATURE_REGEN_INTERVAL 2 * IN_MILLISECONDS
@@ -656,7 +657,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
void SetDisableReputationGain(bool disable) { DisableReputationGain = disable; }
bool IsReputationGainDisabled() const { return DisableReputationGain; }
- bool IsDamageEnoughForLootingAndReward() const { return m_PlayerDamageReq == 0; }
+ bool IsDamageEnoughForLootingAndReward() const { return (m_creatureInfo->flags_extra & CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ) || (m_PlayerDamageReq == 0); }
void LowerPlayerDamageReq(uint32 unDamage);
void ResetPlayerDamageReq() { m_PlayerDamageReq = GetHealth() / 2; }
uint32 m_PlayerDamageReq;
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 6f0b9f89e44..b030f42bef7 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -1353,7 +1353,15 @@ void GameObject::Use(Unit* user)
break;
}
- player->KillCreditGO(info->entry, GetGUID());
+ if (Group* group = player->GetGroup())
+ {
+ for (GroupReference const* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
+ if (Player* member = itr->GetSource())
+ if (member->IsAtGroupRewardDistance(this))
+ member->KillCreditGO(info->entry, GetGUID());
+ }
+ else
+ player->KillCreditGO(info->entry, GetGUID());
}
if (uint32 trapEntry = info->goober.linkedTrapId)
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index a826f841058..3aed5fde7b3 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -1692,6 +1692,9 @@ void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffe
RoundToInterval(auraAbsorbMod, 0.0f, 100.0f);
+ int32 absorbIgnoringDamage = CalculatePct(dmgInfo.GetDamage(), auraAbsorbMod);
+ dmgInfo.ModifyDamage(-absorbIgnoringDamage);
+
// We're going to call functions which can modify content of the list during iteration over it's elements
// Let's copy the list so we can prevent iterator invalidation
AuraEffectList vSchoolAbsorbCopy(victim->GetAuraEffectsByType(SPELL_AURA_SCHOOL_ABSORB));
@@ -1724,9 +1727,6 @@ void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffe
if (defaultPrevented)
continue;
- // Apply absorb mod auras
- AddPct(currentAbsorb, -auraAbsorbMod);
-
// absorb must be smaller than the damage itself
currentAbsorb = RoundToInterval(currentAbsorb, 0, int32(dmgInfo.GetDamage()));
@@ -1775,8 +1775,6 @@ void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffe
if (defaultPrevented)
continue;
- AddPct(currentAbsorb, -auraAbsorbMod);
-
// absorb must be smaller than the damage itself
currentAbsorb = RoundToInterval(currentAbsorb, 0, int32(dmgInfo.GetDamage()));
@@ -1805,6 +1803,8 @@ void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffe
}
}
+ dmgInfo.ModifyDamage(absorbIgnoringDamage);
+
// split damage auras - only when not damaging self
if (victim != this)
{
@@ -7099,9 +7099,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
float chance = 100.0f / procSpell->Effects[effIndex].ChainTarget;
if (!roll_chance_f(chance))
return false;
-
- // Remove cooldown (Chain Lightning - has Category Recovery time)
- GetSpellHistory()->ResetCooldown(spellId);
}
CastSpell(victim, spellId, true, castItem, triggeredByAura);
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index 8ebc71b0146..43159828a3c 100644
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -2274,6 +2274,8 @@ LootMethod Group::GetLootMethod() const
ObjectGuid Group::GetLooterGuid() const
{
+ if (GetLootMethod() == FREE_FOR_ALL)
+ return ObjectGuid::Empty;
return m_looterGuid;
}
diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h
index 52b80ce92ab..6f987b8adb3 100644
--- a/src/server/game/Miscellaneous/Formulas.h
+++ b/src/server/game/Miscellaneous/Formulas.h
@@ -185,6 +185,9 @@ namespace Trinity
}
xpMod *= isBattleGround ? sWorld->getRate(RATE_XP_BG_KILL) : sWorld->getRate(RATE_XP_KILL);
+ if (creature->m_PlayerDamageReq) // if players dealt less than 50% of the damage and were credited anyway (due to CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ), scale XP gained appropriately (linear scaling)
+ xpMod *= 1.0f - 2.0f*creature->m_PlayerDamageReq / creature->GetMaxHealth();
+
gain = uint32(gain * xpMod);
}
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index a4e7f61d83c..6a10d113553 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -1103,18 +1103,11 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
if (apply)
{
- // Remove cooldown of spells triggered on stance change - they may share cooldown with stance spell
if (spellId)
- {
- target->GetSpellHistory()->ResetCooldown(spellId);
target->CastSpell(target, spellId, true, NULL, this);
- }
if (spellId2)
- {
- target->GetSpellHistory()->ResetCooldown(spellId2);
target->CastSpell(target, spellId2, true, NULL, this);
- }
if (target->GetTypeId() == TYPEID_PLAYER)
{
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 84bff4a69d6..63fe148dd93 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -4701,7 +4701,7 @@ SpellCastResult Spell::CheckCast(bool strict)
return SPELL_FAILED_NOT_READY;
}
- if (!m_caster->GetSpellHistory()->IsReady(m_spellInfo, m_castItemEntry))
+ if (!m_caster->GetSpellHistory()->IsReady(m_spellInfo, m_castItemEntry, IsIgnoringCooldowns()))
{
if (m_triggeredByAuraSpell)
return SPELL_FAILED_DONT_REPORT;
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 40bd4e3c263..f961654f279 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -877,11 +877,6 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex)
values.AddSpellMod(SPELLVALUE_BASE_POINT2, damage);
}
- // Remove spell cooldown (not category) if spell triggering spell with cooldown and same category
- if (m_caster->GetTypeId() == TYPEID_PLAYER && m_spellInfo->CategoryRecoveryTime && spellInfo->CategoryRecoveryTime
- && m_spellInfo->GetCategory() == spellInfo->GetCategory())
- m_caster->GetSpellHistory()->ResetCooldown(spellInfo->Id);
-
// original caster guid only for GO cast
m_caster->CastSpell(targets, spellInfo, &values, TRIGGERED_FULL_MASK, NULL, NULL, m_originalCasterGUID);
}
@@ -930,11 +925,6 @@ void Spell::EffectTriggerMissileSpell(SpellEffIndex effIndex)
values.AddSpellMod(SPELLVALUE_BASE_POINT2, damage);
}
- // Remove spell cooldown (not category) if spell triggering spell with cooldown and same category
- if (m_caster->GetTypeId() == TYPEID_PLAYER && m_spellInfo->CategoryRecoveryTime && spellInfo->CategoryRecoveryTime
- && m_spellInfo->GetCategory() == spellInfo->GetCategory())
- m_caster->GetSpellHistory()->ResetCooldown(spellInfo->Id);
-
// original caster guid only for GO cast
m_caster->CastSpell(targets, spellInfo, &values, TRIGGERED_FULL_MASK, NULL, NULL, m_originalCasterGUID);
}
diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp
index ac08f681933..adf5fc47c77 100644
--- a/src/server/game/Spells/SpellHistory.cpp
+++ b/src/server/game/Spells/SpellHistory.cpp
@@ -182,13 +182,13 @@ void SpellHistory::HandleCooldowns(SpellInfo const* spellInfo, uint32 itemID, Sp
StartCooldown(spellInfo, itemID, spell);
}
-bool SpellHistory::IsReady(SpellInfo const* spellInfo, uint32 itemId /*= 0*/) const
+bool SpellHistory::IsReady(SpellInfo const* spellInfo, uint32 itemId /*= 0*/, bool ignoreCategoryCooldown /*= false*/) const
{
if (spellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE)
if (IsSchoolLocked(spellInfo->GetSchoolMask()))
return false;
- if (HasCooldown(spellInfo->Id, itemId))
+ if (HasCooldown(spellInfo->Id, itemId, ignoreCategoryCooldown))
return false;
return true;
@@ -465,11 +465,14 @@ void SpellHistory::ResetAllCooldowns()
_spellCooldowns.clear();
}
-bool SpellHistory::HasCooldown(SpellInfo const* spellInfo, uint32 itemId /*= 0*/) const
+bool SpellHistory::HasCooldown(SpellInfo const* spellInfo, uint32 itemId /*= 0*/, bool ignoreCategoryCooldown /*= false*/) const
{
if (_spellCooldowns.count(spellInfo->Id) != 0)
return true;
+ if (ignoreCategoryCooldown)
+ return false;
+
uint32 category = 0;
GetCooldownDurations(spellInfo, itemId, nullptr, &category, nullptr);
if (!category)
@@ -478,9 +481,9 @@ bool SpellHistory::HasCooldown(SpellInfo const* spellInfo, uint32 itemId /*= 0*/
return _categoryCooldowns.count(category) != 0;
}
-bool SpellHistory::HasCooldown(uint32 spellId, uint32 itemId /*= 0*/) const
+bool SpellHistory::HasCooldown(uint32 spellId, uint32 itemId /*= 0*/, bool ignoreCategoryCooldown /*= false*/) const
{
- return HasCooldown(sSpellMgr->EnsureSpellInfo(spellId), itemId);
+ return HasCooldown(sSpellMgr->EnsureSpellInfo(spellId), itemId, ignoreCategoryCooldown);
}
uint32 SpellHistory::GetRemainingCooldown(SpellInfo const* spellInfo) const
diff --git a/src/server/game/Spells/SpellHistory.h b/src/server/game/Spells/SpellHistory.h
index 00c790a670d..f0a53fe130d 100644
--- a/src/server/game/Spells/SpellHistory.h
+++ b/src/server/game/Spells/SpellHistory.h
@@ -62,7 +62,7 @@ public:
void HandleCooldowns(SpellInfo const* spellInfo, Item const* item, Spell* spell = nullptr);
void HandleCooldowns(SpellInfo const* spellInfo, uint32 itemID, Spell* spell = nullptr);
- bool IsReady(SpellInfo const* spellInfo, uint32 itemId = 0) const;
+ bool IsReady(SpellInfo const* spellInfo, uint32 itemId = 0, bool ignoreCategoryCooldown = false) const;
template<class OwnerType>
void WritePacket(WorldPacket& packet) const;
@@ -105,8 +105,8 @@ public:
}
void ResetAllCooldowns();
- bool HasCooldown(SpellInfo const* spellInfo, uint32 itemId = 0) const;
- bool HasCooldown(uint32 spellId, uint32 itemId = 0) const;
+ bool HasCooldown(SpellInfo const* spellInfo, uint32 itemId = 0, bool ignoreCategoryCooldown = false) const;
+ bool HasCooldown(uint32 spellId, uint32 itemId = 0, bool ignoreCategoryCooldown = false) const;
uint32 GetRemainingCooldown(SpellInfo const* spellInfo) const;
// School lockouts
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index e0b9bf53b63..ff8fc4539ff 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -2944,6 +2944,7 @@ void SpellMgr::LoadSpellInfoCorrections()
case 53096: // Quetz'lun's Judgment
case 70743: // AoD Special
case 70614: // AoD Special - Vegard
+ case 4020: // Safirdrang's Chill
spellInfo->MaxAffectedTargets = 1;
break;
case 42436: // Drink! (Brewfest)
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index daf4fe5866a..7580e9a07d3 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -43,7 +43,7 @@ struct EnumName
#define CREATE_NAMED_ENUM(VALUE) { VALUE, STRINGIZE(VALUE) }
#define NPCFLAG_COUNT 24
-#define FLAGS_EXTRA_COUNT 16
+#define FLAGS_EXTRA_COUNT 18
EnumName<NPCFlags, int32> const npcFlagTexts[NPCFLAG_COUNT] =
{
@@ -162,7 +162,9 @@ EnumName<CreatureFlagsExtra> const flagsExtra[FLAGS_EXTRA_COUNT] =
CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_SKILLGAIN),
CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_TAUNT_DIMINISH),
CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_ALL_DIMINISH),
- CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_DUNGEON_BOSS)
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_DUNGEON_BOSS),
+ CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING)
};
class npc_commandscript : public CommandScript
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h
index 39c9d9a79a7..9fce132ea7e 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h
@@ -59,7 +59,7 @@ enum CreatureIds
enum GameObjectIds
{
GO_BLACK_DRAGON_EGG = 177807,
- GO_BOSSGATE01 = 175946,
+ GO_PORTCULLIS = 176965,
GO_DRAKE_RIDER_PORTCULLIS = 175185,
GO_ALTERAC_VALLEY_GATE = 180424,
GO_GATE = 185483,
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp
index 83b2b45851c..a4241b16f8d 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp
@@ -22,7 +22,7 @@
DoorData const doorData[] =
{
- { GO_BOSSGATE01, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_PASSAGE },
+ { GO_PORTCULLIS, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_PASSAGE },
{ GO_DRAKE_RIDER_PORTCULLIS, DATA_VAELASTRAZ_THE_CORRUPT, DOOR_TYPE_PASSAGE },
{ GO_ALTERAC_VALLEY_GATE, DATA_BROODLORD_LASHLAYER, DOOR_TYPE_PASSAGE },
{ GO_GATE, DATA_FIREMAW, DOOR_TYPE_PASSAGE },
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
index 80391ab2873..6714b243765 100644
--- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
+++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
@@ -61,6 +61,8 @@ class instance_deadmines : public InstanceMapScript
SetHeaders(DataHeader);
State = CANNON_NOT_USED;
+ CannonBlast_Timer = 0;
+ PiratesDelay_Timer = 0;
}
ObjectGuid FactoryDoorGUID;
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp
index 622c8f0de01..447dbcd67f9 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp
@@ -132,7 +132,10 @@ public:
## at_map_chamber
######*/
-#define QUEST_HIDDEN_CHAMBER 2240
+enum MapChamber
+{
+ QUEST_HIDDEN_CHAMBER = 2240
+};
class AreaTrigger_at_map_chamber : public AreaTriggerScript
{
diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
index 43143748661..c0b4e06cfff 100644
--- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
@@ -317,59 +317,6 @@ public:
};
/*######
-## npc_parqual_fintallas
-######*/
-
-enum ParqualFintallas
-{
- SPELL_MARK_OF_SHAME = 6767
-};
-
-#define GOSSIP_HPF1 "Gul'dan"
-#define GOSSIP_HPF2 "Kel'Thuzad"
-#define GOSSIP_HPF3 "Ner'zhul"
-
-class npc_parqual_fintallas : public CreatureScript
-{
-public:
- npc_parqual_fintallas() : CreatureScript("npc_parqual_fintallas") { }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- player->PlayerTalkClass->ClearMenus();
- if (action == GOSSIP_ACTION_INFO_DEF+1)
- {
- player->CLOSE_GOSSIP_MENU();
- creature->CastSpell(player, SPELL_MARK_OF_SHAME, false);
- }
- if (action == GOSSIP_ACTION_INFO_DEF+2)
- {
- player->CLOSE_GOSSIP_MENU();
- player->AreaExploredOrEventHappens(6628);
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
-
- if (player->GetQuestStatus(6628) == QUEST_STATUS_INCOMPLETE && !player->HasAura(SPELL_MARK_OF_SHAME))
- {
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HPF1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HPF2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HPF3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
- player->SEND_GOSSIP_MENU(5822, creature->GetGUID());
- }
- else
- player->SEND_GOSSIP_MENU(5821, creature->GetGUID());
-
- return true;
- }
-};
-
-/*######
## AddSC
######*/
@@ -377,5 +324,4 @@ void AddSC_undercity()
{
new npc_lady_sylvanas_windrunner();
new npc_highborne_lamenter();
- new npc_parqual_fintallas();
}
diff --git a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp
index 6cf86c3069f..b1a00f35bb5 100644
--- a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp
@@ -41,12 +41,23 @@ EndContentData */
## npcs_dithers_and_arbington
######*/
-#define GOSSIP_HDA1 "What does the Felstone Field Cauldron need?"
-#define GOSSIP_HDA2 "What does the Dalson's Tears Cauldron need?"
-#define GOSSIP_HDA3 "What does the Writhing Haunt Cauldron need?"
-#define GOSSIP_HDA4 "What does the Gahrron's Withering Cauldron need?"
-
-#define GOSSIP_SDA1 "Thanks, i need a Vitreous Focuser"
+enum DithersAndArbington
+{
+ GOSSIP_ITEM_ID_FELSTONE_FIELD = 0,
+ GOSSIP_ITEM_ID_DALSON_S_TEARS = 1,
+ GOSSIP_ITEM_ID_WRITHING_HAUNT = 2,
+ GOSSIP_ITEM_ID_GAHRRON_S_WITH = 3,
+ GOSSIP_MENU_ID_LETS_GET_TO_WORK = 3223,
+ GOSSIP_MENU_ID_VITREOUS_FOCUSER = 3229,
+ NPC_TEXT_OSSEOUS_AGITATORS = 3980,
+ NPC_TEXT_SOMATIC_INTENSIFIERS_1 = 3981,
+ NPC_TEXT_SOMATIC_INTENSIFIERS_2 = 3982,
+ NPC_TEXT_ECTOPLASMIC_RESONATORS = 3983,
+ NPC_TEXT_LET_S_GET_TO_WORK = 3985,
+ QUEST_MISSION_ACCOMPLISHED_H = 5237,
+ QUEST_MISSION_ACCOMPLISHED_A = 5238,
+ CREATE_ITEM_VITREOUS_FOCUSER = 17529
+};
class npcs_dithers_and_arbington : public CreatureScript
{
@@ -62,24 +73,24 @@ public:
player->GetSession()->SendListInventory(creature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+1:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SDA1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
- player->SEND_GOSSIP_MENU(3980, creature->GetGUID());
+ player->ADD_GOSSIP_ITEM_DB(GOSSIP_MENU_ID_VITREOUS_FOCUSER, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
+ player->SEND_GOSSIP_MENU(NPC_TEXT_OSSEOUS_AGITATORS, creature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SDA1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
- player->SEND_GOSSIP_MENU(3981, creature->GetGUID());
+ player->ADD_GOSSIP_ITEM_DB(GOSSIP_MENU_ID_VITREOUS_FOCUSER, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
+ player->SEND_GOSSIP_MENU(NPC_TEXT_SOMATIC_INTENSIFIERS_1, creature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+3:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SDA1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
- player->SEND_GOSSIP_MENU(3982, creature->GetGUID());
+ player->ADD_GOSSIP_ITEM_DB(GOSSIP_MENU_ID_VITREOUS_FOCUSER, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
+ player->SEND_GOSSIP_MENU(NPC_TEXT_SOMATIC_INTENSIFIERS_2, creature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+4:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SDA1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
- player->SEND_GOSSIP_MENU(3983, creature->GetGUID());
+ player->ADD_GOSSIP_ITEM_DB(GOSSIP_MENU_ID_VITREOUS_FOCUSER, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
+ player->SEND_GOSSIP_MENU(NPC_TEXT_ECTOPLASMIC_RESONATORS, creature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+5:
player->CLOSE_GOSSIP_MENU();
- creature->CastSpell(player, 17529, false);
+ creature->CastSpell(player, CREATE_ITEM_VITREOUS_FOCUSER, false);
break;
}
return true;
@@ -93,13 +104,13 @@ public:
if (creature->IsVendor())
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
- if (player->GetQuestRewardStatus(5237) || player->GetQuestRewardStatus(5238))
+ if (player->GetQuestRewardStatus(QUEST_MISSION_ACCOMPLISHED_H) || player->GetQuestRewardStatus(QUEST_MISSION_ACCOMPLISHED_A))
{
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HDA1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HDA2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HDA3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HDA4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
- player->SEND_GOSSIP_MENU(3985, creature->GetGUID());
+ player->ADD_GOSSIP_ITEM_DB(GOSSIP_MENU_ID_LETS_GET_TO_WORK, GOSSIP_ITEM_ID_FELSTONE_FIELD, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->ADD_GOSSIP_ITEM_DB(GOSSIP_MENU_ID_LETS_GET_TO_WORK, GOSSIP_ITEM_ID_DALSON_S_TEARS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
+ player->ADD_GOSSIP_ITEM_DB(GOSSIP_MENU_ID_LETS_GET_TO_WORK, GOSSIP_ITEM_ID_WRITHING_HAUNT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
+ player->ADD_GOSSIP_ITEM_DB(GOSSIP_MENU_ID_LETS_GET_TO_WORK, GOSSIP_ITEM_ID_GAHRRON_S_WITH, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
+ player->SEND_GOSSIP_MENU(NPC_TEXT_LET_S_GET_TO_WORK, creature->GetGUID());
}
else
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
diff --git a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
index 63c56e29414..29a754d5895 100644
--- a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
+++ b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
@@ -58,6 +58,10 @@ enum Enums
SAY_FAREWELL = 5,
SAY_ATTACKED = 11,
+ GOSSIP_OPTION_LET_EVENT_BEGIN = 201,
+ NPC_TEXT_NARALEX_SLEEPS_AGAIN = 698,
+ NPC_TEXT_FANGLORDS_ARE_DEAD = 699,
+
SPELL_MARK_OF_THE_WILD_RANK_2 = 5232,
SPELL_SERPENTINE_CLEANSING = 6270,
SPELL_NARALEXS_AWAKENING = 6271,
@@ -70,10 +74,6 @@ enum Enums
NPC_MUTANUS_THE_DEVOURER = 3654,
};
-#define GOSSIP_ID_START_1 698 //Naralex sleeps again!
-#define GOSSIP_ID_START_2 699 //The fanglords are dead!
-#define GOSSIP_ITEM_NARALEX "Let the event begin!"
-
class npc_disciple_of_naralex : public CreatureScript
{
public:
@@ -116,8 +116,8 @@ public:
if ((instance->GetData(TYPE_LORD_COBRAHN) == DONE) && (instance->GetData(TYPE_LORD_PYTHAS) == DONE) &&
(instance->GetData(TYPE_LADY_ANACONDRA) == DONE) && (instance->GetData(TYPE_LORD_SERPENTIS) == DONE))
{
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_NARALEX, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- player->SEND_GOSSIP_MENU(GOSSIP_ID_START_2, creature->GetGUID());
+ player->ADD_GOSSIP_ITEM_DB(GOSSIP_OPTION_LET_EVENT_BEGIN, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ player->SEND_GOSSIP_MENU(NPC_TEXT_FANGLORDS_ARE_DEAD, creature->GetGUID());
if (!instance->GetData(TYPE_NARALEX_YELLED))
{
@@ -127,7 +127,7 @@ public:
}
else
{
- player->SEND_GOSSIP_MENU(GOSSIP_ID_START_1, creature->GetGUID());
+ player->SEND_GOSSIP_MENU(NPC_TEXT_NARALEX_SLEEPS_AGAIN, creature->GetGUID());
}
}
return true;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
index f59701b9c25..b8e7dcc91d5 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
@@ -1222,6 +1222,7 @@ class npc_kinetic_bomb : public CreatureScript
_x = 0.f;
_y = 0.f;
_groundZ = 0.f;
+ me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);
}
void Reset() override
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
index 869a3ec3921..a7a89f44d81 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
@@ -67,7 +67,8 @@ enum Actions
enum HorsemenData
{
- DATA_MOVEMENT_FINISHED = DATA_HORSEMEN_CHECK_ACHIEVEMENT_CREDIT + 1, // make sure we don't conflict with the one from naxxramas.h
+ DATA_HORSEMEN_IS_TIMED_KILL = Data::DATA_HORSEMEN_CHECK_ACHIEVEMENT_CREDIT, // inherit from naxxramas.h - this needs to be the first entry to ensure that there are no conflicts
+ DATA_MOVEMENT_FINISHED,
DATA_DEATH_TIME
};
@@ -130,7 +131,7 @@ struct boss_four_horsemen_baseAI : public BossAI
return _myMovementFinished ? 1 : 0;
case DATA_DEATH_TIME:
return _timeDied;
- case DATA_HORSEMEN_CHECK_ACHIEVEMENT_CREDIT:
+ case DATA_HORSEMEN_IS_TIMED_KILL:
{
uint32 minTime = 0, maxTime = 0;
for (Horseman boss : horsemen)
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
index b72bcbecdac..86a4a9caf3a 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
@@ -110,30 +110,24 @@ class boss_ingvar_the_plunderer : public CreatureScript
{
if (me->GetEntry() != NPC_INGVAR)
me->UpdateEntry(NPC_INGVAR);
-
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
_Reset();
- events.SetPhase(PHASE_HUMAN);
-
- events.ScheduleEvent(EVENT_CLEAVE, urand(6, 12)*IN_MILLISECONDS, 0, PHASE_HUMAN);
- events.ScheduleEvent(EVENT_STAGGERING_ROAR, urand(18, 21)*IN_MILLISECONDS, 0, PHASE_HUMAN);
- events.ScheduleEvent(EVENT_ENRAGE, urand(7, 14)*IN_MILLISECONDS, 0, PHASE_HUMAN);
- events.ScheduleEvent(EVENT_SMASH, urand(12, 17)*IN_MILLISECONDS, 0, PHASE_HUMAN);
}
void DamageTaken(Unit* /*doneBy*/, uint32& damage) override
{
if (damage >= me->GetHealth() && events.IsInPhase(PHASE_HUMAN))
{
+ events.SetPhase(PHASE_EVENT);
+ events.ScheduleEvent(EVENT_SUMMON_BANSHEE, 3 * IN_MILLISECONDS, 0, PHASE_EVENT);
+
me->RemoveAllAuras();
+ me->StopMoving();
DoCast(me, SPELL_INGVAR_FEIGN_DEATH, true);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
- events.SetPhase(PHASE_EVENT);
- events.ScheduleEvent(EVENT_SUMMON_BANSHEE, 3 * IN_MILLISECONDS, 0, PHASE_EVENT);
-
Talk(SAY_DEATH);
}
@@ -152,13 +146,28 @@ class boss_ingvar_the_plunderer : public CreatureScript
me->RemoveAura(SPELL_INGVAR_FEIGN_DEATH);
DoCast(me, SPELL_INGVAR_TRANSFORM, true);
me->UpdateEntry(NPC_INGVAR_UNDEAD);
- events.ScheduleEvent(EVENT_JUST_TRANSFORMED, 2 * IN_MILLISECONDS, 0, PHASE_EVENT);
+ events.ScheduleEvent(EVENT_JUST_TRANSFORMED, IN_MILLISECONDS / 2, 0, PHASE_EVENT);
}
void EnterCombat(Unit* /*who*/) override
{
+ if (events.IsInPhase(PHASE_EVENT) || events.IsInPhase(PHASE_UNDEAD)) // ingvar gets multiple EnterCombat calls
+ return;
_EnterCombat();
+
Talk(SAY_AGGRO);
+ events.SetPhase(PHASE_HUMAN);
+ events.ScheduleEvent(EVENT_CLEAVE, urand(6, 12)*IN_MILLISECONDS, 0, PHASE_HUMAN);
+ events.ScheduleEvent(EVENT_STAGGERING_ROAR, urand(18, 21)*IN_MILLISECONDS, 0, PHASE_HUMAN);
+ events.ScheduleEvent(EVENT_ENRAGE, urand(7, 14)*IN_MILLISECONDS, 0, PHASE_HUMAN);
+ events.ScheduleEvent(EVENT_SMASH, urand(12, 17)*IN_MILLISECONDS, 0, PHASE_HUMAN);
+ }
+
+ void AttackStart(Unit* who) override
+ {
+ if (events.IsInPhase(PHASE_EVENT)) // prevent ingvar from beginning to attack/chase during transition
+ return;
+ BossAI::AttackStart(who);
}
void JustDied(Unit* /*killer*/) override
@@ -171,7 +180,7 @@ class boss_ingvar_the_plunderer : public CreatureScript
{
events.SetPhase(PHASE_UNDEAD);
events.ScheduleEvent(EVENT_DARK_SMASH, urand(14, 18)*IN_MILLISECONDS, 0, PHASE_UNDEAD);
- events.ScheduleEvent(EVENT_DREADFUL_ROAR, urand(18, 22)*IN_MILLISECONDS, 0, PHASE_UNDEAD);
+ events.ScheduleEvent(EVENT_DREADFUL_ROAR, 0, 0, PHASE_UNDEAD);
events.ScheduleEvent(EVENT_WOE_STRIKE, urand(10, 14)*IN_MILLISECONDS, 0, PHASE_UNDEAD);
events.ScheduleEvent(EVENT_SHADOW_AXE, 30*IN_MILLISECONDS, 0, PHASE_UNDEAD);
}
@@ -214,9 +223,17 @@ class boss_ingvar_the_plunderer : public CreatureScript
events.ScheduleEvent(EVENT_SMASH, urand(12, 16)*IN_MILLISECONDS, 0, PHASE_HUMAN);
break;
case EVENT_JUST_TRANSFORMED:
+ ScheduleSecondPhase();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ if (Unit* target = me->getThreatManager().getHostilTarget())
+ AttackStart(target);
+ else
+ {
+ EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ return;
+ }
+ Talk(SAY_AGGRO);
DoZoneInCombat();
- ScheduleSecondPhase();
return;
case EVENT_SUMMON_BANSHEE:
DoCast(me, SPELL_SUMMON_BANSHEE);
diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp
index fee47aa1fa2..37584bda2ae 100644
--- a/src/server/scripts/Pet/pet_mage.cpp
+++ b/src/server/scripts/Pet/pet_mage.cpp
@@ -178,6 +178,9 @@ class npc_pet_mage_mirror_image : public CreatureScript
void UpdateAI(uint32 diff) override
{
Unit* owner = me->GetCharmerOrOwner();
+ if (!owner)
+ return;
+
Unit* target = owner->getAttackerForHelper();
events.Update(diff);
@@ -192,9 +195,6 @@ class npc_pet_mage_mirror_image : public CreatureScript
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- if (!owner)
- return;
-
// assign target if image doesnt have any or the target is not actual
if (!target || me->GetVictim() != target)
{
diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp
index 13e7697910b..8bd4b3eb070 100644
--- a/src/server/scripts/Spells/spell_paladin.cpp
+++ b/src/server/scripts/Spells/spell_paladin.cpp
@@ -1195,7 +1195,7 @@ class spell_pal_light_s_beacon : public SpellScriptLoader
if (!procSpell)
return;
- uint32 healSpellId = procSpell->IsRankOf(sSpellMgr->GetSpellInfo(SPELL_PALADIN_HOLY_LIGHT)) ? SPELL_PALADIN_BEACON_OF_LIGHT_HEAL_1 : SPELL_PALADIN_BEACON_OF_LIGHT_HEAL_3;
+ uint32 healSpellId = procSpell->IsRankOf(sSpellMgr->EnsureSpellInfo(SPELL_PALADIN_HOLY_LIGHT)) ? SPELL_PALADIN_BEACON_OF_LIGHT_HEAL_1 : SPELL_PALADIN_BEACON_OF_LIGHT_HEAL_3;
uint32 heal = CalculatePct(eventInfo.GetHealInfo()->GetHeal(), aurEff->GetAmount());
Unit* beaconTarget = GetCaster();
diff --git a/src/server/scripts/World/duel_reset.cpp b/src/server/scripts/World/duel_reset.cpp
index c5b53368bc8..3c46255a1bf 100644
--- a/src/server/scripts/World/duel_reset.cpp
+++ b/src/server/scripts/World/duel_reset.cpp
@@ -34,9 +34,8 @@ class DuelResetScript : public PlayerScript
player1->GetSpellHistory()->SaveCooldownStateBeforeDuel();
player2->GetSpellHistory()->SaveCooldownStateBeforeDuel();
-
- ResetSpellCooldowns(player1);
- ResetSpellCooldowns(player2);
+ ResetSpellCooldowns(player1, true);
+ ResetSpellCooldowns(player2, true);
}
// Health and mana reset
@@ -73,9 +72,8 @@ class DuelResetScript : public PlayerScript
// Cooldown restore
if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS))
{
-
- ResetSpellCooldowns(winner);
- ResetSpellCooldowns(loser);
+ ResetSpellCooldowns(winner, false);
+ ResetSpellCooldowns(loser, false);
winner->GetSpellHistory()->RestoreCooldownStateAfterDuel();
loser->GetSpellHistory()->RestoreCooldownStateAfterDuel();
@@ -98,14 +96,35 @@ class DuelResetScript : public PlayerScript
}
}
- static void ResetSpellCooldowns(Player* player)
+ static void ResetSpellCooldowns(Player* player, bool onStartDuel)
{
- // remove cooldowns on spells that have < 10 min CD and has no onHold
- player->GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool
+ if (onStartDuel)
{
- SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first);
- return spellInfo->RecoveryTime < 10 * MINUTE * IN_MILLISECONDS && spellInfo->CategoryRecoveryTime < 10 * MINUTE * IN_MILLISECONDS && !itr->second.OnHold;
- }, true);
+ // remove cooldowns on spells that have < 10 min CD > 30 sec and has no onHold
+ player->GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool
+ {
+ SpellHistory::Clock::time_point now = SpellHistory::Clock::now();
+ uint32 cooldownDuration = itr->second.CooldownEnd > now ? std::chrono::duration_cast<std::chrono::milliseconds>(itr->second.CooldownEnd - now).count() : 0;
+ SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first);
+ return spellInfo->RecoveryTime < 10 * MINUTE * IN_MILLISECONDS
+ && spellInfo->CategoryRecoveryTime < 10 * MINUTE * IN_MILLISECONDS
+ && !itr->second.OnHold
+ && cooldownDuration > 0
+ && ( spellInfo->RecoveryTime - cooldownDuration ) > (MINUTE / 2) * IN_MILLISECONDS
+ && ( spellInfo->CategoryRecoveryTime - cooldownDuration ) > (MINUTE / 2) * IN_MILLISECONDS;
+ }, true);
+ }
+ else
+ {
+ // remove cooldowns on spells that have < 10 min CD and has no onHold
+ player->GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool
+ {
+ SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first);
+ return spellInfo->RecoveryTime < 10 * MINUTE * IN_MILLISECONDS
+ && spellInfo->CategoryRecoveryTime < 10 * MINUTE * IN_MILLISECONDS
+ && !itr->second.OnHold;
+ }, true);
+ }
// pet cooldowns
if (Pet* pet = player->GetPet())
diff --git a/src/server/scripts/World/npc_professions.cpp b/src/server/scripts/World/npc_professions.cpp
index 4dca55d562d..867ebafe32b 100644
--- a/src/server/scripts/World/npc_professions.cpp
+++ b/src/server/scripts/World/npc_professions.cpp
@@ -18,27 +18,26 @@
/* ScriptData
SDName: Npc_Professions
-SD%Complete: 80
-SDComment: Provides learn/unlearn/relearn-options for professions. Not supported: Unlearn engineering, re-learn engineering, re-learn leatherworking.
-SDCategory: NPCs
+SD%Complete: 100
+SDComment: Provides learn/unlearn/relearn-options for professions.
+SDCategory: NPCs/GOBs
EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
+#include "GameObjectAI.h"
#include "Player.h"
#include "SpellInfo.h"
#include "WorldSession.h"
/*
A few notes for future developement:
-- A full implementation of gossip for GO's is required. They must have the same scripting capabilities as creatures. Basically,
-there is no difference here (except that default text is chosen with `gameobject_template`.`data3` (for GO type2, different dataN for a few others)
- It's possible blacksmithing still require some tweaks and adjustments due to the way we _have_ to use reputation.
*/
/*###
-# to be removed from here (->ncp_text). This is data for database projects.
+# to be removed from here (->npc_text). This is data for database projects.
###*/
#define TALK_MUST_UNLEARN_WEAPON "You must forget your weapon type specialty before I can help you. Go to Everlook in Winterspring and seek help there."
@@ -153,6 +152,9 @@ enum ProfessionSpells
S_LEARN_GOBLIN = 20221,
S_LEARN_GNOMISH = 20220,
+ S_UNLEARN_GOBLIN = 68334,
+ S_UNLEARN_GNOMISH = 68333,
+
S_SPELLFIRE = 26797,
S_MOONCLOTH = 26798,
S_SHADOWEAVE = 26801,
@@ -376,6 +378,27 @@ void ProfessionUnlearnSpells(Player* player, uint32 type)
player->RemoveSpell(36075); // Wildfeather Leggings
player->RemoveSpell(36078); // Living Crystal Breastplate
break;
+ case S_UNLEARN_GOBLIN: // S_UNLEARN_GOBLIN
+ player->RemoveSpell(30565); // Foreman's Enchanted Helmet
+ player->RemoveSpell(30566); // Foreman's Reinforced Helmet
+ player->RemoveSpell(30563); // Goblin Rocket Launcher
+ player->RemoveSpell(56514); // Global Thermal Sapper Charge
+ player->RemoveSpell(36954); // Dimensional Ripper - Area 52
+ player->RemoveSpell(23486); // Dimensional Ripper - Everlook
+ player->RemoveSpell(23078); // Goblin Jumper Cables XL
+ player->RemoveSpell(72952); // Shatter Rounds
+ break;
+ case S_UNLEARN_GNOMISH: // S_UNLEARN_GNOMISH
+ player->RemoveSpell(30575); // Gnomish Battle Goggles
+ player->RemoveSpell(30574); // Gnomish Power Goggles
+ player->RemoveSpell(56473); // Gnomish X-Ray Specs
+ player->RemoveSpell(30569); // Gnomish Poultryizer
+ player->RemoveSpell(30563); // Ultrasafe Transporter - Toshley's Station
+ player->RemoveSpell(23489); // Ultrasafe Transporter - Gadgetzan
+ player->RemoveSpell(23129); // World Enlarger
+ player->RemoveSpell(23096); // Gnomish Alarm-o-Bot
+ player->RemoveSpell(72953); // Iceblade Arrow
+ break;
case S_UNLEARN_SPELLFIRE: // S_UNLEARN_SPELLFIRE
player->RemoveSpell(26752); // Spellfire Belt
player->RemoveSpell(26753); // Spellfire Gloves
@@ -923,6 +946,76 @@ public:
}
};
+// Object ID - 177226
+// Book "Soothsaying for dummies"
+enum SoothsayingForDummies
+{
+ GOSSIP_ID = 7058,
+
+ // Engineering
+ OPTION_UNLEARN_GNOMISH = 0,
+ OPTION_UNLEARN_GOBLIN = 1,
+ OPTION_LEARN_GNOMISH = 2,
+ OPTION_LEARN_GOBLIN = 3,
+
+ // Leatherworking
+ OPTION_LEARN_DRAGONSCALE = 4,
+ OPTION_LEARN_ELEMENTAL = 5,
+ OPTION_LEARN_TRIBAL = 6
+};
+
+class go_soothsaying_for_dummies : public GameObjectScript
+{
+ public:
+ go_soothsaying_for_dummies() : GameObjectScript("go_soothsaying_for_dummies") { }
+
+ struct go_soothsaying_for_dummiesAI : public GameObjectAI
+ {
+ go_soothsaying_for_dummiesAI(GameObject* go) : GameObjectAI(go) { }
+
+ bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ {
+ if (menuId != GOSSIP_ID)
+ return false;
+
+ switch (gossipListId)
+ {
+ case OPTION_UNLEARN_GNOMISH:
+ ProcessUnlearnAction(player, nullptr, S_UNLEARN_GNOMISH, 0, 0); // cost is handled by gossip code
+ break;
+ case OPTION_UNLEARN_GOBLIN:
+ ProcessUnlearnAction(player, nullptr, S_UNLEARN_GOBLIN, 0, 0);
+ break;
+ case OPTION_LEARN_GNOMISH:
+ player->CastSpell(player, S_LEARN_GNOMISH, true);
+ break;
+ case OPTION_LEARN_GOBLIN:
+ player->CastSpell(player, S_LEARN_GOBLIN, true);
+ break;
+ case OPTION_LEARN_DRAGONSCALE:
+ player->CastSpell(player, S_LEARN_DRAGON, true);
+ break;
+ case OPTION_LEARN_ELEMENTAL:
+ player->CastSpell(player, S_LEARN_ELEMENTAL, true);
+ break;
+ case OPTION_LEARN_TRIBAL:
+ player->CastSpell(player, S_LEARN_TRIBAL, true);
+ break;
+ default:
+ return false;
+ }
+
+ player->CLOSE_GOSSIP_MENU();
+ return true; // prevent further processing
+ }
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return new go_soothsaying_for_dummiesAI(go);
+ }
+};
+
/*###
# start menues leatherworking
###*/
@@ -1212,6 +1305,7 @@ void AddSC_npc_professions()
new npc_prof_alchemy();
new npc_prof_blacksmith();
new npc_engineering_tele_trinket();
+ new go_soothsaying_for_dummies();
new npc_prof_leather();
new npc_prof_tailor();
}