aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/characters_database.sql3
-rw-r--r--sql/updates/characters/2015_11_03_00_characters.sql10
-rw-r--r--sql/updates/world/2015_11_02_00_world.sql26
-rw-r--r--sql/updates/world/2015_11_02_01_world.sql432
-rw-r--r--sql/updates/world/2015_11_03_00_world.sql3
-rw-r--r--sql/updates/world/2015_11_03_01_world.sql41
-rw-r--r--sql/updates/world/2015_11_03_02_world.sql2
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp5
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.h1
-rw-r--r--src/server/game/Entities/Item/Item.cpp16
-rw-r--r--src/server/game/Entities/Item/Item.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp25
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Tickets/TicketMgr.cpp14
-rw-r--r--src/server/game/Tickets/TicketMgr.h16
-rw-r--r--src/server/game/World/World.cpp1
-rw-r--r--src/server/game/World/World.h1
-rw-r--r--src/server/scripts/Commands/cs_ticket.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp209
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp16
-rw-r--r--src/server/scripts/Northrend/Naxxramas/naxxramas.h3
-rw-r--r--src/server/scripts/Northrend/zone_sholazar_basin.cpp68
-rw-r--r--src/server/worldserver/worldserver.conf.dist10
23 files changed, 784 insertions, 126 deletions
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql
index 5f4258a3aeb..4e2d9332274 100644
--- a/sql/base/characters_database.sql
+++ b/sql/base/characters_database.sql
@@ -1541,6 +1541,7 @@ DROP TABLE IF EXISTS `gm_ticket`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `gm_ticket` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '0 open, 1 closed, 2 character deleted',
`playerGuid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Global Unique Identifier of ticket creator',
`name` varchar(12) NOT NULL COMMENT 'Name of ticket creator',
`description` text NOT NULL,
@@ -2529,7 +2530,7 @@ CREATE TABLE `updates` (
LOCK TABLES `updates` WRITE;
/*!40000 ALTER TABLE `updates` DISABLE KEYS */;
-INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql','16842FDD7E8547F2260D3312F53EFF8761EFAB35','ARCHIVED','2015-10-06 16:06:38',0),('2015_10_07_00_characters.sql','E15AB463CEBE321001D7BFDEA4B662FF618728FD','ARCHIVED','2015-10-07 23:32:00',0),('2015_10_12_00_characters.sql','D6F9927BDED72AD0A81D6EC2C6500CBC34A39FA2','ARCHIVED','2015-10-12 15:35:47',0),('2015_10_28_00_characters.sql','622A9CA8FCE690429EBE23BA071A37C7A007BF8B','ARCHIVED','2015-10-19 14:32:22',0),('2015_10_29_00_characters_335.sql','4555A7F35C107E54C13D74D20F141039ED42943E','RELEASED','2015-10-29 17:05:43',0);
+INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql','16842FDD7E8547F2260D3312F53EFF8761EFAB35','ARCHIVED','2015-10-06 16:06:38',0),('2015_10_07_00_characters.sql','E15AB463CEBE321001D7BFDEA4B662FF618728FD','ARCHIVED','2015-10-07 23:32:00',0),('2015_10_12_00_characters.sql','D6F9927BDED72AD0A81D6EC2C6500CBC34A39FA2','ARCHIVED','2015-10-12 15:35:47',0),('2015_10_28_00_characters.sql','622A9CA8FCE690429EBE23BA071A37C7A007BF8B','ARCHIVED','2015-10-19 14:32:22',0),('2015_10_29_00_characters_335.sql','4555A7F35C107E54C13D74D20F141039ED42943E','RELEASED','2015-10-29 17:05:43',0),('2015_11_03_00_characters.sql','CC045717B8FDD9733351E52A5302560CD08AAD57','RELEASED','2015-10-12 15:23:33',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/updates/characters/2015_11_03_00_characters.sql b/sql/updates/characters/2015_11_03_00_characters.sql
new file mode 100644
index 00000000000..b74824477be
--- /dev/null
+++ b/sql/updates/characters/2015_11_03_00_characters.sql
@@ -0,0 +1,10 @@
+ALTER TABLE `gm_ticket`
+ ADD COLUMN `type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '0 open, 1 closed, 2 character deleted' AFTER `id`;
+
+UPDATE `gm_ticket` SET `type` = 1 WHERE `closedBy` != 0 OR `completed` != 0 OR `resolvedBy` != 0;
+UPDATE `gm_ticket` SET `closedBy` = 0 WHERE `closedBy` < 0;
+UPDATE `gm_ticket` SET `resolvedBy` = 0 WHERE `resolvedBy` < 0;
+
+ALTER TABLE `gm_ticket`
+ CHANGE COLUMN `closedBy` `closedBy` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `lastModifiedTime`,
+ CHANGE COLUMN `resolvedBy` `resolvedBy` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'GUID of GM who resolved the ticket' AFTER `needMoreHelp`;
diff --git a/sql/updates/world/2015_11_02_00_world.sql b/sql/updates/world/2015_11_02_00_world.sql
new file mode 100644
index 00000000000..f0805777177
--- /dev/null
+++ b/sql/updates/world/2015_11_02_00_world.sql
@@ -0,0 +1,26 @@
+-- Anub'Rekhan cleanup
+-- areatrigger for greeting upon entering room
+DELETE FROM `areatrigger_scripts` WHERE `entry`=4119;
+INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES
+(4119,"at_anubrekhan_entrance");
+
+-- make crypt guards aggro anub when pulled
+DELETE FROM `smart_scripts` WHERE `entryorguid`=16573 AND `source_type`=0 AND `id` IN (6,7);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_chance`,`event_flags`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`target_type`,`comment`) VALUES
+(16573,0, 6, 0, 4,100,0, 39, 25, 0, 0, 0, "Crypt Guard - On Aggro - Call For Help (25yd)"),
+(16573,0, 7, 5,61,100,0, 1, 0, 0, 0, 0, "Crypt Guard - On Cast Frenzy - Say EMOTE_FRENZY");
+UPDATE `smart_scripts` SET `link`=7 WHERE `entryorguid`=16573 AND `source_type`=0 AND `id`=5;
+
+DELETE FROM `creature_text` WHERE `entry`=16573;
+DELETE FROM `creature_text` WHERE `entry`=15956 AND `groupid`=3;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
+(16573,0,0,"%s goes into a frenzy!",16,100,1191,3,"Crypt Guard EMOTE_FRENZY"),
+(16573,1,0,"A Crypt Guard joins the fight!",41,100,29887,3,"Crypt Guard EMOTE_SPAWN"),
+(16573,2,0,"Corpse Scarabs appear from a Crypt Guard's corpse!",41,100,32796,3,"Crypt Guard EMOTE_SCARAB"),
+(15956,3,0,"Anub'Rekhan begins to unleash an insect swarm!",41,100,13443,3,"Anub'Rekhan EMOTE_LOCUST");
+
+DELETE FROM `creature_summon_groups` WHERE `summonerId`=15956;
+INSERT INTO `creature_summon_groups` (`summonerId`,`summonerType`,`groupId`,`entry`,`position_x`,`position_y`,`position_z`,`orientation`,`summonType`) VALUES
+(15956,0,1,16573, 3300.503, -3503.574, 287.1606, 2.321288, 8),
+(15956,0,1,16573, 3299.283, -3450.938, 287.1606, 3.839724, 8),
+(15956,0,2,16573, 3334.41 , -3476.84 , 287.1553, 0, 8);
diff --git a/sql/updates/world/2015_11_02_01_world.sql b/sql/updates/world/2015_11_02_01_world.sql
new file mode 100644
index 00000000000..c074e6b7de8
--- /dev/null
+++ b/sql/updates/world/2015_11_02_01_world.sql
@@ -0,0 +1,432 @@
+-- Pathing for Phoenix-Hawk Entry: 20039 'TDB FORMAT'
+SET @NPC := 12475;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=404.3267,`position_y`=51.04832,`position_z`=20.42939 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,404.3267,51.04832,20.42939,0,0,1,0,100,0), -- 15:53:14
+(@PATH,2,363.3958,82.78564,20.16342,0,0,1,0,100,0), -- 15:53:20
+(@PATH,3,351.0526,86.04145,20.2427,0,0,1,0,100,0), -- 15:53:21
+(@PATH,4,332.8026,86.04145,20.4927,0,0,1,0,100,0), -- 15:53:21
+(@PATH,5,322.5526,86.29145,20.2427,0,0,1,0,100,0), -- 15:53:21
+(@PATH,6,309.8975,86.35751,20.44322,0,0,1,0,100,0), -- 15:53:25
+(@PATH,7,298.1475,82.35751,20.44322,0,0,1,0,100,0), -- 15:53:25
+(@PATH,8,276.9726,72.43015,20.42969,0,0,1,0,100,0), -- 15:53:27
+(@PATH,9,256.9967,56.60734,20.43009,0,0,1,0,100,0), -- 15:53:29
+(@PATH,10,256.7982,56.72626,20.43009,0,0,1,0,100,0), -- 15:53:33
+(@PATH,11,276.9184,72.64089,20.43155,0,0,1,0,100,0), -- 15:53:34
+(@PATH,12,297.7713,82.30241,20.42944,0,0,1,0,100,0), -- 15:53:37
+(@PATH,13,322.4713,86.09231,20.41415,0,0,1,0,100,0), -- 15:53:39
+(@PATH,14,332.4713,86.09231,20.41415,0,0,1,0,100,0), -- 15:53:39
+(@PATH,15,351.2139,86.03535,20.23542,0,0,1,0,100,0), -- 15:53:43
+(@PATH,16,365.9639,82.28535,20.23542,0,0,1,0,100,0), -- 15:53:43
+(@PATH,17,386.9718,70.78688,20.28395,0,0,1,0,100,0), -- 15:53:45
+(@PATH,18,404.4698,51.14609,20.42939,0,0,1,0,100,0); -- 15:53:48
+
+-- Pathing for Phoenix-Hawk Entry: 20039 'TDB FORMAT'
+SET @NPC := 12434;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=332.7476,`position_y`=-90.41917,`position_z`=20.51123 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,332.7476,-90.41917,20.51123,0,0,1,0,100,0), -- 15:53:36
+(@PATH,2,324.7476,-90.16917,20.26123,0,0,1,0,100,0), -- 15:53:36
+(@PATH,3,315.7476,-89.91917,20.26123,0,0,1,0,100,0), -- 15:53:36
+(@PATH,4,297.1394,-85.66326,20.4148,0,0,1,0,100,0), -- 15:53:39
+(@PATH,5,258.2917,-57.28191,20.42989,0,0,1,0,100,0), -- 15:53:42
+(@PATH,6,244.784,-38.03379,20.51284,0,0,1,0,100,0), -- 15:53:45
+(@PATH,7,239.784,-13.28379,25.76284,0,0,1,0,100,0), -- 15:53:45
+(@PATH,8,238.5742,1.909073,26.95395,0,0,1,0,100,0), -- 15:53:49
+(@PATH,9,242.5742,29.15907,20.70395,0,0,1,0,100,0), -- 15:53:49
+(@PATH,10,256.9634,56.59798,20.42731,0,0,1,0,100,0), -- 15:53:54
+(@PATH,11,297.2964,83.12163,20.43203,0,0,1,0,100,0), -- 15:53:56
+(@PATH,12,315.9869,88.49153,20.44473,0,0,1,0,100,0), -- 15:54:00
+(@PATH,13,324.2369,88.49153,20.44473,0,0,1,0,100,0), -- 15:54:00
+(@PATH,14,332.4869,88.74153,20.44473,0,0,1,0,100,0), -- 15:54:00
+(@PATH,15,340.2369,88.99153,20.44473,0,0,1,0,100,0), -- 15:54:00
+(@PATH,16,349.4869,89.24153,20.44473,0,0,1,0,100,0), -- 15:54:00
+(@PATH,17,362.7359,84.22715,20.25116,0,0,1,0,100,0), -- 15:54:03
+(@PATH,18,366.4859,82.72715,20.25116,0,0,1,0,100,0), -- 15:54:03
+(@PATH,19,380.7359,76.72715,20.50116,0,0,1,0,100,0), -- 15:54:03
+(@PATH,20,388.7359,73.47715,20.25116,0,0,1,0,100,0), -- 15:54:03
+(@PATH,21,403.4129,54.84925,20.37498,0,0,1,0,100,0), -- 15:54:07
+(@PATH,22,418.7638,27.5905,20.42937,0,0,1,0,100,0), -- 15:54:11
+(@PATH,23,423.947,-0.8590612,20.42934,0,0,1,0,100,0), -- 15:54:13
+(@PATH,24,423.947,-12.85906,20.42934,0,0,1,0,100,0), -- 15:54:13
+(@PATH,25,415.4541,-39.22434,20.42944,0,0,1,0,100,0), -- 15:54:17
+(@PATH,26,409.8507,-46.91153,20.42938,0,0,1,0,100,0), -- 15:54:18
+(@PATH,27,404.3507,-55.91153,20.42938,0,0,1,0,100,0), -- 15:54:18
+(@PATH,28,379.6078,-80.35109,20.36515,0,0,1,0,100,0), -- 15:54:21
+(@PATH,29,357.0756,-90.66071,20.3293,0,0,1,0,100,0), -- 15:54:24
+(@PATH,30,344.5756,-90.41071,20.3293,0,0,1,0,100,0); -- 15:54:24
+
+-- Add missing Phoenix-Hawk
+SET @ENTRY := 20039;
+SET @GUID := 554;
+DELETE FROM `creature` WHERE `guid`=@GUID;
+INSERT INTO `creature` (`guid`, `id`, `map`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `curhealth`) VALUES
+(@GUID, @ENTRY, 550, 246.4875, -37.49984, 20.42661, 5.58522, 10800, 366765);
+
+-- Pathing for Phoenix-Hawk Entry: 20039 'TDB FORMAT'
+SET @NPC := 554;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=246.4875,`position_y`=-37.49984,`position_z`=20.42661 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,246.4875,-37.49984,20.42661,0,0,1,0,100,0), -- 15:53:34
+(@PATH,2,257.6479,-57.38124,20.42661,0,0,1,0,100,0), -- 15:53:37
+(@PATH,3,276.6165,-74.59982,20.42977,0,0,1,0,100,0), -- 15:53:40
+(@PATH,4,318.1243,-87.4548,20.22828,0,0,1,0,100,0), -- 15:53:43
+(@PATH,5,346.6934,-87.65228,20.55079,0,0,1,0,100,0), -- 15:53:46
+(@PATH,6,366.6934,-84.40228,20.05079,0,0,1,0,100,0), -- 15:53:46
+(@PATH,7,371.813,-83.31676,20.14231,0,0,1,0,100,0), -- 15:53:49
+(@PATH,8,381.313,-76.81676,20.39231,0,0,1,0,100,0), -- 15:53:49
+(@PATH,9,387.563,-73.06676,20.39231,0,0,1,0,100,0), -- 15:53:49
+(@PATH,10,405.1288,-53.81012,20.43003,0,0,1,0,100,0), -- 15:53:52
+(@PATH,11,387.8711,-72.59858,20.29767,0,0,1,0,100,0), -- 15:53:56
+(@PATH,12,381.6211,-76.84858,20.29767,0,0,1,0,100,0), -- 15:53:56
+(@PATH,13,366.4635,-84.1076,20.22797,0,0,1,0,100,0), -- 15:53:58
+(@PATH,14,346.7135,-87.6076,20.47797,0,0,1,0,100,0), -- 15:53:58
+(@PATH,15,332.7135,-90.1076,20.47797,0,0,1,0,100,0), -- 15:53:58
+(@PATH,16,318.1471,-87.49127,20.23125,0,0,1,0,100,0), -- 15:54:02
+(@PATH,17,297.8971,-83.99127,20.23125,0,0,1,0,100,0), -- 15:54:02
+(@PATH,18,276.5398,-74.81604,20.42981,0,0,1,0,100,0), -- 15:54:05
+(@PATH,19,257.961,-57.62645,20.42985,0,0,1,0,100,0); -- 15:54:07
+
+-- Pathing for Phoenix-Hawk Entry: 20039 'TDB FORMAT'
+SET @NPC := 12433;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=332.517,`position_y`=-90.67094,`position_z`=20.45976 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,332.517,-90.67094,20.45976,0,0,1,0,100,0), -- 15:54:00
+(@PATH,2,349.2753,-89.96908,20.37492,0,0,1,0,100,0), -- 15:54:03
+(@PATH,3,367.7753,-86.46908,20.12492,0,0,1,0,100,0), -- 15:54:03
+(@PATH,4,390.4767,-72.33127,20.37196,0,0,1,0,100,0), -- 15:54:07
+(@PATH,5,404.9767,-53.58127,20.37196,0,0,1,0,100,0), -- 15:54:07
+(@PATH,6,417.079,-29.24579,20.42938,0,0,1,0,100,0), -- 15:54:10
+(@PATH,7,423.1954,-0.6701798,20.42934,0,0,1,0,100,0), -- 15:54:13
+(@PATH,8,416.2595,27.87078,20.42938,0,0,1,0,100,0), -- 15:54:16
+(@PATH,9,405.6095,50.9514,20.42931,0,0,1,0,100,0), -- 15:54:18
+(@PATH,10,379.8849,78.87553,20.28936,0,0,1,0,100,0), -- 15:54:20
+(@PATH,11,361.7868,87.05472,20.07407,0,0,1,0,100,0), -- 15:54:24
+(@PATH,12,347.5368,87.55472,20.32407,0,0,1,0,100,0), -- 15:54:24
+(@PATH,13,332.7868,88.05472,20.57407,0,0,1,0,100,0), -- 15:54:24
+(@PATH,14,315.7868,88.55472,20.32407,0,0,1,0,100,0), -- 15:54:24
+(@PATH,15,297.4316,83.2674,20.46751,0,0,1,0,100,0), -- 15:54:28
+(@PATH,16,275.6396,74.44795,20.43051,0,0,1,0,100,0), -- 15:54:30
+(@PATH,17,258.8896,55.69796,20.43051,0,0,1,0,100,0), -- 15:54:30
+(@PATH,18,243.9132,25.22697,20.67206,0,0,1,0,100,0), -- 15:54:35
+(@PATH,19,241.1632,11.72697,25.92206,0,0,1,0,100,0), -- 15:54:35
+(@PATH,20,238.8673,-0.7733765,27.23883,0,0,1,0,100,0), -- 15:54:39
+(@PATH,21,246.6173,-37.27338,20.48883,0,0,1,0,100,0), -- 15:54:39
+(@PATH,22,257.6819,-57.25851,20.4247,0,0,1,0,100,0), -- 15:54:42
+(@PATH,23,276.6098,-74.62117,20.42971,0,0,1,0,100,0), -- 15:54:45
+(@PATH,24,297.1098,-85.12117,20.42971,0,0,1,0,100,0), -- 15:54:45
+(@PATH,25,315.9437,-89.75371,20.45979,0,0,1,0,100,0), -- 15:54:48
+(@PATH,26,324.4437,-90.25371,20.45979,0,0,1,0,100,0); -- 15:54:48
+
+-- Pathing for Crystalcore Devastator Entry: 20040 'TDB FORMAT'
+SET @NPC := 12549;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=478.9474,`position_y`=89.4745,`position_z`=20.52121 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,478.9474,89.4745,20.52121,0,0,0,0,100,0), -- 16:07:45
+(@PATH,2,479.0185,89.26942,20.52121,0,0,0,0,100,0), -- 16:07:50
+(@PATH,3,493.3273,105.7242,20.53989,0,0,0,0,100,0), -- 16:07:54
+(@PATH,4,500.1716,115.4319,20.53092,0,0,0,0,100,0), -- 16:07:57
+(@PATH,5,501.6716,118.1819,20.53092,0,0,0,0,100,0), -- 16:07:57
+(@PATH,6,505.9216,125.6819,20.53092,0,0,0,0,100,0), -- 16:07:57
+(@PATH,7,509.7829,136.1951,20.50818,0,0,0,0,100,0), -- 16:08:02
+(@PATH,8,511.0329,139.6951,20.50818,0,0,0,0,100,0), -- 16:08:02
+(@PATH,9,511.7829,142.6951,20.50818,0,0,0,0,100,0), -- 16:08:02
+(@PATH,10,517.5752,164.9698,20.50733,0,0,0,0,100,0), -- 16:08:08
+(@PATH,11,520.0752,175.7198,20.50733,0,0,0,0,100,0), -- 16:08:08
+(@PATH,12,520.3252,177.2198,20.50733,0,0,0,0,100,0), -- 16:08:08
+(@PATH,13,520.882,179.5561,20.53715,0,0,0,0,100,0), -- 16:08:16
+(@PATH,14,520.382,184.3061,20.53715,0,0,0,0,100,0), -- 16:08:16
+(@PATH,15,519.882,191.8061,20.53715,0,0,0,0,100,0), -- 16:08:16
+(@PATH,16,519.132,199.5561,20.53715,0,0,0,0,100,0), -- 16:08:16
+(@PATH,17,515.7716,216.1749,20.5457,0,0,0,0,100,0), -- 16:08:23
+(@PATH,18,513.7716,222.9249,20.5457,0,0,0,0,100,0), -- 16:08:23
+(@PATH,19,517.1009,211.7702,20.5457,0,0,0,0,100,0), -- 16:08:30
+(@PATH,20,519.8978,192.0669,20.53427,0,0,0,0,100,0), -- 16:08:35
+(@PATH,21,520.3978,184.3169,20.53427,0,0,0,0,100,0), -- 16:08:35
+(@PATH,22,520.1716,175.6861,20.51027,0,0,0,0,100,0), -- 16:08:42
+(@PATH,23,517.6716,165.6861,20.51027,0,0,0,0,100,0), -- 16:08:42
+(@PATH,24,516.1716,158.4361,20.51027,0,0,0,0,100,0), -- 16:08:42
+(@PATH,25,511.1044,140.4333,20.50434,0,0,0,0,100,0), -- 16:08:49
+(@PATH,26,510.1044,136.1833,20.50434,0,0,0,0,100,0), -- 16:08:49
+(@PATH,27,502.2063,118.9294,20.52943,0,0,0,0,100,0), -- 16:08:56
+(@PATH,28,500.2063,115.4294,20.52943,0,0,0,0,100,0), -- 16:08:56
+(@PATH,29,498.2063,111.9294,20.52943,0,0,0,0,100,0), -- 16:08:56
+(@PATH,30,493.3535,105.5967,20.53989,0,0,0,0,100,0), -- 16:09:00
+(@PATH,31,488.6035,99.84668,20.53989,0,0,0,0,100,0); -- 16:09:00
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=12467;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(12467, 12467, 0, 0, 1),
+(12467, 12431, 3, 270, 2),
+(12467, 12432, 3, 90, 2);
+
+-- Pathing for Astromancer Lord Entry: 20046 'TDB FORMAT'
+SET @NPC := 12467;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=513.6304,`position_y`=-224.7386,`position_z`=20.56552 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,513.6304,-224.7386,20.56552,0,5000,0,0,100,0), -- 16:08:45
+(@PATH,2,517.2208,-208.6252,20.56552,0,0,0,0,100,0), -- 16:08:52
+(@PATH,3,518.7356,-200.354,20.56796,0,0,0,0,100,0), -- 16:08:57
+(@PATH,4,519.4856,-193.354,20.56796,0,0,0,0,100,0), -- 16:08:57
+(@PATH,5,519.9856,-190.104,20.56796,0,0,0,0,100,0), -- 16:08:57
+(@PATH,6,519.5496,-178.3897,20.51476,0,0,0,0,100,0), -- 16:09:02
+(@PATH,7,519.2996,-177.3897,20.51476,0,0,0,0,100,0), -- 16:09:02
+(@PATH,8,518.2996,-169.3897,20.51476,0,0,0,0,100,0), -- 16:09:02
+(@PATH,9,518.0496,-166.6397,20.51476,0,0,0,0,100,0), -- 16:09:02
+(@PATH,10,516.9454,-162.3555,20.49109,0,0,0,0,100,0), -- 16:09:08
+(@PATH,11,516.4454,-160.1055,20.49109,0,0,0,0,100,0), -- 16:09:08
+(@PATH,12,512.1954,-143.8555,20.49109,0,0,0,0,100,0), -- 16:09:08
+(@PATH,13,511.4454,-141.3555,20.49109,0,0,0,0,100,0), -- 16:09:08
+(@PATH,14,509.4338,-136.6816,20.51297,0,0,0,0,100,0), -- 16:09:14
+(@PATH,15,504.6838,-123.9316,20.51297,0,0,0,0,100,0), -- 16:09:14
+(@PATH,16,502.9338,-119.4316,20.51297,0,0,0,0,100,0), -- 16:09:14
+(@PATH,17,502.5425,-118.8291,20.53002,0,0,0,0,100,0), -- 16:09:19
+(@PATH,18,498.0425,-113.0791,20.53002,0,0,0,0,100,0), -- 16:09:19
+(@PATH,19,493.7925,-106.8291,20.53002,0,0,0,0,100,0), -- 16:09:19
+(@PATH,20,488.5476,-100.5731,20.50299,0,0,0,0,100,0), -- 16:09:24
+(@PATH,21,482.5476,-94.07306,20.50299,0,0,0,0,100,0), -- 16:09:24
+(@PATH,22,479.0476,-90.32306,20.50299,0,5000,0,0,100,0), -- 16:09:24
+(@PATH,23,488.4339,-100.7364,20.50299,0,0,0,0,100,0), -- 16:09:32
+(@PATH,24,493.5073,-106.8633,20.53566,0,0,0,0,100,0), -- 16:09:37
+(@PATH,25,498.0073,-112.8633,20.53566,0,0,0,0,100,0), -- 16:09:37
+(@PATH,26,509.557,-136.8885,20.51389,0,0,0,0,100,0), -- 16:09:42
+(@PATH,27,512.2501,-143.873,20.491,0,0,0,0,100,0), -- 16:09:48
+(@PATH,28,516.2501,-159.623,20.491,0,0,0,0,100,0), -- 16:09:48
+(@PATH,29,517.0001,-162.373,20.491,0,0,0,0,100,0), -- 16:09:48
+(@PATH,30,517.6157,-163.5336,20.51302,0,0,0,0,100,0), -- 16:09:54
+(@PATH,31,518.1157,-166.7836,20.51302,0,0,0,0,100,0), -- 16:09:54
+(@PATH,32,518.3657,-169.2836,20.51302,0,0,0,0,100,0), -- 16:09:54
+(@PATH,33,519.3657,-177.0336,20.51302,0,0,0,0,100,0), -- 16:09:54
+(@PATH,34,519.6157,-178.2836,20.51302,0,0,0,0,100,0), -- 16:09:54
+(@PATH,35,519.576,-193.4193,20.5364,0,0,0,0,100,0), -- 16:10:00
+(@PATH,36,518.826,-200.4193,20.5364,0,0,0,0,100,0), -- 16:10:00
+(@PATH,37,517.826,-207.1693,20.5364,0,0,0,0,100,0); -- 16:10:00
+
+UPDATE `creature` SET `id`=20045 WHERE `guid`=12540;
+UPDATE `creature` SET `id`=20045 WHERE `guid`=12538;
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=12540;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(12540, 12540, 0, 0, 1),
+(12540, 12542, 3, 270, 2),
+(12540, 12541, 3, 90, 2);
+
+-- Pathing for Nether Scryer Entry: 20045 'TDB FORMAT'
+SET @NPC := 12540;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=423.7304,`position_y`=-297.2403,`position_z`=19.25663 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,423.7304,-297.2403,19.25663,0,0,0,0,100,0), -- 16:13:39
+(@PATH,2,421.8612,-297.5166,19.29133,0,0,0,0,100,0), -- 16:13:46
+(@PATH,3,395.1479,-306.0458,19.47611,0,0,0,0,100,0), -- 16:13:51
+(@PATH,4,386.0147,-311.4482,19.33733,0,0,0,0,100,0), -- 16:13:57
+(@PATH,5,361.8398,-343.4693,19.29735,0,0,0,0,100,0), -- 16:14:02
+(@PATH,6,357.9641,-362.9832,19.28531,0,0,0,0,100,0), -- 16:14:08
+(@PATH,7,358.3306,-382.0202,19.17975,0,0,0,0,100,0), -- 16:14:14
+(@PATH,8,367.2446,-410.9676,19.20938,0,0,0,0,100,0), -- 16:14:20
+(@PATH,9,376.3463,-423.0817,19.22353,0,0,0,0,100,0), -- 16:14:26
+(@PATH,10,387.6675,-434.1544,19.24023,0,0,0,0,100,0), -- 16:14:31
+(@PATH,11,422.7839,-449.2073,19.28438,0,0,0,0,100,0), -- 16:14:37
+(@PATH,12,442.8006,-447.2404,19.22515,0,0,0,0,100,0), -- 16:14:43
+(@PATH,13,478.9905,-433.6435,19.3018,0,0,0,0,100,0), -- 16:14:51
+(@PATH,14,494.5335,-421.47,19.31859,0,0,0,0,100,0), -- 16:15:01
+(@PATH,15,505.3245,-403.0611,19.52428,0,0,0,0,100,0), -- 16:15:07
+(@PATH,16,510.3288,-382.475,19.45391,0,0,0,0,100,0), -- 16:15:12
+(@PATH,17,509.6892,-362.8328,19.19526,0,0,0,0,100,0), -- 16:15:18
+(@PATH,18,504.8862,-343.3768,19.23977,0,0,0,0,100,0), -- 16:15:22
+(@PATH,19,505.9844,-344.7854,19.44162,0,0,0,0,100,0), -- 16:15:28
+(@PATH,20,509.5838,-363.0805,19.20078,0,0,0,0,100,0), -- 16:15:33
+(@PATH,21,505.4904,-403.0814,19.51538,0,0,0,0,100,0), -- 16:15:38
+(@PATH,22,494.6033,-421.486,19.34887,0,0,0,0,100,0), -- 16:15:44
+(@PATH,23,493.8533,-422.486,19.59887,0,0,0,0,100,0), -- 16:15:44
+(@PATH,24,492.6177,-424.3935,19.49897,0,0,0,0,100,0), -- 16:15:49
+(@PATH,25,479.1177,-433.3935,19.24897,0,0,0,0,100,0), -- 16:15:49
+(@PATH,26,470.3677,-439.3935,19.24897,0,0,0,0,100,0), -- 16:15:49
+(@PATH,27,462.8677,-444.3935,19.49897,0,0,0,0,100,0), -- 16:15:49
+(@PATH,28,442.9135,-447.4605,19.24915,0,0,0,0,100,0), -- 16:15:58
+(@PATH,29,403.749,-444.8676,19.51671,0,0,0,0,100,0), -- 16:16:07
+(@PATH,30,387.6254,-434.2364,19.2685,0,0,0,0,100,0), -- 16:16:13
+(@PATH,31,376.6454,-423.368,19.23084,0,0,0,0,100,0), -- 16:16:18
+(@PATH,32,361.54,-397.0302,19.1883,0,0,0,0,100,0), -- 16:16:24
+(@PATH,33,358.272,-382.2332,19.21221,0,0,0,0,100,0), -- 16:16:30
+(@PATH,34,358.0092,-362.9816,19.25879,0,0,0,0,100,0), -- 16:16:36
+(@PATH,35,372.6,-326.9489,19.52757,0,0,0,0,100,0), -- 16:16:42
+(@PATH,36,385.8902,-311.8205,19.52534,0,0,0,0,100,0), -- 16:16:48
+(@PATH,37,395.203,-306.4769,19.5721,0,0,0,0,100,0), -- 16:16:53
+(@PATH,38,404.203,-300.9769,19.5721,0,0,0,0,100,0); -- 16:16:53
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=12538;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(12538, 12538, 0, 0, 1),
+(12538, 12537, 3, 270, 2),
+(12538, 12539, 3, 90, 2);
+
+-- Pathing for Nether Scryer Entry: 20045 'TDB FORMAT'
+SET @NPC := 12538;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=491.6343,`position_y`=-348.8971,`position_z`=17.45782 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,491.6343,-348.8971,17.45782,0,0,0,0,100,0), -- 16:10:09
+(@PATH,2,494.4583,-365.0894,17.3224,0,0,0,0,100,0), -- 16:10:11
+(@PATH,3,494.3617,-380.7137,17.29877,0,0,0,0,100,0), -- 16:10:17
+(@PATH,4,485.7098,-402.4861,17.33348,0,0,0,0,100,0), -- 16:10:22
+(@PATH,5,479.9598,-409.9861,17.08348,0,0,0,0,100,0), -- 16:10:22
+(@PATH,6,475.9598,-414.7361,17.33348,0,0,0,0,100,0), -- 16:10:22
+(@PATH,7,470.2098,-421.7361,17.33348,0,0,0,0,100,0), -- 16:10:22
+(@PATH,8,456.0066,-429.1491,17.33844,0,0,0,0,100,0), -- 16:10:32
+(@PATH,9,441.2566,-434.6491,17.58844,0,0,0,0,100,0), -- 16:10:32
+(@PATH,10,425.0241,-433.6116,17.49777,0,0,0,0,100,0), -- 16:10:39
+(@PATH,11,409.0241,-431.8616,17.49777,0,0,0,0,100,0), -- 16:10:39
+(@PATH,12,396.0655,-422.4177,17.41465,0,0,0,0,100,0), -- 16:10:47
+(@PATH,13,387.3155,-413.9177,17.41465,0,0,0,0,100,0), -- 16:10:47
+(@PATH,14,374.3321,-392.9123,17.42148,0,0,0,0,100,0), -- 16:10:56
+(@PATH,15,371.2164,-380.3734,17.65318,0,0,0,0,100,0), -- 16:11:02
+(@PATH,16,371.1164,-364.8227,17.43382,0,0,0,0,100,0), -- 16:11:07
+(@PATH,17,381.9487,-334.1354,17.87497,0,0,0,0,100,0), -- 16:11:12
+(@PATH,18,393.8716,-322.5054,17.69732,0,0,0,0,100,0), -- 16:11:17
+(@PATH,19,412.3383,-311.7506,17.58051,0,0,0,0,100,0), -- 16:11:21
+(@PATH,20,423.361,-308.4557,17.6968,0,0,0,0,100,0), -- 16:11:26
+(@PATH,21,428.361,-307.4557,17.9468,0,0,0,0,100,0), -- 16:11:26
+(@PATH,22,423.8289,-308.1609,17.72783,0,0,0,0,100,0), -- 16:11:32
+(@PATH,23,403.0539,-316.1074,17.86351,0,0,0,0,100,0), -- 16:11:35
+(@PATH,24,394.0146,-322.5777,17.75302,0,0,0,0,100,0), -- 16:11:40
+(@PATH,25,381.8382,-334.0474,17.83417,0,0,0,0,100,0), -- 16:11:45
+(@PATH,26,371.0694,-364.8433,17.48853,0,0,0,0,100,0), -- 16:11:49
+(@PATH,27,371.0801,-380.4205,17.45639,0,0,0,0,100,0), -- 16:11:54
+(@PATH,28,379.2573,-404.1338,17.39072,0,0,0,0,100,0), -- 16:11:59
+(@PATH,29,387.2876,-413.9666,17.47128,0,0,0,0,100,0), -- 16:12:05
+(@PATH,30,396.0376,-422.4666,17.47128,0,0,0,0,100,0), -- 16:12:05
+(@PATH,31,424.8217,-433.5346,17.49184,0,0,0,0,100,0), -- 16:12:14
+(@PATH,32,456.0426,-429.2732,17.36312,0,0,0,0,100,0), -- 16:12:22
+(@PATH,33,460.5426,-427.7732,17.36312,0,0,0,0,100,0), -- 16:12:22
+(@PATH,34,476.0071,-414.7808,17.28578,0,0,0,0,100,0), -- 16:12:29
+(@PATH,35,479.7571,-410.0308,17.03578,0,0,0,0,100,0), -- 16:12:29
+(@PATH,36,485.7571,-402.5308,17.28578,0,0,0,0,100,0), -- 16:12:29
+(@PATH,37,490.2571,-397.2808,17.28578,0,0,0,0,100,0), -- 16:12:29
+(@PATH,38,494.1788,-380.7926,17.42046,0,0,0,0,100,0), -- 16:12:39
+(@PATH,39,494.2377,-364.9676,17.32992,0,0,0,0,100,0); -- 16:12:45
+
+-- Remove bad spawns
+DELETE FROM `creature` WHERE `guid` IN (12546, 12545, 12460, 12459, 12547, 12548, 12571, 12572);
+DELETE FROM `linked_respawn` WHERE `guid` IN (12546, 12545, 12460, 12459, 12547, 12548, 12571, 12572);
+
+-- Set right entry
+UPDATE `creature` SET `id`=20050 WHERE `guid`=12465;
+UPDATE `creature` SET `id`=20048 WHERE `guid`=12463;
+UPDATE `creature` SET `id`=20048 WHERE `guid`=12464;
+UPDATE `creature` SET `id`=20031 WHERE `guid`=12485;
+UPDATE `creature` SET `id`=20031 WHERE `guid`=12484;
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=12465;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(12465, 12465, 0, 0, 1),
+(12465, 12463, 3, 270, 2),
+(12465, 12464, 3, 90, 2);
+
+-- Pathing for Crimson Hand Inquisitor Entry: 20050 'TDB FORMAT'
+SET @NPC := 12465;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=655.5598,`position_y`=-74.22478,`position_z`=47.05975 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,655.5598,-74.22478,47.05975,0,0,0,0,100,0), -- 16:08:34
+(@PATH,2,651.4869,-79.5063,47.04427,0,0,0,0,100,0), -- 16:08:41
+(@PATH,3,631.1815,-102.5708,47.03273,0,0,0,0,100,0), -- 16:08:45
+(@PATH,4,619.0531,-111.1841,46.42092,0,0,0,0,100,0), -- 16:08:51
+(@PATH,5,617.8031,-111.9341,45.92092,0,0,0,0,100,0), -- 16:08:51
+(@PATH,6,606.8416,-117.8403,41.57663,0,0,0,0,100,0), -- 16:08:56
+(@PATH,7,589.9025,-125.8981,36.43072,0,0,0,0,100,0), -- 16:09:01
+(@PATH,8,580.551,-129.5958,36.31794,0,0,0,0,100,0), -- 16:09:03
+(@PATH,9,579.801,-129.8458,36.31794,0,0,0,0,100,0), -- 16:09:03
+(@PATH,10,573.301,-132.3458,35.06794,0,0,0,0,100,0), -- 16:09:03
+(@PATH,11,580.7385,-129.5231,36.23978,0,0,0,0,100,0), -- 16:09:10
+(@PATH,12,594.8942,-123.7401,37.95549,0,0,0,0,100,0), -- 16:09:14
+(@PATH,13,606.4921,-118.0775,41.48959,0,0,0,0,100,0), -- 16:09:17
+(@PATH,14,619.0924,-111.1047,46.4275,0,0,0,0,100,0), -- 16:09:21
+(@PATH,15,633.9102,-99.63002,47.15026,0,0,0,0,100,0), -- 16:09:25
+(@PATH,16,653.5164,-77.03735,47.0669,0,0,0,0,100,0); -- 16:09:31
+
+SET @CGUID := 86939;
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+14;
+INSERT INTO `creature` (`guid`, `id`, `map`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`) VALUES
+(@CGUID+0, 20048, 550, 615.408, 108.1827, 45.53154, 5.798159, 7200), -- 20048 (Area: -1)
+(@CGUID+1, 20050, 550, 621.3588, 107.9806, 46.45268, 5.711797, 7200), -- 20050 (Area: -1)
+(@CGUID+2, 20048, 550, 617.9949, 113.5776, 45.32596, 5.797285, 7200), -- 20048 (Area: -1)
+(@CGUID+3, 20048, 550, 651.4778, 85.3616, 46.98529, 2.460914, 7200), -- 20048 (Area: -1)
+(@CGUID+4, 20048, 550, 644.955, 78.4049, 46.925, 2.181662, 7200), -- 20048 (Area: -1)
+(@CGUID+5, 20048, 550, 590.4993, 115.3127, 37.52827, 2.478368, 7200), -- 20048 (Area: -1)
+(@CGUID+6, 20048, 550, 598.2206, 130.2819, 37.6214, 3.211406, 7200), -- 20048 (Area: -1)
+(@CGUID+7, 20049, 550, 641.1609, 77.83035, 46.88414, 2.076942, 7200), -- 20049 (Area: -1)
+(@CGUID+8, 20049, 550, 594.7014, 114.7355, 38.61783, 2.670354, 7200), -- 20049 (Area: -1)
+(@CGUID+9, 20049, 550, 654.7372, 88.48184, 46.82887, 2.583087, 7200), -- 20049 (Area: -1)
+(@CGUID+10, 20049, 550, 601.0374, 127.5763, 38.66954, 3.054326, 7200), -- 20049 (Area: -1)
+(@CGUID+11, 20047, 550, 651.4259, 87.75813, 46.89581, 2.321288, 7200), -- 20047 (Area: -1) (Auras: )
+(@CGUID+12, 20047, 550, 642.4025, 80.52879, 46.89103, 2.146755, 7200), -- 20047 (Area: -1) (Auras: )
+(@CGUID+13, 20047, 550, 597.9776, 114.9579, 39.38305, 2.792527, 7200), -- 20047 (Area: -1) (Auras: )
+(@CGUID+14, 20047, 550, 603.4946, 125.0622, 39.5998, 2.9147, 7200); -- 20047 (Area: -1) (Auras: )
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=86940;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(86940, 86940, 0, 0, 1),
+(86940, 86939, 3, 270, 2),
+(86940, 86941, 3, 90, 2);
+
+-- Pathing for Crimson Hand Inquisitor Entry: 20050 'TDB FORMAT'
+SET @NPC := 86940;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=655.5364,`position_y`=72.95763,`position_z`=47.05836 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,655.5364,72.95763,47.05836,0,0,0,0,100,0), -- 16:08:23
+(@PATH,2,651.3881,78.08571,47.05026,0,0,0,0,100,0), -- 16:08:30
+(@PATH,3,630.8481,100.8367,47.02984,0,0,0,0,100,0), -- 16:08:35
+(@PATH,4,618.8256,109.6938,46.47087,0,0,0,0,100,0), -- 16:08:40
+(@PATH,5,617.3256,110.6938,45.72087,0,0,0,0,100,0), -- 16:08:40
+(@PATH,6,606.6226,116.3986,41.5707,0,0,0,0,100,0), -- 16:08:45
+(@PATH,7,589.7452,124.2339,36.51868,0,0,0,0,100,0), -- 16:08:50
+(@PATH,8,580.804,128.0832,36.30165,0,0,0,0,100,0), -- 16:08:52
+(@PATH,9,580.054,128.5832,36.30165,0,0,0,0,100,0), -- 16:08:52
+(@PATH,10,577.9855,129.5036,35.95486,0,0,0,0,100,0), -- 16:08:55
+(@PATH,11,573.9855,129.7536,35.20486,0,0,0,0,100,0), -- 16:08:55
+(@PATH,12,573.3516,129.5648,35.01861,0,0,0,0,100,0), -- 16:09:00
+(@PATH,13,579.8276,128.5876,36.13748,0,0,0,0,100,0), -- 16:09:02
+(@PATH,14,580.5776,128.0876,36.13748,0,0,0,0,100,0), -- 16:09:02
+(@PATH,15,595.2676,121.8818,37.90141,0,0,0,0,100,0), -- 16:09:04
+(@PATH,16,606.479,116.8065,41.47223,0,0,0,0,100,0), -- 16:09:07
+(@PATH,17,618.7388,110.0541,46.44956,0,0,0,0,100,0), -- 16:09:12
+(@PATH,18,635.658,96.03332,46.94309,0,0,0,0,100,0), -- 16:09:17
+(@PATH,19,653.3979,75.61298,47.06518,0,0,0,0,100,0); -- 16:09:21
diff --git a/sql/updates/world/2015_11_03_00_world.sql b/sql/updates/world/2015_11_03_00_world.sql
new file mode 100644
index 00000000000..deb95e8e7be
--- /dev/null
+++ b/sql/updates/world/2015_11_03_00_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=50556;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,1,50556,0,0,31,0,3,28054,0,0,0,0,'','Only Lucky Wilhelm is a target for the spell Ride Wilhelm');
diff --git a/sql/updates/world/2015_11_03_01_world.sql b/sql/updates/world/2015_11_03_01_world.sql
new file mode 100644
index 00000000000..562e70491a7
--- /dev/null
+++ b/sql/updates/world/2015_11_03_01_world.sql
@@ -0,0 +1,41 @@
+SET @CGUID:=86954;
+
+DELETE FROM `creature` WHERE `id` IN (30655, 30640, 30832, 30646, 30651, 30707, 30649, 30749, 30700, 30699, 30690, 31246, 31353, 30589, 30588, 30476, 30559);
+DELETE FROM `creature` WHERE `guid` IN (122568, 122569, 122570);
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+29;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 30640, 623, 1, 1, 35.03846, 36.06336, 25.11708, 5.288348, 120, 0, 0), -- 30640 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+1, 30640, 623, 1, 1, 6.909693, 9.529325, 20.54005, 2.303835, 120, 0, 0), -- 30640 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+2, 30640, 623, 1, 1, -27.16368, 2.981263, 20.54094, 0.122173, 120, 0, 0), -- 30640 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+3, 30640, 623, 1, 1, -56.31194, 12.39219, 31.00466, 3.281219, 120, 0, 0), -- 30640 (Area: 4537) (possible waypoints or random movement)
+(@CGUID+4, 30646, 623, 1, 1, -30.25571, 31.80029, 12.35424, 1.605703, 120, 0, 0), -- 30646 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+5, 30646, 623, 1, 1, -5.325279, 31.62501, 12.34004, 1.500983, 120, 0, 0), -- 30646 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+6, 30651, 623, 1, 1, -40.68238, 29.21558, 12.33503, 1.919862, 120, 0, 0), -- 30651 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+7, 30651, 623, 1, 1, -17.81335, 32.07878, 12.3449, 1.553343, 120, 0, 0), -- 30651 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+8, 30651, 623, 1, 1, 5.88316, 30.50419, 12.34755, 1.32645, 120, 0, 0), -- 30651 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+9, 30655, 623, 1, 1, 6.662919, 19.23895, 10.05156, 0.5061455, 120, 0, 0), -- 30655 (Area: 4509)
+(@CGUID+10, 30655, 623, 1, 1, -43.53964, 18.66365, 9.692578, 3.246312, 120, 0, 0), -- 30655 (Area: 4509) (possible waypoints or random movement)
+(@CGUID+11, 30559, 623, 1, 1, 38.16154, -0.040522, 40.16801, 4.223697, 120, 0, 0), -- 30559 (Area: 4508) (possible waypoints or random movement)
+(@CGUID+12, 30476, 623, 1, 1, 31.41805, 0.126893, 41.69821, 0.05235988, 120, 0, 0), -- 30476 (Area: 4508) (Auras: 56852 - 56852) (possible waypoints or random movement)
+(@CGUID+13, 31353, 623, 1, 1, -21.7234, 19.33753, 9.687197, 1.64061, 120, 0, 0), -- 31353 (Area: 4509) (Auras: 57726 - 57726)
+(@CGUID+14, 30690, 622, 1, 1, 15.24723, 32.37709, 10.63188, 1.553343, 120, 0, 0), -- 30690 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+15, 30690, 622, 1, 1, -11.22309, 32.91199, 10.55865, 1.58825, 120, 0, 0), -- 30690 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+16, 30649, 622, 1, 1, 4.109683, 19.52689, 34.74765, 3.752458, 120, 0, 0), -- 30649 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+17, 30649, 622, 1, 1, -32.53434, 24.30232, 33.9708, 3.211406, 120, 0, 0), -- 30649 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+18, 30649, 622, 1, 1, 50.99569, 46.95655, 23.41373, 2.583087, 120, 0, 0), -- 30649 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+19, 30649, 622, 1, 1, 2.006737, 15.73845, 9.250069, 3.368485, 120, 0, 0), -- 30649 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+20, 30699, 622, 1, 1, 1.853844, 32.8888, 10.02361, 1.58825, 120, 0, 0), -- 30699 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+21, 30700, 622, 1, 1, -35.66628, 29.43331, 1.87925, 1.745329, 120, 0, 0), -- 30700 (Area: 0) (possible waypoints or random movement)
+(@CGUID+22, 30700, 622, 1, 1, 7.417077, 32.82674, 38.35604, 1.553343, 120, 0, 0), -- 30700 (Area: 0) (possible waypoints or random movement)
+(@CGUID+23, 30700, 622, 1, 1, -55.9708, 28.44186, 18.02501, 2.268928, 120, 0, 0), -- 30700 (Area: 0) (possible waypoints or random movement)
+(@CGUID+24, 30700, 622, 1, 1, 38.76255, 30.09343, 2.308181, 1.134464, 120, 0, 0), -- 30700 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+25, 30707, 622, 1, 1, 19.47087, 27.5296, 10.64527, 1.396263, 120, 0, 0), -- 30707 (Area: 4533) (possible waypoints or random movement)
+(@CGUID+26, 30707, 622, 1, 1, -15.3085, 30.59285, 11.11614, 2.635447, 120, 0, 0), -- 30707 (Area: 0) (possible waypoints or random movement)
+(@CGUID+27, 31353, 622, 1, 1, -7.999845, 17.85185, 35.04856, 2.460914, 120, 0, 0), -- 31353 (Area: 0) (possible waypoints or random movement)
+(@CGUID+28, 30588, 622, 1, 1, -18.10283, -0.042108, 45.31725, 1.762783, 120, 0, 0), -- 30588 (Area: 4533) (Auras: 57424 - 57424) (possible waypoints or random movement)
+(@CGUID+29, 30589, 622, 1, 1, -11.83204, -0.019289, 43.11467, 4.153883, 120, 0, 0); -- 30589 (Area: 4533) (possible waypoints or random movement)
+
+UPDATE `creature_template` SET `flags_extra`=128 WHERE `entry` IN (30690, 30699);
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (30700, 30646,30651,31353);
+
+DELETE FROM `creature_addon` WHERE `guid` IN (122568, 122569, 122758, 122777, 124002, 124113);
diff --git a/sql/updates/world/2015_11_03_02_world.sql b/sql/updates/world/2015_11_03_02_world.sql
new file mode 100644
index 00000000000..c4757d0d634
--- /dev/null
+++ b/sql/updates/world/2015_11_03_02_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=16573 AND `source_type`=0 AND `id`=7;
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp
index 3e0d684a1fd..45bfee5d596 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp
@@ -335,10 +335,11 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_DEL_GO_RESPAWN_BY_INSTANCE, "DELETE FROM gameobject_respawn WHERE mapId = ? AND instanceId = ?", CONNECTION_ASYNC);
// GM Tickets
- PrepareStatement(CHAR_SEL_GM_TICKETS, "SELECT id, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp FROM gm_ticket", CONNECTION_SYNCH);
- PrepareStatement(CHAR_REP_GM_TICKET, "REPLACE INTO gm_ticket (id, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp, resolvedBy) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_SEL_GM_TICKETS, "SELECT id, type, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp FROM gm_ticket", CONNECTION_SYNCH);
+ PrepareStatement(CHAR_REP_GM_TICKET, "REPLACE INTO gm_ticket (id, type, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp, resolvedBy) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_GM_TICKET, "DELETE FROM gm_ticket WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_PLAYER_GM_TICKETS, "DELETE FROM gm_ticket WHERE playerGuid = ?", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_UPD_PLAYER_GM_TICKETS_ON_CHAR_DELETION, "UPDATE gm_ticket SET type = 2 WHERE playerGuid = ?", CONNECTION_ASYNC);
// GM Survey/subsurvey/lag report
PrepareStatement(CHAR_INS_GM_SURVEY, "INSERT INTO gm_survey (guid, surveyId, mainSurvey, comment, createTime) VALUES (?, ?, ?, ?, UNIX_TIMESTAMP(NOW()))", CONNECTION_ASYNC);
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h
index 3382430d695..7a463c73df2 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.h
+++ b/src/server/database/Database/Implementation/CharacterDatabase.h
@@ -286,6 +286,7 @@ enum CharacterDatabaseStatements
CHAR_DEL_GM_TICKET,
CHAR_DEL_ALL_GM_TICKETS,
CHAR_DEL_PLAYER_GM_TICKETS,
+ CHAR_UPD_PLAYER_GM_TICKETS_ON_CHAR_DELETION,
CHAR_INS_GM_SURVEY,
CHAR_INS_GM_SUBSURVEY,
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index 9a6af376e6d..19cf9beff21 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -1435,3 +1435,19 @@ void Item::ItemContainerDeleteLootMoneyAndLootItemsFromDB()
ItemContainerDeleteLootMoneyFromDB();
ItemContainerDeleteLootItemsFromDB();
}
+
+void Item::SetCount(uint32 value)
+{
+ SetUInt32Value(ITEM_FIELD_STACK_COUNT, value);
+
+ if (Player* player = GetOwner())
+ {
+ if (TradeData* tradeData = player->GetTradeData())
+ {
+ TradeSlots slot = tradeData->GetTradeSlotForItem(GetGUID());
+
+ if (slot != TRADE_SLOT_INVALID)
+ tradeData->SetItem(slot, this, true);
+ }
+ }
+}
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index a268334b212..1eb6530a996 100644
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -262,7 +262,7 @@ class Item : public Object
bool GemsFitSockets() const;
uint32 GetCount() const { return GetUInt32Value(ITEM_FIELD_STACK_COUNT); }
- void SetCount(uint32 value) { SetUInt32Value(ITEM_FIELD_STACK_COUNT, value); }
+ void SetCount(uint32 value);
uint32 GetMaxStackCount() const { return GetTemplate()->GetMaxStackSize(); }
uint8 GetGemCountWithID(uint32 GemID) const;
uint8 GetGemCountWithLimitCategory(uint32 limitCategory) const;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 2f78280a409..97c4a78fc92 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -69,6 +69,7 @@
#include "SpellMgr.h"
#include "SpellHistory.h"
#include "Transport.h"
+#include "TicketMgr.h"
#include "UpdateData.h"
#include "UpdateFieldFlags.h"
#include "UpdateMask.h"
@@ -323,13 +324,13 @@ Item* TradeData::GetSpellCastItem() const
return m_spellCastItem ? m_player->GetItemByGuid(m_spellCastItem) : NULL;
}
-void TradeData::SetItem(TradeSlots slot, Item* item)
+void TradeData::SetItem(TradeSlots slot, Item* item, bool update /*= false*/)
{
ObjectGuid itemGuid;
if (item)
itemGuid = item->GetGUID();
- if (m_items[slot] == itemGuid)
+ if (m_items[slot] == itemGuid && !update)
return;
m_items[slot] = itemGuid;
@@ -4546,6 +4547,11 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
if (Guild* guild = sGuildMgr->GetGuildById(guildId))
guild->DeleteMember(playerguid, false, false, true);
+ // close player ticket if any
+ GmTicket* ticket = sTicketMgr->GetTicketByPlayer(playerguid);
+ if (ticket)
+ ticket->SetClosedBy(playerguid);
+
// remove from arena teams
LeaveAllArenaTeams(playerguid);
@@ -4757,9 +4763,18 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
stmt->setUInt32(0, guid);
trans->Append(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_GM_TICKETS);
- stmt->setUInt32(0, guid);
- trans->Append(stmt);
+ if (sWorld->getBoolConfig(CONFIG_DELETE_CHARACTER_TICKET_TRACE))
+ {
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_PLAYER_GM_TICKETS_ON_CHAR_DELETION);
+ stmt->setUInt32(0, guid);
+ trans->Append(stmt);
+ }
+ else
+ {
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_GM_TICKETS);
+ stmt->setUInt32(0, guid);
+ trans->Append(stmt);
+ }
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_BY_OWNER);
stmt->setUInt32(0, guid);
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 75f04cb0d7b..7c0700fa244 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1020,7 +1020,7 @@ class TradeData
Item* GetItem(TradeSlots slot) const;
bool HasItem(ObjectGuid itemGuid) const;
TradeSlots GetTradeSlotForItem(ObjectGuid itemGuid) const;
- void SetItem(TradeSlots slot, Item* item);
+ void SetItem(TradeSlots slot, Item* item, bool update = false);
uint32 GetSpell() const { return m_spell; }
void SetSpell(uint32 spell_id, Item* castItem = NULL);
diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp
index dbf66c6bd71..b4b3b8267c6 100644
--- a/src/server/game/Tickets/TicketMgr.cpp
+++ b/src/server/game/Tickets/TicketMgr.cpp
@@ -32,11 +32,11 @@ inline float GetAge(uint64 t) { return float(time(NULL) - t) / DAY; }
///////////////////////////////////////////////////////////////////////////////////////////////////
// GM ticket
-GmTicket::GmTicket() : _id(0), _posX(0), _posY(0), _posZ(0), _mapId(0), _createTime(0), _lastModifiedTime(0),
+GmTicket::GmTicket() : _id(0), _type(TICKET_TYPE_OPEN), _posX(0), _posY(0), _posZ(0), _mapId(0), _createTime(0), _lastModifiedTime(0),
_completed(false), _escalatedStatus(TICKET_UNASSIGNED), _viewed(false),
_needResponse(false), _needMoreHelp(false) { }
-GmTicket::GmTicket(Player* player) : _posX(0), _posY(0), _posZ(0), _mapId(0), _createTime(time(NULL)), _lastModifiedTime(time(NULL)),
+GmTicket::GmTicket(Player* player) : _type(TICKET_TYPE_OPEN), _posX(0), _posY(0), _posZ(0), _mapId(0), _createTime(time(NULL)), _lastModifiedTime(time(NULL)),
_completed(false), _escalatedStatus(TICKET_UNASSIGNED), _viewed(false),
_needResponse(false), _needMoreHelp(false)
{
@@ -49,10 +49,11 @@ GmTicket::~GmTicket() { }
bool GmTicket::LoadFromDB(Field* fields)
{
- // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
- // ticketId, guid, name, message, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, haveTicket
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
+ // id, type, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp
uint8 index = 0;
_id = fields[ index].GetUInt32();
+ _type = TicketType(fields[++index].GetUInt8());
_playerGuid = ObjectGuid(HighGuid::Player, fields[++index].GetUInt32());
_playerName = fields[++index].GetString();
_message = fields[++index].GetString();
@@ -75,11 +76,12 @@ bool GmTicket::LoadFromDB(Field* fields)
void GmTicket::SaveToDB(SQLTransaction& trans) const
{
- // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
- // id, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp, resolvedBy
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+ // id, type, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp, resolvedBy
uint8 index = 0;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_GM_TICKET);
stmt->setUInt32( index, _id);
+ stmt->setUInt8 (++index, uint8(_type));
stmt->setUInt32(++index, _playerGuid.GetCounter());
stmt->setString(++index, _playerName);
stmt->setString(++index, _message);
diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h
index f7d3178978f..a90a1ec0206 100644
--- a/src/server/game/Tickets/TicketMgr.h
+++ b/src/server/game/Tickets/TicketMgr.h
@@ -77,6 +77,13 @@ enum LagReportType
LAG_REPORT_TYPE_SPELL = 6
};
+enum TicketType
+{
+ TICKET_TYPE_OPEN = 0,
+ TICKET_TYPE_CLOSED = 1,
+ TICKET_TYPE_CHARACTER_DELETED = 2,
+};
+
class GmTicket
{
public:
@@ -84,7 +91,7 @@ public:
GmTicket(Player* player);
~GmTicket();
- bool IsClosed() const { return !_closedBy.IsEmpty(); }
+ bool IsClosed() const { return _type != TICKET_TYPE_OPEN; }
bool IsCompleted() const { return _completed; }
bool IsFromPlayer(ObjectGuid guid) const { return guid == _playerGuid; }
bool IsAssigned() const { return !_assignedTo.IsEmpty(); }
@@ -118,7 +125,7 @@ public:
else if (_escalatedStatus == TICKET_UNASSIGNED)
_escalatedStatus = TICKET_ASSIGNED;
}
- void SetClosedBy(ObjectGuid value) { _closedBy = value; }
+ void SetClosedBy(ObjectGuid value) { _closedBy = value; _type = TICKET_TYPE_CLOSED; }
void SetResolvedBy(ObjectGuid value) { _resolvedBy = value; }
void SetCompleted() { _completed = true; }
void SetMessage(std::string const& message)
@@ -150,6 +157,7 @@ public:
private:
uint32 _id;
+ TicketType _type; // 0 = Open, 1 = Closed, 2 = Character deleted
ObjectGuid _playerGuid;
std::string _playerName;
float _posX;
@@ -159,8 +167,8 @@ private:
std::string _message;
uint64 _createTime;
uint64 _lastModifiedTime;
- ObjectGuid _closedBy; // 0 = Open, -1 = Console, playerGuid = player abandoned ticket or read the GM response message, other = GM who closed it.
- ObjectGuid _resolvedBy; // 0 = Open, -1 = Resolved by Console, GM who resolved it by closing or completing the ticket.
+ ObjectGuid _closedBy; // 0 = Open or Closed by Console (if type = 1), playerGuid = GM who closed it or player abandoned ticket or read the GM response message.
+ ObjectGuid _resolvedBy; // 0 = Open or Resolved by Console (if type = 1), playerGuid = GM who resolved it by closing or completing the ticket.
ObjectGuid _assignedTo;
std::string _comment;
bool _completed;
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index a0dd889876c..bb4de29ad56 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -395,6 +395,7 @@ void World::LoadConfigSettings(bool reload)
///- Read ticket system setting from the config file
m_bool_configs[CONFIG_ALLOW_TICKETS] = sConfigMgr->GetBoolDefault("AllowTickets", true);
+ m_bool_configs[CONFIG_DELETE_CHARACTER_TICKET_TRACE] = sConfigMgr->GetBoolDefault("DeletedCharacterTicketTrace", false);
///- Get string for new logins (newly created characters)
SetNewCharString(sConfigMgr->GetStringDefault("PlayerStart.String", ""));
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index b8ffc946615..e3dc3b55681 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -144,6 +144,7 @@ enum WorldBoolConfigs
CONFIG_SHOW_BAN_IN_WORLD,
CONFIG_AUTOBROADCAST,
CONFIG_ALLOW_TICKETS,
+ CONFIG_DELETE_CHARACTER_TICKET_TRACE,
CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES,
CONFIG_PRESERVE_CUSTOM_CHANNELS,
CONFIG_PDUMP_NO_PATHS,
diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp
index 9b771f734be..a9baa45f344 100644
--- a/src/server/scripts/Commands/cs_ticket.cpp
+++ b/src/server/scripts/Commands/cs_ticket.cpp
@@ -150,7 +150,7 @@ public:
return true;
}
- sTicketMgr->ResolveAndCloseTicket(ticket->GetId(), player ? player->GetGUID() : ObjectGuid(uint64(-1)));
+ sTicketMgr->ResolveAndCloseTicket(ticket->GetId(), player ? player->GetGUID() : ObjectGuid(uint64(0)));
sTicketMgr->UpdateLastChange();
std::string msg = ticket->FormatMessageString(*handler, player ? player->GetName().c_str() : "Console", NULL, NULL, NULL, NULL);
@@ -248,7 +248,7 @@ public:
Player* gm = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr;
SQLTransaction trans = SQLTransaction(NULL);
- ticket->SetResolvedBy(gm ? gm->GetGUID() : ObjectGuid(uint64(-1)));
+ ticket->SetResolvedBy(gm ? gm->GetGUID() : ObjectGuid(uint64(0)));
ticket->SetCompleted();
ticket->SaveToDB(trans);
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
index 733647fdb66..471a7adc9d6 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
@@ -17,39 +17,61 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "Player.h"
#include "naxxramas.h"
-enum Says
+enum AnubSays
{
SAY_AGGRO = 0,
SAY_GREET = 1,
- SAY_SLAY = 2
+ SAY_SLAY = 2,
+
+ EMOTE_LOCUST = 3
};
-Position const GuardSummonPos = {3333.72f, -3476.30f, 287.1f, 6.2801f};
+enum GuardSays
+{
+ EMOTE_FRENZY = 0,
+ EMOTE_SPAWN = 1,
+ EMOTE_SCARAB = 2
+};
enum Events
{
- EVENT_IMPALE = 1,
- EVENT_LOCUST,
- EVENT_SPAWN_GUARDIAN_NORMAL,
- EVENT_BERSERK
+ EVENT_IMPALE = 1, // Cast Impale on a random target
+ EVENT_LOCUST, // Begin channeling Locust Swarm
+ EVENT_LOCUST_ENDS, // Locust swarm dissipates
+ EVENT_SPAWN_GUARD, // 10-man only - crypt guard has delayed spawn; also used for the locust swarm crypt guard in both modes
+ EVENT_SCARABS, // spawn corpse scarabs
+ EVENT_BERSERK // Berserk
};
enum Spells
{
- SPELL_IMPALE = 28783,
- SPELL_LOCUST_SWARM = 28785,
+ SPELL_IMPALE = 28783, // 25-man: 56090
+ SPELL_LOCUST_SWARM = 28785, // 25-man: 54021
SPELL_SUMMON_CORPSE_SCARABS_PLR = 29105, // This spawns 5 corpse scarabs on top of player
SPELL_SUMMON_CORPSE_SCARABS_MOB = 28864, // This spawns 10 corpse scarabs on top of dead guards
SPELL_BERSERK = 27680
};
+enum SpawnGroups
+{
+ GROUP_INITIAL_25M = 1,
+ GROUP_SINGLE_SPAWN = 2
+};
+
enum Misc
{
ACHIEV_TIMED_START_EVENT = 9891
};
+enum Phases
+{
+ PHASE_NORMAL = 1,
+ PHASE_SWARM
+};
+
class boss_anubrekhan : public CreatureScript
{
public:
@@ -62,46 +84,64 @@ public:
struct boss_anubrekhanAI : public BossAI
{
- boss_anubrekhanAI(Creature* creature) : BossAI(creature, BOSS_ANUBREKHAN)
+ boss_anubrekhanAI(Creature* creature) : BossAI(creature, BOSS_ANUBREKHAN) { }
+
+ void SummonGuards()
{
- Initialize();
+ if (Is25ManRaid())
+ me->SummonCreatureGroup(GROUP_INITIAL_25M);
}
- void Initialize()
+ void InitializeAI() override
{
- hasTaunted = false;
+ if (!me->isDead())
+ {
+ Reset();
+ SummonGuards();
+ }
}
- bool hasTaunted;
-
void Reset() override
{
_Reset();
+ guardCorpses.clear();
+ }
- Initialize();
+ void JustReachedHome() override
+ {
+ _JustReachedHome();
+ SummonGuards();
+ }
- if (GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL)
- {
- Position pos;
+ void JustSummoned(Creature* summon) override
+ {
+ BossAI::JustSummoned(summon);
+
+ if (me->IsInCombat())
+ if (summon->GetEntry() == NPC_CRYPT_GUARD)
+ summon->AI()->Talk(EMOTE_SPAWN, me);
+ }
- // respawn guard using home position,
- // otherwise, after a wipe, they respawn where boss was at wipe moment.
- pos = me->GetHomePosition();
- pos.m_positionY -= 10.0f;
- me->SummonCreature(NPC_CRYPT_GUARD, pos, TEMPSUMMON_CORPSE_DESPAWN);
+ void SummonedCreatureDies(Creature* summon, Unit* killer) override
+ {
+ BossAI::SummonedCreatureDies(summon, killer);
- pos = me->GetHomePosition();
- pos.m_positionY += 10.0f;
- me->SummonCreature(NPC_CRYPT_GUARD, pos, TEMPSUMMON_CORPSE_DESPAWN);
- }
+ if (summon->GetEntry() == NPC_CRYPT_GUARD)
+ guardCorpses.insert(summon->GetGUID());
+ }
+
+ void SummonedCreatureDespawn(Creature* summon) override
+ {
+ BossAI::SummonedCreatureDespawn(summon);
+
+ if (summon->GetEntry() == NPC_CRYPT_GUARD)
+ guardCorpses.erase(summon->GetGUID());
}
void KilledUnit(Unit* victim) override
{
- /// Force the player to spawn corpse scarabs via spell, @todo Check percent chance for scarabs, 20% at the moment
- if (!(rand32() % 5))
- if (victim->GetTypeId() == TYPEID_PLAYER)
- victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCARABS_PLR, true, NULL, NULL, me->GetGUID());
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCARABS_PLR, true, nullptr, nullptr, me->GetGUID());
Talk(SAY_SLAY);
}
@@ -113,37 +153,22 @@ public:
// start achievement timer (kill Maexna within 20 min)
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
}
+
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
- events.ScheduleEvent(EVENT_IMPALE, urand(10000, 20000));
- events.ScheduleEvent(EVENT_LOCUST, 90000);
- events.ScheduleEvent(EVENT_BERSERK, 600000);
-
- if (GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL)
- events.ScheduleEvent(EVENT_SPAWN_GUARDIAN_NORMAL, urand(15000, 20000));
- }
- void MoveInLineOfSight(Unit* who) override
- {
- if (!hasTaunted && me->IsWithinDistInMap(who, 60.0f) && who->GetTypeId() == TYPEID_PLAYER)
- {
- Talk(SAY_GREET);
- hasTaunted = true;
- }
- ScriptedAI::MoveInLineOfSight(who);
- }
-
- void SummonedCreatureDespawn(Creature* summon) override
- {
- BossAI::SummonedCreatureDespawn(summon);
-
- // check if it is an actual killed guard
- if (!me->IsAlive() || summon->IsAlive() || summon->GetEntry() != NPC_CRYPT_GUARD)
- return;
+ summons.DoZoneInCombat();
+
+ events.SetPhase(PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_IMPALE, urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_SCARABS, urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS), 0, PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_LOCUST, urand(80,120) * IN_MILLISECONDS, 0, PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_BERSERK, 10 * MINUTE * IN_MILLISECONDS);
- summon->CastSpell(summon, SPELL_SUMMON_CORPSE_SCARABS_MOB, true, NULL, NULL, me->GetGUID());
+ if (!Is25ManRaid())
+ events.ScheduleEvent(EVENT_SPAWN_GUARD, urand(15, 20) * IN_MILLISECONDS);
}
void UpdateAI(uint32 diff) override
@@ -158,22 +183,44 @@ public:
switch (eventId)
{
case EVENT_IMPALE:
- //Cast Impale on a random target
- //Do NOT cast it when we are afflicted by locust swarm
- if (!me->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_LOCUST_SWARM, me)))
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_IMPALE);
- events.ScheduleEvent(EVENT_IMPALE, urand(10000, 20000));
+ if (events.GetTimeUntilEvent(EVENT_LOCUST) < 5 * IN_MILLISECONDS) break; // don't chain impale tank -> locust swarm
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_IMPALE);
+ else
+ EnterEvadeMode();
+
+ events.ScheduleEvent(EVENT_IMPALE, urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_NORMAL);
+ break;
+ case EVENT_SCARABS:
+ events.ScheduleEvent(EVENT_SCARABS, urand(40 * IN_MILLISECONDS, 60 * IN_MILLISECONDS), 0, PHASE_NORMAL);
+
+ if (!guardCorpses.empty())
+ {
+ if (ObjectGuid target = Trinity::Containers::SelectRandomContainerElement(guardCorpses))
+ if(Creature* creatureTarget = ObjectAccessor::GetCreature(*me, target))
+ {
+ creatureTarget->CastSpell(creatureTarget, SPELL_SUMMON_CORPSE_SCARABS_MOB, true, nullptr, nullptr, me->GetGUID());
+ creatureTarget->AI()->Talk(EMOTE_SCARAB);
+ creatureTarget->DespawnOrUnsummon();
+ }
+ }
break;
case EVENT_LOCUST:
- /// @todo Add Text
+ Talk(EMOTE_LOCUST);
DoCast(me, SPELL_LOCUST_SWARM);
- DoSummon(NPC_CRYPT_GUARD, GuardSummonPos, 0, TEMPSUMMON_CORPSE_DESPAWN);
+ events.ScheduleEvent(EVENT_SPAWN_GUARD, 3 * IN_MILLISECONDS);
+
+ events.ScheduleEvent(EVENT_LOCUST_ENDS, RAID_MODE(19, 23) * IN_MILLISECONDS);
events.ScheduleEvent(EVENT_LOCUST, 90000);
+ events.SetPhase(PHASE_SWARM);
+ break;
+ case EVENT_LOCUST_ENDS:
+ events.ScheduleEvent(EVENT_IMPALE, urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_SCARABS, urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS), 0, PHASE_NORMAL);
+ events.SetPhase(PHASE_NORMAL);
break;
- case EVENT_SPAWN_GUARDIAN_NORMAL:
- /// @todo Add Text
- DoSummon(NPC_CRYPT_GUARD, GuardSummonPos, 0, TEMPSUMMON_CORPSE_DESPAWN);
+ case EVENT_SPAWN_GUARD:
+ me->SummonCreatureGroup(GROUP_SINGLE_SPAWN);
break;
case EVENT_BERSERK:
DoCast(me, SPELL_BERSERK, true);
@@ -182,13 +229,37 @@ public:
}
}
- DoMeleeAttackIfReady();
+ if (events.IsInPhase(PHASE_NORMAL))
+ DoMeleeAttackIfReady();
}
+ private:
+ GuidSet guardCorpses;
};
};
+class at_anubrekhan_entrance : public AreaTriggerScript
+{
+ public:
+ at_anubrekhan_entrance() : AreaTriggerScript("at_anubrekhan_entrance") { }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
+ {
+ InstanceScript* instance = player->GetInstanceScript();
+ if (!instance || instance->GetData(DATA_HAD_ANUBREKHAN_GREET) || instance->GetBossState(BOSS_ANUBREKHAN) != NOT_STARTED)
+ return true;
+
+ if (Creature* anub = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_ANUBREKHAN)))
+ anub->AI()->Talk(SAY_GREET);
+ instance->SetData(DATA_HAD_ANUBREKHAN_GREET, 1u);
+
+ return true;
+ }
+};
+
void AddSC_boss_anubrekhan()
{
new boss_anubrekhan();
+
+ new at_anubrekhan_entrance();
}
diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
index 37aaa639bb1..9b10fab2d62 100644
--- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
@@ -125,6 +125,7 @@ class instance_naxxramas : public InstanceMapScript
minHorsemenDiedTime = 0;
maxHorsemenDiedTime = 0;
AbominationCount = 0;
+ hadAnubRekhanGreet = false;
hadFaerlinaGreet = false;
CurrentWingTaunt = SAY_KELTHUZAD_FIRST_WING_TAUNT;
@@ -135,6 +136,9 @@ class instance_naxxramas : public InstanceMapScript
{
switch (creature->GetEntry())
{
+ case NPC_ANUBREKHAN:
+ AnubRekhanGUID = creature->GetGUID();
+ break;
case NPC_FAERLINA:
FaerlinaGUID = creature->GetGUID();
break;
@@ -319,9 +323,14 @@ class instance_naxxramas : public InstanceMapScript
case DATA_ABOMINATION_KILLED:
AbominationCount = value;
break;
+ case DATA_HAD_ANUBREKHAN_GREET:
+ hadAnubRekhanGreet = (value == 1u);
+ break;
case DATA_HAD_FAERLINA_GREET:
hadFaerlinaGreet = (value == 1u);
break;
+ default:
+ break;
}
}
@@ -331,6 +340,8 @@ class instance_naxxramas : public InstanceMapScript
{
case DATA_ABOMINATION_KILLED:
return AbominationCount;
+ case DATA_HAD_ANUBREKHAN_GREET:
+ return (uint32)hadAnubRekhanGreet;
case DATA_HAD_FAERLINA_GREET:
return (uint32)hadFaerlinaGreet;
default:
@@ -344,6 +355,8 @@ class instance_naxxramas : public InstanceMapScript
{
switch (id)
{
+ case DATA_ANUBREKHAN:
+ return AnubRekhanGUID;
case DATA_FAERLINA:
return FaerlinaGUID;
case DATA_THANE:
@@ -604,6 +617,8 @@ class instance_naxxramas : public InstanceMapScript
protected:
/* The Arachnid Quarter */
+ // Anub'rekhan
+ ObjectGuid AnubRekhanGUID;
// Grand Widow Faerlina
ObjectGuid FaerlinaGUID;
@@ -640,6 +655,7 @@ class instance_naxxramas : public InstanceMapScript
ObjectGuid KelthuzadDoorGUID;
ObjectGuid LichKingGUID;
uint8 AbominationCount;
+ bool hadAnubRekhanGreet;
bool hadFaerlinaGreet;
uint8 CurrentWingTaunt;
diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
index 6795e2cc337..6289b707411 100644
--- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h
+++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
@@ -46,6 +46,7 @@ enum Data
DATA_HEIGAN_ERUPT,
DATA_GOTHIK_GATE,
DATA_SAPPHIRON_BIRTH,
+ DATA_HAD_ANUBREKHAN_GREET,
DATA_HAD_FAERLINA_GREET,
@@ -63,6 +64,7 @@ enum Data
enum Data64
{
+ DATA_ANUBREKHAN,
DATA_FAERLINA,
DATA_THANE,
DATA_LADY,
@@ -83,6 +85,7 @@ enum Data64
enum CreaturesIds
{
+ NPC_ANUBREKHAN = 15956,
NPC_FAERLINA = 15953,
NPC_THANE = 16064,
NPC_LADY = 16065,
diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
index d5d2eebda38..6e4a8df6f25 100644
--- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp
+++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
@@ -622,17 +622,17 @@ public:
enum MiscLifewarden
{
- NPC_PRESENCE = 28563, // Freya's Presence
- NPC_SABOTEUR = 28538, // Cultist Saboteur
- NPC_SERVANT = 28320, // Servant of Freya
+ NPC_PRESENCE = 28563, // Freya's Presence
+ NPC_SABOTEUR = 28538, // Cultist Saboteur
+ NPC_SERVANT = 28320, // Servant of Freya
- WHISPER_ACTIVATE = 0,
+ WHISPER_ACTIVATE = 0,
- SPELL_FREYA_DUMMY = 51318,
- SPELL_LIFEFORCE = 51395,
- SPELL_FREYA_DUMMY_TRIGGER = 51335,
- SPELL_LASHER_EMERGE = 48195,
- SPELL_WILD_GROWTH = 52948,
+ SPELL_FREYA_DUMMY = 51318,
+ SPELL_LIFEFORCE = 51395,
+ SPELL_FREYA_DUMMY_TRIGGER = 51335,
+ SPELL_LASHER_EMERGE = 48195,
+ SPELL_WILD_GROWTH = 52948,
};
class spell_q12620_the_lifewarden_wrath : public SpellScriptLoader
@@ -702,25 +702,25 @@ public:
enum KickWhatKick
{
- NPC_LUCKY_WILHELM = 28054,
- NPC_APPLE = 28053,
- NPC_DROSTAN = 28328,
- NPC_CRUNCHY = 28346,
- NPC_THICKBIRD = 28093,
-
- SPELL_HIT_APPLE = 51331,
- SPELL_MISS_APPLE = 51332,
- SPELL_MISS_BIRD_APPLE = 51366,
- SPELL_APPLE_FALL = 51371,
- SPELL_BIRD_FALL = 51369,
-
- EVENT_MISS = 0,
- EVENT_HIT = 1,
- EVENT_MISS_BIRD = 2,
-
- SAY_WILHELM_MISS = 0,
- SAY_WILHELM_HIT = 1,
- SAY_DROSTAN_REPLY_MISS = 0,
+ NPC_LUCKY_WILHELM = 28054,
+ NPC_APPLE = 28053,
+ NPC_DROSTAN = 28328,
+ NPC_CRUNCHY = 28346,
+ NPC_THICKBIRD = 28093,
+
+ SPELL_HIT_APPLE = 51331,
+ SPELL_MISS_APPLE = 51332,
+ SPELL_MISS_BIRD_APPLE = 51366,
+ SPELL_APPLE_FALL = 51371,
+ SPELL_BIRD_FALL = 51369,
+
+ EVENT_MISS = 0,
+ EVENT_HIT = 1,
+ EVENT_MISS_BIRD = 2,
+
+ SAY_WILHELM_MISS = 0,
+ SAY_WILHELM_HIT = 1,
+ SAY_DROSTAN_REPLY_MISS = 0,
};
class spell_q12589_shoot_rjr : public SpellScriptLoader
@@ -800,8 +800,6 @@ public:
wilhelm->AI()->Talk(SAY_WILHELM_HIT);
if (Player* player = shooter->ToPlayer())
player->KilledMonsterCredit(NPC_APPLE);
- apple->DespawnOrUnsummon();
-
break;
}
}
@@ -828,11 +826,11 @@ may be easily converted to SAI when they get.*/
enum SongOfWindAndWater
{
// Spells
- SPELL_DEVOUR_WIND = 52862,
- SPELL_DEVOUR_WATER = 52864,
+ SPELL_DEVOUR_WIND = 52862,
+ SPELL_DEVOUR_WATER = 52864,
// NPCs
- NPC_HAIPHOON_WATER = 28999,
- NPC_HAIPHOON_AIR = 28985
+ NPC_HAIPHOON_WATER = 28999,
+ NPC_HAIPHOON_AIR = 28985
};
class npc_haiphoon : public CreatureScript
@@ -883,7 +881,7 @@ enum ReconnaissanceFlight
VIC_SAY_6 = 6,
PLANE_EMOTE = 0,
- SPELL_ENGINE = 52255, // Engine on Fire
+ SPELL_ENGINE = 52255, // Engine on Fire
SPELL_LAND = 52226, // Land Flying Machine
SPELL_CREDIT = 53328 // Land Flying Machine Credit
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index 13b6b22bed4..df2b2e73c1c 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -1074,6 +1074,16 @@ Command.LookupMaxResults = 0
AllowTickets = 1
#
+# DeletedCharacterTicketTrace
+# Description: Keep trace of tickets opened by deleted characters
+# gm_ticket.playerGuid will be 0, old GUID and character name
+# will be included in gm_ticket.comment
+# Default: 0 - (Disabled)
+# 1 - (Enabled)
+
+DeletedCharacterTicketTrace = 0
+
+#
# DungeonFinder.OptionsMask
# Description: Dungeon and raid finder system.
# Value is a bitmask consisting of: