diff options
52 files changed, 3122 insertions, 945 deletions
diff --git a/cmake/macros/FindBoost.cmake b/cmake/macros/FindBoost.cmake index 90bba26db70..ebd1c29598a 100644 --- a/cmake/macros/FindBoost.cmake +++ b/cmake/macros/FindBoost.cmake @@ -349,6 +349,8 @@ function(_Boost_GUESS_COMPILER_PREFIX _ret) else()
set (_boost_COMPILER "-il")
endif()
+ elseif (MSVC14)
+ set(_boost_COMPILER "-vc140")
elseif (MSVC12)
set(_boost_COMPILER "-vc120")
elseif (MSVC11)
diff --git a/sql/updates/world/2014_09_19_05_world_misc.sql b/sql/updates/world/2014_09_19_05_world_misc.sql new file mode 100644 index 00000000000..cde8c5e70a6 --- /dev/null +++ b/sql/updates/world/2014_09_19_05_world_misc.sql @@ -0,0 +1,52 @@ +DELETE FROM `creature` WHERE `guid` IN (101984,102039,101966,101942,101943,101913,101790,88308); +DELETE FROM `creature` WHERE `guid` BETWEEN 102022 AND 102032; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(101984,29504,571,1,1,7168.308,-3616.868,830.689,3.692736,300,5,1), -- Seething Revenant +(102022,29504,571,1,1,7185.381,-3632.053,824.247,4.338225,300,5,1), -- Seething Revenant +(102023,29504,571,1,1,7191.07,-3520.252,826.8859,4.542768,300,5,1), -- Seething Revenant +(102024,29504,571,1,1,7217.771,-3425.522,838.6382,5.01096,300,5,1), -- Seething Revenant +(102025,29504,571,1,1,7221.059,-3668.075,823.829,5.133259,300,5,1), -- Seething Revenant +(102026,29504,571,1,1,7223.214,-3625.205,823.4471,3.3342,300,5,1), -- Seething Revenant +(102027,29504,571,1,1,7245.613,-3324.135,852.1368,0.2004583,300,5,1), -- Seething Revenant +(102028,29504,571,1,1,7247.223,-3147.932,837.5768,3.113845,300,5,1), -- Seething Revenant +(102029,29504,571,1,1,7250.414,-3082.812,837.5768,5.273692,300,5,1), -- Seething Revenant +(102030,29504,571,1,1,7257.364,-3650.48,823.7267,5.320714,300,5,1), -- Seething Revenant +(102031,29504,571,1,1,7318.657,-3108.576,837.5768,0.7864776,300,5,1), -- Seething Revenant +(102032,29504,571,1,1,7319.729,-3256.892,843.9413,4.579113,300,5,1), -- Seething Revenant +(102039,29504,571,1,1,7322.325,-3181.755,837.5279,3.279677,300,5,1), -- Seething Revenant +(101966,29504,571,1,1,7384.565,-3117.917,837.5417,1.487818,300,5,1), -- Seething Revenant +(101942,29504,571,1,1,7407.328,-3276.822,858.1526,3.880721,300,5,1), -- Seething Revenant +(101943,29504,571,1,1,7454.707,-3204.902,837.5764,4.937684,300,5,1), -- Seething Revenant +(101913,29504,571,1,1,7457.445,-3072.987,837.5768,1.176061,300,5,1), -- Seething Revenant +(101790,29504,571,1,1,7483.619,-3148.763,837.5848,3.356413,300,5,1), -- Seething Revenant +(88308,29503,571,1,1,7217.113,-3659.162,823.2127,2.024582,120,0,0); -- Fjorn + +-- Pathing for Seething Revenant Entry: 29504 +SET @NPC := 102023; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=7185.569,`position_y`=-3578.212,`position_z`=826.3776 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,7185.569,-3578.212,826.3776,0,0,0,0,100,0), +(@PATH,2,7184.791,-3556.857,827.6204,0,0,0,0,100,0), +(@PATH,3,7191.07,-3520.252,826.8859,0,0,0,0,100,0), +(@PATH,4,7203.232,-3480.131,833.8677,0,0,0,0,100,0), +(@PATH,5,7191.07,-3520.252,826.8859,0,0,0,0,100,0), +(@PATH,6,7184.791,-3556.857,827.6204,0,0,0,0,100,0); + +-- Pathing for Seething Revenant Entry: 29504 +SET @NPC := 102024; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=7212.51,`position_y`=-3459.921,`position_z`=835.768 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,7212.51,-3459.921,835.768,0,0,0,0,100,0), +(@PATH,2,7219.868,-3432.39,837.9383,0,0,0,0,100,0), +(@PATH,3,7213.401,-3411.379,840.3849,0,0,0,0,100,0), +(@PATH,4,7206.807,-3388.99,843.8749,0,0,0,0,100,0), +(@PATH,5,7213.369,-3411.22,840.351,0,0,0,0,100,0), +(@PATH,6,7219.868,-3432.39,837.9383,0,0,0,0,100,0); diff --git a/sql/updates/world/2014_09_19_06_world_normalize_orientation.sql b/sql/updates/world/2014_09_19_06_world_normalize_orientation.sql new file mode 100644 index 00000000000..cf808c3ad82 --- /dev/null +++ b/sql/updates/world/2014_09_19_06_world_normalize_orientation.sql @@ -0,0 +1,2 @@ +UPDATE `creature` SET `orientation` = MOD(`orientation`, 2*PI()) WHERE `guid` IN (42160, 207528); +UPDATE `gameobject` SET `orientation` = MOD(`orientation`, 2*PI()) WHERE `guid` = 7607; diff --git a/sql/updates/world/2014_09_19_07_world_creature_text.sql b/sql/updates/world/2014_09_19_07_world_creature_text.sql new file mode 100644 index 00000000000..2b8d50cf21a --- /dev/null +++ b/sql/updates/world/2014_09_19_07_world_creature_text.sql @@ -0,0 +1,20 @@ +DELETE FROM `trinity_string` WHERE `entry` BETWEEN 12050 AND 12072; +DELETE FROM `creature_text` WHERE `entry`=15214 AND (`groupid`=0 OR `groupid` BETWEEN 27 AND 38); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(15214, 27, 0, 'The Battle for Lake Wintergrasp is about to begin!', 41, 0, 100, 0, 0, 0, 30960, 2, 'Invisible Stalker'), +(15214, 28, 0, 'Let the battle begin!', 41, 0, 100, 0, 0, 0, 30961, 2, 'Invisible Stalker'), + +(15214, 29, 0, 'The Alliance has defended Wintergrasp Fortress!', 41, 0, 100, 0, 0, 8455, 31403, 2, 'Invisible Stalker'), +(15214, 30, 0, 'The Alliance has captured Wintergrasp Fortress!', 41, 0, 100, 0, 0, 8455, 27817, 2, 'Invisible Stalker'), + +(15214, 31, 0, 'The Horde has defended Wintergrasp Fortress!', 41, 0, 100, 0, 0, 8454, 31405, 2, 'Invisible Stalker'), +(15214, 32, 0, 'The Horde has captured Wintergrasp Fortress!', 41, 0, 100, 0, 0, 8454, 27816, 2, 'Invisible Stalker'), + +(15214, 33, 0, 'The north-eastern keep tower has been damaged!', 41, 0, 100, 0, 0, 0, 31235, 2, 'Invisible Stalker'), +(15214, 34, 0, 'The north-eastern keep tower has been destroyed!', 41, 0, 100, 0, 0, 0, 31236, 2, 'Invisible Stalker'), + +(15214, 35, 0, 'The south-western keep tower has been damaged!', 41, 0, 100, 0, 0, 0, 31233, 2, 'Invisible Stalker'), +(15214, 36, 0, 'The south-western keep tower has been destroyed!', 41, 0, 100, 0, 0, 0, 31238, 2, 'Invisible Stalker'), + +(15214, 37, 0, 'You have reached Rank 1: Corporal', 42, 0, 100, 0, 0, 0, 30650, 0, 'Invisible Stalker - Player'), +(15214, 38, 0, 'You have reached Rank 2: First Lieutenant', 42, 0, 100, 0, 0, 0, 30651, 0, 'Invisible Stalker - Player'); diff --git a/sql/updates/world/2014_09_19_08_world_misc.sql b/sql/updates/world/2014_09_19_08_world_misc.sql new file mode 100644 index 00000000000..5cc435e27c2 --- /dev/null +++ b/sql/updates/world/2014_09_19_08_world_misc.sql @@ -0,0 +1,147 @@ +-- Fixups for Dun Neffelem + +-- Pathing for Son of Hodir Entry: 29809 +SET @NPC := 106320; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=7344.558,`position_y`=-2907.763,`position_z`=823.1275 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,7344.558,-2907.763,823.1275,0,0,0,0,100,0), +(@PATH,2,7312.182,-2896.888,823.4388,0,0,0,0,100,0), +(@PATH,3,7272.284,-2896.83,824.0884,0,0,0,0,100,0), +(@PATH,4,7312.182,-2896.888,823.4388,0,0,0,0,100,0), +(@PATH,5,7344.558,-2907.763,823.1275,0,0,0,0,100,0), +(@PATH,6,7377.579,-2916.997,823.7962,0,0,0,0,100,0), +(@PATH,7,7406.458,-2907.756,825.6242,0,0,0,0,100,0), +(@PATH,8,7377.579,-2916.997,823.7962,0,0,0,0,100,0); + +-- Pathing for Son of Hodir Entry: 29809 +SET @NPC := 106332; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=7368.463,`position_y`=-2842.755,`position_z`=800.5325 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,7368.463,-2842.755,800.5325,0,0,0,0,100,0), +(@PATH,2,7400.792,-2857.594,800.4119,0,0,0,0,100,0), +(@PATH,3,7445.252,-2857.651,799.9712,0,4000,0,0,100,0), +(@PATH,4,7400.792,-2857.594,800.4119,0,0,0,0,100,0), +(@PATH,5,7368.463,-2842.755,800.5325,0,0,0,0,100,0), +(@PATH,6,7333.749,-2849.251,800.5008,0,0,0,0,100,0), +(@PATH,7,7297.994,-2845.033,792.8625,0,4000,0,0,100,0), +(@PATH,8,7333.461,-2849.232,800.5008,0,0,0,0,100,0); + +-- Pathing for Son of Hodir Entry: 29809 +SET @NPC := 106334; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=7406.458,`position_y`=-2907.756,`position_z`=825.6242 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,7406.458,-2907.756,825.6242,0,0,0,0,100,0), +(@PATH,2,7377.579,-2916.997,823.7962,0,0,0,0,100,0), +(@PATH,3,7344.558,-2907.763,823.1275,0,0,0,0,100,0), +(@PATH,4,7312.182,-2896.888,823.4388,0,0,0,0,100,0), +(@PATH,5,7272.284,-2896.83,824.0884,0,0,0,0,100,0), +(@PATH,6,7312.182,-2896.888,823.4388,0,0,0,0,100,0), +(@PATH,7,7344.558,-2907.763,823.1275,0,0,0,0,100,0), +(@PATH,8,7377.579,-2916.997,823.7962,0,0,0,0,100,0); + +-- Pathing for Frostworg Entry: 29358 +SET @NPC := 112393; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=7440.885,`position_y`=-2710.991,`position_z`=808.2947 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,7440.885,-2710.991,808.2947,0,0,0,0,100,0), +(@PATH,2,7416.691,-2667.639,809.0078,0,0,0,0,100,0), +(@PATH,3,7440.885,-2710.991,808.2947,0,0,0,0,100,0), +(@PATH,4,7457.135,-2748.122,798.2523,0,0,0,0,100,0), +(@PATH,5,7458.822,-2784.053,787.1277,0,0,0,0,100,0), +(@PATH,6,7457.135,-2748.122,798.2523,0,0,0,0,100,0); + +-- Pathing for Frostworg Entry: 29358 +SET @NPC := 112514; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=7257.337,`position_y`=-2621.496,`position_z`=814.8495 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,7257.337,-2621.496,814.8495,0,0,0,0,100,0), +(@PATH,2,7306.544,-2622.633,814.8911,0,0,0,0,100,0), +(@PATH,3,7353.797,-2608.551,814.8893,0,0,0,0,100,0), +(@PATH,4,7306.544,-2622.633,814.8911,0,0,0,0,100,0); + +-- Pathing for Frostworg Entry: 29358 +SET @NPC := 112392; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=7327.009,`position_y`=-2631.48,`position_z`=747.7151 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,7327.009,-2631.48,747.7151,0,0,0,0,100,0), +(@PATH,2,7346.908,-2653.571,747.9738,0,0,0,0,100,0), +(@PATH,3,7368.78,-2655.305,748.0898,0,0,0,0,100,0), +(@PATH,4,7368.78,-2655.305,748.0898,4.171337,20000,0,0,100,0), +(@PATH,5,7328.656,-2648.171,747.0898,0,0,0,0,100,0), +(@PATH,6,7317.717,-2612.781,747.0901,0,0,0,0,100,0), +(@PATH,7,7341.498,-2597.444,749.4114,0,0,0,0,100,0), +(@PATH,8,7341.498,-2597.444,749.4114,3.246312,20000,0,0,100,0); + +-- Pathing for Frostworg Entry: 29358 +SET @NPC := 112515; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=7253.167,`position_y`=-2730.059,`position_z`=747.0898 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,7253.167,-2730.059,747.0898,0,0,0,0,100,0), +(@PATH,2,7235.487,-2711.358,748.4982,0,0,0,0,100,0), +(@PATH,3,7202.864,-2711.527,762.0225,0,0,0,0,100,0), +(@PATH,4,7177.577,-2716.251,773.6584,0,0,0,0,100,0), +(@PATH,5,7170.178,-2744.835,776.9741,0,0,0,0,100,0), +(@PATH,6,7200.037,-2774.302,776.9871,0,0,0,0,100,0), +(@PATH,7,7232.467,-2806.691,777.7,0,0,0,0,100,0), +(@PATH,8,7274.858,-2803.938,776.7856,0,0,0,0,100,0), +(@PATH,9,7296.991,-2780.158,776.1025,0,0,0,0,100,0), +(@PATH,10,7298.799,-2748.659,775.0818,0,0,0,0,100,0), +(@PATH,11,7304.38,-2728.39,746.965,0,0,0,0,100,0), +(@PATH,12,7264.486,-2745.654,748.08,0,0,0,0,100,0), +(@PATH,13,7261.873,-2751.083,748.8501,0,0,0,0,100,0), +(@PATH,14,7261.873,-2751.083,748.8501,1.570796,15000,0,0,100,0); + +-- Captive Proto Drake Beam Bunny SAI +SET @ENTRY := 29805; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,1,0,0,0,0,11,55244,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captive Proto Drake Beam Bunny - OCC - Cast 'Proto Drake Chain Channel'"); + +-- Add spell target condition for Proto Drake Chain Channel +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (55244); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 55244, 0, 1, 31, 3, 30442, 0, 0, '', 'Proto Drake Chain Channel targets Phase 1 Generic Bunny'); + +DELETE FROM `creature` WHERE `id`=29805; +DELETE FROM `creature` WHERE `guid` IN (97557,97558,97560,97561,97562,97563,97564); +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(97557,29708,571,1,1,7152.347,-2669.387,849.6174,5.760307,120,0,0), -- Captive Proto-Drake +(97558,29708,571,1,1,7227.964,-2659.802,866.7960,2.988974,120,0,0), -- Captive Proto-Drake +(97560,29708,571,1,1,7242.648,-2660.197,899.8528,5.542587,120,0,0), -- Captive Proto-Drake +(97561,29708,571,1,1,7277.569,-2735.515,872.2152,5.635166,120,0,0), -- Captive Proto-Drake +(97562,29708,571,1,1,7339.314,-2827.775,886.0789,2.190141,120,0,0), -- Captive Proto-Drake +(97563,29708,571,1,1,7353.549,-2895.788,896.9881,1.938608,120,0,0), -- Captive Proto-Drake +(97564,29708,571,1,1,7388.962,-2785.868,869.0148,3.480815,120,0,0); -- Captive Proto-Drake + +DELETE FROM `vehicle_template_accessory` WHERE `entry`=29708; +INSERT INTO `vehicle_template_accessory` (`entry`,`accessory_entry`,`seat_id`,`minion`,`description`,`summontype`,`summontimer`) VALUES +(29708,29805,0,0, 'Captive Proto-Drake',8,0); diff --git a/sql/updates/world/2014_09_19_09_world_misc.sql b/sql/updates/world/2014_09_19_09_world_misc.sql new file mode 100644 index 00000000000..94f9e9957ac --- /dev/null +++ b/sql/updates/world/2014_09_19_09_world_misc.sql @@ -0,0 +1,8 @@ +DELETE FROM `creature_addon` WHERE `bytes1`=67108864; +DELETE FROM `creature_template_addon` WHERE `entry` IN (29219,29185); +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`auras`) VALUES +(29206,67108864,1, '53624'),(29219,67108864,1, ''),(29185,67108864,1, '53624'); +UPDATE `creature_template` SET `InhabitType`=4 WHERE entry IN (29708,29805,30442); +UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `id` IN (29805,30442); +UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `guid` IN (97558,97560,97562,97562,97563,97564); +UPDATE `creature_addon` SET `bytes1`=50331648 WHERE guid IN (SELECT guid FROM creature WHERE id=29625); diff --git a/sql/updates/world/2014_09_19_10_world_misc.sql b/sql/updates/world/2014_09_19_10_world_misc.sql new file mode 100644 index 00000000000..81917bda4e5 --- /dev/null +++ b/sql/updates/world/2014_09_19_10_world_misc.sql @@ -0,0 +1,38 @@ +-- Pathing for Son of Hodir Entry: 29809 +SET @NPC := 106332; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=7333.749,`position_y`=-2849.251,`position_z`=800.5008 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,7333.749,-2849.251,800.5008,0,0,0,0,100,0), +(@PATH,2,7297.994,-2845.033,792.8625,0,0,0,0,100,0), +(@PATH,3,7333.748,-2849.252,800.5008,0,0,0,0,100,0), +(@PATH,4,7368.463,-2842.755,800.5325,0,0,0,0,100,0), +(@PATH,5,7400.792,-2857.594,800.4119,0,0,0,0,100,0), +(@PATH,6,7445.252,-2857.651,799.9712,0,0,0,0,100,0), +(@PATH,7,7400.792,-2857.594,800.4119,0,0,0,0,100,0), +(@PATH,8,7368.463,-2842.755,800.5325,0,0,0,0,100,0); + +-- Pathing for Son of Hodir Entry: 29809 +SET @NPC := 106501; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=7360.89,`position_y`=-2783.458,`position_z`=770.2411 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,7360.89,-2783.458,770.2411,0,0,0,0,100,0), +(@PATH,2,7347.097,-2770.412,767.152,0,0,0,0,100,0), +(@PATH,3,7347.097,-2770.412,767.152,1.553343,15000,0,0,100,0), +(@PATH,4,7395.059,-2778.334,770.9921,0,0,0,0,100,0), +(@PATH,5,7397.093,-2777.097,770.9921,0,0,0,0,100,0), +(@PATH,6,7397.093,-2777.097,770.9921,3.176499,20000,0,0,100,0); + +UPDATE `creature` SET `spawndist`=0,`MovementType`=0,`position_x`=7206.456,`position_y`=-2834.342,`position_z`=822.8013,`orientation`=1.553343 WHERE `guid`=106336; +DELETE FROM `creature_addon` WHERE `guid`=106336; +DELETE FROM `waypoint_data` WHERE `id`=1063360; +UPDATE `creature` SET `modelid`=0,`spawndist`=0,`MovementType`=0,`curhealth`=1 WHERE `id`=29558; +DELETE FROM `creature` WHERE `guid`=97993; +DELETE FROM `creature_addon` WHERE `guid`=97993; diff --git a/sql/updates/world/2014_09_19_11_world_misc.sql b/sql/updates/world/2014_09_19_11_world_misc.sql new file mode 100644 index 00000000000..387c293bbe2 --- /dev/null +++ b/sql/updates/world/2014_09_19_11_world_misc.sql @@ -0,0 +1,20 @@ +-- Pathing for Creteus Entry: 30052 +SET @NPC := 104811; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=7364.138,`position_y`=-963.9908,`position_z`=906.1143 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,7364.138,-963.9908,906.1143,0,0,0,0,100,0), +(@PATH,2,7354.389,-990.3735,907.1021,0,0,0,0,100,0), +(@PATH,3,7344.142,-1026.269,907.1985,0,0,0,0,100,0), +(@PATH,4,7346.274,-1065.193,908.5342,0,0,0,0,100,0), +(@PATH,5,7344.142,-1026.269,907.1985,0,0,0,0,100,0), +(@PATH,6,7354.389,-990.3735,907.1021,0,0,0,0,100,0), +(@PATH,7,7364.138,-963.9908,906.1143,0,0,0,0,100,0), +(@PATH,8,7374.346,-935.5877,906.896,0,0,0,0,100,0), +(@PATH,9,7393.324,-923.742,907.4128,0,0,0,0,100,0), +(@PATH,10,7420.953,-909.6816,908.7245,0,0,0,0,100,0), +(@PATH,11,7393.313,-923.7285,907.2764,0,0,0,0,100,0), +(@PATH,12,7374.346,-935.5877,906.896,0,0,0,0,100,0); diff --git a/sql/updates/world/2014_09_19_12_world_misc.sql b/sql/updates/world/2014_09_19_12_world_misc.sql new file mode 100644 index 00000000000..323ebe2c824 --- /dev/null +++ b/sql/updates/world/2014_09_19_12_world_misc.sql @@ -0,0 +1,50 @@ +-- Pathing for Son of Corok Entry: 19824 +SET @NPC := 70934; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4400.59,`position_y`=1298.177,`position_z`=84.52772 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4400.59,1298.177,84.52772,0,0,0,0,100,0), +(@PATH,2,-4420.625,1286.901,77.03065,0,0,0,0,100,0), +(@PATH,3,-4433.011,1273.885,71.53358,0,0,0,0,100,0), +(@PATH,4,-4443.392,1262.241,66.49532,0,0,0,0,100,0), +(@PATH,5,-4461.213,1245.472,58.49483,0,0,0,0,100,0), +(@PATH,6,-4443.392,1262.241,66.49532,0,0,0,0,100,0), +(@PATH,7,-4433.011,1273.885,71.53358,0,0,0,0,100,0), +(@PATH,8,-4420.625,1286.901,77.03065,0,0,0,0,100,0); + +-- Pathing for Son of Corok Entry: 19824 +SET @NPC := 70936; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4462.013,`position_y`=1364.896,`position_z`=131.461 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4462.013,1364.896,131.461,0,0,0,0,100,0), +(@PATH,2,-4423.92,1374.436,132.7069,0,0,0,0,100,0), +(@PATH,3,-4406.461,1375.059,136.9795,0,0,0,0,100,0), +(@PATH,4,-4380.588,1383.079,140.5566,0,0,0,0,100,0), +(@PATH,5,-4354.617,1389.822,141.8532,0,0,0,0,100,0), +(@PATH,6,-4380.588,1383.079,140.5566,0,0,0,0,100,0), +(@PATH,7,-4406.461,1375.059,136.9795,0,0,0,0,100,0), +(@PATH,8,-4423.92,1374.436,132.7069,0,0,0,0,100,0); + +-- Pathing for Son of Corok Entry: 19824 +SET @NPC := 70939; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4329.11,`position_y`=1386.571,`position_z`=143.7565 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4329.11,1386.571,143.7565,0,0,0,0,100,0), +(@PATH,2,-4303.821,1385.086,143.7775,0,0,0,0,100,0), +(@PATH,3,-4281.203,1392.313,139.9943,0,0,0,0,100,0), +(@PATH,4,-4257.452,1400.368,135.1779,0,0,0,0,100,0), +(@PATH,5,-4241.35,1408.419,131.0781,0,0,0,0,100,0), +(@PATH,6,-4257.452,1400.368,135.1779,0,0,0,0,100,0), +(@PATH,7,-4281.203,1392.313,139.9943,0,0,0,0,100,0), +(@PATH,8,-4303.821,1385.086,143.7775,0,0,0,0,100,0); diff --git a/sql/updates/world/2014_09_19_13_world_misc.sql b/sql/updates/world/2014_09_19_13_world_misc.sql new file mode 100644 index 00000000000..14e15fc4e68 --- /dev/null +++ b/sql/updates/world/2014_09_19_13_world_misc.sql @@ -0,0 +1,15 @@ +-- Pathing for Fjorn Entry: 29503 +SET @NPC := 88308; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=7174.861,`position_y`=-3647.9,`position_z`=828.4227 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,7174.861,-3647.9,828.4227,0,0,0,0,100,0), +(@PATH,2,7190.947,-3657.829,823.7313,0,0,0,0,100,0), +(@PATH,3,7203.092,-3661.859,823.8141,0,0,0,0,100,0), +(@PATH,4,7217.113,-3659.162,823.2127,2.024582,24000,0,0,100,0), +(@PATH,5,7178.155,-3646.861,826.0764,0,0,0,0,100,0), +(@PATH,6,7166.444,-3625.109,830.9739,0,0,0,0,100,0), +(@PATH,7,7166.76,-3600.556,830.7375,0,35000,0,0,100,0); diff --git a/sql/updates/world/2014_09_20_00_world_creature.sql b/sql/updates/world/2014_09_20_00_world_creature.sql new file mode 100644 index 00000000000..aa66c81d651 --- /dev/null +++ b/sql/updates/world/2014_09_20_00_world_creature.sql @@ -0,0 +1,2 @@ +-- Stormpeak Wyrm proper respawntime +UPDATE `creature` SET `spawntimesecs`=300 WHERE `id`=29753; diff --git a/sql/updates/world/2014_09_20_01_world_creature.sql b/sql/updates/world/2014_09_20_01_world_creature.sql new file mode 100644 index 00000000000..857612e2c99 --- /dev/null +++ b/sql/updates/world/2014_09_20_01_world_creature.sql @@ -0,0 +1,115 @@ +-- Some Shadowmoon missing spawns +SET @CGUID := 213235; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+70; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0,22016,530,1,1,-4096.191,1317.842,63.59529,3.054326,300,0,0), -- Eclipsion Soldier +(@CGUID+1,22016,530,1,1,-4096.357,1322.749,65.64674,2.932153,300,0,0), -- Eclipsion Soldier +(@CGUID+2,22016,530,1,1,-4099.992,1353.743,73.72105,3.293946,300,0,0), -- Eclipsion Soldier +(@CGUID+3,22016,530,1,1,-4100.049,1373.944,79.28508,2.099715,300,0,0), -- Eclipsion Soldier +(@CGUID+4,22016,530,1,1,-4100.065,1377.723,80.54171,2.111848,300,0,0), -- Eclipsion Soldier +(@CGUID+5,22016,530,1,1,-4100.112,1350.39,72.31179,3.054326,300,0,0), -- Eclipsion Soldier +(@CGUID+6,22016,530,1,1,-4108.455,1288.618,54.21447,1.989675,300,0,0), -- Eclipsion Soldier +(@CGUID+7,22016,530,1,1,-4111.45,1286.984,54.4025,2.268928,300,0,0), -- Eclipsion Soldier +(@CGUID+8,22016,530,1,1,-4120.15,1336.899,68.11907,0,300,0,0), -- Eclipsion Soldier +(@CGUID+9,22016,530,1,1,-4120.369,1333.758,66.54772,0.01745329,300,0,0), -- Eclipsion Soldier +(@CGUID+10,22016,530,1,1,-4121.998,1381.514,81.2709,0.715585,300,0,0), -- Eclipsion Soldier +(@CGUID+11,22016,530,1,1,-4124.98,1317.968,58.9916,5.51524,300,0,0), -- Eclipsion Soldier +(@CGUID+12,22016,530,1,1,-4125.009,1385.029,82.06972,0.6806784,300,0,0), -- Eclipsion Soldier +(@CGUID+13,22016,530,1,1,-4127.137,1286,55.26802,1.815142,300,0,0), -- Eclipsion Soldier +(@CGUID+14,22016,530,1,1,-4127.499,1315.508,57.7211,5.707227,300,0,0), -- Eclipsion Soldier +(@CGUID+15,22016,530,1,1,-4131.382,1285.947,55.53052,1.972222,300,0,0), -- Eclipsion Soldier +(@CGUID+16,22016,530,1,1,-4149.733,1310.271,56.65502,4.729842,300,0,0), -- Eclipsion Soldier +(@CGUID+17,22016,530,1,1,-4153.588,1311.411,56.16999,4.625123,300,0,0), -- Eclipsion Soldier +(@CGUID+18,22016,530,1,1,-4173.101,1288.451,57.65374,1.500983,300,0,0), -- Eclipsion Soldier +(@CGUID+19,22016,530,1,1,-4173.19,1316.726,57.28808,4.625123,300,0,0), -- Eclipsion Soldier +(@CGUID+20,22016,530,1,1,-4176.76,1317.902,56.13078,4.665615,300,0,0), -- Eclipsion Soldier +(@CGUID+21,22016,530,1,1,-4177.251,1289.748,58.80741,1.466077,300,0,0), -- Eclipsion Soldier +(@CGUID+22,22016,530,1,1,-4191.07,1296.055,57.67142,1.605703,300,0,0), -- Eclipsion Soldier +(@CGUID+23,22016,530,1,1,-4194.589,1296.483,57.23888,1.553343,300,0,0), -- Eclipsion Soldier +(@CGUID+24,22016,530,1,1,-4203.806,1313.086,56.38221,4.729842,300,0,0), -- Eclipsion Soldier +(@CGUID+25,22016,530,1,1,-4206.372,1313.213,56.97198,4.677482,300,0,0), -- Eclipsion Soldier +(@CGUID+26,22016,530,1,1,-4212.834,1296.573,57.13382,1.570796,300,0,0), -- Eclipsion Soldier +(@CGUID+27,22016,530,1,1,-4216.644,1297.057,56.21738,1.570796,300,0,0), -- Eclipsion Soldier +(@CGUID+28,22016,530,1,1,-4225.272,1314.485,56.76705,4.642576,300,0,0), -- Eclipsion Soldier +(@CGUID+29,22016,530,1,1,-4229.29,1314.141,56.20462,4.834562,300,0,0), -- Eclipsion Soldier +(@CGUID+30,22016,530,1,1,-4234.124,1296.488,57.25279,1.623156,300,0,0), -- Eclipsion Soldier +(@CGUID+31,22016,530,1,1,-4237.948,1296.56,56.6738,1.518436,300,0,0), -- Eclipsion Soldier +(@CGUID+32,22016,530,1,1,-4246.702,1319.209,55.12754,4.729842,300,0,0), -- Eclipsion Soldier +(@CGUID+33,22016,530,1,1,-4250.584,1318.969,54.34119,4.694936,300,0,0), -- Eclipsion Soldier +(@CGUID+34,22016,530,1,1,-4254.897,1297.109,54.1566,1.623156,300,0,0), -- Eclipsion Soldier +(@CGUID+35,22016,530,1,1,-4259.223,1297.016,53.46115,1.570796,300,0,0), -- Eclipsion Soldier +(@CGUID+36,22016,530,1,1,-4296.026,1328.683,65.42085,4.904375,300,0,0), -- Eclipsion Soldier +(@CGUID+37,22016,530,1,1,-4299.64,1328.812,66.22527,4.747295,300,0,0), -- Eclipsion Soldier +(@CGUID+38,22016,530,1,1,-4313.26,1332.713,75.18435,4.869469,300,0,0), -- Eclipsion Soldier +(@CGUID+39,22016,530,1,1,-4316.293,1330.928,75.44308,4.799655,300,0,0), -- Eclipsion Soldier +(@CGUID+40,22016,530,1,1,-4321.846,1306.318,77.87005,1.43117,300,0,0), -- Eclipsion Soldier +(@CGUID+41,22016,530,1,1,-4325.973,1306.922,79.31133,1.553343,300,0,0), -- Eclipsion Soldier +(@CGUID+42,22016,530,1,1,-4333.595,1331.259,81.49699,4.747295,300,0,0), -- Eclipsion Soldier +(@CGUID+43,22016,530,1,1,-4337.558,1331.472,82.28129,4.747295,300,0,0), -- Eclipsion Soldier +(@CGUID+44,22016,530,1,1,-4341.43,1307.242,81.52878,1.605703,300,0,0), -- Eclipsion Soldier +(@CGUID+45,22016,530,1,1,-4345.604,1307.461,81.77303,1.466077,300,0,0), -- Eclipsion Soldier +(@CGUID+46,22017,530,1,1,-4110.106,1287.867,54.45539,2.391101,300,0,0), -- Eclipsion Spellbinder +(@CGUID+47,22017,530,1,1,-4248.659,1319.342,54.67619,4.39823,300,0,0), -- Eclipsion Spellbinder +(@CGUID+48,22017,530,1,1,-4278.104,1312.277,56.58344,2.740167,300,0,0), -- Eclipsion Spellbinder +(@CGUID+49,22017,530,1,1,-4157.983,1285.352,57.4682,0,300,0,0), -- Eclipsion Spellbinder +(@CGUID+50,22017,530,1,1,-4204.949,1314.804,57.78447,4.677482,300,0,0), -- Eclipsion Spellbinder +(@CGUID+51,22017,530,1,1,-4175.284,1288.93,58.04388,1.570796,300,0,0), -- Eclipsion Spellbinder +(@CGUID+52,22017,530,1,1,-4146.76,1283.892,59.42959,2.635447,300,0,0), -- Eclipsion Spellbinder +(@CGUID+53,22017,530,1,1,-4287.814,1313.235,62.81659,6.213372,300,0,0), -- Eclipsion Spellbinder +(@CGUID+54,22017,530,1,1,-4433.133,1253.58,71.40871,2.670354,300,0,0), -- Eclipsion Spellbinder +(@CGUID+55,22017,530,1,1,-4323.755,1306.162,78.73392,1.605703,300,0,0), -- Eclipsion Spellbinder +(@CGUID+56,22017,530,1,1,-4411.285,1278.528,79.11395,2.495821,300,0,0), -- Eclipsion Spellbinder +(@CGUID+57,22017,530,1,1,-4430.338,1293.527,79.38573,5.51524,300,0,0), -- Eclipsion Spellbinder +(@CGUID+58,22017,530,1,1,-4343.598,1307.349,81.73926,1.48353,300,0,0), -- Eclipsion Spellbinder +(@CGUID+59,22017,530,1,1,-4335.564,1331.208,81.76533,4.537856,300,0,0), -- Eclipsion Spellbinder +(@CGUID+60,22017,530,1,1,-4393.921,1293.493,85.24201,2.391101,300,0,0), -- Eclipsion Spellbinder +(@CGUID+61,22017,530,1,1,-4372.298,1299.017,86.82649,1.710423,300,0,0), -- Eclipsion Spellbinder +(@CGUID+62,22018,530,1,1,-4279.213,1299.724,48.06502,3.121056,300,0,0), -- Eclipsion Cavalier +(@CGUID+63,22018,530,1,1,-4223.789,1311.041,56.19987,3.10787,300,0,0), -- Eclipsion Cavalier +(@CGUID+64,22018,530,1,1,-4102.838,1353.306,72.31637,0.1523528,300,0,0), -- Eclipsion Cavalier +(@CGUID+65,22018,530,1,1,-4117.879,1380.962,80.29784,5.423772,300,0,0), -- Eclipsion Cavalier +(@CGUID+66,22018,530,1,1,-4393.687,1296.77,85.9353,5.331202,300,0,0), -- Eclipsion Cavalier +(@CGUID+67,19824,530,1,1,-4153.195,1279.679,57.75654,1.27409,300,0,0), -- Son of Corok +(@CGUID+68,19824,530,1,1,-4204.253,1308.621,56.27257,3.128989,300,0,0), -- Son of Corok +(@CGUID+69,19824,530,1,1,-4281.281,1317.739,58.53769,4.485496,300,0,0), -- Son of Corok +(@CGUID+70,19824,530,1,1,-4333.929,1322.016,77.64864,3.117183,300,0,0); -- Son of Corok + +-- Pathing for Son of Corok Entry: 19824 +SET @NPC := @CGUID+68; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4231.903,`position_y`=1307.641,`position_z`=55.94048 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4231.903,1307.641,55.94048,0,0,0,0,100,0), +(@PATH,2,-4258.673,1308.574,51.75086,0,0,0,0,100,0), +(@PATH,3,-4279.65,1299.844,48.04818,0,0,0,0,100,0), +(@PATH,4,-4258.673,1308.574,51.75086,0,0,0,0,100,0), +(@PATH,5,-4231.903,1307.641,55.94048,0,0,0,0,100,0), +(@PATH,6,-4210.623,1308.702,56.31548,0,0,0,0,100,0), +(@PATH,7,-4185.151,1308.381,56.14388,0,0,0,0,100,0), +(@PATH,8,-4154.984,1302.706,55.8171,0,0,0,0,100,0), +(@PATH,9,-4128.466,1303.851,53.66854,0,0,0,0,100,0), +(@PATH,10,-4115.384,1315.77,56.70418,0,0,0,0,100,0), +(@PATH,11,-4128.466,1303.851,53.66854,0,0,0,0,100,0), +(@PATH,12,-4154.984,1302.706,55.8171,0,0,0,0,100,0), +(@PATH,13,-4185.151,1308.381,56.14388,0,0,0,0,100,0), +(@PATH,14,-4210.623,1308.702,56.31548,0,0,0,0,100,0); + +-- Pathing for Son of Corok Entry: 19824 +SET @NPC := @CGUID+70; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4391.421,`position_y`=1317.775,`position_z`=86.86306 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4391.421,1317.775,86.86306,0,0,0,0,100,0), +(@PATH,2,-4368.556,1319.71,84.21169,0,0,0,0,100,0), +(@PATH,3,-4351.29,1322.436,82.0905,0,0,0,0,100,0), +(@PATH,4,-4329.943,1321.933,77.08961,0,0,0,0,100,0), +(@PATH,5,-4293.944,1321.216,63.2162,0,0,0,0,100,0), +(@PATH,6,-4329.943,1321.919,77.08363,0,0,0,0,100,0), +(@PATH,7,-4351.29,1322.436,82.0905,0,0,0,0,100,0), +(@PATH,8,-4368.556,1319.71,84.21169,0,0,0,0,100,0); diff --git a/sql/updates/world/2014_09_20_02_world_gameobject.sql b/sql/updates/world/2014_09_20_02_world_gameobject.sql new file mode 100644 index 00000000000..a368cc0bf73 --- /dev/null +++ b/sql/updates/world/2014_09_20_02_world_gameobject.sql @@ -0,0 +1,215 @@ +-- Properly spawn Deathforged Infernals in Shadowmoon Vally +SET @OGUID := 164235; +DELETE FROM gameobject WHERE id=184979; +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+209; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID+0,184979,530,1,1,-2750.138,2138.423,116.0525,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+1,184979,530,1,1,-2749.669,2117.245,116.0938,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+2,184979,530,1,1,-2715.974,2106.958,116.113,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+3,184979,530,1,1,-2749.15,2061.387,116.113,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+4,184979,530,1,1,-2733.552,2083.086,116.1207,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+5,184979,530,1,1,-2749.911,2083.202,116.1207,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+6,184979,530,1,1,-2766.644,2082.366,116.1255,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+7,184979,530,1,1,-2766.507,2093.344,116.1266,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+8,184979,530,1,1,-2749.759,2072.118,116.1846,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+9,184979,530,1,1,-2733.448,2049.271,116.3267,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+10,184979,530,1,1,-2733.294,2059.86,116.51,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+11,184979,530,1,1,-2749.49,2039.397,116.7552,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+12,184979,530,1,1,-2683.527,2093.502,116.7869,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+13,184979,530,1,1,-2750.224,2104.642,117.114,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+14,184979,530,1,1,-2700.19,2118.861,117.1919,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+15,184979,530,1,1,-2683.939,2108.297,117.2251,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+16,184979,530,1,1,-2683.984,2117.688,117.2251,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+17,184979,530,1,1,-2684.271,2082.263,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+18,184979,530,1,1,-2684.318,2060.447,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+19,184979,530,1,1,-2684.381,2071.899,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+20,184979,530,1,1,-2684.976,2050.075,117.2252,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+21,184979,530,1,1,-2699.94,2049.929,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+22,184979,530,1,1,-2699.966,2071.411,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+23,184979,530,1,1,-2699.976,2130.446,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+24,184979,530,1,1,-2699.979,2094.061,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+25,184979,530,1,1,-2699.991,2082.913,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+26,184979,530,1,1,-2700.016,2060.659,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+27,184979,530,1,1,-2700.138,2108.184,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+28,184979,530,1,1,-2700.177,2038.576,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+29,184979,530,1,1,-2716.219,2139.359,117.2252,1.431168,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+30,184979,530,1,1,-2716.628,2129.812,117.2252,1.483528,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+31,184979,530,1,1,-2717.525,2039.224,117.2252,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+32,184979,530,1,1,-2717.543,2094.533,117.2252,1.53589,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+33,184979,530,1,1,-2717.976,2060.81,117.2252,1.53589,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+34,184979,530,1,1,-2718.234,2051.139,117.2252,1.53589,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+35,184979,530,1,1,-2718.268,2083.307,117.2252,1.518436,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+36,184979,530,1,1,-2718.269,2072.285,117.2252,1.53589,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+37,184979,530,1,1,-2733.234,2104.237,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+38,184979,530,1,1,-2733.318,2038.487,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+39,184979,530,1,1,-2733.372,2128.404,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+40,184979,530,1,1,-2733.44,2116.1,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+41,184979,530,1,1,-2733.506,2094.508,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+42,184979,530,1,1,-2733.573,2072.265,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+43,184979,530,1,1,-2749.855,2128.431,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+44,184979,530,1,1,-2750.015,2049.435,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+45,184979,530,1,1,-2750.417,2094.657,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+46,184979,530,1,1,-2766.46,2116.606,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+47,184979,530,1,1,-2766.6,2104.408,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+48,184979,530,1,1,-2766.733,2129.118,117.2252,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+49,184979,530,1,1,-2766.605,2137.388,117.2259,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+50,184979,530,1,1,-2717.173,2117.924,117.2352,1.500983,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+51,184979,530,1,1,-2733.285,2139.106,117.2383,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+52,184979,530,1,1,-2684.392,2039.612,117.4476,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+53,184979,530,1,1,-2617.667,2650.463,74.03696,1.53589,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+54,184979,530,1,1,-2618.448,2539.722,74.08352,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+55,184979,530,1,1,-2617.122,2607.377,74.09629,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+56,184979,530,1,1,-2633.116,2650.877,74.1957,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+57,184979,530,1,1,-2632.632,2618.964,74.19731,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+58,184979,530,1,1,-2649.333,2563.91,74.19743,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+59,184979,530,1,1,-2649.577,2517.048,74.19785,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+60,184979,530,1,1,-2680.234,2626.323,74.2042,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+61,184979,530,1,1,-2633.568,2515.614,74.20628,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+62,184979,530,1,1,-2666.665,2528.697,74.22224,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+63,184979,530,1,1,-2617.554,2640.466,74.24556,1.53589,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+64,184979,530,1,1,-2632.863,2586.7,74.43395,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+65,184979,530,1,1,-2680.595,2615.58,74.57539,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+66,184979,530,1,1,-2618.024,2564.751,74.73867,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+67,184979,530,1,1,-2617.634,2576.117,74.76399,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+68,184979,530,1,1,-2666.463,2564.755,74.85522,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+69,184979,530,1,1,-2666.361,2576.1,74.92399,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+70,184979,530,1,1,-2649.286,2650.263,74.92444,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+71,184979,530,1,1,-2617.43,2629.57,74.92467,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+72,184979,530,1,1,-2617.843,2618.619,74.92467,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+73,184979,530,1,1,-2632.496,2630.536,74.92467,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+74,184979,530,1,1,-2632.558,2640.987,74.92467,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+75,184979,530,1,1,-2632.701,2609.445,74.92467,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+76,184979,530,1,1,-2649.156,2596.553,74.92467,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+77,184979,530,1,1,-2649.156,2629.343,74.92467,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+78,184979,530,1,1,-2649.284,2639.933,74.92467,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+79,184979,530,1,1,-2666.259,2637.499,74.92467,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+80,184979,530,1,1,-2666.322,2627.339,74.92467,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+81,184979,530,1,1,-2666.434,2605.873,74.92467,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+82,184979,530,1,1,-2666.556,2616.489,74.92467,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+83,184979,530,1,1,-2666.591,2596.142,74.92467,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+84,184979,530,1,1,-2666.615,2650.022,74.92467,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+85,184979,530,1,1,-2680.63,2637.091,74.92467,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+86,184979,530,1,1,-2681.59,2648.71,74.92467,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+87,184979,530,1,1,-2648.775,2586.718,74.92469,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+88,184979,530,1,1,-2666.687,2586.434,74.92469,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+89,184979,530,1,1,-2649.26,2618.303,74.92471,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+90,184979,530,1,1,-2649.322,2607.469,74.92471,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+91,184979,530,1,1,-2679.733,2575.556,74.92471,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+92,184979,530,1,1,-2617.009,2587.361,74.92472,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+93,184979,530,1,1,-2617.221,2598.454,74.92472,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+94,184979,530,1,1,-2618.208,2553.414,74.92472,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+95,184979,530,1,1,-2632.542,2598.43,74.92472,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+96,184979,530,1,1,-2632.583,2550.556,74.92472,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+97,184979,530,1,1,-2632.777,2564.511,74.92472,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+98,184979,530,1,1,-2633.191,2575.303,74.92472,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+99,184979,530,1,1,-2633.512,2538.872,74.92472,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+100,184979,530,1,1,-2633.667,2527.575,74.92472,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+101,184979,530,1,1,-2648.8,2528.096,74.92472,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+102,184979,530,1,1,-2648.909,2539.104,74.92472,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+103,184979,530,1,1,-2648.909,2575.672,74.92472,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+104,184979,530,1,1,-2666.377,2539.364,74.92472,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+105,184979,530,1,1,-2666.682,2551.397,74.92472,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+106,184979,530,1,1,-2680.09,2564.962,74.92472,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+107,184979,530,1,1,-2680.358,2604.458,74.92472,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+108,184979,530,1,1,-2680.419,2585.705,74.92472,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+109,184979,530,1,1,-2680.421,2595.477,74.92472,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+110,184979,530,1,1,-2680.701,2552.48,74.92472,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+111,184979,530,1,1,-2680.757,2540.063,74.92472,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+112,184979,530,1,1,-2648.444,2550.63,74.92473,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+113,184979,530,1,1,-2780.7,2339.663,92.09248,1.518436,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+114,184979,530,1,1,-2752.438,2349.842,92.11861,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+115,184979,530,1,1,-2733.243,2428.624,92.12263,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+116,184979,530,1,1,-2750.85,2406.097,92.13152,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+117,184979,530,1,1,-2781.745,2269.927,92.13453,1.518436,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+118,184979,530,1,1,-2752.938,2340.571,92.1429,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+119,184979,530,1,1,-2781.078,2294.76,92.15851,1.518436,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+120,184979,530,1,1,-2779.942,2316.583,92.1619,1.518436,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+121,184979,530,1,1,-2716.438,2459.642,92.16201,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+122,184979,530,1,1,-2717.291,2449.497,92.16201,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+123,184979,530,1,1,-2749.594,2480.541,92.16201,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+124,184979,530,1,1,-2780.858,2439.462,92.16201,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+125,184979,530,1,1,-2751.313,2225.442,92.16203,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+126,184979,530,1,1,-2781.297,2281.584,92.16223,1.518436,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+127,184979,530,1,1,-2751.321,2381.829,92.16233,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+128,184979,530,1,1,-2752.311,2284.226,92.18712,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+129,184979,530,1,1,-2780.94,2450.352,92.18733,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+130,184979,530,1,1,-2751.027,2236.649,92.21333,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+131,184979,530,1,1,-2799.737,2269.553,92.27402,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+132,184979,530,1,1,-2749.566,2490.816,92.2877,1.518436,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+133,184979,530,1,1,-2749.652,2429.791,92.31191,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+134,184979,530,1,1,-2750.8,2416.693,92.31774,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+135,184979,530,1,1,-2781.55,2238.925,92.37675,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+136,184979,530,1,1,-2780.719,2305.973,92.38305,1.518436,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+137,184979,530,1,1,-2752.458,2294.563,92.40945,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+138,184979,530,1,1,-2781.734,2460.782,92.41844,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+139,184979,530,1,1,-2752.097,2361.417,92.42614,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+140,184979,530,1,1,-2780.488,2406.024,92.4274,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+141,184979,530,1,1,-2781.476,2371.656,92.51871,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+142,184979,530,1,1,-2780.357,2416.676,92.55163,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+143,184979,530,1,1,-2751.701,2249.772,92.60823,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+144,184979,530,1,1,-2780.729,2327.836,92.6458,1.518436,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+145,184979,530,1,1,-2700.627,2492.339,92.65955,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+146,184979,530,1,1,-2780.827,2383.641,92.68105,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+147,184979,530,1,1,-2781.409,2470.233,92.81382,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+148,184979,530,1,1,-2766.72,2418.334,92.81592,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+149,184979,530,1,1,-2752.44,2316.313,92.89988,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+150,184979,530,1,1,-2781.791,2350.851,92.99918,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+151,184979,530,1,1,-2750.497,2394.5,93.02927,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+152,184979,530,1,1,-2780.358,2428.295,93.10728,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+153,184979,530,1,1,-2752.122,2329.221,93.19151,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+154,184979,530,1,1,-2782.3,2226.374,93.2033,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+155,184979,530,1,1,-2766.112,2479.956,93.2076,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+156,184979,530,1,1,-2716.673,2470.665,93.27448,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+157,184979,530,1,1,-2752.608,2305.437,93.28053,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+158,184979,530,1,1,-2766.398,2215.281,93.28061,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+159,184979,530,1,1,-2766.63,2238.048,93.28061,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+160,184979,530,1,1,-2782.795,2215.191,93.28061,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+161,184979,530,1,1,-2700.507,2468.615,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+162,184979,530,1,1,-2700.905,2479.709,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+163,184979,530,1,1,-2716.396,2503.082,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+164,184979,530,1,1,-2716.691,2481.191,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+165,184979,530,1,1,-2716.715,2492.909,93.28062,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+166,184979,530,1,1,-2732.592,2502.451,93.28062,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+167,184979,530,1,1,-2733.102,2480.978,93.28062,1.605702,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+168,184979,530,1,1,-2733.178,2461.359,93.28062,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+169,184979,530,1,1,-2733.323,2493.068,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+170,184979,530,1,1,-2733.358,2440.862,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+171,184979,530,1,1,-2733.41,2451.495,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+172,184979,530,1,1,-2733.462,2470.962,93.28062,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+173,184979,530,1,1,-2749.432,2441.547,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+174,184979,530,1,1,-2749.65,2461.924,93.28062,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+175,184979,530,1,1,-2749.894,2452.252,93.28062,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+176,184979,530,1,1,-2750.345,2470.913,93.28062,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+177,184979,530,1,1,-2751.096,2371.383,93.28062,1.53589,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+178,184979,530,1,1,-2751.117,2213.445,93.28062,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+179,184979,530,1,1,-2765.999,2260.545,93.28062,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+180,184979,530,1,1,-2766.004,2469.919,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+181,184979,530,1,1,-2766.192,2461.511,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+182,184979,530,1,1,-2766.463,2451.747,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+183,184979,530,1,1,-2766.521,2328.732,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+184,184979,530,1,1,-2766.553,2316.41,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+185,184979,530,1,1,-2766.56,2440.586,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+186,184979,530,1,1,-2766.596,2429.195,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+187,184979,530,1,1,-2766.61,2372.102,93.28062,1.605702,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+188,184979,530,1,1,-2766.624,2395.763,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+189,184979,530,1,1,-2766.649,2226.786,93.28062,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+190,184979,530,1,1,-2766.68,2270.358,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+191,184979,530,1,1,-2766.685,2362.643,93.28062,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+192,184979,530,1,1,-2766.691,2305.764,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+193,184979,530,1,1,-2766.718,2341.017,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+194,184979,530,1,1,-2766.725,2383.823,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+195,184979,530,1,1,-2766.751,2282.798,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+196,184979,530,1,1,-2766.803,2250.719,93.28062,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+197,184979,530,1,1,-2766.815,2295.312,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+198,184979,530,1,1,-2766.82,2407.71,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+199,184979,530,1,1,-2767.003,2351.3,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+200,184979,530,1,1,-2780.179,2395.597,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+201,184979,530,1,1,-2781.081,2259.361,93.28062,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+202,184979,530,1,1,-2781.243,2362.486,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+203,184979,530,1,1,-2781.385,2250.284,93.28062,1.553341,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+204,184979,530,1,1,-2799.266,2249.667,93.28062,1.588249,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+205,184979,530,1,1,-2799.778,2216.632,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+206,184979,530,1,1,-2799.857,2238.583,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+207,184979,530,1,1,-2799.887,2260.721,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+208,184979,530,1,1,-2799.897,2226.724,93.28062,1.570796,0,0,0,1,120,255,1), -- Deathforged Infernal +(@OGUID+209,184979,530,1,1,-2799.923,2204.199,93.28062,1.570796,0,0,0,1,120,255,1); -- Deathforged Infernal diff --git a/sql/updates/world/2014_09_20_03_world_creature.sql b/sql/updates/world/2014_09_20_03_world_creature.sql new file mode 100644 index 00000000000..6ffdc4a5381 --- /dev/null +++ b/sql/updates/world/2014_09_20_03_world_creature.sql @@ -0,0 +1,1060 @@ +-- Repositions existing spawns +DELETE FROM `creature` WHERE `guid` IN (86719,1117,152259,86238); +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(86719,21778,530,1,1,-2665.374,2058.359,116.3339,3.106686,300,0,0), -- Doctor Gutrick +(1117,21779,530,1,1,-2695.573,2633.819,74.68369,4.363323,300,0,0), -- Doctor Maleficus +(152259,21789,530,1,1,-2725.632,2712.664,122.433,5.201081,300,0,0), -- Nakansi +(86238,21790,530,1,1,-2764.224,1980.787,167.5258,1.797689,300,0,0); -- Plexi + +-- New Spawns +SET @CGUID := 213306; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+67; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0,21961,530,1,1,-2624.587,2645.83,75.00489,4.70832,300,0,0),-- Cataclysm Overseer +(@CGUID+1,21961,530,1,1,-2658.601,2642.981,74.9452,4.725823,300,0,0),-- Cataclysm Overseer +(@CGUID+2,21961,530,1,1,-2708.177,2097.77,117.1897,4.686018,300,0,0),-- Cataclysm Overseer +(@CGUID+3,21961,530,1,1,-2740.772,2448.112,93.38111,4.805989,300,0,0),-- Cataclysm Overseer +(@CGUID+4,21961,530,1,1,-2742.03,2059.698,116.7964,4.681119,300,0,0),-- Cataclysm Overseer +(@CGUID+5,21961,530,1,1,-2758.742,2243.91,93.21526,1.552272,300,0,0),-- Cataclysm Overseer +(@CGUID+6,21961,530,1,1,-2774.287,2263.532,92.94308,4.718167,300,0,0),-- Cataclysm Overseer +(@CGUID+7,21961,530,1,1,-2775.945,2361.191,93.28397,4.685721,300,0,0),-- Cataclysm Overseer +(@CGUID+8,21753,530,1,1,-2622.266,2628.122,74.8339,4.716521,300,0,0), -- Shadow Council Felsworn +(@CGUID+9,21753,530,1,1,-2623.208,2548.756,74.8182,1.556335,300,0,0), -- Shadow Council Felsworn +(@CGUID+10,21753,530,1,1,-2636.863,2574.913,74.9474,4.696648,300,0,0), -- Shadow Council Felsworn +(@CGUID+11,21753,530,1,1,-2636.998,2607.602,74.69077,1.563033,300,0,0), -- Shadow Council Felsworn +(@CGUID+12,21753,530,1,1,-2652.578,2534.493,74.78423,4.71961,300,0,0), -- Shadow Council Felsworn +(@CGUID+13,21753,530,1,1,-2653.093,2619.055,74.94731,4.703067,300,0,0), -- Shadow Council Felsworn +(@CGUID+14,21753,530,1,1,-2669.707,2604.662,74.95037,1.581261,300,0,0), -- Shadow Council Felsworn +(@CGUID+15,21753,530,1,1,-2669.842,2537.49,74.45392,1.606841,300,0,0), -- Shadow Council Felsworn +(@CGUID+16,21753,530,1,1,-2679.377,2058.013,116.8943,4.688863,300,0,0), -- Shadow Council Felsworn +(@CGUID+17,21753,530,1,1,-2683.737,2545.338,74.33199,4.702662,300,0,0), -- Shadow Council Felsworn +(@CGUID+18,21753,530,1,1,-2684.123,2618.183,74.8682,4.739147,300,0,0), -- Shadow Council Felsworn +(@CGUID+19,21753,530,1,1,-2695.207,2038.744,117.3595,4.693588,300,0,0), -- Shadow Council Felsworn +(@CGUID+20,21753,530,1,1,-2706.087,2455.823,92.19871,3.647834,300,0,0), -- Shadow Council Felsworn +(@CGUID+21,21753,530,1,1,-2712.173,2052.405,117.1693,4.725927,300,0,0), -- Shadow Council Felsworn +(@CGUID+22,21753,530,1,1,-2729.676,2036.5,117.2379,4.690808,300,0,0), -- Shadow Council Felsworn +(@CGUID+23,21753,530,1,1,-2729.925,2437.338,92.79486,4.70655,300,0,0), -- Shadow Council Felsworn +(@CGUID+24,21753,530,1,1,-2744.948,2056.218,117.2141,4.698718,300,0,0), -- Shadow Council Felsworn +(@CGUID+25,21753,530,1,1,-2745.869,2401.989,92.68388,1.562935,300,0,0), -- Shadow Council Felsworn +(@CGUID+26,21753,530,1,1,-2747.979,2331.009,93.2812,4.724142,300,0,0), -- Shadow Council Felsworn +(@CGUID+27,21753,530,1,1,-2761.9,2082.233,116.1504,4.676732,300,0,0), -- Shadow Council Felsworn +(@CGUID+28,21753,530,1,1,-2761.907,2255.418,93.29506,4.709726,300,0,0), -- Shadow Council Felsworn +(@CGUID+29,21753,530,1,1,-2761.913,2350.896,93.31357,4.714221,300,0,0), -- Shadow Council Felsworn +(@CGUID+30,21753,530,1,1,-2762.018,2436.756,93.38111,4.681306,300,0,0), -- Shadow Council Felsworn +(@CGUID+31,21753,530,1,1,-2776.212,2418.02,93.31845,1.551268,300,0,0), -- Shadow Council Felsworn +(@CGUID+32,21753,530,1,1,-2777.241,2356.42,93.10667,4.704577,300,0,0), -- Shadow Council Felsworn +(@CGUID+33,21753,530,1,1,-2779.028,2207.845,93.30978,1.520008,300,0,0), -- Shadow Council Felsworn +(@CGUID+34,21753,530,1,1,-2795.168,2237.445,93.36533,4.720132,300,0,0), -- Shadow Council Felsworn +(@CGUID+35,21754,530,1,1,-2628.103,2627.774,74.94058,1.536073,300,0,0), -- Shadow Council Zealot +(@CGUID+36,21754,530,1,1,-2644.939,2625.912,74.56854,1.564112,300,0,0), -- Shadow Council Zealot +(@CGUID+37,21754,530,1,1,-2661.52,2625.054,74.94732,4.703033,300,0,0), -- Shadow Council Zealot +(@CGUID+38,21754,530,1,1,-2677.226,2647.989,74.92176,1.605468,300,0,0), -- Shadow Council Zealot +(@CGUID+39,21754,530,1,1,-2690.104,2048.885,117.4553,4.713993,300,0,0), -- Shadow Council Zealot +(@CGUID+40,21754,530,1,1,-2705.832,2043.225,117.2379,4.707129,300,0,0), -- Shadow Council Zealot +(@CGUID+41,21754,530,1,1,-2720.884,2436.895,92.55349,1.570773,300,0,0), -- Shadow Council Zealot +(@CGUID+42,21754,530,1,1,-2722.164,2058.124,117.2379,4.708858,300,0,0), -- Shadow Council Zealot +(@CGUID+43,21754,530,1,1,-2737.436,2437.372,92.92113,4.710443,300,0,0), -- Shadow Council Zealot +(@CGUID+44,21754,530,1,1,-2738.531,2051.189,117.008,4.708483,300,0,0), -- Shadow Council Zealot +(@CGUID+45,21754,530,1,1,-2753.18,2060.903,116.6311,4.686984,300,0,0), -- Shadow Council Zealot +(@CGUID+46,21754,530,1,1,-2754.035,2446.205,93.35241,4.702646,300,0,0), -- Shadow Council Zealot +(@CGUID+47,21754,530,1,1,-2756.416,2325.13,92.8938,4.708452,300,0,0), -- Shadow Council Zealot +(@CGUID+48,21754,530,1,1,-2757.087,2292.479,92.72278,4.704577,300,0,0), -- Shadow Council Zealot +(@CGUID+49,21754,530,1,1,-2769.958,2445.585,93.39021,4.709271,300,0,0), -- Shadow Council Zealot +(@CGUID+50,21754,530,1,1,-2770.757,2286.646,93.37387,1.554465,300,0,0), -- Shadow Council Zealot +(@CGUID+51,21754,530,1,1,-2770.834,2304.946,93.35271,4.728845,300,0,0), -- Shadow Council Zealot +(@CGUID+52,21754,530,1,1,-2784.362,2422.751,92.59094,4.731622,300,0,0), -- Shadow Council Zealot +(@CGUID+53,21754,530,1,1,-2785.126,2319.199,92.42504,1.584508,300,0,0), -- Shadow Council Zealot +(@CGUID+54,21754,530,1,1,-2785.269,2251.403,93.20892,4.702585,300,0,0), -- Shadow Council Zealot +(@CGUID+55,21754,530,1,1,-2803.432,2250.95,92.96349,1.521959,300,0,0), -- Shadow Council Zealot +(@CGUID+56,21949,530,1,1,-2634.423,2668.06,74.95636,4.625123,300,0,0), -- Fel Reaver Sentinel +(@CGUID+57,21949,530,1,1,-2644.064,2666.833,75.00764,4.660029,300,0,0), -- Fel Reaver Sentinel +(@CGUID+58,21949,530,1,1,-2654.26,2667.904,74.91562,4.712389,300,0,0), -- Fel Reaver Sentinel +(@CGUID+59,21949,530,1,1,-2728.15,2020.016,116.1963,1.797689,300,0,0), -- Fel Reaver Sentinel +(@CGUID+60,21949,530,1,1,-2752.245,2024.444,116.1941,0.8203048,300,0,0), -- Fel Reaver Sentinel +(@CGUID+61,21949,530,1,1,-2759.59,2031.663,116.029,0.7330383,300,0,0), -- Fel Reaver Sentinel +(@CGUID+62,19353,530,1,1,-2758.158,1950.055,163.0797,0.171564,300,0,0), -- Wildhammer Guard +(@CGUID+63,19353,530,1,1,-2762.693,1979.738,167.5258,1.867502,300,0,0), -- Wildhammer Guard +(@CGUID+64,19353,530,1,1,-2765.28,1979.205,167.5258,1.972222,300,0,0), -- Wildhammer Guard +(@CGUID+65,19362,530,1,1,-2680.367,2702.561,102.4103,4.429259,300,0,0), -- Kor'kron Defender +(@CGUID+66,19362,530,1,1,-2723.378,2714.348,122.4363,4.921828,300,0,0), -- Kor'kron Defender +(@CGUID+67,19362,530,1,1,-2728.28,2712.981,122.429,5.305801,300,0,0), -- Kor'kron Defender +(@CGUID+68,21960,530,1,1,-2662.274,2637.847,74.94393,3.228831,300,0,0), -- Gan'arg Technician +(@CGUID+69,21960,530,1,1,-2662.334,2627.642,74.94731,3.217441,300,0,0), -- Gan'arg Technician +(@CGUID+70,21960,530,1,1,-2662.363,2576.12,74.80489,3.146482,300,0,0), -- Gan'arg Technician +(@CGUID+71,21960,530,1,1,-2662.44,2605.669,74.94731,3.090388,300,0,0), -- Gan'arg Technician +(@CGUID+72,21960,530,1,1,-2662.484,2605.247,74.94731,2.984356,300,0,0), -- Gan'arg Technician +(@CGUID+73,21960,530,1,1,-2662.589,2616.999,74.94731,3.269433,300,0,0), -- Gan'arg Technician +(@CGUID+74,21960,530,1,1,-2662.651,2617.355,74.94731,3.359917,300,0,0), -- Gan'arg Technician +(@CGUID+75,21960,530,1,1,-2662.696,2649.217,74.94393,2.939052,300,0,0), -- Gan'arg Technician +(@CGUID+76,21960,530,1,1,-2662.72,2551.947,74.94743,3.279413,300,0,0), -- Gan'arg Technician +(@CGUID+77,21960,530,1,1,-2662.768,2585.632,74.94741,2.939708,300,0,0), -- Gan'arg Technician +(@CGUID+78,21960,530,1,1,-2662.919,2616.957,74.94731,3.269846,300,0,0), -- Gan'arg Technician +(@CGUID+79,21960,530,1,1,-2663.48,2640.375,74.94393,3.944187,300,0,0), -- Gan'arg Technician +(@CGUID+80,21960,530,1,1,-2679.141,2589.499,74.94743,3.1772,300,0,0), -- Gan'arg Technician +(@CGUID+81,21960,530,1,1,-2680.452,2119.558,117.2397,3.628669,300,0,0), -- Gan'arg Technician +(@CGUID+82,21960,530,1,1,-2680.883,2536.066,74.91338,1.53924,300,0,0), -- Gan'arg Technician +(@CGUID+83,21960,530,1,1,-2681.474,2105.147,117.2397,2.234858,300,0,0), -- Gan'arg Technician +(@CGUID+84,21960,530,1,1,-2684.377,2104.689,117.2397,1.970172,300,0,0), -- Gan'arg Technician +(@CGUID+85,21960,530,1,1,-2685.436,2649.809,74.96772,6.005017,300,0,0), -- Gan'arg Technician +(@CGUID+86,21960,530,1,1,-2687.952,2058.775,117.2378,0.4311885,300,0,0), -- Gan'arg Technician +(@CGUID+87,21960,530,1,1,-2688.315,2060.593,117.2378,6.246561,300,0,0), -- Gan'arg Technician +(@CGUID+88,21960,530,1,1,-2696.139,2108.279,117.2397,3.165622,300,0,0), -- Gan'arg Technician +(@CGUID+89,21960,530,1,1,-2696.204,2131.748,117.2397,3.473983,300,0,0), -- Gan'arg Technician +(@CGUID+90,21960,530,1,1,-2696.365,2059.025,117.2379,2.720629,300,0,0), -- Gan'arg Technician +(@CGUID+91,21960,530,1,1,-2696.47,2081.015,117.2379,2.646988,300,0,0), -- Gan'arg Technician +(@CGUID+92,21960,530,1,1,-2697.003,2492.952,91.17992,3.31027,300,0,0), -- Gan'arg Technician +(@CGUID+93,21960,530,1,1,-2697.313,2079.943,117.2379,2.304487,300,0,0), -- Gan'arg Technician +(@CGUID+94,21960,530,1,1,-2697.706,2121.994,117.0979,4.042038,300,0,0), -- Gan'arg Technician +(@CGUID+95,21960,530,1,1,-2699.329,2034.668,117.3073,1.784621,300,0,0), -- Gan'arg Technician +(@CGUID+96,21960,530,1,1,-2699.708,2464.722,92.82695,1.771426,300,0,0), -- Gan'arg Technician +(@CGUID+97,21960,530,1,1,-2699.817,2483.558,93.37987,4.436833,300,0,0), -- Gan'arg Technician +(@CGUID+98,21960,530,1,1,-2703.914,2059.765,117.2379,0.2255644,300,0,0), -- Gan'arg Technician +(@CGUID+99,21960,530,1,1,-2703.966,2071.468,117.2379,6.269042,300,0,0), -- Gan'arg Technician +(@CGUID+100,21960,530,1,1,-2704.035,2117.757,117.2379,0.2795732,300,0,0), -- Gan'arg Technician +(@CGUID+101,21960,530,1,1,-2712.5,2504.166,93.08694,3.532249,300,0,0), -- Gan'arg Technician +(@CGUID+102,21960,530,1,1,-2712.5,2504.166,93.08694,3.532249,300,0,0), -- Gan'arg Technician +(@CGUID+103,21960,530,1,1,-2712.701,2481.473,93.32631,3.212119,300,0,0), -- Gan'arg Technician +(@CGUID+104,21960,530,1,1,-2712.728,2109.292,116.2379,3.765052,300,0,0), -- Gan'arg Technician +(@CGUID+105,21960,530,1,1,-2712.986,2130.237,117.2379,3.257504,300,0,0), -- Gan'arg Technician +(@CGUID+106,21960,530,1,1,-2713.081,2461.817,92.19871,3.716504,300,0,0), -- Gan'arg Technician +(@CGUID+107,21960,530,1,1,-2713.168,2461.937,92.35677,3.753464,300,0,0), -- Gan'arg Technician +(@CGUID+108,21960,530,1,1,-2714.23,2484.344,93.32631,4.049511,300,0,0), -- Gan'arg Technician +(@CGUID+109,21960,530,1,1,-2714.616,2072.605,117.2379,3.228679,300,0,0), -- Gan'arg Technician +(@CGUID+110,21960,530,1,1,-2714.7,2506.686,92.91842,4.274538,300,0,0), -- Gan'arg Technician +(@CGUID+111,21960,530,1,1,-2716.16,2474.859,93.32631,1.765639,300,0,0), -- Gan'arg Technician +(@CGUID+112,21960,530,1,1,-2716.42,2496.898,93.32631,4.638556,300,0,0), -- Gan'arg Technician +(@CGUID+113,21960,530,1,1,-2716.48,2507.077,93.11801,4.733479,300,0,0), -- Gan'arg Technician +(@CGUID+114,21960,530,1,1,-2716.613,2117.148,117.2379,1.361349,300,0,0), -- Gan'arg Technician +(@CGUID+115,21960,530,1,1,-2717.775,2108.599,116.8502,4.792531,300,0,0), -- Gan'arg Technician +(@CGUID+116,21960,530,1,1,-2718.241,2141.993,117.1699,4.687004,300,0,0), -- Gan'arg Technician +(@CGUID+117,21960,530,1,1,-2720.366,2482.769,93.32631,5.8778,300,0,0), -- Gan'arg Technician +(@CGUID+118,21960,530,1,1,-2729.103,2480.981,93.32631,3.142375,300,0,0), -- Gan'arg Technician +(@CGUID+119,21960,530,1,1,-2729.506,2430.046,92.51438,3.505173,300,0,0), -- Gan'arg Technician +(@CGUID+120,21960,530,1,1,-2729.6,2505.105,93.33694,3.867108,300,0,0), -- Gan'arg Technician +(@CGUID+121,21960,530,1,1,-2731.765,2079.603,117.2379,2.045345,300,0,0), -- Gan'arg Technician +(@CGUID+122,21960,530,1,1,-2731.941,2467.264,93.3752,1.960836,300,0,0), -- Gan'arg Technician +(@CGUID+123,21960,530,1,1,-2732.936,2093.803,117.2379,2.337537,300,0,0), -- Gan'arg Technician +(@CGUID+124,21960,530,1,1,-2736.649,2426.526,92.20086,0.5521232,300,0,0), -- Gan'arg Technician +(@CGUID+125,21960,530,1,1,-2737.314,2073.677,117.2918,5.922287,300,0,0), -- Gan'arg Technician +(@CGUID+126,21960,530,1,1,-2737.446,2471.294,93.40414,6.200187,300,0,0), -- Gan'arg Technician +(@CGUID+127,21960,530,1,1,-2746.396,2103.484,117.3472,2.84799,300,0,0), -- Gan'arg Technician +(@CGUID+128,21960,530,1,1,-2746.566,2047.411,117.3364,2.611017,300,0,0), -- Gan'arg Technician +(@CGUID+129,21960,530,1,1,-2746.63,2393.509,92.7717,2.889993,300,0,0), -- Gan'arg Technician +(@CGUID+130,21960,530,1,1,-2747.405,2444.994,93.38111,4.180933,300,0,0), -- Gan'arg Technician +(@CGUID+131,21960,530,1,1,-2747.589,2468.379,93.40414,1.028925,300,0,0), -- Gan'arg Technician +(@CGUID+132,21960,530,1,1,-2748.777,2378.743,92.22152,2.260248,300,0,0), -- Gan'arg Technician +(@CGUID+133,21960,530,1,1,-2749.725,2134.48,116.5986,1.674635,300,0,0), -- Gan'arg Technician +(@CGUID+134,21960,530,1,1,-2750.138,2449.126,93.38111,1.024091,300,0,0), -- Gan'arg Technician +(@CGUID+135,21960,530,1,1,-2750.753,2113.889,116.4206,1.490655,300,0,0), -- Gan'arg Technician +(@CGUID+136,21960,530,1,1,-2752.436,2455.338,93.38111,5.401339,300,0,0), -- Gan'arg Technician +(@CGUID+137,21960,530,1,1,-2752.763,2325.278,92.99591,1.409628,300,0,0), -- Gan'arg Technician +(@CGUID+138,21960,530,1,1,-2752.869,2351.622,92.32831,6.181377,300,0,0), -- Gan'arg Technician +(@CGUID+139,21960,530,1,1,-2753.66,2082.062,116.9274,0.2952486,300,0,0), -- Gan'arg Technician +(@CGUID+140,21960,530,1,1,-2754.198,2384.608,92.22152,5.515212,300,0,0), -- Gan'arg Technician +(@CGUID+141,21960,530,1,1,-2754.322,2384.474,92.22152,5.560681,300,0,0), -- Gan'arg Technician +(@CGUID+142,21960,530,1,1,-2755.084,2213.958,93.28703,6.154799,300,0,0), -- Gan'arg Technician +(@CGUID+143,21960,530,1,1,-2756.057,2328.534,92.98515,0.1728606,300,0,0), -- Gan'arg Technician +(@CGUID+144,21960,530,1,1,-2756.323,2293.546,92.57965,0.2574178,300,0,0), -- Gan'arg Technician +(@CGUID+145,21960,530,1,1,-2756.371,2306.511,93.37035,4.577257,300,0,0), -- Gan'arg Technician +(@CGUID+146,21960,530,1,1,-2762.603,2428.956,93.32586,3.081786,300,0,0), -- Gan'arg Technician +(@CGUID+147,21960,530,1,1,-2762.917,2364.197,93.36164,5.357472,300,0,0), -- Gan'arg Technician +(@CGUID+148,21960,530,1,1,-2763.213,2449.418,93.38111,2.519936,300,0,0), -- Gan'arg Technician +(@CGUID+149,21960,530,1,1,-2763.519,2326.09,93.37035,2.419822,300,0,0), -- Gan'arg Technician +(@CGUID+150,21960,530,1,1,-2763.615,2292.914,93.30166,2.498588,300,0,0), -- Gan'arg Technician +(@CGUID+151,21960,530,1,1,-2763.667,2248.236,93.34501,2.471995,300,0,0), -- Gan'arg Technician +(@CGUID+152,21960,530,1,1,-2764.015,2380.88,93.34652,2.31511,300,0,0), -- Gan'arg Technician +(@CGUID+153,21960,530,1,1,-2766.159,2085.463,116.1668,1.847406,300,0,0), -- Gan'arg Technician +(@CGUID+154,21960,530,1,1,-2766.311,2211.282,93.28703,1.592559,300,0,0), -- Gan'arg Technician +(@CGUID+155,21960,530,1,1,-2767.313,2358.693,93.32701,1.413016,300,0,0), -- Gan'arg Technician +(@CGUID+156,21960,530,1,1,-2768.272,2274.027,93.37387,5.12182,300,0,0), -- Gan'arg Technician +(@CGUID+157,21960,530,1,1,-2768.338,2105.61,117.2314,1.717898,300,0,0), -- Gan'arg Technician +(@CGUID+158,21960,530,1,1,-2769.912,2248.203,93.37387,0.6804543,300,0,0), -- Gan'arg Technician +(@CGUID+159,21960,530,1,1,-2770.266,2216.298,93.40082,6.026309,300,0,0), -- Gan'arg Technician +(@CGUID+160,21960,530,1,1,-2770.569,2271.29,93.37387,6.048157,300,0,0), -- Gan'arg Technician +(@CGUID+161,21960,530,1,1,-2775.968,2316.968,92.40705,3.238038,300,0,0), -- Gan'arg Technician +(@CGUID+162,21960,530,1,1,-2776.491,2417.638,93.19102,3.385516,300,0,0), -- Gan'arg Technician +(@CGUID+163,21960,530,1,1,-2776.986,2450.351,92.95542,3.140613,300,0,0), -- Gan'arg Technician +(@CGUID+164,21960,530,1,1,-2777.848,2380.973,92.79283,2.411169,300,0,0), -- Gan'arg Technician +(@CGUID+165,21960,530,1,1,-2778.497,2453.443,92.94651,4.04254,300,0,0), -- Gan'arg Technician +(@CGUID+166,21960,530,1,1,-2779.636,2251.41,93.37387,2.703256,300,0,0), -- Gan'arg Technician +(@CGUID+167,21960,530,1,1,-2780.335,2222.892,93.40082,2.084666,300,0,0), -- Gan'arg Technician +(@CGUID+168,21960,530,1,1,-2780.522,2471.875,93.02473,3.141593,300,0,0), -- Gan'arg Technician +(@CGUID+169,21960,530,1,1,-2780.526,2409.15,92.50851,1.881965,300,0,0), -- Gan'arg Technician +(@CGUID+170,21960,530,1,1,-2781.428,2387.01,93.28701,3.091882,300,0,0), -- Gan'arg Technician +(@CGUID+171,21960,530,1,1,-2782.46,2228.431,93.01517,4.651798,300,0,0), -- Gan'arg Technician +(@CGUID+172,21960,530,1,1,-2782.613,2211.195,93.4317,1.616505,300,0,0), -- Gan'arg Technician +(@CGUID+173,21960,530,1,1,-2784.19,2347.69,92.49637,0.9226072,300,0,0), -- Gan'arg Technician +(@CGUID+174,21960,530,1,1,-2784.32,2261.709,93.37387,5.655887,300,0,0), -- Gan'arg Technician +(@CGUID+175,21960,530,1,1,-2785.128,2267.869,93.16708,0.546796,300,0,0), -- Gan'arg Technician +(@CGUID+176,21960,530,1,1,-2786.685,2214.266,93.40082,0.2333348,300,0,0), -- Gan'arg Technician +(@CGUID+177,21960,530,1,1,-2796.945,2201.53,93.40082,2.410823,300,0,0), -- Gan'arg Technician +(@CGUID+178,21960,530,1,1,-2797.118,2241.497,93.37387,3.957823,300,0,0), -- Gan'arg Technician +(@CGUID+179,21960,530,1,1,-2797.156,2229.635,93.40082,3.957152,300,0,0), -- Gan'arg Technician +(@CGUID+180,21960,530,1,1,-2803.292,2218.528,93.04189,5.788416,300,0,0); -- Gan'arg Technician + +-- Pathing for Cataclysm Overseer Entry: 21961 +SET @NPC := @CGUID+0; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2624.166,`position_y`=2571.218,`position_z`=75.01111 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2624.166,2571.218,75.01111,0,0,0,0,100,0), +(@PATH,2,-2624.62,2542.242,74.24536,0,0,0,0,100,0), +(@PATH,3,-2624.166,2571.218,75.01111,0,0,0,0,100,0), +(@PATH,4,-2624.751,2607.99,74.93158,0,0,0,0,100,0), +(@PATH,5,-2624.563,2651.694,74.28185,0,0,0,0,100,0), +(@PATH,6,-2624.751,2607.99,74.93158,0,0,0,0,100,0); + +-- Pathing for Cataclysm Overseer Entry: 21961 +SET @NPC := @CGUID+1; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2743.211,`position_y`=2099.005,`position_z`=117.2918 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2743.211,2099.005,117.2918,0,0,0,0,100,0), +(@PATH,2,-2743.264,2132.767,117.0985,0,0,0,0,100,0), +(@PATH,3,-2742.951,2145.269,116.2745,0,0,0,0,100,0), +(@PATH,4,-2743.264,2132.767,117.0985,0,0,0,0,100,0), +(@PATH,5,-2743.211,2099.005,117.2918,0,0,0,0,100,0), +(@PATH,6,-2741.874,2064.646,117.3364,0,0,0,0,100,0), +(@PATH,7,-2742.875,2033.14,117.0252,0,0,0,0,100,0), +(@PATH,8,-2741.874,2064.646,117.3364,0,0,0,0,100,0); + +-- Pathing for Cataclysm Overseer Entry: 21961 +SET @NPC := @CGUID+2; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2657.852,`position_y`=2594.252,`position_z`=74.94736 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2657.852,2594.252,74.94736,0,0,0,0,100,0), +(@PATH,2,-2658.395,2560.189,74.94743,0,0,0,0,100,0), +(@PATH,3,-2658.091,2527.67,74.94743,0,0,0,0,100,0), +(@PATH,4,-2658.395,2560.189,74.94743,0,0,0,0,100,0), +(@PATH,5,-2657.852,2594.252,74.94736,0,0,0,0,100,0), +(@PATH,6,-2658.377,2626.292,74.94731,0,0,0,0,100,0), +(@PATH,7,-2658.736,2653.005,74.94393,0,0,0,0,100,0), +(@PATH,8,-2658.377,2626.292,74.94731,0,0,0,0,100,0); + +-- Pathing for Cataclysm Overseer Entry: 21961 +SET @NPC := @CGUID+3; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2774.228,`position_y`=2205.861,`position_z`=93.40082 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2774.228,2205.861,93.40082,0,0,0,0,100,0), +(@PATH,2,-2774.099,2231.308,93.40082,0,0,0,0,100,0), +(@PATH,3,-2774.292,2264.527,92.85751,0,0,0,0,100,0), +(@PATH,4,-2774.898,2299.137,93.37387,0,0,0,0,100,0), +(@PATH,5,-2774.974,2330.74,92.13889,0,0,0,0,100,0), +(@PATH,6,-2775.949,2350.123,93.32701,0,0,0,0,100,0), +(@PATH,7,-2774.974,2330.74,92.13889,0,0,0,0,100,0), +(@PATH,8,-2774.898,2299.137,93.37387,0,0,0,0,100,0), +(@PATH,9,-2774.292,2264.527,92.85751,0,0,0,0,100,0), +(@PATH,10,-2774.099,2231.308,93.40082,0,0,0,0,100,0); + +-- Pathing for Cataclysm Overseer Entry: 21961 +SET @NPC := @CGUID+4; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2759.871,`position_y`=2277.614,`position_z`=93.29873 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2759.871,2277.614,93.29873,0,0,0,0,100,0), +(@PATH,2,-2760.06,2308.136,93.37035,0,0,0,0,100,0), +(@PATH,3,-2759.403,2333.865,92.56857,0,0,0,0,100,0), +(@PATH,4,-2760.633,2357.157,93.31051,0,0,0,0,100,0), +(@PATH,5,-2759.403,2333.865,92.56857,0,0,0,0,100,0), +(@PATH,6,-2760.06,2308.136,93.37035,0,0,0,0,100,0), +(@PATH,7,-2759.871,2277.614,93.29873,0,0,0,0,100,0), +(@PATH,8,-2758.652,2248.756,93.28703,0,0,0,0,100,0), +(@PATH,9,-2759.07,2225.875,92.48966,0,0,0,0,100,0), +(@PATH,10,-2759.81,2209.213,93.28703,0,0,0,0,100,0), +(@PATH,11,-2759.07,2225.875,92.48966,0,0,0,0,100,0), +(@PATH,12,-2758.652,2248.756,93.28703,0,0,0,0,100,0); + +-- Pathing for Cataclysm Overseer Entry: 21961 +SET @NPC := @CGUID+5; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2775.073,`position_y`=2395.292,`position_z`=93.28701 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2775.073,2395.292,93.28701,0,0,0,0,100,0), +(@PATH,2,-2776.016,2358.512,93.32701,0,0,0,0,100,0), +(@PATH,3,-2775.073,2395.292,93.28701,0,0,0,0,100,0), +(@PATH,4,-2772.866,2425.821,92.54453,0,0,0,0,100,0), +(@PATH,5,-2774.25,2452.304,93.39854,0,0,0,0,100,0), +(@PATH,6,-2772.562,2466.367,93.39854,0,0,0,0,100,0), +(@PATH,7,-2758.671,2467.425,93.40414,0,0,0,0,100,0), +(@PATH,8,-2742.215,2468.052,93.40414,0,0,0,0,100,0), +(@PATH,9,-2741.37,2499.675,93.40414,0,0,0,0,100,0), +(@PATH,10,-2742.215,2468.052,93.40414,0,0,0,0,100,0), +(@PATH,11,-2758.671,2467.425,93.40414,0,0,0,0,100,0), +(@PATH,12,-2772.562,2466.367,93.39854,0,0,0,0,100,0), +(@PATH,13,-2774.25,2452.304,93.39854,0,0,0,0,100,0), +(@PATH,14,-2772.866,2425.821,92.54453,0,0,0,0,100,0), +(@PATH,15,-2775.073,2395.292,93.28701,0,0,0,0,100,0); + +-- Pathing for Cataclysm Overseer Entry: 21961 +SET @NPC := @CGUID+6; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2742.463,`position_y`=2466.129,`position_z`=93.38111 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2742.463,2466.129,93.38111,0,0,0,0,100,0), +(@PATH,2,-2740.73,2447.661,93.38111,0,0,0,0,100,0), +(@PATH,3,-2759.502,2447.807,93.38111,0,0,0,0,100,0), +(@PATH,4,-2759.231,2419.446,93.32586,0,0,0,0,100,0), +(@PATH,5,-2759.33,2387.436,92.4454,0,0,0,0,100,0), +(@PATH,6,-2761.243,2364.419,93.31051,0,0,0,0,100,0), +(@PATH,7,-2759.33,2387.436,92.4454,0,0,0,0,100,0), +(@PATH,8,-2759.231,2419.446,93.32586,0,0,0,0,100,0), +(@PATH,9,-2759.502,2447.807,93.38111,0,0,0,0,100,0), +(@PATH,10,-2740.73,2447.661,93.38111,0,0,0,0,100,0), +(@PATH,11,-2742.463,2466.129,93.38111,0,0,0,0,100,0), +(@PATH,12,-2709.779,2464.938,93.25584,0,0,0,0,100,0), +(@PATH,13,-2709.288,2476.609,93.32631,0,0,0,0,100,0), +(@PATH,14,-2709.779,2464.938,93.25584,0,0,0,0,100,0); + +-- Pathing for Cataclysm Overseer Entry: 21961 +SET @NPC := @CGUID+7; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2708.779,`position_y`=2068.911,`position_z`=117.2379 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2708.779,2068.911,117.2379,0,0,0,0,100,0), +(@PATH,2,-2708.359,2090.884,117.2379,0,0,0,0,100,0), +(@PATH,3,-2707.642,2117.71,117.2379,0,0,0,0,100,0), +(@PATH,4,-2707.291,2149.051,116.3592,0,0,0,0,100,0), +(@PATH,5,-2707.642,2117.71,117.2379,0,0,0,0,100,0), +(@PATH,6,-2708.359,2090.884,117.2379,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+8; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2795.16,`position_y`=2236.348,`position_z`=93.37387 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2795.16,2236.348,93.37387,0,0,0,0,100,0), +(@PATH,2,-2795.431,2271.447,92.24887,0,0,0,0,100,0), +(@PATH,3,-2795.16,2236.348,93.37387,0,0,0,0,100,0), +(@PATH,4,-2794.978,2201.984,93.40082,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+9; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2747.554,`position_y`=2294.194,`position_z`=92.17666 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2747.554,2294.194,92.17666,0,0,0,0,100,0), +(@PATH,2,-2747.99,2332.008,93.37035,0,0,0,0,100,0), +(@PATH,3,-2747.863,2364.971,92.44698,0,0,0,0,100,0), +(@PATH,4,-2746.703,2395.644,92.38509,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+10; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2761.939,`position_y`=2308.565,`position_z`=93.37035 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2761.939,2308.565,93.37035,0,0,0,0,100,0), +(@PATH,2,-2761.886,2336.399,93.28854,0,0,0,0,100,0), +(@PATH,3,-2761.948,2369.98,93.34652,0,0,0,0,100,0), +(@PATH,4,-2762.17,2403.536,93.32586,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+11; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2761.123,`position_y`=2103.653,`position_z`=117.3472 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2761.123,2103.653,117.3472,0,0,0,0,100,0), +(@PATH,2,-2761.215,2144.157,116.0134,0,0,0,0,100,0), +(@PATH,3,-2761.123,2103.653,117.3472,0,0,0,0,100,0), +(@PATH,4,-2762.027,2078.674,116.1458,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+12; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2777.587,`position_y`=2282.628,`position_z`=92.58359 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2777.587,2282.628,92.58359,0,0,0,0,100,0), +(@PATH,2,-2777.419,2331.222,92.42014,0,0,0,0,100,0), +(@PATH,3,-2777.186,2363.471,93.32701,0,0,0,0,100,0), +(@PATH,4,-2777.419,2331.222,92.42014,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+13; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2762.517,`position_y`=2211.211,`position_z`=93.28703 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2762.517,2211.211,93.28703,0,0,0,0,100,0), +(@PATH,2,-2761.956,2237.105,93.28703,0,0,0,0,100,0), +(@PATH,3,-2761.867,2270.47,93.30166,0,0,0,0,100,0), +(@PATH,4,-2762.346,2303.099,93.37035,0,0,0,0,100,0), +(@PATH,5,-2761.867,2270.47,93.30166,0,0,0,0,100,0), +(@PATH,6,-2761.956,2237.105,93.28703,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+14; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2777.572,`position_y`=2279.407,`position_z`=92.54025 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2777.572,2279.407,92.54025,0,0,0,0,100,0), +(@PATH,2,-2777.548,2237.198,92.2955,0,0,0,0,100,0), +(@PATH,3,-2779.242,2203.625,93.40082,0,0,0,0,100,0), +(@PATH,4,-2777.548,2237.198,92.2955,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+15; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2694.64,`position_y`=2068.898,`position_z`=117.2379 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2694.64,2068.898,117.2379,0,0,0,0,100,0), +(@PATH,2,-2695.301,2033.725,117.3797,0,0,0,0,100,0), +(@PATH,3,-2694.64,2068.898,117.2379,0,0,0,0,100,0), +(@PATH,4,-2694.855,2102.532,117.2397,0,0,0,0,100,0), +(@PATH,5,-2693.58,2129.576,116.6858,0,0,0,0,100,0), +(@PATH,6,-2694.855,2102.532,117.2397,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+16; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2679.245,`position_y`=2063.623,`position_z`=116.3816 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2679.245,2063.623,116.3816,0,0,0,0,100,0), +(@PATH,2,-2678.192,2096.006,116.2379,0,0,0,0,100,0), +(@PATH,3,-2678.287,2122.549,116.7668,0,0,0,0,100,0), +(@PATH,4,-2678.192,2096.006,116.2379,0,0,0,0,100,0), +(@PATH,5,-2679.245,2063.623,116.3816,0,0,0,0,100,0), +(@PATH,6,-2679.909,2035.793,118.7458,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+17; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2713.678,`position_y`=2469.491,`position_z`=93.22096 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2713.678,2469.491,93.22096,0,0,0,0,100,0), +(@PATH,2,-2712.112,2501.797,93.04128,0,0,0,0,100,0), +(@PATH,3,-2700.205,2500.273,89.71194,0,0,0,0,100,0), +(@PATH,4,-2696.189,2493.531,90.74828,0,0,0,0,100,0), +(@PATH,5,-2698.287,2465.581,93.03493,0,0,0,0,100,0), +(@PATH,6,-2704.336,2456.793,92.19871,0,0,0,0,100,0), +(@PATH,7,-2714.398,2451.214,92.19871,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+18; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2637.056,`position_y`=2518.985,`position_z`=74.54729 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2637.056,2518.985,74.54729,0,0,0,0,100,0), +(@PATH,2,-2637.002,2566.124,74.94743,0,0,0,0,100,0), +(@PATH,3,-2636.515,2597.017,74.94736,0,0,0,0,100,0), +(@PATH,4,-2637.002,2566.124,74.94743,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+19; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2622.359,`position_y`=2651.183,`position_z`=74.192 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2622.359,2651.183,74.192,0,0,0,0,100,0), +(@PATH,2,-2622.162,2602.941,74.93158,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+20; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2637.046,`position_y`=2601.445,`position_z`=74.94731 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2637.046,2601.445,74.94731,0,0,0,0,100,0), +(@PATH,2,-2636.693,2650.933,74.31893,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+21; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2652.786,`position_y`=2651.182,`position_z`=74.58089 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2652.786,2651.182,74.58089,0,0,0,0,100,0), +(@PATH,2,-2653.248,2602.359,74.94731,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+22; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2670.338,`position_y`=2594.025,`position_z`=74.94743 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2670.338,2594.025,74.94743,0,0,0,0,100,0), +(@PATH,2,-2670.897,2566.762,74.32243,0,0,0,0,100,0), +(@PATH,3,-2669.479,2527.44,74.49906,0,0,0,0,100,0), +(@PATH,4,-2670.897,2566.762,74.32243,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+23; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2745.622,`position_y`=2429.984,`position_z`=92.47161 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2745.622,2429.984,92.47161,0,0,0,0,100,0), +(@PATH,2,-2745.583,2469.102,93.40414,0,0,0,0,100,0), +(@PATH,3,-2745.991,2494.831,93.28452,0,0,0,0,100,0), +(@PATH,4,-2745.583,2469.102,93.40414,0,0,0,0,100,0), +(@PATH,5,-2745.658,2430.102,92.20086,0,0,0,0,100,0), +(@PATH,6,-2745.909,2396.996,92.29305,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+24; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2652.775,`position_y`=2561.478,`position_z`=74.32243 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2652.775,2561.478,74.32243,0,0,0,0,100,0), +(@PATH,2,-2652.384,2595.102,74.94736,0,0,0,0,100,0), +(@PATH,3,-2652.775,2561.478,74.32243,0,0,0,0,100,0), +(@PATH,4,-2652.475,2520.3,74.67888,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+25; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2623.394,`position_y`=2536.816,`position_z`=74.73218 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2623.394,2536.816,74.73218,0,0,0,0,100,0), +(@PATH,2,-2622.707,2583.397,74.72375,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+26; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2762.018,`position_y`=2436.756,`position_z`=93.38111 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2762.018,2436.756,93.38111,0,0,0,0,100,0), +(@PATH,2,-2761.198,2485.882,92.27914,0,0,0,0,100,0), +(@PATH,3,-2762.018,2436.756,93.38111,0,0,0,0,100,0), +(@PATH,4,-2763.022,2404.462,93.32586,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+27; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2776.525,`position_y`=2401.978,`position_z`=93.37827 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2776.525,2401.978,93.37827,0,0,0,0,100,0), +(@PATH,2,-2775.851,2435.901,92.59995,0,0,0,0,100,0), +(@PATH,3,-2776.1,2474.675,93.34993,0,0,0,0,100,0), +(@PATH,4,-2775.851,2435.901,92.59995,0,0,0,0,100,0), +(@PATH,5,-2776.525,2401.978,93.37827,0,0,0,0,100,0), +(@PATH,6,-2776.522,2368.578,92.58315,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+28; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2729.753,`position_y`=2466.869,`position_z`=93.32631 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2729.753,2466.869,93.32631,0,0,0,0,100,0), +(@PATH,2,-2729.548,2504.533,93.33694,0,0,0,0,100,0), +(@PATH,3,-2729.753,2466.869,93.32631,0,0,0,0,100,0), +(@PATH,4,-2730.019,2426.732,92.59812,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+29; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2670.016,`position_y`=2634.249,`position_z`=74.96772 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2670.016,2634.249,74.96772,0,0,0,0,100,0), +(@PATH,2,-2670.114,2652.084,74.96772,0,0,0,0,100,0), +(@PATH,3,-2670.016,2634.249,74.96772,0,0,0,0,100,0), +(@PATH,4,-2669.654,2599.65,74.94743,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+30; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2683.622,`position_y`=2557.177,`position_z`=74.94743 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2683.622,2557.177,74.94743,0,0,0,0,100,0), +(@PATH,2,-2683.448,2597.54,74.94743,0,0,0,0,100,0), +(@PATH,3,-2683.622,2557.177,74.94743,0,0,0,0,100,0), +(@PATH,4,-2683.835,2535.185,74.44743,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+31; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2685.01,`position_y`=2651.311,`position_z`=74.65302 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2685.01,2651.311,74.65302,0,0,0,0,100,0), +(@PATH,2,-2683.696,2602.2,74.97202,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+32; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2745.845,`position_y`=2098.965,`position_z`=117.2918 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2745.845,2098.965,117.2918,0,0,0,0,100,0), +(@PATH,2,-2745.236,2141.679,116.4493,0,0,0,0,100,0), +(@PATH,3,-2745.845,2098.965,117.2918,0,0,0,0,100,0), +(@PATH,4,-2744.838,2064.231,116.8859,0,0,0,0,100,0), +(@PATH,5,-2745.277,2032.015,116.2408,0,0,0,0,100,0), +(@PATH,6,-2744.838,2064.231,116.8859,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+33; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2728.972,`position_y`=2067.545,`position_z`=117.2379 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2728.972,2067.545,117.2379,0,0,0,0,100,0), +(@PATH,2,-2728.488,2101.93,117.2379,0,0,0,0,100,0), +(@PATH,3,-2728.951,2136.013,117.3078,0,0,0,0,100,0), +(@PATH,4,-2728.488,2101.93,117.2379,0,0,0,0,100,0), +(@PATH,5,-2728.972,2067.545,117.2379,0,0,0,0,100,0), +(@PATH,6,-2729.725,2034.252,117.2379,0,0,0,0,100,0); + +-- Pathing for Shadow Council Felsworn Entry: 21753 +SET @NPC := @CGUID+34; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2711.632,`position_y`=2102.142,`position_z`=117.2379 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2711.632,2102.142,117.2379,0,0,0,0,100,0), +(@PATH,2,-2711.521,2139.267,117.3078,0,0,0,0,100,0), +(@PATH,3,-2711.632,2102.142,117.2379,0,0,0,0,100,0), +(@PATH,4,-2712.39,2068.484,117.2379,0,0,0,0,100,0), +(@PATH,5,-2711.994,2039.217,117.1129,0,0,0,0,100,0), +(@PATH,6,-2712.39,2068.484,117.2379,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+35; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2785.22,`position_y`=2256.417,`position_z`=93.37387 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2785.22,2256.417,93.37387,0,0,0,0,100,0), +(@PATH,2,-2784.655,2291.455,92.24887,0,0,0,0,100,0), +(@PATH,3,-2785.22,2256.417,93.37387,0,0,0,0,100,0), +(@PATH,4,-2785.702,2208.109,93.27582,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+36; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2804.135,`position_y`=2236.564,`position_z`=92.51945 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2804.135,2236.564,92.51945,0,0,0,0,100,0), +(@PATH,2,-2805.031,2198.412,93.28703,0,0,0,0,100,0), +(@PATH,3,-2804.135,2236.564,92.51945,0,0,0,0,100,0), +(@PATH,4,-2802.395,2272.887,93.38139,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+37; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2785.103,`position_y`=2378.464,`position_z`=92.28701 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2785.103,2378.464,92.28701,0,0,0,0,100,0), +(@PATH,2,-2785.072,2315.19,92.25803,0,0,0,0,100,0), +(@PATH,3,-2785.525,2346.845,92.21165,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+38; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2785.131,`position_y`=2471.353,`position_z`=92.22493 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2785.131,2471.353,92.22493,0,0,0,0,100,0), +(@PATH,2,-2784.354,2422.32,92.56406,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+39; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2756.622,`position_y`=2229.722,`position_z`=92.28703 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2756.622,2229.722,92.28703,0,0,0,0,100,0), +(@PATH,2,-2755.861,2208.263,93.28703,0,0,0,0,100,0), +(@PATH,3,-2756.622,2229.722,92.28703,0,0,0,0,100,0), +(@PATH,4,-2757.308,2264.421,93.28703,0,0,0,0,100,0), +(@PATH,5,-2757.039,2298.67,93.30166,0,0,0,0,100,0), +(@PATH,6,-2757.308,2264.421,93.28703,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+40; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2771.052,`position_y`=2268.596,`position_z`=93.37387 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2771.052,2268.596,93.37387,0,0,0,0,100,0), +(@PATH,2,-2771.679,2235.563,93.37387,0,0,0,0,100,0), +(@PATH,3,-2771.962,2202.936,93.40082,0,0,0,0,100,0), +(@PATH,4,-2771.679,2235.563,93.37387,0,0,0,0,100,0), +(@PATH,5,-2771.052,2268.596,93.37387,0,0,0,0,100,0), +(@PATH,6,-2770.619,2295.07,93.37387,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+41; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2753.945,`position_y`=2102.062,`position_z`=117.3472 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2753.945,2102.062,117.3472,0,0,0,0,100,0), +(@PATH,2,-2753.002,2067.915,116.1668,0,0,0,0,100,0), +(@PATH,3,-2753.865,2033.915,116.2114,0,0,0,0,100,0), +(@PATH,4,-2753.002,2067.915,116.1668,0,0,0,0,100,0), +(@PATH,5,-2753.945,2102.062,117.3472,0,0,0,0,100,0), +(@PATH,6,-2753.775,2145.034,116.2692,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+42; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2704.264,`position_y`=2136.729,`position_z`=117.3078 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2704.264,2136.729,117.3078,0,0,0,0,100,0), +(@PATH,2,-2704.649,2103.023,117.2379,0,0,0,0,100,0), +(@PATH,3,-2705.716,2065.331,117.2379,0,0,0,0,100,0), +(@PATH,4,-2705.87,2035.906,117.2379,0,0,0,0,100,0), +(@PATH,5,-2705.716,2065.331,117.2379,0,0,0,0,100,0), +(@PATH,6,-2704.649,2103.023,117.2379,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+43; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2722.125,`position_y`=2069.174,`position_z`=117.2379 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2722.125,2069.174,117.2379,0,0,0,0,100,0), +(@PATH,2,-2722.249,2034.047,117.2379,0,0,0,0,100,0), +(@PATH,3,-2722.125,2069.174,117.2379,0,0,0,0,100,0), +(@PATH,4,-2720.923,2115.775,117.2379,0,0,0,0,100,0), +(@PATH,5,-2720.486,2142.357,116.9133,0,0,0,0,100,0), +(@PATH,6,-2720.923,2115.775,117.2379,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+44; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2690.13,`position_y`=2064.948,`position_z`=117.2378 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2690.13,2064.948,117.2378,0,0,0,0,100,0), +(@PATH,2,-2689.416,2099.356,116.8526,0,0,0,0,100,0), +(@PATH,3,-2688.399,2132.129,116.1147,0,0,0,0,100,0), +(@PATH,4,-2689.416,2099.356,116.8526,0,0,0,0,100,0), +(@PATH,5,-2690.13,2064.948,117.2378,0,0,0,0,100,0), +(@PATH,6,-2690.084,2035.869,117.6316,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+45; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2737.035,`position_y`=2498.918,`position_z`=93.40414 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2737.035,2498.918,93.40414,0,0,0,0,100,0), +(@PATH,2,-2737.381,2465.538,93.38111,0,0,0,0,100,0), +(@PATH,3,-2737.459,2428.079,92.20086,0,0,0,0,100,0), +(@PATH,4,-2737.381,2465.538,93.38111,0,0,0,0,100,0), +(@PATH,5,-2737.035,2498.918,93.40414,0,0,0,0,100,0), +(@PATH,6,-2736.389,2511.215,93.38651,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+46; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2628.166,`position_y`=2652.95,`position_z`=74.27159 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2628.166,2652.95,74.27159,0,0,0,0,100,0), +(@PATH,2,-2627.974,2631.489,74.93158,0,0,0,0,100,0), +(@PATH,3,-2629.114,2598.675,75.01111,0,0,0,0,100,0), +(@PATH,4,-2628.789,2564.261,74.94849,0,0,0,0,100,0), +(@PATH,5,-2629.153,2518.347,74.27462,0,0,0,0,100,0), +(@PATH,6,-2628.789,2564.261,74.94849,0,0,0,0,100,0), +(@PATH,7,-2629.114,2598.675,75.01111,0,0,0,0,100,0), +(@PATH,8,-2627.974,2631.489,74.93158,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+47; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2770.884,`position_y`=2403.361,`position_z`=93.37827 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2770.884,2403.361,93.37827,0,0,0,0,100,0), +(@PATH,2,-2769.982,2437.895,93.39854,0,0,0,0,100,0), +(@PATH,3,-2769.842,2482.756,93.34993,0,0,0,0,100,0), +(@PATH,4,-2769.982,2437.895,93.39854,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+48; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2754.18,`position_y`=2431.333,`position_z`=93.32586 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2754.18,2431.333,93.32586,0,0,0,0,100,0), +(@PATH,2,-2755.019,2403.688,93.32586,0,0,0,0,100,0), +(@PATH,3,-2754.18,2431.333,93.32586,0,0,0,0,100,0), +(@PATH,4,-2753.878,2462.278,93.38111,0,0,0,0,100,0), +(@PATH,5,-2754.642,2486.674,92.27914,0,0,0,0,100,0), +(@PATH,6,-2753.878,2462.278,93.38111,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+49; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2720.884,`position_y`=2469.591,`position_z`=93.32631 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2720.884,2469.591,93.32631,0,0,0,0,100,0), +(@PATH,2,-2720.662,2513.249,92.96389,0,0,0,0,100,0), +(@PATH,3,-2720.884,2469.591,93.32631,0,0,0,0,100,0), +(@PATH,4,-2720.884,2434.87,92.5084,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+50; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2756.388,`position_y`=2332.109,`position_z`=92.19946 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2756.388,2332.109,92.19946,0,0,0,0,100,0), +(@PATH,2,-2756.482,2301.443,93.37035,0,0,0,0,100,0), +(@PATH,3,-2756.388,2332.109,92.19946,0,0,0,0,100,0), +(@PATH,4,-2756.648,2365.67,93.31051,0,0,0,0,100,0), +(@PATH,5,-2755.329,2399.249,93.34652,0,0,0,0,100,0), +(@PATH,6,-2756.648,2365.67,93.31051,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+51; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2771.347,`position_y`=2336.068,`position_z`=93.06529 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2771.347,2336.068,93.06529,0,0,0,0,100,0), +(@PATH,2,-2769.864,2369.139,93.17776,0,0,0,0,100,0), +(@PATH,3,-2770.086,2395.213,93.28701,0,0,0,0,100,0), +(@PATH,4,-2769.864,2369.139,93.17776,0,0,0,0,100,0), +(@PATH,5,-2771.347,2336.068,93.06529,0,0,0,0,100,0), +(@PATH,6,-2770.781,2301.665,93.38303,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+52; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2661.922,`position_y`=2565.167,`position_z`=74.94743 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2661.922,2565.167,74.94743,0,0,0,0,100,0), +(@PATH,2,-2662.236,2526.605,74.94743,0,0,0,0,100,0), +(@PATH,3,-2661.922,2565.167,74.94743,0,0,0,0,100,0), +(@PATH,4,-2661.766,2598.691,74.94736,0,0,0,0,100,0), +(@PATH,5,-2661.454,2632.066,74.94731,0,0,0,0,100,0), +(@PATH,6,-2661.921,2652.52,74.94393,0,0,0,0,100,0), +(@PATH,7,-2661.454,2632.066,74.94731,0,0,0,0,100,0), +(@PATH,8,-2661.766,2598.691,74.94736,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+53; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2676.634,`position_y`=2630.928,`position_z`=74.71323 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2676.634,2630.928,74.71323,0,0,0,0,100,0), +(@PATH,2,-2676.133,2597.521,74.94743,0,0,0,0,100,0), +(@PATH,3,-2675.693,2564.413,74.84319,0,0,0,0,100,0), +(@PATH,4,-2676.745,2531.281,74.96903,0,0,0,0,100,0), +(@PATH,5,-2675.693,2564.413,74.84319,0,0,0,0,100,0), +(@PATH,6,-2676.133,2597.521,74.94743,0,0,0,0,100,0), +(@PATH,7,-2676.634,2630.928,74.71323,0,0,0,0,100,0), +(@PATH,8,-2677.356,2651.749,74.96772,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+54; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2645.054,`position_y`=2653.658,`position_z`=74.94393 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2645.054,2653.658,74.94393,0,0,0,0,100,0), +(@PATH,2,-2644.895,2632.497,74.94731,0,0,0,0,100,0), +(@PATH,3,-2645.055,2597.804,74.94736,0,0,0,0,100,0), +(@PATH,4,-2644.371,2564.333,74.36674,0,0,0,0,100,0), +(@PATH,5,-2644.736,2531.433,74.94743,0,0,0,0,100,0), +(@PATH,6,-2645.176,2513.085,74.32243,0,0,0,0,100,0), +(@PATH,7,-2644.736,2531.433,74.94743,0,0,0,0,100,0), +(@PATH,8,-2644.371,2564.333,74.36674,0,0,0,0,100,0), +(@PATH,9,-2645.055,2597.804,74.94736,0,0,0,0,100,0), +(@PATH,10,-2644.895,2632.497,74.94731,0,0,0,0,100,0); + +-- Pathing for Shadow Council Zealot Entry: 21754 +SET @NPC := @CGUID+55; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2738.647,`position_y`=2029.915,`position_z`=117.2366 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2738.647,2029.915,117.2366,0,0,0,0,100,0), +(@PATH,2,-2738.477,2065.157,117.3364,0,0,0,0,100,0), +(@PATH,3,-2737.82,2098.544,117.2918,0,0,0,0,100,0), +(@PATH,4,-2737.512,2131.9,117.3472,0,0,0,0,100,0), +(@PATH,5,-2737.184,2145.899,115.8942,0,0,0,0,100,0), +(@PATH,6,-2737.512,2131.9,117.3472,0,0,0,0,100,0), +(@PATH,7,-2737.82,2098.544,117.2918,0,0,0,0,100,0), +(@PATH,8,-2738.477,2065.157,117.3364,0,0,0,0,100,0); + +-- Pathing for Wildhammer Guard Entry: 19353 +SET @NPC := @CGUID+62; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2738.818,`position_y`=1952.552,`position_z`=153.4082 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2738.818,1952.552,153.4082,0,0,0,0,100,0), +(@PATH,2,-2724.426,1951.31,147.3684,0,0,0,0,100,0), +(@PATH,3,-2711.517,1951.894,144.3868,0,0,0,0,100,0), +(@PATH,4,-2701.61,1953.292,143.8939,0,0,0,0,100,0), +(@PATH,5,-2711.517,1951.894,144.3868,0,0,0,0,100,0), +(@PATH,6,-2724.426,1951.31,147.3684,0,0,0,0,100,0), +(@PATH,7,-2738.818,1952.552,153.4082,0,0,0,0,100,0), +(@PATH,8,-2752.306,1951.067,160.1505,0,0,0,0,100,0), +(@PATH,9,-2763.156,1949.187,166.0191,0,0,0,0,100,0), +(@PATH,10,-2771.908,1945.806,172.0308,0,0,0,0,100,0), +(@PATH,11,-2778.184,1942.703,177.1924,0,0,0,0,100,0), +(@PATH,12,-2771.908,1945.806,172.0308,0,0,0,0,100,0), +(@PATH,13,-2763.26,1949.171,166.2084,0,0,0,0,100,0), +(@PATH,14,-2752.41,1951.051,160.2691,0,0,0,0,100,0); + +-- Pathing for Kor'kron Defender Entry: 19362 +SET @NPC := @CGUID+65; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2679.007,`position_y`=2707.241,`position_z`=103.5283 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2679.007,2707.241,103.5283,0,0,0,0,100,0), +(@PATH,2,-2689.075,2716.259,106.572,0,0,0,0,100,0), +(@PATH,3,-2699.496,2721.168,111.1267,0,0,0,0,100,0), +(@PATH,4,-2706.34,2725.309,114.5727,0,0,0,0,100,0), +(@PATH,5,-2713.205,2729.05,117.3128,0,0,0,0,100,0), +(@PATH,6,-2706.492,2725.396,114.4426,0,0,0,0,100,0), +(@PATH,7,-2699.496,2721.168,111.1267,0,0,0,0,100,0), +(@PATH,8,-2689.075,2716.259,106.572,0,0,0,0,100,0), +(@PATH,9,-2679.007,2707.241,103.5283,0,0,0,0,100,0), +(@PATH,10,-2681.186,2699.77,101.498,0,0,0,0,100,0), +(@PATH,11,-2687.217,2694.512,98.07244,0,0,0,0,100,0), +(@PATH,12,-2681.186,2699.77,101.498,0,0,0,0,100,0); diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 0bb6fd8d3a1..92b1afb4e07 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -1005,7 +1005,7 @@ template<class T> void AchievementMgr<T>::CheckAllAchievementCriteria(Player* referencePlayer) { // suppress sending packets - for (uint32 i=0; i<ACHIEVEMENT_CRITERIA_TYPE_TOTAL; ++i) + for (uint32 i = 0; i < ACHIEVEMENT_CRITERIA_TYPE_TOTAL; ++i) UpdateAchievementCriteria(AchievementCriteriaTypes(i), 0, 0, 0, NULL, referencePlayer); } @@ -1408,7 +1408,7 @@ bool AchievementMgr<T>::IsCompletedCriteria(AchievementCriteriaEntry const* achi if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL)) { // someone on this realm has already completed that achievement - if (sAchievementMgr->IsRealmCompleted(achievement)) + if (sAchievementMgr->IsRealmCompleted(achievement, GetOwner()->GetInstanceId()) return false; } @@ -1822,10 +1822,7 @@ void AchievementMgr<Player>::CompletedAchievement(AchievementEntry const* achiev ca.date = time(NULL); ca.changed = true; - // don't insert for ACHIEVEMENT_FLAG_REALM_FIRST_KILL since otherwise only the first group member would reach that achievement - /// @todo where do set this instead? - if (!(achievement->flags & ACHIEVEMENT_FLAG_REALM_FIRST_KILL)) - sAchievementMgr->SetRealmCompleted(achievement); + sAchievementMgr->SetRealmCompleted(achievement, GetOwner()->GetInstanceId()); _achievementPoints += achievement->points; @@ -1918,7 +1915,7 @@ void AchievementMgr<Guild>::CompletedAchievement(AchievementEntry const* achieve ca.guids.insert(groupMember->GetGUID()); } - sAchievementMgr->SetRealmCompleted(achievement); + sAchievementMgr->SetRealmCompleted(achievement, referencePlayer->GetInstanceId()); _achievementPoints += achievement->points; @@ -3183,7 +3180,7 @@ void AchievementGlobalMgr::LoadCompletedAchievements() continue; } else if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL)) - m_allCompletedAchievements.insert(achievementId); + m_allCompletedAchievements[achievementId] = uint32(0xFFFFFFFF); } while (result->NextRow()); @@ -3360,3 +3357,10 @@ AchievementCriteriaEntry const* AchievementGlobalMgr::GetAchievementCriteria(uin { return sAchievementCriteriaStore.LookupEntry(criteriaId); } + +void AchievementGlobalMgr::OnInstanceDestroyed(uint32 instanceId) +{ + for (auto& realmCompletion : m_allCompletedAchievements) + if (realmCompletion.second == instanceId) + realmCompletion.second = uint32(0xFFFFFFFF); +} diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h index efa275ed3be..9bbf1304f65 100644 --- a/src/server/game/Achievements/AchievementMgr.h +++ b/src/server/game/Achievements/AchievementMgr.h @@ -352,14 +352,24 @@ class AchievementGlobalMgr return iter != m_criteriaDataMap.end() ? &iter->second : NULL; } - bool IsRealmCompleted(AchievementEntry const* achievement) const + bool IsRealmCompleted(AchievementEntry const* achievement, uint32 instanceId) const { - return m_allCompletedAchievements.find(achievement->ID) != m_allCompletedAchievements.end(); + AllCompletedAchievements::const_iterator itr = m_allCompletedAchievements.find(achievement->ID); + if (itr == m_allCompletedAchievements.end()) + return false; + + if (achievement->flags & ACHIEVEMENT_FLAG_REALM_FIRST_KILL) + return itr->second != instanceId; + + return true; } - void SetRealmCompleted(AchievementEntry const* achievement) + void SetRealmCompleted(AchievementEntry const* achievement, uint32 instanceId) { - m_allCompletedAchievements.insert(achievement->ID); + if (IsRealmCompleted(achievement, instanceId)) + return; + + m_allCompletedAchievements[achievement->ID] = instanceId; } bool IsGroupCriteriaType(AchievementCriteriaTypes type) const @@ -380,6 +390,9 @@ class AchievementGlobalMgr return false; } + // Removes instanceId as valid id to complete realm first kill achievements + void OnInstanceDestroyed(uint32 instanceId); + void LoadAchievementCriteriaList(); void LoadAchievementCriteriaData(); void LoadAchievementReferenceList(); @@ -403,7 +416,7 @@ class AchievementGlobalMgr // store achievements by referenced achievement id to speed up lookup AchievementListByReferencedId m_AchievementListByReferencedId; - typedef std::set<uint32> AllCompletedAchievements; + typedef std::map<uint32 /*achievementId*/, uint32 /*instanceId*/> AllCompletedAchievements; AllCompletedAchievements m_allCompletedAchievements; AchievementRewards m_achievementRewards; diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index 24eb7c8664e..ab90fca0115 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -322,8 +322,6 @@ void Battlefield::StartBattle() InvitePlayersInZoneToWar(); InvitePlayersInQueueToWar(); - DoPlaySoundToAll(BF_START); - OnBattleStart(); } @@ -339,11 +337,6 @@ void Battlefield::EndBattle(bool endByTimer) if (!endByTimer) SetDefenderTeam(GetAttackerTeam()); - if (GetDefenderTeam() == TEAM_ALLIANCE) - DoPlaySoundToAll(BF_ALLIANCE_WINS); - else - DoPlaySoundToAll(BF_HORDE_WINS); - OnBattleEnd(endByTimer); // Reset battlefield timer diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index b09350bb770..29b8f4a5126 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -45,9 +45,9 @@ enum BattlefieldObjectiveStates enum BattlefieldSounds { - BF_HORDE_WINS = 8454, - BF_ALLIANCE_WINS = 8455, - BF_START = 3439 + BF_SOUND_HORDE_WINS = 8454, + BF_SOUND_ALLIANCE_WINS = 8455, + BF_SOUND_START = 3439 }; enum BattlefieldTimers @@ -98,9 +98,10 @@ class BfCapturePoint bool SetCapturePointData(GameObject* capturePoint); GameObject* GetCapturePointGo(); - uint32 GetCapturePointEntry(){ return m_capturePointEntry; } + uint32 GetCapturePointEntry() const { return m_capturePointEntry; } TeamId GetTeamId() { return m_team; } + protected: bool DelCapturePoint(); diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index 360d2d68bc3..3b3f6eb247a 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -21,6 +21,7 @@ #include "BattlefieldWG.h" #include "AchievementMgr.h" +#include "CreatureTextMgr.h" #include "Battleground.h" #include "MapManager.h" #include "ObjectMgr.h" @@ -32,11 +33,11 @@ BattlefieldWG::~BattlefieldWG() { - for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) - delete *itr; + for (WintergraspWorkshop* workshop : Workshops) + delete workshop; - for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) - delete *itr; + for (BfWGGameObjectBuilding* building : BuildingsInZone) + delete building; } bool BattlefieldWG::SetupBattlefield() @@ -112,14 +113,14 @@ bool BattlefieldWG::SetupBattlefield() // Spawn workshop creatures and gameobjects for (uint8 i = 0; i < WG_MAX_WORKSHOP; i++) { - WGWorkshop* workshop = new WGWorkshop(this, i); + WintergraspWorkshop* workshop = new WintergraspWorkshop(this, i); if (i < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) workshop->GiveControlTo(GetAttackerTeam(), true); else workshop->GiveControlTo(GetDefenderTeam(), true); // Note: Capture point is added once the gameobject is created. - WorkshopsList.insert(workshop); + Workshops.insert(workshop); } // Spawn NPCs in the defender's keep, both Horde and Alliance @@ -169,8 +170,8 @@ bool BattlefieldWG::SetupBattlefield() { if (GameObject* go = SpawnGameObject(WGGameObjectBuilding[i].entry, WGGameObjectBuilding[i].x, WGGameObjectBuilding[i].y, WGGameObjectBuilding[i].z, WGGameObjectBuilding[i].o)) { - BfWGGameObjectBuilding* b = new BfWGGameObjectBuilding(this); - b->Init(go, WGGameObjectBuilding[i].type, WGGameObjectBuilding[i].WorldState, WGGameObjectBuilding[i].nameId); + BfWGGameObjectBuilding* b = new BfWGGameObjectBuilding(this, WGGameObjectBuilding[i].type, WGGameObjectBuilding[i].WorldState); + b->Init(go); if (!IsEnabled() && go->GetEntry() == GO_WINTERGRASP_VAULT_GATE) go->SetDestructibleState(GO_DESTRUCTIBLE_DESTROYED); BuildingsInZone.insert(b); @@ -233,13 +234,10 @@ void BattlefieldWG::OnBattleStart() } // Rebuild all wall - for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) + for (BfWGGameObjectBuilding* building : BuildingsInZone) { - if (*itr) - { - (*itr)->Rebuild(); - (*itr)->UpdateTurretAttack(false); - } + building->Rebuild(); + building->UpdateTurretAttack(false); } SetData(BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT, 0); @@ -248,9 +246,8 @@ void BattlefieldWG::OnBattleStart() SetData(BATTLEFIELD_WG_DATA_DAMAGED_TOWER_DEF, 0); // Update graveyard (in no war time all graveyard is to deffender, in war time, depend of base) - for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) - if (*itr) - (*itr)->UpdateGraveyardAndWorkshop(); + for (WintergraspWorkshop* workshop : Workshops) + workshop->UpdateGraveyardAndWorkshop(); for (uint8 team = 0; team < 2; ++team) for (GuidSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) @@ -268,7 +265,7 @@ void BattlefieldWG::OnBattleStart() // Initialize vehicle counter UpdateCounterVehicle(true); // Send start warning to all players - SendWarning(BATTLEFIELD_WG_TEXT_START); + SendWarning(BATTLEFIELD_WG_TEXT_START_BATTLE); } void BattlefieldWG::UpdateCounterVehicle(bool init) @@ -281,15 +278,12 @@ void BattlefieldWG::UpdateCounterVehicle(bool init) SetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_H, 0); SetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_A, 0); - for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) + for (WintergraspWorkshop* workshop : Workshops) { - if (WGWorkshop* workshop = (*itr)) - { - if (workshop->teamControl == TEAM_ALLIANCE) - UpdateData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_A, 4); - else if (workshop->teamControl == TEAM_HORDE) - UpdateData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_H, 4); - } + if (workshop->GetTeamControl() == TEAM_ALLIANCE) + UpdateData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_A, 4); + else if (workshop->GetTeamControl() == TEAM_HORDE) + UpdateData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_H, 4); } UpdateVehicleCountWG(); @@ -354,10 +348,11 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer) portal->SetFaction(WintergraspFaction[GetDefenderTeam()]); // Saving data - for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) - (*itr)->Save(); - for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) - (*itr)->Save(); + for (BfWGGameObjectBuilding* building : BuildingsInZone) + building->Save(); + + for (WintergraspWorkshop* workshop : Workshops) + workshop->Save(); for (GuidSet::const_iterator itr = m_PlayersInWar[GetDefenderTeam()].begin(); itr != m_PlayersInWar[GetDefenderTeam()].end(); ++itr) { @@ -409,9 +404,9 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer) } if (!endByTimer) // win alli/horde - SendWarning((GetDefenderTeam() == TEAM_ALLIANCE) ? BATTLEFIELD_WG_TEXT_WIN_KEEP : BATTLEFIELD_WG_TEXT_WIN_KEEP + 1); + SendWarning(GetDefenderTeam() == TEAM_ALLIANCE ? BATTLEFIELD_WG_TEXT_FORTRESS_CAPTURE_ALLIANCE : BATTLEFIELD_WG_TEXT_FORTRESS_CAPTURE_HORDE); else // defend alli/horde - SendWarning((GetDefenderTeam() == TEAM_ALLIANCE) ? BATTLEFIELD_WG_TEXT_DEFEND_KEEP : BATTLEFIELD_WG_TEXT_DEFEND_KEEP + 1); + SendWarning(GetDefenderTeam() == TEAM_ALLIANCE ? BATTLEFIELD_WG_TEXT_FORTRESS_DEFEND_ALLIANCE : BATTLEFIELD_WG_TEXT_FORTRESS_DEFEND_HORDE); } // ******************************************************* @@ -442,7 +437,7 @@ void BattlefieldWG::DoCompleteOrIncrementAchievement(uint32 achievement, Player* void BattlefieldWG::OnStartGrouping() { - SendWarning(BATTLEFIELD_WG_TEXT_WILL_START); + SendWarning(BATTLEFIELD_WG_TEXT_START_GROUPING); } uint8 BattlefieldWG::GetSpiritGraveyardId(uint32 areaId) const @@ -497,13 +492,13 @@ void BattlefieldWG::OnCreatureCreate(Creature* creature) case NPC_WINTERGRASP_CATAPULT: case NPC_WINTERGRASP_DEMOLISHER: { - if (!creature->ToTempSummon() || !creature->ToTempSummon()->GetSummonerGUID() || !sObjectAccessor->FindPlayer(creature->ToTempSummon()->GetSummonerGUID())) + if (!creature->ToTempSummon() || !creature->ToTempSummon()->GetSummonerGUID() || !ObjectAccessor::FindPlayer(creature->ToTempSummon()->GetSummonerGUID())) { creature->DespawnOrUnsummon(); return; } - Player* creator = sObjectAccessor->FindPlayer(creature->ToTempSummon()->GetSummonerGUID()); + Player* creator = ObjectAccessor::FindPlayer(creature->ToTempSummon()->GetSummonerGUID()); TeamId team = creator->GetTeamId(); if (team == TEAM_HORDE) @@ -599,19 +594,16 @@ void BattlefieldWG::OnGameObjectCreate(GameObject* go) return; } - for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) + for (WintergraspWorkshop* workshop : Workshops) { - if (WGWorkshop* workshop = (*itr)) + if (workshop->GetId() == workshopId) { - if (workshop->workshopId == workshopId) - { - WintergraspCapturePoint* capturePoint = new WintergraspCapturePoint(this, GetAttackerTeam()); + WintergraspCapturePoint* capturePoint = new WintergraspCapturePoint(this, GetAttackerTeam()); - capturePoint->SetCapturePointData(go); - capturePoint->LinkToWorkshop(workshop); - AddCapturePoint(capturePoint); - break; - } + capturePoint->SetCapturePointData(go); + capturePoint->LinkToWorkshop(workshop); + AddCapturePoint(capturePoint); + break; } } } @@ -689,7 +681,8 @@ void BattlefieldWG::PromotePlayer(Player* killer) { killer->RemoveAura(SPELL_RECRUIT); killer->CastSpell(killer, SPELL_CORPORAL, true); - SendWarning(BATTLEFIELD_WG_TEXT_FIRSTRANK, killer); + if (Creature* stalker = GetCreature(StalkerGuid)) + sCreatureTextMgr->SendChat(stalker, BATTLEFIELD_WG_TEXT_RANK_CORPORAL, killer, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, killer); } else killer->CastSpell(killer, SPELL_RECRUIT, true); @@ -700,7 +693,8 @@ void BattlefieldWG::PromotePlayer(Player* killer) { killer->RemoveAura(SPELL_CORPORAL); killer->CastSpell(killer, SPELL_LIEUTENANT, true); - SendWarning(BATTLEFIELD_WG_TEXT_SECONDRANK, killer); + if (Creature* stalker = GetCreature(StalkerGuid)) + sCreatureTextMgr->SendChat(stalker, BATTLEFIELD_WG_TEXT_RANK_FIRST_LIEUTENANT, killer, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, killer); } else killer->CastSpell(killer, SPELL_CORPORAL, true); @@ -828,22 +822,21 @@ void BattlefieldWG::FillInitialWorldStates(WorldPacket& data) data << uint32(BATTLEFIELD_WG_WORLD_STATE_VEHICLE_A) << uint32(GetData(BATTLEFIELD_WG_DATA_VEHICLE_A)); data << uint32(BATTLEFIELD_WG_WORLD_STATE_MAX_VEHICLE_A) << GetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_A); - for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) - data << (*itr)->m_WorldState << (*itr)->m_State; + for (BfWGGameObjectBuilding* building : BuildingsInZone) + building->FillInitialWorldStates(data); - for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) - if (*itr) - data << WorkshopsData[(*itr)->workshopId].worldstate << (*itr)->state; + for (WintergraspWorkshop* workshop : Workshops) + workshop->FillInitialWorldStates(data); } void BattlefieldWG::SendInitWorldStatesTo(Player* player) { - WorldPacket data(SMSG_INIT_WORLD_STATES, (4 + 4 + 4 + 2 + (BuildingsInZone.size() * 8) + (WorkshopsList.size() * 8))); + WorldPacket data(SMSG_INIT_WORLD_STATES, 4 + 4 + 4 + 2 + (BuildingsInZone.size() * 8) + (Workshops.size() * 8)); data << uint32(m_MapId); data << uint32(m_ZoneId); - data << uint32(0); - data << uint16(10 + BuildingsInZone.size() + WorkshopsList.size()); // Number of fields + data << uint32(0); // AreaId + data << uint16(10 + BuildingsInZone.size() + Workshops.size()); // Number of fields FillInitialWorldStates(data); @@ -931,18 +924,16 @@ void BattlefieldWG::ProcessEvent(WorldObject* obj, uint32 eventId) } // if destroy or damage event, search the wall/tower and update worldstate/send warning message - for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) + for (BfWGGameObjectBuilding* building : BuildingsInZone) { - if (GameObject* build = GetGameObject((*itr)->m_BuildGUID)) + if (go->GetGUID() == building->GetGUID()) { - if (go->GetEntry() == build->GetEntry()) + if (GameObject* buildingGo = GetGameObject(building->GetGUID())) { - if (build->GetGOInfo()->building.damagedEvent == eventId) - (*itr)->Damaged(); - - if (build->GetGOInfo()->building.destroyedEvent == eventId) - (*itr)->Destroyed(); - + if (buildingGo->GetGOInfo()->building.damagedEvent == eventId) + building->Damaged(); + else if (buildingGo->GetGOInfo()->building.destroyedEvent == eventId) + building->Destroyed(); break; } } @@ -1046,13 +1037,13 @@ WintergraspCapturePoint::WintergraspCapturePoint(BattlefieldWG* battlefield, Tea { m_Bf = battlefield; m_team = teamInControl; - m_Workshop = NULL; + m_Workshop = nullptr; } void WintergraspCapturePoint::ChangeTeam(TeamId /*oldTeam*/) { ASSERT(m_Workshop); - m_Workshop->GiveControlTo(m_team, false); + m_Workshop->GiveControlTo(m_team); } BfGraveyardWG::BfGraveyardWG(BattlefieldWG* battlefield) : BfGraveyard(battlefield) @@ -1061,35 +1052,36 @@ BfGraveyardWG::BfGraveyardWG(BattlefieldWG* battlefield) : BfGraveyard(battlefie m_GossipTextId = 0; } -BfWGGameObjectBuilding::BfWGGameObjectBuilding(BattlefieldWG* wg) +BfWGGameObjectBuilding::BfWGGameObjectBuilding(BattlefieldWG* wg, WintergraspGameObjectBuildingType type, uint32 worldState) { - m_WG = wg; - m_Team = 0; - m_Type = 0; - m_WorldState = 0; - m_State = 0; - m_NameId = 0; + ASSERT(wg); + + _wg = wg; + _teamControl = TEAM_NEUTRAL; + _type = type; + _worldState = worldState; + _state = BATTLEFIELD_WG_OBJECTSTATE_NONE; } void BfWGGameObjectBuilding::Rebuild() { - switch (m_Type) + switch (_type) { case BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER: case BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST: case BATTLEFIELD_WG_OBJECTTYPE_DOOR: case BATTLEFIELD_WG_OBJECTTYPE_WALL: - m_Team = m_WG->GetDefenderTeam(); // Objects that are part of the keep should be the defender's + _teamControl = _wg->GetDefenderTeam(); // Objects that are part of the keep should be the defender's break; case BATTLEFIELD_WG_OBJECTTYPE_TOWER: - m_Team = m_WG->GetAttackerTeam(); // The towers in the south should be the attacker's + _teamControl = _wg->GetAttackerTeam(); // The towers in the south should be the attacker's break; default: - m_Team = TEAM_NEUTRAL; + _teamControl = TEAM_NEUTRAL; break; } - if (GameObject* build = m_WG->GetGameObject(m_BuildGUID)) + if (GameObject* build = _wg->GetGameObject(_buildGUID)) { // Rebuild gameobject if (build->IsDestructibleBuilding()) @@ -1100,143 +1092,141 @@ void BfWGGameObjectBuilding::Rebuild() go->SetGoState(GO_STATE_READY); // Update worldstate - m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT - (m_Team * 3); - m_WG->SendUpdateWorldState(m_WorldState, m_State); + _state = WintergraspGameObjectState(BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT - (_teamControl * 3)); + _wg->SendUpdateWorldState(_worldState, _state); } UpdateCreatureAndGo(); - build->SetFaction(WintergraspFaction[m_Team]); + build->SetFaction(WintergraspFaction[_teamControl]); } } void BfWGGameObjectBuilding::Damaged() { // Update worldstate - m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DAMAGE - (m_Team * 3); - m_WG->SendUpdateWorldState(m_WorldState, m_State); + _state = WintergraspGameObjectState(BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DAMAGE - (_teamControl * 3)); + _wg->SendUpdateWorldState(_worldState, _state); // Send warning message - if (m_NameId) // tower damage + name - m_WG->SendWarning(m_NameId); + if (_staticTowerInfo) + _wg->SendWarning(_staticTowerInfo->TextIds.Damaged); - for (ObjectGuid guid : m_CreatureTopList[m_WG->GetAttackerTeam()]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->HideNpc(creature); + for (ObjectGuid guid : m_CreatureTopList[_wg->GetAttackerTeam()]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->HideNpc(creature); for (ObjectGuid guid : m_TurretTopList) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->HideNpc(creature); + if (Creature* creature = _wg->GetCreature(guid)) + _wg->HideNpc(creature); - if (m_Type == BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER) - m_WG->UpdateDamagedTowerCount(m_WG->GetDefenderTeam()); - else if (m_Type == BATTLEFIELD_WG_OBJECTTYPE_TOWER) - m_WG->UpdateDamagedTowerCount(m_WG->GetAttackerTeam()); + if (_type == BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER) + _wg->UpdateDamagedTowerCount(_wg->GetDefenderTeam()); + else if (_type == BATTLEFIELD_WG_OBJECTTYPE_TOWER) + _wg->UpdateDamagedTowerCount(_wg->GetAttackerTeam()); } void BfWGGameObjectBuilding::Destroyed() { // Update worldstate - m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY - (m_Team * 3); - m_WG->SendUpdateWorldState(m_WorldState, m_State); + _state = WintergraspGameObjectState(BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY - (_teamControl * 3)); + _wg->SendUpdateWorldState(_worldState, _state); // Warn players - if (m_NameId) - m_WG->SendWarning(m_NameId); + if (_staticTowerInfo) + _wg->SendWarning(_staticTowerInfo->TextIds.Destroyed); - switch (m_Type) + switch (_type) { // Inform the global wintergrasp script of the destruction of this object case BATTLEFIELD_WG_OBJECTTYPE_TOWER: case BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER: - m_WG->UpdatedDestroyedTowerCount(TeamId(m_Team)); + _wg->UpdatedDestroyedTowerCount(_teamControl); break; case BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST: - if (GameObject* build = m_WG->GetGameObject(m_BuildGUID)) + if (GameObject* build = _wg->GetGameObject(_buildGUID)) if (GameObject* go = build->FindNearestGameObject(GO_WINTERGRASP_KEEP_COLLISION_WALL, 50.0f)) go->SetGoState(GO_STATE_ACTIVE); - m_WG->SetRelicInteractible(true); - if (m_WG->GetRelic()) - m_WG->GetRelic()->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); + _wg->SetRelicInteractible(true); + if (_wg->GetRelic()) + _wg->GetRelic()->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); else - TC_LOG_ERROR("misc", "BattlefieldWG: Relic not found."); + TC_LOG_ERROR("bg.battlefield.wg", "Titan Relic not found."); + break; + default: break; } - m_WG->BrokenWallOrTower(TeamId(m_Team)); + _wg->BrokenWallOrTower(_teamControl); } -void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate, uint32 nameId) +void BfWGGameObjectBuilding::Init(GameObject* go) { if (!go) return; // GameObject associated to object - m_BuildGUID = go->GetGUID(); - - // Type of building (WALL/TOWER/DOOR) - m_Type = type; + _buildGUID = go->GetGUID(); - // WorldState for client (icon on map) - m_WorldState = worldstate; - - // NameId for Warning text - m_NameId = nameId; - - switch (m_Type) + switch (_type) { case BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER: case BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST: case BATTLEFIELD_WG_OBJECTTYPE_DOOR: case BATTLEFIELD_WG_OBJECTTYPE_WALL: - m_Team = m_WG->GetDefenderTeam(); // Objects that are part of the keep should be the defender's + _teamControl = _wg->GetDefenderTeam(); // Objects that are part of the keep should be the defender's break; case BATTLEFIELD_WG_OBJECTTYPE_TOWER: - m_Team = m_WG->GetAttackerTeam(); // The towers in the south should be the attacker's + _teamControl = _wg->GetAttackerTeam(); // The towers in the south should be the attacker's break; default: - m_Team = TEAM_NEUTRAL; + _teamControl = TEAM_NEUTRAL; break; } - m_State = sWorld->getWorldState(m_WorldState); - switch (m_State) + _state = WintergraspGameObjectState(sWorld->getWorldState(_worldState)); + switch (_state) { + case BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_INTACT: case BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT: case BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT: go->SetDestructibleState(GO_DESTRUCTIBLE_REBUILDING, NULL, true); break; + case BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_DESTROY: case BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY: case BATTLEFIELD_WG_OBJECTSTATE_HORDE_DESTROY: go->SetDestructibleState(GO_DESTRUCTIBLE_DESTROYED); break; + case BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_DAMAGE: case BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DAMAGE: case BATTLEFIELD_WG_OBJECTSTATE_HORDE_DAMAGE: go->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED); break; + default: + break; } int32 towerId = -1; switch (go->GetEntry()) { case GO_WINTERGRASP_FORTRESS_TOWER_1: - towerId = 0; + towerId = BATTLEFIELD_WG_TOWER_FORTRESS_NW; break; case GO_WINTERGRASP_FORTRESS_TOWER_2: - towerId = 1; + towerId = BATTLEFIELD_WG_TOWER_FORTRESS_SW; break; case GO_WINTERGRASP_FORTRESS_TOWER_3: - towerId = 2; + towerId = BATTLEFIELD_WG_TOWER_FORTRESS_SE; break; case GO_WINTERGRASP_FORTRESS_TOWER_4: - towerId = 3; + towerId = BATTLEFIELD_WG_TOWER_FORTRESS_NE; break; case GO_WINTERGRASP_SHADOWSIGHT_TOWER: - towerId = 4; + towerId = BATTLEFIELD_WG_TOWER_SHADOWSIGHT; break; case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: - towerId = 5; + towerId = BATTLEFIELD_WG_TOWER_WINTER_S_EDGE; break; case GO_WINTERGRASP_FLAMEWATCH_TOWER: - towerId = 6; + towerId = BATTLEFIELD_WG_TOWER_FLAMEWATCH; break; } @@ -1246,9 +1236,9 @@ void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate for (uint8 i = 0; i < AttackTowers[towerId - 4].nbObject; i++) { WintergraspObjectPositionData const& gobData = AttackTowers[towerId - 4].GameObject[i]; - if (GameObject* goHorde = m_WG->SpawnGameObject(gobData.entryHorde, gobData.x, gobData.y, gobData.z, gobData.o)) + if (GameObject* goHorde = _wg->SpawnGameObject(gobData.entryHorde, gobData.x, gobData.y, gobData.z, gobData.o)) m_GameObjectList[TEAM_HORDE].insert(goHorde->GetGUID()); - if (GameObject* goAlliance = m_WG->SpawnGameObject(gobData.entryAlliance, gobData.x, gobData.y, gobData.z, gobData.o)) + if (GameObject* goAlliance = _wg->SpawnGameObject(gobData.entryAlliance, gobData.x, gobData.y, gobData.z, gobData.o)) m_GameObjectList[TEAM_ALLIANCE].insert(goAlliance->GetGUID()); } @@ -1256,9 +1246,9 @@ void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate for (uint8 i = 0; i < AttackTowers[towerId - 4].nbCreatureBottom; i++) { WintergraspObjectPositionData const& creatureData = AttackTowers[towerId - 4].CreatureBottom[i]; - if (Creature* creature = m_WG->SpawnCreature(creatureData.entryHorde, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_HORDE)) + if (Creature* creature = _wg->SpawnCreature(creatureData.entryHorde, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_HORDE)) m_CreatureBottomList[TEAM_HORDE].insert(creature->GetGUID()); - if (Creature* creature = m_WG->SpawnCreature(creatureData.entryAlliance, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_ALLIANCE)) + if (Creature* creature = _wg->SpawnCreature(creatureData.entryAlliance, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_ALLIANCE)) m_CreatureBottomList[TEAM_ALLIANCE].insert(creature->GetGUID()); } @@ -1266,20 +1256,23 @@ void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate for (uint8 i = 0; i < AttackTowers[towerId - 4].nbCreatureTop; i++) { WintergraspObjectPositionData const& creatureData = AttackTowers[towerId - 4].CreatureTop[i]; - if (Creature* creature = m_WG->SpawnCreature(creatureData.entryHorde, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_HORDE)) + if (Creature* creature = _wg->SpawnCreature(creatureData.entryHorde, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_HORDE)) m_CreatureTopList[TEAM_HORDE].insert(creature->GetGUID()); - if (Creature* creature = m_WG->SpawnCreature(creatureData.entryAlliance, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_ALLIANCE)) + if (Creature* creature = _wg->SpawnCreature(creatureData.entryAlliance, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_ALLIANCE)) m_CreatureTopList[TEAM_ALLIANCE].insert(creature->GetGUID()); } } if (towerId >= 0) { + ASSERT(towerId < WG_MAX_TOWER); + _staticTowerInfo = &TowerData[towerId]; + // Spawn Turret bottom for (uint8 i = 0; i < TowerCannon[towerId].nbTowerCannonBottom; i++) { Position const& turretPos = TowerCannon[towerId].TowerCannonBottom[i]; - if (Creature* turret = m_WG->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, turretPos, TEAM_ALLIANCE)) + if (Creature* turret = _wg->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, turretPos, TEAM_ALLIANCE)) { m_TowerCannonBottomList.insert(turret->GetGUID()); switch (go->GetEntry()) @@ -1288,15 +1281,15 @@ void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate case GO_WINTERGRASP_FORTRESS_TOWER_2: case GO_WINTERGRASP_FORTRESS_TOWER_3: case GO_WINTERGRASP_FORTRESS_TOWER_4: - turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); + turret->setFaction(WintergraspFaction[_wg->GetDefenderTeam()]); break; case GO_WINTERGRASP_SHADOWSIGHT_TOWER: case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: case GO_WINTERGRASP_FLAMEWATCH_TOWER: - turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); + turret->setFaction(WintergraspFaction[_wg->GetAttackerTeam()]); break; } - m_WG->HideNpc(turret); + _wg->HideNpc(turret); } } @@ -1304,7 +1297,7 @@ void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate for (uint8 i = 0; i < TowerCannon[towerId].nbTurretTop; i++) { Position const& towerCannonPos = TowerCannon[towerId].TurretTop[i]; - if (Creature* turret = m_WG->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos, TeamId(0))) + if (Creature* turret = _wg->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos, TeamId(0))) { m_TurretTopList.insert(turret->GetGUID()); switch (go->GetEntry()) @@ -1313,15 +1306,15 @@ void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate case GO_WINTERGRASP_FORTRESS_TOWER_2: case GO_WINTERGRASP_FORTRESS_TOWER_3: case GO_WINTERGRASP_FORTRESS_TOWER_4: - turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); + turret->setFaction(WintergraspFaction[_wg->GetDefenderTeam()]); break; case GO_WINTERGRASP_SHADOWSIGHT_TOWER: case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: case GO_WINTERGRASP_FLAMEWATCH_TOWER: - turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); + turret->setFaction(WintergraspFaction[_wg->GetAttackerTeam()]); break; } - m_WG->HideNpc(turret); + _wg->HideNpc(turret); } } UpdateCreatureAndGo(); @@ -1330,61 +1323,58 @@ void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate void BfWGGameObjectBuilding::UpdateCreatureAndGo() { - for (ObjectGuid guid : m_CreatureTopList[m_WG->GetDefenderTeam()]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->HideNpc(creature); + for (ObjectGuid guid : m_CreatureTopList[_wg->GetDefenderTeam()]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->HideNpc(creature); - for (ObjectGuid guid : m_CreatureTopList[m_WG->GetAttackerTeam()]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->ShowNpc(creature, true); + for (ObjectGuid guid : m_CreatureTopList[_wg->GetAttackerTeam()]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->ShowNpc(creature, true); - for (ObjectGuid guid : m_CreatureBottomList[m_WG->GetDefenderTeam()]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->HideNpc(creature); + for (ObjectGuid guid : m_CreatureBottomList[_wg->GetDefenderTeam()]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->HideNpc(creature); - for (ObjectGuid guid : m_CreatureBottomList[m_WG->GetAttackerTeam()]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->ShowNpc(creature, true); + for (ObjectGuid guid : m_CreatureBottomList[_wg->GetAttackerTeam()]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->ShowNpc(creature, true); - for (ObjectGuid guid : m_GameObjectList[m_WG->GetDefenderTeam()]) - if (GameObject* object = m_WG->GetGameObject(guid)) - object->SetRespawnTime(RESPAWN_ONE_DAY); + for (ObjectGuid guid : m_GameObjectList[_wg->GetDefenderTeam()]) + if (GameObject* go = _wg->GetGameObject(guid)) + go->SetRespawnTime(RESPAWN_ONE_DAY); - for (ObjectGuid guid : m_GameObjectList[m_WG->GetAttackerTeam()]) - if (GameObject* object = m_WG->GetGameObject(guid)) - object->SetRespawnTime(RESPAWN_IMMEDIATELY); + for (ObjectGuid guid : m_GameObjectList[_wg->GetAttackerTeam()]) + if (GameObject* go = _wg->GetGameObject(guid)) + go->SetRespawnTime(RESPAWN_IMMEDIATELY); } void BfWGGameObjectBuilding::UpdateTurretAttack(bool disable) { for (ObjectGuid guid : m_TowerCannonBottomList) { - if (Creature* creature = m_WG->GetCreature(guid)) + if (Creature* creature = _wg->GetCreature(guid)) { - if (GameObject* build = m_WG->GetGameObject(m_BuildGUID)) - { - if (disable) - m_WG->HideNpc(creature); - else - m_WG->ShowNpc(creature, true); + if (disable) + _wg->HideNpc(creature); + else + _wg->ShowNpc(creature, true); - switch (build->GetEntry()) + switch (_buildGUID.GetEntry()) + { + case GO_WINTERGRASP_FORTRESS_TOWER_1: + case GO_WINTERGRASP_FORTRESS_TOWER_2: + case GO_WINTERGRASP_FORTRESS_TOWER_3: + case GO_WINTERGRASP_FORTRESS_TOWER_4: { - case GO_WINTERGRASP_FORTRESS_TOWER_1: - case GO_WINTERGRASP_FORTRESS_TOWER_2: - case GO_WINTERGRASP_FORTRESS_TOWER_3: - case GO_WINTERGRASP_FORTRESS_TOWER_4: - { - creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); - break; - } - case GO_WINTERGRASP_SHADOWSIGHT_TOWER: - case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: - case GO_WINTERGRASP_FLAMEWATCH_TOWER: - { - creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); - break; - } + creature->setFaction(WintergraspFaction[_wg->GetDefenderTeam()]); + break; + } + case GO_WINTERGRASP_SHADOWSIGHT_TOWER: + case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: + case GO_WINTERGRASP_FLAMEWATCH_TOWER: + { + creature->setFaction(WintergraspFaction[_wg->GetAttackerTeam()]); + break; } } } @@ -1392,238 +1382,179 @@ void BfWGGameObjectBuilding::UpdateTurretAttack(bool disable) for (ObjectGuid guid : m_TurretTopList) { - if (Creature* creature = m_WG->GetCreature(guid)) + if (Creature* creature = _wg->GetCreature(guid)) { - if (GameObject* build = m_WG->GetGameObject(m_BuildGUID)) - { - if (disable) - m_WG->HideNpc(creature); - else - m_WG->ShowNpc(creature, true); + if (disable) + _wg->HideNpc(creature); + else + _wg->ShowNpc(creature, true); - switch (build->GetEntry()) + switch (_buildGUID.GetEntry()) + { + case GO_WINTERGRASP_FORTRESS_TOWER_1: + case GO_WINTERGRASP_FORTRESS_TOWER_2: + case GO_WINTERGRASP_FORTRESS_TOWER_3: + case GO_WINTERGRASP_FORTRESS_TOWER_4: { - case GO_WINTERGRASP_FORTRESS_TOWER_1: - case GO_WINTERGRASP_FORTRESS_TOWER_2: - case GO_WINTERGRASP_FORTRESS_TOWER_3: - case GO_WINTERGRASP_FORTRESS_TOWER_4: - { - creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); - break; - } - case GO_WINTERGRASP_SHADOWSIGHT_TOWER: - case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: - case GO_WINTERGRASP_FLAMEWATCH_TOWER: - { - creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); - break; - } + creature->setFaction(WintergraspFaction[_wg->GetDefenderTeam()]); + break; + } + case GO_WINTERGRASP_SHADOWSIGHT_TOWER: + case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: + case GO_WINTERGRASP_FLAMEWATCH_TOWER: + { + creature->setFaction(WintergraspFaction[_wg->GetAttackerTeam()]); + break; } } } } } -void BfWGGameObjectBuilding::Save() -{ - sWorld->setWorldState(m_WorldState, m_State); -} - -WGWorkshop::WGWorkshop(BattlefieldWG* _bf, uint8 _workshopId) +void BfWGGameObjectBuilding::FillInitialWorldStates(WorldPacket& data) { - ASSERT(_bf || _workshopId < WG_MAX_WORKSHOP); - - bf = _bf; - workshopId = _workshopId; - teamControl = BATTLEFIELD_WG_TEAM_NEUTRAL; - state = BATTLEFIELD_WG_OBJECTSTATE_NONE; + data << uint32(_worldState) << uint32(_state); } -void WGWorkshop::GiveControlTo(uint8 team, bool init) -{ - switch (team) - { - case BATTLEFIELD_WG_TEAM_NEUTRAL: - { - // Send warning message to all player to inform a faction attack to a workshop - // alliance / horde attacking a workshop - bf->SendWarning(teamControl ? WorkshopsData[workshopId].text : WorkshopsData[workshopId].text + 1); - break; - } - case BATTLEFIELD_WG_TEAM_ALLIANCE: - case BATTLEFIELD_WG_TEAM_HORDE: - { - // Updating worldstate - state = team == BATTLEFIELD_WG_TEAM_ALLIANCE ? BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT : BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT; - bf->SendUpdateWorldState(WorkshopsData[workshopId].worldstate, state); - - // Warning message - if (!init) // workshop taken - alliance - bf->SendWarning(team == BATTLEFIELD_WG_TEAM_ALLIANCE ? WorkshopsData[workshopId].text : WorkshopsData[workshopId].text + 1); - - // Found associate graveyard and update it - if (workshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) - if (bf->GetGraveyardById(workshopId)) - bf->GetGraveyardById(workshopId)->GiveControlTo(team == BATTLEFIELD_WG_TEAM_ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE); - - teamControl = team; - break; - } - } - - if (!init) - bf->UpdateCounterVehicle(false); -} - -void WGWorkshop::UpdateGraveyardAndWorkshop() +void BfWGGameObjectBuilding::Save() { - if (workshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) - bf->GetGraveyardById(workshopId)->GiveControlTo(TeamId(teamControl)); - else - GiveControlTo(bf->GetDefenderTeam(), true); + sWorld->setWorldState(_worldState, _state); } -void WGWorkshop::Save() +WintergraspWorkshop::WintergraspWorkshop(BattlefieldWG* wg, uint8 type) { - sWorld->setWorldState(WorkshopsData[workshopId].worldstate, state); -} + ASSERT(wg && type < WG_MAX_WORKSHOP); -WintergraspWorkshopData::WintergraspWorkshopData(BattlefieldWG* wg) -{ - m_WG = wg; - m_Type = 0; - m_State = 0; - m_WorldState = 0; - m_TeamControl = 0; - m_NameId = 0; + _wg = wg; + _state = BATTLEFIELD_WG_OBJECTSTATE_NONE; + _teamControl = TEAM_NEUTRAL; + _staticInfo = &WorkshopData[type]; } -void WintergraspWorkshopData::AddCreature(WintergraspObjectPositionData const& obj) +void WintergraspWorkshop::AddCreature(WintergraspObjectPositionData const& obj) { - if (Creature* creature = m_WG->SpawnCreature(obj.entryHorde, obj.x, obj.y, obj.z, obj.o, TEAM_HORDE)) - m_CreatureOnPoint[TEAM_HORDE].insert(creature->GetGUID()); + if (Creature* creature = _wg->SpawnCreature(obj.entryHorde, obj.x, obj.y, obj.z, obj.o, TEAM_HORDE)) + _creatureOnPoint[TEAM_HORDE].insert(creature->GetGUID()); - if (Creature* creature = m_WG->SpawnCreature(obj.entryAlliance, obj.x, obj.y, obj.z, obj.o, TEAM_ALLIANCE)) - m_CreatureOnPoint[TEAM_ALLIANCE].insert(creature->GetGUID()); + if (Creature* creature = _wg->SpawnCreature(obj.entryAlliance, obj.x, obj.y, obj.z, obj.o, TEAM_ALLIANCE)) + _creatureOnPoint[TEAM_ALLIANCE].insert(creature->GetGUID()); } -void WintergraspWorkshopData::AddGameObject(WintergraspObjectPositionData const& obj) +void WintergraspWorkshop::AddGameObject(WintergraspObjectPositionData const& obj) { - if (GameObject* gameobject = m_WG->SpawnGameObject(obj.entryHorde, obj.x, obj.y, obj.z, obj.o)) - m_GameObjectOnPoint[TEAM_HORDE].insert(gameobject->GetGUID()); - if (GameObject* gameobject = m_WG->SpawnGameObject(obj.entryAlliance, obj.x, obj.y, obj.z, obj.o)) - m_GameObjectOnPoint[TEAM_ALLIANCE].insert(gameobject->GetGUID()); + if (GameObject* go = _wg->SpawnGameObject(obj.entryHorde, obj.x, obj.y, obj.z, obj.o)) + _gameObjectOnPoint[TEAM_HORDE].insert(go->GetGUID()); + if (GameObject* go = _wg->SpawnGameObject(obj.entryAlliance, obj.x, obj.y, obj.z, obj.o)) + _gameObjectOnPoint[TEAM_ALLIANCE].insert(go->GetGUID()); } -void WintergraspWorkshopData::Init(uint32 worldstate, uint32 type, uint32 nameId) +void WintergraspWorkshop::GiveControlTo(TeamId teamId, bool init /*= false*/) { - m_WorldState = worldstate; - m_Type = type; - m_NameId = nameId; -} - -void WintergraspWorkshopData::GiveControlTo(uint8 team, bool init) -{ - switch (team) + switch (teamId) { - case BATTLEFIELD_WG_TEAM_NEUTRAL: + case TEAM_NEUTRAL: { // Send warning message to all player for inform a faction attack a workshop // alliance / horde attacking workshop - m_WG->SendWarning(m_TeamControl ? m_NameId : m_NameId + 1); + _wg->SendWarning(_teamControl == TEAM_ALLIANCE ? _staticInfo->TextIds.HordeAttack : _staticInfo->TextIds.AllianceAttack); break; } - case BATTLEFIELD_WG_TEAM_ALLIANCE: + case TEAM_ALLIANCE: { // Show Alliance creature - for (ObjectGuid guid : m_CreatureOnPoint[TEAM_ALLIANCE]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->ShowNpc(creature, creature->GetEntry() != 30499); + for (ObjectGuid guid : _creatureOnPoint[TEAM_ALLIANCE]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->ShowNpc(creature, creature->GetEntry() != 30499); // Hide Horde creature - for (ObjectGuid guid : m_CreatureOnPoint[TEAM_HORDE]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->HideNpc(creature); + for (ObjectGuid guid : _creatureOnPoint[TEAM_HORDE]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->HideNpc(creature); // Show Alliance gameobject - for (ObjectGuid guid : m_GameObjectOnPoint[TEAM_ALLIANCE]) - if (GameObject* object = m_WG->GetGameObject(guid)) - object->SetRespawnTime(RESPAWN_IMMEDIATELY); + for (ObjectGuid guid : _gameObjectOnPoint[TEAM_ALLIANCE]) + if (GameObject* go = _wg->GetGameObject(guid)) + go->SetRespawnTime(RESPAWN_IMMEDIATELY); // Hide Horde gameobject - for (ObjectGuid guid : m_GameObjectOnPoint[TEAM_HORDE]) - if (GameObject* object = m_WG->GetGameObject(guid)) - object->SetRespawnTime(RESPAWN_ONE_DAY); + for (ObjectGuid guid : _gameObjectOnPoint[TEAM_HORDE]) + if (GameObject* go = _wg->GetGameObject(guid)) + go->SetRespawnTime(RESPAWN_ONE_DAY); // Updating worldstate - m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT; - m_WG->SendUpdateWorldState(m_WorldState, m_State); + _state = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT; + _wg->SendUpdateWorldState(_staticInfo->WorldStateId, _state); // Warning message - if (!init) // workshop taken - alliance - m_WG->SendWarning(m_NameId); + if (!init) + _wg->SendWarning(_staticInfo->TextIds.AllianceCapture); // workshop taken - alliance // Found associate graveyard and update it - if (m_Type < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) - if (m_WG->GetGraveyardById(m_Type)) - m_WG->GetGraveyardById(m_Type)->GiveControlTo(TEAM_ALLIANCE); + if (_staticInfo->WorkshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) + if (BfGraveyard* gy = _wg->GetGraveyardById(_staticInfo->WorkshopId)) + gy->GiveControlTo(TEAM_ALLIANCE); - m_TeamControl = team; + _teamControl = teamId; break; } - case BATTLEFIELD_WG_TEAM_HORDE: + case TEAM_HORDE: { // Show Horde creature - for (ObjectGuid guid : m_CreatureOnPoint[TEAM_HORDE]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->ShowNpc(creature, creature->GetEntry() != 30400); + for (ObjectGuid guid : _creatureOnPoint[TEAM_HORDE]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->ShowNpc(creature, creature->GetEntry() != 30400); // Hide Alliance creature - for (ObjectGuid guid : m_CreatureOnPoint[TEAM_ALLIANCE]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->HideNpc(creature); + for (ObjectGuid guid : _creatureOnPoint[TEAM_ALLIANCE]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->HideNpc(creature); // Hide Alliance gameobject - for (ObjectGuid guid : m_GameObjectOnPoint[TEAM_ALLIANCE]) - if (GameObject* object = m_WG->GetGameObject(guid)) - object->SetRespawnTime(RESPAWN_ONE_DAY); + for (ObjectGuid guid : _gameObjectOnPoint[TEAM_ALLIANCE]) + if (GameObject* go = _wg->GetGameObject(guid)) + go->SetRespawnTime(RESPAWN_ONE_DAY); // Show Horde gameobject - for (ObjectGuid guid : m_GameObjectOnPoint[TEAM_HORDE]) - if (GameObject* object = m_WG->GetGameObject(guid)) - object->SetRespawnTime(RESPAWN_IMMEDIATELY); + for (ObjectGuid guid : _gameObjectOnPoint[TEAM_HORDE]) + if (GameObject* go = _wg->GetGameObject(guid)) + go->SetRespawnTime(RESPAWN_IMMEDIATELY); // Update worldstate - m_State = BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT; - m_WG->SendUpdateWorldState(m_WorldState, m_State); + _state = BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT; + _wg->SendUpdateWorldState(_staticInfo->WorldStateId, _state); // Warning message - if (!init) // workshop taken - horde - m_WG->SendWarning(m_NameId + 1); + if (!init) + _wg->SendWarning(_staticInfo->TextIds.HordeCapture); // workshop taken - horde // Update graveyard control - if (m_Type < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) - if (m_WG->GetGraveyardById(m_Type)) - m_WG->GetGraveyardById(m_Type)->GiveControlTo(TEAM_HORDE); + if (_staticInfo->WorkshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) + if (BfGraveyard* gy = _wg->GetGraveyardById(_staticInfo->WorkshopId)) + gy->GiveControlTo(TEAM_HORDE); - m_TeamControl = team; + _teamControl = teamId; break; } } if (!init) - m_WG->UpdateCounterVehicle(false); + _wg->UpdateCounterVehicle(false); } -void WintergraspWorkshopData::UpdateGraveyardAndWorkshop() +void WintergraspWorkshop::UpdateGraveyardAndWorkshop() { - if (m_Type < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) - m_WG->GetGraveyardById(m_Type)->GiveControlTo(TeamId(m_TeamControl)); + if (_staticInfo->WorkshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) + _wg->GetGraveyardById(_staticInfo->WorkshopId)->GiveControlTo(_teamControl); else - GiveControlTo(m_WG->GetDefenderTeam(), true); + GiveControlTo(_wg->GetDefenderTeam(), true); +} + +void WintergraspWorkshop::FillInitialWorldStates(WorldPacket& data) +{ + data << uint32(_staticInfo->WorldStateId) << uint32(_state); } -void WintergraspWorkshopData::Save() +void WintergraspWorkshop::Save() { - sWorld->setWorldState(m_WorldState, m_State); + sWorld->setWorldState(_staticInfo->WorldStateId, _state); } diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.h b/src/server/game/Battlefield/Zones/BattlefieldWG.h index 7f2e6194222..848b29daec7 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.h +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.h @@ -25,11 +25,11 @@ class BattlefieldWG; class WintergraspCapturePoint; struct BfWGGameObjectBuilding; -struct WGWorkshop; +struct WintergraspWorkshop; typedef std::set<GameObject*> GameObjectSet; -typedef std::set<BfWGGameObjectBuilding*> GameObjectBuilding; -typedef std::set<WGWorkshop*> Workshop; +typedef std::set<BfWGGameObjectBuilding*> GameObjectBuildingSet; +typedef std::set<WintergraspWorkshop*> WorkshopSet; typedef std::set<Group*> GroupSet; //typedef std::set<WintergraspCapturePoint *> CapturePointSet; unused ? @@ -222,7 +222,7 @@ struct BfWGCoordGY float o; uint32 gyid; uint8 type; - int32 textid; // for gossip menu + uint32 textid; // for gossip menu TeamId startcontrol; }; @@ -253,13 +253,13 @@ class WintergraspCapturePoint : public BfCapturePoint public: WintergraspCapturePoint(BattlefieldWG* battlefield, TeamId teamInControl); - void LinkToWorkshop(WGWorkshop* workshop) { m_Workshop = workshop; } + void LinkToWorkshop(WintergraspWorkshop* workshop) { m_Workshop = workshop; } void ChangeTeam(TeamId oldteam) override; TeamId GetTeam() const { return m_team; } protected: - WGWorkshop* m_Workshop; + WintergraspWorkshop* m_Workshop; }; /* ######################### * @@ -415,11 +415,11 @@ class BattlefieldWG : public Battlefield protected: bool m_isRelicInteractible; - Workshop WorkshopsList; + WorkshopSet Workshops; GuidSet DefenderPortalList; GuidSet m_KeepGameObject[BG_TEAMS_COUNT]; - GameObjectBuilding BuildingsInZone; + GameObjectBuildingSet BuildingsInZone; GuidSet m_vehicles[BG_TEAMS_COUNT]; GuidSet CanonList; @@ -446,6 +446,7 @@ uint8 const WG_MAX_OUTSIDE_NPC = 14; uint8 const WG_OUTSIDE_ALLIANCE_NPC = 7; uint8 const WG_MAX_TELEPORTER = 12; uint8 const WG_MAX_WORKSHOP = 6; +uint8 const WG_MAX_TOWER = 7; enum WintergraspGameObjectBuildingType { @@ -471,6 +472,17 @@ enum WintergraspGameObjectState BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY }; +enum WintergraspTowerIds +{ + BATTLEFIELD_WG_TOWER_FORTRESS_NW, + BATTLEFIELD_WG_TOWER_FORTRESS_SW, + BATTLEFIELD_WG_TOWER_FORTRESS_SE, + BATTLEFIELD_WG_TOWER_FORTRESS_NE, + BATTLEFIELD_WG_TOWER_SHADOWSIGHT, + BATTLEFIELD_WG_TOWER_WINTER_S_EDGE, + BATTLEFIELD_WG_TOWER_FLAMEWATCH +}; + enum WintergraspWorkshopIds { BATTLEFIELD_WG_WORKSHOP_NE, @@ -498,32 +510,50 @@ enum WintergraspTeamControl BATTLEFIELD_WG_TEAM_NEUTRAL }; -/// @todo: Can this be handled with creature_text or SmartAI ? enum WintergraspText { - BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NE = 12055, - BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NW = 12052, - BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_SE = 12053, - BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_SW = 12054, - BATTLEFIELD_WG_TEXT_WORKSHOP_ATTACK = 12051, - BATTLEFIELD_WG_TEXT_WORKSHOP_TAKEN = 12050, - BATTLEFIELD_WG_TEXT_ALLIANCE = 12057, - BATTLEFIELD_WG_TEXT_HORDE = 12056, - BATTLEFIELD_WG_TEXT_WILL_START = 12058, - BATTLEFIELD_WG_TEXT_START = 12067, - BATTLEFIELD_WG_TEXT_FIRSTRANK = 12059, - BATTLEFIELD_WG_TEXT_SECONDRANK = 12060, - BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_NE = 12062, - BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_NW = 12064, - BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_SE = 12061, - BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_SW = 12063, - BATTLEFIELD_WG_TEXT_TOWER_DAMAGE = 12065, - BATTLEFIELD_WG_TEXT_TOWER_DESTROY = 12066, - BATTLEFIELD_WG_TEXT_TOWER_NAME_S = 12069, - BATTLEFIELD_WG_TEXT_TOWER_NAME_E = 12070, - BATTLEFIELD_WG_TEXT_TOWER_NAME_W = 12071, - BATTLEFIELD_WG_TEXT_DEFEND_KEEP = 12068, - BATTLEFIELD_WG_TEXT_WIN_KEEP = 12072 + // Invisible Stalker + BATTLEFIELD_WG_TEXT_SOUTHERN_TOWER_DAMAGE = 1, + BATTLEFIELD_WG_TEXT_SOUTHERN_TOWER_DESTROY = 2, + BATTLEFIELD_WG_TEXT_EASTERN_TOWER_DAMAGE = 3, + BATTLEFIELD_WG_TEXT_EASTERN_TOWER_DESTROY = 4, + BATTLEFIELD_WG_TEXT_WESTERN_TOWER_DAMAGE = 5, + BATTLEFIELD_WG_TEXT_WESTERN_TOWER_DESTROY = 6, + BATTLEFIELD_WG_TEXT_NW_KEEPTOWER_DAMAGE = 7, + BATTLEFIELD_WG_TEXT_NW_KEEPTOWER_DESTROY = 8, + BATTLEFIELD_WG_TEXT_SE_KEEPTOWER_DAMAGE = 9, + BATTLEFIELD_WG_TEXT_SE_KEEPTOWER_DESTROY = 10, + BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_ATTACK_ALLIANCE = 11, + BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_CAPTURE_ALLIANCE = 12, + BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_ATTACK_HORDE = 13, + BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_CAPTURE_HORDE = 14, + BATTLEFIELD_WG_TEXT_EASTSPARK_ATTACK_ALLIANCE = 15, + BATTLEFIELD_WG_TEXT_EASTSPARK_CAPTURE_ALLIANCE = 16, + BATTLEFIELD_WG_TEXT_EASTSPARK_ATTACK_HORDE = 17, + BATTLEFIELD_WG_TEXT_EASTSPARK_CAPTURE_HORDE = 18, + BATTLEFIELD_WG_TEXT_SUNKEN_RING_ATTACK_ALLIANCE = 19, + BATTLEFIELD_WG_TEXT_SUNKEN_RING_CAPTURE_ALLIANCE = 20, + BATTLEFIELD_WG_TEXT_SUNKEN_RING_ATTACK_HORDE = 21, + BATTLEFIELD_WG_TEXT_SUNKEN_RING_CAPTURE_HORDE = 22, + BATTLEFIELD_WG_TEXT_WESTSPARK_ATTACK_ALLIANCE = 23, + BATTLEFIELD_WG_TEXT_WESTSPARK_CAPTURE_ALLIANCE = 24, + BATTLEFIELD_WG_TEXT_WESTSPARK_ATTACK_HORDE = 25, + BATTLEFIELD_WG_TEXT_WESTSPARK_CAPTURE_HORDE = 26, + + BATTLEFIELD_WG_TEXT_START_GROUPING = 27, + BATTLEFIELD_WG_TEXT_START_BATTLE = 28, + BATTLEFIELD_WG_TEXT_FORTRESS_DEFEND_ALLIANCE = 29, + BATTLEFIELD_WG_TEXT_FORTRESS_CAPTURE_ALLIANCE = 30, + BATTLEFIELD_WG_TEXT_FORTRESS_DEFEND_HORDE = 31, + BATTLEFIELD_WG_TEXT_FORTRESS_CAPTURE_HORDE = 32, + + BATTLEFIELD_WG_TEXT_NE_KEEPTOWER_DAMAGE = 33, + BATTLEFIELD_WG_TEXT_NE_KEEPTOWER_DESTROY = 34, + BATTLEFIELD_WG_TEXT_SW_KEEPTOWER_DAMAGE = 35, + BATTLEFIELD_WG_TEXT_SW_KEEPTOWER_DESTROY = 36, + + BATTLEFIELD_WG_TEXT_RANK_CORPORAL = 37, + BATTLEFIELD_WG_TEXT_RANK_FIRST_LIEUTENANT = 38 }; enum WintergraspGameObject @@ -550,16 +580,6 @@ enum WintergraspGameObject GO_WINTERGRASP_KEEP_COLLISION_WALL = 194323 }; -struct WintergraspObjectPositionData -{ - float x; - float y; - float z; - float o; - uint32 entryHorde; - uint32 entryAlliance; -}; - // ***************************************************** // ************ Destructible (Wall, Tower..) *********** // ***************************************************** @@ -572,72 +592,90 @@ struct WintergraspBuildingSpawnData float y; float z; float o; - uint32 type; - uint32 nameId; + WintergraspGameObjectBuildingType type; }; -struct WintergraspRebuildableBuildingData +struct WintergraspObjectPositionData { - ObjectGuid Guid; - uint32 entry; - uint32 WorldState; float x; float y; float z; float o; - uint32 type; - uint32 nameId; + uint32 entryHorde; + uint32 entryAlliance; }; -const WintergraspBuildingSpawnData WGGameObjectBuilding[WG_MAX_OBJ] = +WintergraspBuildingSpawnData const WGGameObjectBuilding[WG_MAX_OBJ] = { // Wall (Not spawned in db) - // Entry WS X Y Z O type NameID - { 190219, 3749, 5371.46f, 3047.47f, 407.571f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 190220, 3750, 5331.26f, 3047.1f, 407.923f, 0.052359f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191795, 3764, 5385.84f, 2909.49f, 409.713f, 0.00872f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191796, 3772, 5384.45f, 2771.84f, 410.27f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191799, 3762, 5371.44f, 2630.61f, 408.816f, 3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191800, 3766, 5301.84f, 2909.09f, 409.866f, 0.008724f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191801, 3770, 5301.06f, 2771.41f, 409.901f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191802, 3751, 5280.2f, 2995.58f, 408.825f, 1.61443f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191803, 3752, 5279.14f, 2956.02f, 408.604f, 1.5708f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191804, 3767, 5278.69f, 2882.51f, 409.539f, 1.5708f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191806, 3769, 5279.5f, 2798.94f, 409.998f, 1.5708f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191807, 3759, 5279.94f, 2724.77f, 409.945f, 1.56207f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191808, 3760, 5279.6f, 2683.79f, 409.849f, 1.55334f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191809, 3761, 5330.96f, 2630.78f, 409.283f, 3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 190369, 3753, 5256.08f, 2933.96f, 409.357f, 3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 190370, 3758, 5257.46f, 2747.33f, 409.743f, -3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 190371, 3754, 5214.96f, 2934.09f, 409.19f, -0.008724f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 190372, 3757, 5215.82f, 2747.57f, 409.188f, -3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 190374, 3755, 5162.27f, 2883.04f, 410.256f, 1.57952f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 190376, 3756, 5163.72f, 2799.84f, 409.227f, 1.57952f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, + // Entry WS X Y Z O Type + { 190219, 3749, 5371.46f, 3047.47f, 407.571f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 190220, 3750, 5331.26f, 3047.1f, 407.923f, 0.052359f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191795, 3764, 5385.84f, 2909.49f, 409.713f, 0.00872f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191796, 3772, 5384.45f, 2771.84f, 410.27f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191799, 3762, 5371.44f, 2630.61f, 408.816f, 3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191800, 3766, 5301.84f, 2909.09f, 409.866f, 0.008724f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191801, 3770, 5301.06f, 2771.41f, 409.901f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191802, 3751, 5280.2f, 2995.58f, 408.825f, 1.61443f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191803, 3752, 5279.14f, 2956.02f, 408.604f, 1.5708f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191804, 3767, 5278.69f, 2882.51f, 409.539f, 1.5708f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191806, 3769, 5279.5f, 2798.94f, 409.998f, 1.5708f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191807, 3759, 5279.94f, 2724.77f, 409.945f, 1.56207f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191808, 3760, 5279.6f, 2683.79f, 409.849f, 1.55334f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191809, 3761, 5330.96f, 2630.78f, 409.283f, 3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 190369, 3753, 5256.08f, 2933.96f, 409.357f, 3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 190370, 3758, 5257.46f, 2747.33f, 409.743f, -3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 190371, 3754, 5214.96f, 2934.09f, 409.19f, -0.008724f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 190372, 3757, 5215.82f, 2747.57f, 409.188f, -3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 190374, 3755, 5162.27f, 2883.04f, 410.256f, 1.57952f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 190376, 3756, 5163.72f, 2799.84f, 409.227f, 1.57952f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, // Tower of keep (Not spawned in db) - { 190221, 3711, 5281.15f, 3044.59f, 407.843f, 3.11539f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER, BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_NW }, - { 190373, 3713, 5163.76f, 2932.23f, 409.19f, 3.12412f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER, BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_SW }, - { 190377, 3714, 5166.4f, 2748.37f, 409.188f, -1.5708f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER, BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_SE }, - { 190378, 3712, 5281.19f, 2632.48f, 409.099f, -1.58825f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER, BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_NE }, + { 190221, 3711, 5281.15f, 3044.59f, 407.843f, 3.11539f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER }, // NW + { 190373, 3713, 5163.76f, 2932.23f, 409.19f, 3.12412f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER }, // SW + { 190377, 3714, 5166.4f, 2748.37f, 409.188f, -1.5708f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER }, // SE + { 190378, 3712, 5281.19f, 2632.48f, 409.099f, -1.58825f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER }, // NE // Wall (with passage) (Not spawned in db) - { 191797, 3765, 5343.29f, 2908.86f, 409.576f, 0.008724f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191798, 3771, 5342.72f, 2771.39f, 409.625f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191805, 3768, 5279.13f, 2840.8f, 409.783f, 1.57952f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, + { 191797, 3765, 5343.29f, 2908.86f, 409.576f, 0.008724f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191798, 3771, 5342.72f, 2771.39f, 409.625f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191805, 3768, 5279.13f, 2840.8f, 409.783f, 1.57952f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, // South tower (Not spawned in db) - { 190356, 3704, 4557.17f, 3623.94f, 395.883f, 1.67552f, BATTLEFIELD_WG_OBJECTTYPE_TOWER, BATTLEFIELD_WG_TEXT_TOWER_NAME_W }, - { 190357, 3705, 4398.17f, 2822.5f, 405.627f, -3.12412f, BATTLEFIELD_WG_OBJECTTYPE_TOWER, BATTLEFIELD_WG_TEXT_TOWER_NAME_S }, - { 190358, 3706, 4459.1f, 1944.33f, 434.991f, -2.00276f, BATTLEFIELD_WG_OBJECTTYPE_TOWER, BATTLEFIELD_WG_TEXT_TOWER_NAME_E }, + { 190356, 3704, 4557.17f, 3623.94f, 395.883f, 1.67552f, BATTLEFIELD_WG_OBJECTTYPE_TOWER }, // W + { 190357, 3705, 4398.17f, 2822.5f, 405.627f, -3.12412f, BATTLEFIELD_WG_OBJECTTYPE_TOWER }, // S + { 190358, 3706, 4459.1f, 1944.33f, 434.991f, -2.00276f, BATTLEFIELD_WG_OBJECTTYPE_TOWER }, // E // Door of forteress (Not spawned in db) - { GO_WINTERGRASP_FORTRESS_GATE, 3763, 5162.99f, 2841.23f, 410.162f, -3.13286f, BATTLEFIELD_WG_OBJECTTYPE_DOOR, 0 }, + { GO_WINTERGRASP_FORTRESS_GATE, 3763, 5162.99f, 2841.23f, 410.162f, -3.13286f, BATTLEFIELD_WG_OBJECTTYPE_DOOR }, // Last door (Not spawned in db) - { GO_WINTERGRASP_VAULT_GATE, 3773, 5397.11f, 2841.54f, 425.899f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST, 0 }, + { GO_WINTERGRASP_VAULT_GATE, 3773, 5397.11f, 2841.54f, 425.899f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST }, }; -const Position WGTurret[WG_MAX_TURRET] = +struct StaticWintergraspTowerInfo +{ + uint8 TowerId; + + struct + { + uint8 Damaged; + uint8 Destroyed; + } TextIds; +}; + +StaticWintergraspTowerInfo const TowerData[WG_MAX_TOWER] = +{ + { BATTLEFIELD_WG_TOWER_FORTRESS_NW, { BATTLEFIELD_WG_TEXT_NW_KEEPTOWER_DAMAGE, BATTLEFIELD_WG_TEXT_NW_KEEPTOWER_DESTROY } }, + { BATTLEFIELD_WG_TOWER_FORTRESS_SW, { BATTLEFIELD_WG_TEXT_SW_KEEPTOWER_DAMAGE, BATTLEFIELD_WG_TEXT_SW_KEEPTOWER_DESTROY } }, + { BATTLEFIELD_WG_TOWER_FORTRESS_SE, { BATTLEFIELD_WG_TEXT_SE_KEEPTOWER_DAMAGE, BATTLEFIELD_WG_TEXT_SE_KEEPTOWER_DESTROY } }, + { BATTLEFIELD_WG_TOWER_FORTRESS_NE, { BATTLEFIELD_WG_TEXT_NE_KEEPTOWER_DAMAGE, BATTLEFIELD_WG_TEXT_NE_KEEPTOWER_DESTROY } }, + { BATTLEFIELD_WG_TOWER_SHADOWSIGHT, { BATTLEFIELD_WG_TEXT_WESTERN_TOWER_DAMAGE, BATTLEFIELD_WG_TEXT_WESTERN_TOWER_DESTROY } }, + { BATTLEFIELD_WG_TOWER_WINTER_S_EDGE, { BATTLEFIELD_WG_TEXT_SOUTHERN_TOWER_DAMAGE, BATTLEFIELD_WG_TEXT_SOUTHERN_TOWER_DESTROY } }, + { BATTLEFIELD_WG_TOWER_FLAMEWATCH, { BATTLEFIELD_WG_TEXT_EASTERN_TOWER_DAMAGE, BATTLEFIELD_WG_TEXT_EASTERN_TOWER_DESTROY } } +}; + +Position const WGTurret[WG_MAX_TURRET] = { { 5391.19f, 3060.8f, 419.616f, 1.69557f }, { 5266.75f, 2976.5f, 421.067f, 3.20354f }, @@ -657,7 +695,7 @@ const Position WGTurret[WG_MAX_TURRET] = }; // Here there is all npc keeper spawn point -const WintergraspObjectPositionData WGKeepNPC[WG_MAX_KEEP_NPC] = +WintergraspObjectPositionData const WGKeepNPC[WG_MAX_KEEP_NPC] = { // X Y Z O horde alliance // North East @@ -735,7 +773,7 @@ struct WintergraspTeleporterData float o; }; -const WintergraspTeleporterData WGPortalDefenderData[WG_MAX_TELEPORTER] = +WintergraspTeleporterData const WGPortalDefenderData[WG_MAX_TELEPORTER] = { // Player teleporter { 190763, 5153.41f, 2901.35f, 409.191f, -0.069f }, @@ -1030,67 +1068,70 @@ const WintergraspTowerCannonData TowerCannon[WG_MAX_TOWER_CANNON] = // *****************WorkShop Data & Element***************** // ********************************************************* -struct WGWorkshopData +struct StaticWintergraspWorkshopInfo { - uint8 id; - uint32 worldstate; - uint32 text; + uint8 WorkshopId; + uint32 WorldStateId; + + struct + { + uint8 AllianceCapture; + uint8 AllianceAttack; + uint8 HordeCapture; + uint8 HordeAttack; + } TextIds; }; -const WGWorkshopData WorkshopsData[WG_MAX_WORKSHOP] = +StaticWintergraspWorkshopInfo const WorkshopData[WG_MAX_WORKSHOP] = { - // NE - {BATTLEFIELD_WG_WORKSHOP_NE, WORLDSTATE_WORKSHOP_NE, BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NE}, - // NW - {BATTLEFIELD_WG_WORKSHOP_NW, WORLDSTATE_WORKSHOP_NW, BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NW}, - // SE - {BATTLEFIELD_WG_WORKSHOP_SE, WORLDSTATE_WORKSHOP_SE, BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_SE}, - // SW - {BATTLEFIELD_WG_WORKSHOP_SW, WORLDSTATE_WORKSHOP_SW, BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_SW}, - // KEEP WEST - It can't be taken, so it doesn't have a textid - {BATTLEFIELD_WG_WORKSHOP_KEEP_WEST, WORLDSTATE_WORKSHOP_K_W, 0}, - // KEEP EAST - It can't be taken, so it doesn't have a textid - {BATTLEFIELD_WG_WORKSHOP_KEEP_EAST, WORLDSTATE_WORKSHOP_K_E, 0} + { BATTLEFIELD_WG_WORKSHOP_NE, WORLDSTATE_WORKSHOP_NE, { BATTLEFIELD_WG_TEXT_SUNKEN_RING_CAPTURE_ALLIANCE, BATTLEFIELD_WG_TEXT_SUNKEN_RING_ATTACK_ALLIANCE, BATTLEFIELD_WG_TEXT_SUNKEN_RING_CAPTURE_HORDE, BATTLEFIELD_WG_TEXT_SUNKEN_RING_ATTACK_HORDE } }, + { BATTLEFIELD_WG_WORKSHOP_NW, WORLDSTATE_WORKSHOP_NW, { BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_CAPTURE_ALLIANCE, BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_ATTACK_ALLIANCE, BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_CAPTURE_HORDE, BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_ATTACK_HORDE } }, + { BATTLEFIELD_WG_WORKSHOP_SE, WORLDSTATE_WORKSHOP_SE, { BATTLEFIELD_WG_TEXT_EASTSPARK_CAPTURE_ALLIANCE, BATTLEFIELD_WG_TEXT_EASTSPARK_ATTACK_ALLIANCE, BATTLEFIELD_WG_TEXT_EASTSPARK_CAPTURE_HORDE, BATTLEFIELD_WG_TEXT_EASTSPARK_ATTACK_HORDE } }, + { BATTLEFIELD_WG_WORKSHOP_SW, WORLDSTATE_WORKSHOP_SW, { BATTLEFIELD_WG_TEXT_WESTSPARK_CAPTURE_ALLIANCE, BATTLEFIELD_WG_TEXT_WESTSPARK_ATTACK_ALLIANCE, BATTLEFIELD_WG_TEXT_WESTSPARK_CAPTURE_HORDE, BATTLEFIELD_WG_TEXT_WESTSPARK_ATTACK_HORDE } }, + // KEEP WORKSHOPS - It can't be taken, so it doesn't have a textids + { BATTLEFIELD_WG_WORKSHOP_KEEP_WEST, WORLDSTATE_WORKSHOP_K_W, { 0, 0, 0, 0 } }, + { BATTLEFIELD_WG_WORKSHOP_KEEP_EAST, WORLDSTATE_WORKSHOP_K_E, { 0, 0, 0, 0 } } }; // ******************************************************************** // * Structs using for Building, Graveyard, Workshop * // ******************************************************************** + // Structure for different buildings that can be destroyed during battle struct BfWGGameObjectBuilding { - BfWGGameObjectBuilding(BattlefieldWG* wg); - - // the team that controls this point - uint8 m_Team; - +private: // WG object - BattlefieldWG* m_WG; + BattlefieldWG* _wg; // Linked gameobject - ObjectGuid m_BuildGUID; + ObjectGuid _buildGUID; - // eWGGameObjectBuildingType - uint32 m_Type; + // the team that controls this point + TeamId _teamControl; - // WorldState - uint32 m_WorldState; + WintergraspGameObjectBuildingType _type; + uint32 _worldState; - // eWGGameObjectState - uint32 m_State; + WintergraspGameObjectState _state; - // Name id for warning text - uint32 m_NameId; + StaticWintergraspTowerInfo const* _staticTowerInfo; // GameObject associations - GuidSet m_GameObjectList[2]; + GuidSet m_GameObjectList[BG_TEAMS_COUNT]; // Creature associations - GuidSet m_CreatureBottomList[2]; - GuidSet m_CreatureTopList[2]; + GuidSet m_CreatureBottomList[BG_TEAMS_COUNT]; + GuidSet m_CreatureTopList[BG_TEAMS_COUNT]; GuidSet m_TowerCannonBottomList; GuidSet m_TurretTopList; +public: + BfWGGameObjectBuilding(BattlefieldWG* wg, WintergraspGameObjectBuildingType type, uint32 worldState); + void Init(GameObject* go); + + ObjectGuid const& GetGUID() const { return _buildGUID; } + void Rebuild(); // Called when associated gameobject is damaged @@ -1099,49 +1140,33 @@ struct BfWGGameObjectBuilding // Called when associated gameobject is destroyed void Destroyed(); - void Init(GameObject* go, uint32 type, uint32 worldstate, uint32 nameId); - void UpdateCreatureAndGo(); void UpdateTurretAttack(bool disable); + void FillInitialWorldStates(WorldPacket& data); + void Save(); }; -struct WGWorkshop +// Structure for the 6 workshop +struct WintergraspWorkshop { - // pointer to the battlefield that the workshop belongs to - BattlefieldWG* bf; - // id of the workshop, useful to retrieve data of the WorkshopsData array - uint8 workshopId; - // team that controls the node - uint8 teamControl; - // for worldstate - uint32 state; - - WGWorkshop(BattlefieldWG* _bf, uint8 _workshopId); +private: + BattlefieldWG* _wg; // Pointer to wintergrasp + ObjectGuid _buildGUID; + WintergraspGameObjectState _state; // For worldstate + TeamId _teamControl; // Team witch control the workshop + GuidSet _creatureOnPoint[BG_TEAMS_COUNT]; // Contain all Creature associate to this point + GuidSet _gameObjectOnPoint[BG_TEAMS_COUNT]; // Contain all Gameobject associate to this point - void GiveControlTo(uint8 team, bool init /*for first call in setup*/); + StaticWintergraspWorkshopInfo const* _staticInfo; - void UpdateGraveyardAndWorkshop(); +public: + WintergraspWorkshop(BattlefieldWG* wg, uint8 type); - void Save(); -}; - -// Structure for the 6 workshop -struct WintergraspWorkshopData -{ - BattlefieldWG* m_WG; // Pointer to wintergrasp - ObjectGuid m_BuildGUID; - uint32 m_Type; - uint32 m_State; // For worldstate - uint32 m_WorldState; - uint32 m_TeamControl; // Team witch control the workshop - GuidSet m_CreatureOnPoint[2]; // Contain all Creature associate to this point - GuidSet m_GameObjectOnPoint[2]; // Contain all Gameobject associate to this point - uint32 m_NameId; // Id of trinity_string witch contain name of this node, using for alert message - - WintergraspWorkshopData(BattlefieldWG* wg); + uint8 GetId() const { return _staticInfo->WorkshopId; } + TeamId GetTeamControl() const { return _teamControl; } // Spawning associate creature and store them void AddCreature(WintergraspObjectPositionData const& obj); @@ -1149,14 +1174,13 @@ struct WintergraspWorkshopData // Spawning Associate gameobject and store them void AddGameObject(WintergraspObjectPositionData const& obj); - // Init method, setup variable - void Init(uint32 worldstate, uint32 type, uint32 nameId); - // Called on change faction in CapturePoint class - void GiveControlTo(uint8 team, bool init /*for first call in setup*/); + void GiveControlTo(TeamId teamId, bool init = false); void UpdateGraveyardAndWorkshop(); + void FillInitialWorldStates(WorldPacket& data); + void Save(); }; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 2bdfb57adb4..8a8570b7fc6 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -36,6 +36,7 @@ #include "LFGMgr.h" #include "Log.h" #include "MapManager.h" +#include "Object.h" #include "ObjectMgr.h" #include "Pet.h" #include "PoolMgr.h" @@ -1763,6 +1764,12 @@ void ObjectMgr::LoadCreatures() } } + if (std::abs(data.orientation) > 2 * float(M_PI)) + { + TC_LOG_ERROR("sql.sql", "Table `creature` has creature (GUID: %u Entry: %u) with abs(`orientation`) > 2*PI (orientation is expressed in radians), normalized.", guid, data.id); + data.orientation = Position::NormalizeOrientation(data.orientation); + } + if (data.phaseMask == 0) { TC_LOG_ERROR("sql.sql", "Table `creature` has creature (GUID: %u Entry: %u) with `phaseMask`=0 (not visible for anyone), set to 1.", guid, data.id); @@ -2065,6 +2072,12 @@ void ObjectMgr::LoadGameobjects() data.phaseGroup = 0; } + if (std::abs(data.orientation) > 2 * float(M_PI)) + { + TC_LOG_ERROR("sql.sql", "Table `gameobject` has gameobject (GUID: %u Entry: %u) with abs(`orientation`) > 2*PI (orientation is expressed in radians), normalized.", guid, data.id); + data.orientation = Position::NormalizeOrientation(data.orientation); + } + if (data.rotation2 < -1.0f || data.rotation2 > 1.0f) { TC_LOG_ERROR("sql.sql", "Table `gameobject` has gameobject (GUID: %u Entry: %u) with invalid rotation2 (%f) value, skip", guid, data.id, data.rotation2); diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp index ac35b94575c..9297e2a3d6a 100644 --- a/src/server/game/Maps/MapManager.cpp +++ b/src/server/game/Maps/MapManager.cpp @@ -36,6 +36,7 @@ #include "Player.h" #include "WorldSession.h" #include "Opcodes.h" +#include "AchievementMgr.h" MapManager::MapManager() { @@ -393,4 +394,5 @@ void MapManager::FreeInstanceId(uint32 instanceId) SetNextInstanceId(instanceId); _instanceIds[instanceId] = false; + sAchievementMgr->OnInstanceDestroyed(instanceId); } diff --git a/src/server/scripts/Kalimdor/zone_durotar.cpp b/src/server/scripts/Kalimdor/zone_durotar.cpp index e677bd24e4a..52f47f3461b 100644 --- a/src/server/scripts/Kalimdor/zone_durotar.cpp +++ b/src/server/scripts/Kalimdor/zone_durotar.cpp @@ -57,13 +57,10 @@ public: void Initialize() { - PlayerGUID = 0; RebuffTimer = 0; work = false; } - uint64 PlayerGUID; - uint32 RebuffTimer; bool work; diff --git a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp index 5d8756bcffc..23c498a9dc1 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp @@ -44,9 +44,18 @@ public: { boss_lavanthorAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiFireboltTimer = 1000; + uiFlameBreathTimer = 5000; + uiLavaBurnTimer = 10000; + uiCauterizingFlamesTimer = 3000; + } + uint32 uiFireboltTimer; uint32 uiFlameBreathTimer; uint32 uiLavaBurnTimer; @@ -56,10 +65,7 @@ public: void Reset() override { - uiFireboltTimer = 1000; - uiFlameBreathTimer = 5000; - uiLavaBurnTimer = 10000; - uiCauterizingFlamesTimer = 3000; + Initialize(); if (instance->GetData(DATA_WAVE_COUNT) == 6) instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED); else if (instance->GetData(DATA_WAVE_COUNT) == 12) diff --git a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp index 67d71cad24c..a9013333ef9 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp @@ -40,9 +40,16 @@ public: { boss_moraggAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiOpticLinkTimer = 10000; + uiCorrosiveSalivaTimer = 5000; + } + uint32 uiOpticLinkTimer; uint32 uiCorrosiveSalivaTimer; @@ -50,8 +57,7 @@ public: void Reset() override { - uiOpticLinkTimer = 10000; - uiCorrosiveSalivaTimer = 5000; + Initialize(); if (instance->GetData(DATA_WAVE_COUNT) == 6) instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED); diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp index 79c535979d7..d79e5525650 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp @@ -70,9 +70,17 @@ public: { boss_xevozzAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiSummonEtherealSphere_Timer = urand(10000, 12000); + uiArcaneBarrageVolley_Timer = urand(20000, 22000); + uiArcaneBuffet_Timer = uiSummonEtherealSphere_Timer + urand(5000, 6000); + } + InstanceScript* instance; uint32 uiSummonEtherealSphere_Timer; @@ -86,9 +94,7 @@ public: else if (instance->GetData(DATA_WAVE_COUNT) == 12) instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED); - uiSummonEtherealSphere_Timer = urand(10000, 12000); - uiArcaneBarrageVolley_Timer = urand(20000, 22000); - uiArcaneBuffet_Timer = uiSummonEtherealSphere_Timer + urand(5000, 6000); + Initialize(); DespawnSphere(); } @@ -229,9 +235,16 @@ public: { npc_ethereal_sphereAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiSummonPlayers_Timer = urand(33000, 35000); + uiRangeCheck_Timer = 1000; + } + InstanceScript* instance; uint32 uiSummonPlayers_Timer; @@ -239,8 +252,7 @@ public: void Reset() override { - uiSummonPlayers_Timer = urand(33000, 35000); - uiRangeCheck_Timer = 1000; + Initialize(); } void UpdateAI(uint32 uiDiff) override diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp index d24d005926c..d9a06d7de0b 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp @@ -65,9 +65,18 @@ public: { boss_zuramatAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + SpellShroudOfDarknessTimer = 22000; + SpellVoidShiftTimer = 15000; + SpellSummonVoidTimer = 12000; + voidDance = true; + } + InstanceScript* instance; uint32 SpellVoidShiftTimer; @@ -82,10 +91,7 @@ public: else if (instance->GetData(DATA_WAVE_COUNT) == 12) instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED); - SpellShroudOfDarknessTimer = 22000; - SpellVoidShiftTimer = 15000; - SpellSummonVoidTimer = 12000; - voidDance = true; + Initialize(); } void AttackStart(Unit* who) override diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index 76a7b701717..a28442dc8dd 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -305,9 +305,16 @@ public: { npc_sinclariAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiPhase = 0; + uiTimer = 0; + } + InstanceScript* instance; uint8 uiPhase; @@ -315,8 +322,7 @@ public: void Reset() override { - uiPhase = 0; - uiTimer = 0; + Initialize(); me->SetReactState(REACT_AGGRESSIVE); @@ -549,8 +555,14 @@ public: { npc_teleportation_portalAI(Creature* creature) : ScriptedAI(creature), listOfMobs(me) { + Initialize(); instance = creature->GetInstanceScript(); uiTypeOfMobsPortal = urand(0, 1); // 0 - elite mobs 1 - portal guardian or portal keeper with regular mobs + } + + void Initialize() + { + uiSpawnTimer = 10000; bPortalGuardianOrKeeperOrEliteSpawn = false; } @@ -564,8 +576,7 @@ public: void Reset() override { - uiSpawnTimer = 10000; - bPortalGuardianOrKeeperOrEliteSpawn = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -672,7 +683,7 @@ struct violet_hold_trashAI : public npc_escortAI instance = creature->GetInstanceScript(); bHasGotMovingPoints = false; portalLocationID = instance->GetData(DATA_PORTAL_LOCATION); - Reset(); + secondPortalRouteID = 0; } public: @@ -797,9 +808,18 @@ public: { npc_azure_invaderAI(Creature* creature) : violet_hold_trashAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiCleaveTimer = 5000; + uiImpaleTimer = 4000; + uiBrutalStrikeTimer = 5000; + uiSunderArmorTimer = 4000; + } + uint32 uiCleaveTimer; uint32 uiImpaleTimer; uint32 uiBrutalStrikeTimer; @@ -807,10 +827,7 @@ public: void Reset() override { - uiCleaveTimer = 5000; - uiImpaleTimer = 4000; - uiBrutalStrikeTimer = 5000; - uiSunderArmorTimer = 4000; + Initialize(); } void UpdateAI(uint32 diff) override @@ -875,9 +892,18 @@ public: { npc_azure_binderAI(Creature* creature) : violet_hold_trashAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiArcaneExplosionTimer = 5000; + uiArcainBarrageTimer = 4000; + uiFrostNovaTimer = 5000; + uiFrostboltTimer = 4000; + } + uint32 uiArcaneExplosionTimer; uint32 uiArcainBarrageTimer; uint32 uiFrostNovaTimer; @@ -885,10 +911,7 @@ public: void Reset() override { - uiArcaneExplosionTimer = 5000; - uiArcainBarrageTimer = 4000; - uiFrostNovaTimer = 5000; - uiFrostboltTimer = 4000; + Initialize(); } void UpdateAI(uint32 diff) override @@ -953,16 +976,22 @@ public: { npc_azure_mage_slayerAI(Creature* creature) : violet_hold_trashAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiArcaneEmpowermentTimer = 5000; + uiSpellLockTimer = 5000; + } + uint32 uiArcaneEmpowermentTimer; uint32 uiSpellLockTimer; void Reset() override { - uiArcaneEmpowermentTimer = 5000; - uiSpellLockTimer = 5000; + Initialize(); } void UpdateAI(uint32 diff) override @@ -1013,16 +1042,22 @@ public: { npc_azure_raiderAI(Creature* creature) : violet_hold_trashAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiConcussionBlowTimer = 5000; + uiMagicReflectionTimer = 8000; + } + uint32 uiConcussionBlowTimer; uint32 uiMagicReflectionTimer; void Reset() override { - uiConcussionBlowTimer = 5000; - uiMagicReflectionTimer = 8000; + Initialize(); } void UpdateAI(uint32 diff) override @@ -1060,14 +1095,20 @@ public: { npc_azure_stalkerAI(Creature* creature) : violet_hold_trashAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } - void Reset() override + void Initialize() { _backstabTimer = 1300; _tacticalBlinkTimer = 8000; - _tacticalBlinkCast =false; + _tacticalBlinkCast = false; + } + + void Reset() override + { + Initialize(); } void UpdateAI(uint32 diff) override @@ -1125,9 +1166,18 @@ public: { npc_azure_spellbreakerAI(Creature* creature) : violet_hold_trashAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiArcaneBlastTimer = 5000; + uiSlowTimer = 4000; + uiChainsOfIceTimer = 5000; + uiConeOfColdTimer = 4000; + } + uint32 uiArcaneBlastTimer; uint32 uiSlowTimer; uint32 uiChainsOfIceTimer; @@ -1135,10 +1185,7 @@ public: void Reset() override { - uiArcaneBlastTimer = 5000; - uiSlowTimer = 4000; - uiChainsOfIceTimer = 5000; - uiConeOfColdTimer = 4000; + Initialize(); } void UpdateAI(uint32 diff) override @@ -1209,16 +1256,22 @@ public: { npc_azure_captainAI(Creature* creature) : violet_hold_trashAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiMortalStrikeTimer = 5000; + uiWhirlwindTimer = 8000; + } + uint32 uiMortalStrikeTimer; uint32 uiWhirlwindTimer; void Reset() override { - uiMortalStrikeTimer = 5000; - uiWhirlwindTimer = 8000; + Initialize(); } void UpdateAI(uint32 diff) override @@ -1261,18 +1314,24 @@ public: { npc_azure_sorcerorAI(Creature* creature) : violet_hold_trashAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + uiArcaneStreamTimer = 4000; + uiArcaneStreamTimerStartingValueHolder = uiArcaneStreamTimer; + uiManaDetonationTimer = 5000; + } + uint32 uiArcaneStreamTimer; uint32 uiArcaneStreamTimerStartingValueHolder; uint32 uiManaDetonationTimer; void Reset() override { - uiArcaneStreamTimer = 4000; - uiArcaneStreamTimerStartingValueHolder = uiArcaneStreamTimer; - uiManaDetonationTimer = 5000; + Initialize(); } void UpdateAI(uint32 diff) override @@ -1311,13 +1370,21 @@ public: struct npc_violet_hold_arcane_sphereAI : public ScriptedAI { - npc_violet_hold_arcane_sphereAI(Creature* creature) : ScriptedAI(creature) { } + npc_violet_hold_arcane_sphereAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + DespawnTimer = 3000; + } uint32 DespawnTimer; void Reset() override { - DespawnTimer = 3000; + Initialize(); me->SetDisableGravity(true); DoCast(me, SPELL_ARCANE_SPHERE_PASSIVE, true); diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index 68c0ce3acc4..eff84365f63 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -565,7 +565,18 @@ class npc_wyrmrest_defender : public CreatureScript struct npc_wyrmrest_defenderAI : public VehicleAI { - npc_wyrmrest_defenderAI(Creature* creature) : VehicleAI(creature) { } + npc_wyrmrest_defenderAI(Creature* creature) : VehicleAI(creature) + { + Initialize(); + } + + void Initialize() + { + hpWarningReady = true; + renewRecoveryCanCheck = false; + + RenewRecoveryChecker = 0; + } bool hpWarningReady; bool renewRecoveryCanCheck; @@ -574,10 +585,7 @@ class npc_wyrmrest_defender : public CreatureScript void Reset() override { - hpWarningReady = true; - renewRecoveryCanCheck = false; - - RenewRecoveryChecker = 0; + Initialize(); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index e06bf32d7d8..e60c2162339 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -464,7 +464,6 @@ public: void Reset() override { _despawnTimer = 5000; - _playerGUID = 0; } void MovementInform(uint32, uint32 id) override @@ -498,7 +497,6 @@ public: DoMeleeAttackIfReady(); } private: - uint64 _playerGUID; uint32 _despawnTimer; }; diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index a43df0dc3f0..7436ac8400f 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -91,17 +91,23 @@ public: { npc_argent_valiantAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); creature->GetMotionMaster()->MovePoint(0, 8599.258f, 963.951f, 547.553f); creature->setFaction(35); //wrong faction in db? } + void Initialize() + { + uiChargeTimer = 7000; + uiShieldBreakerTimer = 10000; + } + uint32 uiChargeTimer; uint32 uiShieldBreakerTimer; void Reset() override { - uiChargeTimer = 7000; - uiShieldBreakerTimer = 10000; + Initialize(); } void MovementInform(uint32 uiType, uint32 /*uiId*/) override @@ -285,9 +291,15 @@ class npc_tournament_training_dummy : public CreatureScript { npc_tournament_training_dummyAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); SetCombatMovement(false); } + void Initialize() + { + isVulnerable = false; + } + EventMap events; bool isVulnerable; @@ -295,7 +307,7 @@ class npc_tournament_training_dummy : public CreatureScript { me->SetControlled(true, UNIT_STATE_STUNNED); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true); - isVulnerable = false; + Initialize(); // Cast Defend spells to max stack size switch (me->GetEntry()) diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index 53fe1500624..f4275121101 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -229,7 +229,15 @@ public: struct npc_engineer_heliceAI : public npc_escortAI { - npc_engineer_heliceAI(Creature* creature) : npc_escortAI(creature) { } + npc_engineer_heliceAI(Creature* creature) : npc_escortAI(creature) + { + Initialize(); + } + + void Initialize() + { + m_uiChatTimer = 4000; + } uint32 m_uiChatTimer; @@ -274,7 +282,7 @@ public: void Reset() override { - m_uiChatTimer = 4000; + Initialize(); } void JustDied(Unit* /*killer*/) override @@ -366,9 +374,12 @@ public: struct npc_jungle_punch_targetAI : public ScriptedAI { - npc_jungle_punch_targetAI(Creature* creature) : ScriptedAI(creature) { } + npc_jungle_punch_targetAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { sayTimer = 3500; sayStep = 0; @@ -378,6 +389,11 @@ public: orphanGUID.Clear(); } + void Reset() override + { + Initialize(); + } + void MoveInLineOfSight(Unit* who) override { if (!phase && who && who->GetDistance2d(me) < 10.0f) diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index a183d0997d4..e4cff7323b1 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -179,13 +179,21 @@ public: struct npc_brunnhildar_prisonerAI : public ScriptedAI { - npc_brunnhildar_prisonerAI(Creature* creature) : ScriptedAI(creature) { } + npc_brunnhildar_prisonerAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + freed = false; + } bool freed; void Reset() override { - freed = false; + Initialize(); me->CastSpell(me, SPELL_ICE_PRISON, true); } diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp index 1cfd7a23f39..99cda91b866 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp @@ -318,13 +318,21 @@ public: struct npc_avatar_of_martyredAI : public ScriptedAI { - npc_avatar_of_martyredAI(Creature* creature) : ScriptedAI(creature) { } + npc_avatar_of_martyredAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Mortal_Strike_timer = 10000; + } uint32 Mortal_Strike_timer; void Reset() override { - Mortal_Strike_timer = 10000; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp index 9a94096c2de..b354df9d63a 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp @@ -62,6 +62,16 @@ public: { boss_shirrak_the_dead_watcherAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); + } + + void Initialize() + { + Inhibitmagic_Timer = 0; + Attractmagic_Timer = 28000; + Carnivorousbite_Timer = 10000; + FocusFire_Timer = 17000; + FocusedTargetGUID.Clear(); } uint32 Inhibitmagic_Timer; @@ -73,11 +83,7 @@ public: void Reset() override { - Inhibitmagic_Timer = 0; - Attractmagic_Timer = 28000; - Carnivorousbite_Timer = 10000; - FocusFire_Timer = 17000; - FocusedTargetGUID.Clear(); + Initialize(); } void EnterCombat(Unit* /*who*/) override @@ -174,6 +180,13 @@ public: { npc_focus_fireAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); + } + + void Initialize() + { + FieryBlast_Timer = 3000 + (rand32() % 1000); + fiery1 = fiery2 = true; } uint32 FieryBlast_Timer; @@ -181,8 +194,7 @@ public: void Reset() override { - FieryBlast_Timer = 3000 + (rand32() % 1000); - fiery1 = fiery2 = true; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp index 67cc6b99e93..5f6fde8ad98 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp @@ -78,7 +78,22 @@ public: struct boss_nexusprince_shaffarAI : public ScriptedAI { - boss_nexusprince_shaffarAI(Creature* creature) : ScriptedAI(creature), summons(me) { HasTaunted = false; } + boss_nexusprince_shaffarAI(Creature* creature) : ScriptedAI(creature), summons(me) + { + Initialize(); + HasTaunted = false; + } + + void Initialize() + { + Blink_Timer = 1500; + Beacon_Timer = 10000; + FireBall_Timer = 8000; + Frostbolt_Timer = 4000; + FrostNova_Timer = 15000; + + CanBlink = false; + } uint32 Blink_Timer; uint32 Beacon_Timer; @@ -93,13 +108,7 @@ public: void Reset() override { - Blink_Timer = 1500; - Beacon_Timer = 10000; - FireBall_Timer = 8000; - Frostbolt_Timer = 4000; - FrostNova_Timer = 15000; - - CanBlink = false; + Initialize(); float dist = 8.0f; float posX, posY, posZ, angle; @@ -241,6 +250,14 @@ public: { npc_ethereal_beaconAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); + } + + void Initialize() + { + Apprentice_Timer = DUNGEON_MODE(20000, 10000); + ArcaneBolt_Timer = 1000; + Check_Timer = 1000; } uint32 Apprentice_Timer; @@ -254,9 +271,7 @@ public: void Reset() override { - Apprentice_Timer = DUNGEON_MODE(20000, 10000); - ArcaneBolt_Timer = 1000; - Check_Timer = 1000; + Initialize(); } void EnterCombat(Unit* who) override @@ -331,7 +346,16 @@ public: struct npc_ethereal_apprenticeAI : public ScriptedAI { - npc_ethereal_apprenticeAI(Creature* creature) : ScriptedAI(creature) { } + npc_ethereal_apprenticeAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + Cast_Timer = 3000; + isFireboltTurn = true; + } uint32 Cast_Timer; @@ -339,8 +363,7 @@ public: void Reset() override { - Cast_Timer = 3000; - isFireboltTurn = true; + Initialize(); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp index 1787933143c..e2d6bee85ca 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp @@ -67,14 +67,22 @@ class boss_anzu : public CreatureScript struct boss_anzuAI : public BossAI { - boss_anzuAI(Creature* creature) : BossAI(creature, DATA_ANZU) { } + boss_anzuAI(Creature* creature) : BossAI(creature, DATA_ANZU) + { + Initialize(); + } + + void Initialize() + { + _under33Percent = false; + _under66Percent = false; + } void Reset() override { //_Reset(); events.Reset(); - _under33Percent = false; - _under66Percent = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp index 098d35a292e..e6ffa3f8979 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp @@ -71,14 +71,22 @@ public: struct boss_darkweaver_sythAI : public BossAI { - boss_darkweaver_sythAI(Creature* creature) : BossAI(creature, DATA_DARKWEAVER_SYTH) { } + boss_darkweaver_sythAI(Creature* creature) : BossAI(creature, DATA_DARKWEAVER_SYTH) + { + Initialize(); + } + + void Initialize() + { + _summon90 = false; + _summon50 = false; + _summon10 = false; + } void Reset() override { + Initialize(); _Reset(); - summon90 = false; - summon50 = false; - summon10 = false; } void EnterCombat(Unit* /*who*/) override @@ -109,6 +117,29 @@ public: { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) summoned->AI()->AttackStart(target); + + summons.Summon(summoned); + } + + void DamageTaken(Unit* /*attacker*/, uint32& damage) override + { + if (me->HealthBelowPctDamaged(90, damage) && !_summon90) + { + SythSummoning(); + _summon90 = true; + } + + if (me->HealthBelowPctDamaged(50, damage) && !_summon50) + { + SythSummoning(); + _summon50 = true; + } + + if (me->HealthBelowPctDamaged(10, damage) && !_summon10) + { + SythSummoning(); + _summon10 = true; + } } void SythSummoning() @@ -124,72 +155,44 @@ public: DoCast(me, SPELL_SUMMON_SYTH_SHADOW, true); //right } - void UpdateAI(uint32 diff) override + void ExecuteEvent(uint32 eventId) override { - if (!UpdateVictim()) - return; - - events.Update(diff); - - while (uint32 eventId = events.ExecuteEvent()) + switch (eventId) { - switch (eventId) - { - case EVENT_FLAME_SHOCK: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_FLAME_SHOCK); - events.ScheduleEvent(EVENT_FLAME_SHOCK, urand(10000, 15000)); - break; - case EVENT_ARCANE_SHOCK: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_ARCANE_SHOCK); - events.ScheduleEvent(EVENT_ARCANE_SHOCK, urand(10000, 15000)); - break; - case EVENT_FROST_SHOCK: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_FROST_SHOCK); - events.ScheduleEvent(EVENT_FROST_SHOCK, urand(10000, 15000)); - break; - case EVENT_SHADOW_SHOCK: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_SHADOW_SHOCK); - events.ScheduleEvent(EVENT_SHADOW_SHOCK, urand(10000, 15000)); - break; - case EVENT_CHAIN_LIGHTNING: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_CHAIN_LIGHTNING); - events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 25000); - break; - default: - break; - } + case EVENT_FLAME_SHOCK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_FLAME_SHOCK); + events.ScheduleEvent(EVENT_FLAME_SHOCK, urand(10000, 15000)); + break; + case EVENT_ARCANE_SHOCK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_ARCANE_SHOCK); + events.ScheduleEvent(EVENT_ARCANE_SHOCK, urand(10000, 15000)); + break; + case EVENT_FROST_SHOCK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_FROST_SHOCK); + events.ScheduleEvent(EVENT_FROST_SHOCK, urand(10000, 15000)); + break; + case EVENT_SHADOW_SHOCK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_SHADOW_SHOCK); + events.ScheduleEvent(EVENT_SHADOW_SHOCK, urand(10000, 15000)); + break; + case EVENT_CHAIN_LIGHTNING: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_CHAIN_LIGHTNING); + events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 25000); + break; + default: + break; } - - if (HealthBelowPct(90) && !summon90) - { - SythSummoning(); - summon90 = true; - } - - if (HealthBelowPct(50) && !summon50) - { - SythSummoning(); - summon50 = true; - } - - if (HealthBelowPct(10) && !summon10) - { - SythSummoning(); - summon10 = true; - } - - DoMeleeAttackIfReady(); } private: - bool summon90; - bool summon50; - bool summon10; + bool _summon90; + bool _summon50; + bool _summon10; }; CreatureAI* GetAI(Creature* creature) const override @@ -208,19 +211,20 @@ public: { npc_syth_fireAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); } - uint32 flameshock_timer; - uint32 flamebuffet_timer; - - void Reset() override + void Initialize() { - me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true); flameshock_timer = 2500; flamebuffet_timer = 5000; } - void EnterCombat(Unit* /*who*/) override { } + void Reset() override + { + Initialize(); + me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true); + } void UpdateAI(uint32 diff) override { @@ -245,6 +249,10 @@ public: DoMeleeAttackIfReady(); } + + private: + uint32 flameshock_timer; + uint32 flamebuffet_timer; }; CreatureAI* GetAI(Creature* creature) const override @@ -258,28 +266,24 @@ class npc_syth_arcane : public CreatureScript public: npc_syth_arcane() : CreatureScript("npc_syth_arcane") { } - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_syth_arcaneAI(creature); - } - struct npc_syth_arcaneAI : public ScriptedAI { npc_syth_arcaneAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); } - uint32 arcaneshock_timer; - uint32 arcanebuffet_timer; - - void Reset() override + void Initialize() { - me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, true); arcaneshock_timer = 2500; arcanebuffet_timer = 5000; } - void EnterCombat(Unit* /*who*/) override { } + void Reset() override + { + Initialize(); + me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, true); + } void UpdateAI(uint32 diff) override { @@ -304,7 +308,16 @@ public: DoMeleeAttackIfReady(); } + + private: + uint32 arcaneshock_timer; + uint32 arcanebuffet_timer; }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_syth_arcaneAI(creature); + } }; class npc_syth_frost : public CreatureScript @@ -312,28 +325,24 @@ class npc_syth_frost : public CreatureScript public: npc_syth_frost() : CreatureScript("npc_syth_frost") { } - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_syth_frostAI(creature); - } - struct npc_syth_frostAI : public ScriptedAI { npc_syth_frostAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); } - uint32 frostshock_timer; - uint32 frostbuffet_timer; - - void Reset() override + void Initialize() { - me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true); frostshock_timer = 2500; frostbuffet_timer = 5000; } - void EnterCombat(Unit* /*who*/) override { } + void Reset() override + { + Initialize(); + me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true); + } void UpdateAI(uint32 diff) override { @@ -358,8 +367,16 @@ public: DoMeleeAttackIfReady(); } + + private: + uint32 frostshock_timer; + uint32 frostbuffet_timer; }; + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_syth_frostAI(creature); + } }; class npc_syth_shadow : public CreatureScript @@ -367,28 +384,24 @@ class npc_syth_shadow : public CreatureScript public: npc_syth_shadow() : CreatureScript("npc_syth_shadow") { } - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_syth_shadowAI(creature); - } - struct npc_syth_shadowAI : public ScriptedAI { npc_syth_shadowAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); } - uint32 shadowshock_timer; - uint32 shadowbuffet_timer; - - void Reset() override + void Initialize() { - me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, true); shadowshock_timer = 2500; shadowbuffet_timer = 5000; } - void EnterCombat(Unit* /*who*/) override { } + void Reset() override + { + Initialize(); + me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, true); + } void UpdateAI(uint32 diff) override { @@ -413,8 +426,16 @@ public: DoMeleeAttackIfReady(); } + + private: + uint32 shadowshock_timer; + uint32 shadowbuffet_timer; }; + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_syth_shadowAI(creature); + } }; void AddSC_boss_darkweaver_syth() diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp index b3aac6becc4..109174f5807 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp @@ -86,13 +86,19 @@ class boss_grandmaster_vorpil : public CreatureScript { boss_grandmaster_vorpilAI(Creature* creature) : BossAI(creature, DATA_GRANDMASTER_VORPIL) { + Initialize(); _intro = false; } + void Initialize() + { + _helpYell = false; + } + void Reset() override { _Reset(); - _helpYell = false; + Initialize(); } void SummonPortals() @@ -223,15 +229,21 @@ class npc_voidtraveler : public CreatureScript { npc_voidtravelerAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); _instance = creature->GetInstanceScript(); } - void Reset() override + void Initialize() { _moveTimer = 0; _sacrificed = false; } + void Reset() override + { + Initialize(); + } + void EnterCombat(Unit* /*who*/) override { } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.cpp b/src/server/scripts/Outland/BlackTemple/black_temple.cpp index 5302aa34a29..71136f79919 100644 --- a/src/server/scripts/Outland/BlackTemple/black_temple.cpp +++ b/src/server/scripts/Outland/BlackTemple/black_temple.cpp @@ -95,13 +95,19 @@ public: { npc_wrathbone_flayerAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); _instance = creature->GetInstanceScript(); } + void Initialize() + { + _enteredCombat = false; + } + void Reset() override { _events.ScheduleEvent(EVENT_GET_CHANNELERS, 3000); - _enteredCombat = false; + Initialize(); _bloodmageList.clear(); _deathshaperList.clear(); } diff --git a/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp b/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp index b41e7e77452..0b219eeff56 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp @@ -68,9 +68,29 @@ public: { boss_gurtogg_bloodboilAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + TargetGUID.Clear(); + TargetThreat = 0; + + BloodboilTimer = 10000; + BloodboilCount = 0; + AcidGeyserTimer = 1000; + AcidicWoundTimer = 6000; + ArcingSmashTimer = 19000; + EnrageTimer = 600000; + FelAcidTimer = 25000; + EjectTimer = 10000; + BewilderingStrikeTimer = 15000; + PhaseChangeTimer = 60000; + + Phase1 = true; + } + InstanceScript* instance; ObjectGuid TargetGUID; @@ -94,22 +114,7 @@ public: { instance->SetBossState(DATA_GURTOGG_BLOODBOIL, NOT_STARTED); - TargetGUID.Clear(); - - TargetThreat = 0; - - BloodboilTimer = 10000; - BloodboilCount = 0; - AcidGeyserTimer = 1000; - AcidicWoundTimer = 6000; - ArcingSmashTimer = 19000; - EnrageTimer = 600000; - FelAcidTimer = 25000; - EjectTimer = 10000; - BewilderingStrikeTimer = 15000; - PhaseChangeTimer = 60000; - - Phase1 = true; + Initialize(); me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, false); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, false); diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index 4ec6aed9655..aec4e982a49 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -375,15 +375,23 @@ public: struct flame_of_azzinothAI : public ScriptedAI { - flame_of_azzinothAI(Creature* creature) : ScriptedAI(creature) { } + flame_of_azzinothAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { FlameBlastTimer = 15000; CheckTimer = 5000; GlaiveGUID.Clear(); } + void Reset() override + { + Initialize(); + } + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); @@ -474,10 +482,30 @@ public: { boss_illidan_stormrageAI(Creature* creature) : ScriptedAI(creature), Summons(me) { + Initialize(); instance = creature->GetInstanceScript(); DoCast(me, SPELL_DUAL_WIELD, true); } + void Initialize() + { + MaievGUID.Clear(); + for (uint8 i = 0; i < 2; ++i) + { + FlameGUID[i].Clear(); + GlaiveGUID[i].Clear(); + } + + Phase = PHASE_ILLIDAN_NULL; + Event = EVENT_NULL; + Timer[EVENT_BERSERK] = 1500000; + + HoverPoint = 0; + TalkCount = 0; + FlightCount = 0; + TransformCount = 0; + } + void Reset() override; void JustSummoned(Creature* summon) override; @@ -1133,9 +1161,12 @@ public: struct boss_maievAI : public ScriptedAI { - boss_maievAI(Creature* creature) : ScriptedAI(creature) { }; + boss_maievAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { MaxTimer = 0; Phase = PHASE_NORMAL_MAIEV; @@ -1143,6 +1174,11 @@ public: Timer[EVENT_MAIEV_STEALTH] = 0; Timer[EVENT_MAIEV_TAUNT] = urand(22, 43) * 1000; Timer[EVENT_MAIEV_SHADOW_STRIKE] = 30000; + } + + void Reset() override + { + Initialize(); SetEquipmentSlots(false, EQUIP_ID_MAIN_HAND_MAIEV, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, 45738); } @@ -1268,7 +1304,7 @@ public: && !Timer[EVENT_MAIEV_STEALTH]) return; - Event = EVENT_MAIEV_NULL; + EventMaiev Event = EVENT_MAIEV_NULL; for (uint8 i = 1; i <= MaxTimer; ++i) if (Timer[i]) { @@ -1334,7 +1370,6 @@ public: private: ObjectGuid IllidanGUID; PhaseIllidan Phase; - EventMaiev Event; uint32 Timer[5]; uint32 MaxTimer; }; @@ -1354,13 +1389,29 @@ public: { npc_akama_illidanAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); JustCreated = true; } - void Reset() override + void Initialize() { + ChannelGUID.Clear(); + SpiritGUID[0].Clear(); + SpiritGUID[1].Clear(); + + Phase = PHASE_AKAMA_NULL; + Timer = 0; + + ChannelCount = 0; + TalkCount = 0; + Check_Timer = 5000; WalkCount = 0; + } + + void Reset() override + { + Initialize(); instance->SetBossState(DATA_ILLIDAN_STORMRAGE, NOT_STARTED); IllidanGUID = instance->GetGuidData(DATA_ILLIDAN_STORMRAGE); @@ -1384,17 +1435,6 @@ public: instance->HandleGameObject(DoorGUID[i], true); } - ChannelGUID.Clear(); - SpiritGUID[0].Clear(); - SpiritGUID[1].Clear(); - - Phase = PHASE_AKAMA_NULL; - Timer = 0; - - ChannelCount = 0; - TalkCount = 0; - Check_Timer = 5000; - KillAllElites(); me->SetUInt32Value(UNIT_NPC_FLAGS, 0); // Database sometimes has strange values.. @@ -1552,7 +1592,6 @@ public: break; } Phase = NextPhase; - Event = false; } void HandleTalkSequence() @@ -1674,7 +1713,7 @@ public: Check_Timer = 5000; } else Check_Timer -= diff; } - Event = false; + bool Event = false; if (Timer) { if (Timer <= diff) @@ -1755,7 +1794,6 @@ public: bool JustCreated; InstanceScript* instance; PhaseAkama Phase; - bool Event; uint32 Timer; ObjectGuid IllidanGUID; ObjectGuid ChannelGUID; @@ -1786,21 +1824,7 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::Reset() akama->AI()->EnterEvadeMode(); } - MaievGUID.Clear(); - for (uint8 i = 0; i < 2; ++i) - { - FlameGUID[i].Clear(); - GlaiveGUID[i].Clear(); - } - - Phase = PHASE_ILLIDAN_NULL; - Event = EVENT_NULL; - Timer[EVENT_BERSERK] = 1500000; - - HoverPoint = 0; - TalkCount = 0; - FlightCount = 0; - TransformCount = 0; + Initialize(); me->SetDisplayId(MODEL_ILLIDAN); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); @@ -1951,9 +1975,12 @@ public: struct cage_trap_triggerAI : public ScriptedAI { - cage_trap_triggerAI(Creature* creature) : ScriptedAI(creature) { } + cage_trap_triggerAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - void Reset() override + void Initialize() { IllidanGUID.Clear(); @@ -1961,6 +1988,11 @@ public: SummonedBeams = false; DespawnTimer = 0; + } + + void Reset() override + { + Initialize(); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } @@ -2130,14 +2162,20 @@ public: { npc_parasitic_shadowfiendAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + CheckTimer = 5000; + } + void Reset() override { IllidanGUID = instance->GetGuidData(DATA_ILLIDAN_STORMRAGE); - CheckTimer = 5000; + Initialize(); DoCast(me, SPELL_SHADOWFIEND_PASSIVE, true); } diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp index c5989f4df64..dd0e271a02d 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp @@ -144,7 +144,17 @@ public: { boss_reliquary_of_soulsAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); + Counter = 0; + Timer = 0; + SoulCount = 0; + SoulDeathCount = 0; + } + + void Initialize() + { + Phase = 0; } InstanceScript* instance; @@ -170,7 +180,7 @@ public: EssenceGUID.Clear(); } - Phase = 0; + Initialize(); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); @@ -396,9 +406,19 @@ public: struct boss_essence_of_sufferingAI : public ScriptedAI { - boss_essence_of_sufferingAI(Creature* creature) : ScriptedAI(creature) { } + boss_essence_of_sufferingAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - uint64 StatAuraGUID; + void Initialize() + { + AggroYellTimer = 5000; + FixateTimer = 8000; + EnrageTimer = 30000; + SoulDrainTimer = 45000; + AuraTimer = 5000; + } uint32 AggroYellTimer; uint32 FixateTimer; @@ -408,13 +428,7 @@ public: void Reset() override { - StatAuraGUID = 0; - - AggroYellTimer = 5000; - FixateTimer = 8000; - EnrageTimer = 30000; - SoulDrainTimer = 45000; - AuraTimer = 5000; + Initialize(); } void DamageTaken(Unit* /*done_by*/, uint32 &damage) override @@ -519,7 +533,17 @@ public: struct boss_essence_of_desireAI : public ScriptedAI { - boss_essence_of_desireAI(Creature* creature) : ScriptedAI(creature) { } + boss_essence_of_desireAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + RuneShieldTimer = 60000; + DeadenTimer = 30000; + SoulShockTimer = 5000; + } uint32 RuneShieldTimer; uint32 DeadenTimer; @@ -527,9 +551,7 @@ public: void Reset() override { - RuneShieldTimer = 60000; - DeadenTimer = 30000; - SoulShockTimer = 5000; + Initialize(); me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_CONFUSE, true); } @@ -622,7 +644,21 @@ public: struct boss_essence_of_angerAI : public ScriptedAI { - boss_essence_of_angerAI(Creature* creature) : ScriptedAI(creature) { } + boss_essence_of_angerAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + AggroTargetGUID.Clear(); + + CheckTankTimer = 5000; + SoulScreamTimer = 10000; + SpiteTimer = 30000; + + CheckedAggro = false; + } ObjectGuid AggroTargetGUID; @@ -630,21 +666,11 @@ public: uint32 SoulScreamTimer; uint32 SpiteTimer; - std::list<uint64> SpiteTargetGUID; - bool CheckedAggro; void Reset() override { - AggroTargetGUID.Clear(); - - CheckTankTimer = 5000; - SoulScreamTimer = 10000; - SpiteTimer = 30000; - - SpiteTargetGUID.clear(); - - CheckedAggro = false; + Initialize(); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp index 6b337e42087..ecc4457e454 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp @@ -165,12 +165,21 @@ public: struct boss_shade_of_akamaAI : public ScriptedAI { - boss_shade_of_akamaAI(Creature* creature) : ScriptedAI(creature), HasKilledAkamaAndReseting(false) + boss_shade_of_akamaAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } + void Initialize() + { + combatStarted = false; + akamaReached = false; + HasKilledAkama = false; + HasKilledAkamaAndReseting = false; + } + void Reset() override { if (!HasKilledAkamaAndReseting) @@ -190,10 +199,7 @@ public: me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); me->SetWalk(true); - combatStarted = false; - akamaReached = false; - HasKilledAkama = false; - HasKilledAkamaAndReseting = false; + Initialize(); } void JustDied(Unit* /*killer*/) override @@ -417,18 +423,24 @@ public: { npc_akamaAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + StartChannel = false; + StartCombat = false; + HasYelledOnce = false; + ShadeHasDied = false; + } + void Reset() override { me->setFaction(FACTION_FRIENDLY); me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); DoCast(me, SPELL_STEALTH); - StartChannel = false; - StartCombat = false; - HasYelledOnce = false; - ShadeHasDied = false; + Initialize(); } void JustDied(Unit* /*killer*/) override @@ -631,15 +643,21 @@ public: { npc_creature_generator_akamaAI(Creature* creature) : ScriptedAI(creature), Summons(me) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + doSpawning = false; + leftSide = false; + } + void Reset() override { Summons.DespawnAll(); - doSpawning = false; - leftSide = false; + Initialize(); if (me->GetPositionY() < 400.0f) leftSide = true; @@ -739,8 +757,14 @@ public: { npc_ashtongue_sorcererAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); + } + + void Initialize() + { startedBanishing = false; + switchToCombat = false; } void Reset() override @@ -760,8 +784,7 @@ public: } summonerGuid.Clear(); - startedBanishing = false; - switchToCombat = false; + Initialize(); } void JustDied(Unit* /*killer*/) override @@ -1111,14 +1134,20 @@ public: { npc_ashtongue_spiritbinderAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } - void Reset() override + void Initialize() { spiritMend = false; - chainHeal = false; + chainHeal = false; summonerGuid.Clear(); + } + + void Reset() override + { + Initialize(); if (Unit* target = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_AKAMA_SHADE))) AttackStart(target); diff --git a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp index b9b654f8b95..93061a3a57f 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp @@ -223,16 +223,22 @@ public: { npc_volcanoAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); SetCombatMovement(false); } + void Initialize() + { + wait = 3000; + } + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); //DoCast(me, SPELL_VOLCANIC_ERUPTION); me->SetReactState(REACT_PASSIVE); - wait = 3000; + Initialize(); } uint32 wait; diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp index 081dbc079a7..aa0f3daeef0 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp @@ -63,7 +63,17 @@ public: struct npc_doom_blossomAI : public ScriptedAI { - npc_doom_blossomAI(Creature* creature) : ScriptedAI(creature) { } + npc_doom_blossomAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + CheckTeronTimer = 5000; + ShadowBoltTimer = 12000; + TeronGUID.Clear(); + } uint32 CheckTeronTimer; uint32 ShadowBoltTimer; @@ -71,9 +81,7 @@ public: void Reset() override { - CheckTeronTimer = 5000; - ShadowBoltTimer = 12000; - TeronGUID.Clear(); + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -132,7 +140,19 @@ public: struct npc_shadowy_constructAI : public ScriptedAI { - npc_shadowy_constructAI(Creature* creature) : ScriptedAI(creature) { } + npc_shadowy_constructAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + GhostGUID.Clear(); + TeronGUID.Clear(); + + CheckPlayerTimer = 2000; + CheckTeronTimer = 5000; + } ObjectGuid GhostGUID; ObjectGuid TeronGUID; @@ -142,11 +162,7 @@ public: void Reset() override { - GhostGUID.Clear(); - TeronGUID.Clear(); - - CheckPlayerTimer = 2000; - CheckTeronTimer = 5000; + Initialize(); } void EnterCombat(Unit* /*who*/) override { } @@ -224,9 +240,25 @@ public: { boss_teron_gorefiendAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + IncinerateTimer = urand(20000, 31000); + SummonDoomBlossomTimer = 12000; + EnrageTimer = 600000; + CrushingShadowsTimer = 22000; + SummonShadowsTimer = 60000; + RandomYellTimer = 50000; + + AggroTimer = 20000; + AggroTargetGUID.Clear(); + Intro = false; + Done = false; + } + InstanceScript* instance; uint32 IncinerateTimer; @@ -248,21 +280,11 @@ public: { instance->SetBossState(DATA_TERON_GOREFIEND, NOT_STARTED); - IncinerateTimer = urand(20000, 31000); - SummonDoomBlossomTimer = 12000; - EnrageTimer = 600000; - CrushingShadowsTimer = 22000; - SummonShadowsTimer = 60000; - RandomYellTimer = 50000; + Initialize(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); // Start off unattackable so that the intro is done properly me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - - AggroTimer = 20000; - AggroTargetGUID.Clear(); - Intro = false; - Done = false; } void EnterCombat(Unit* /*who*/) override { } diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp index a14a4c576cb..3c4b37165de 100644 --- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp +++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp @@ -129,6 +129,17 @@ public: { npc_blood_elf_council_voice_triggerAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); + } + + void Initialize() + { + EnrageTimer = 900000; // 15 minutes + AggroYellTimer = 500; + + YellCounter = 0; + + EventStarted = false; } ObjectGuid Council[4]; @@ -142,12 +153,7 @@ public: void Reset() override { - EnrageTimer = 900000; // 15 minutes - AggroYellTimer = 500; - - YellCounter = 0; - - EventStarted = false; + Initialize(); } // finds and stores the GUIDs for each Council member using instance data system. @@ -223,9 +229,19 @@ public: { npc_illidari_councilAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + CheckTimer = 2000; + EndEventTimer = 0; + + DeathCount = 0; + EventBegun = false; + } + InstanceScript* instance; ObjectGuid Council[4]; @@ -239,10 +255,7 @@ public: void Reset() override { - CheckTimer = 2000; - EndEventTimer = 0; - - DeathCount = 0; + Initialize(); Creature* pMember = NULL; for (uint8 i = 0; i < 4; ++i) @@ -263,8 +276,6 @@ public: if (Creature* VoiceTrigger = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BLOOD_ELF_COUNCIL_VOICE))) VoiceTrigger->AI()->EnterEvadeMode(); - EventBegun = false; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetDisplayId(11686); @@ -451,7 +462,19 @@ public: struct boss_gathios_the_shattererAI : public boss_illidari_councilAI { - boss_gathios_the_shattererAI(Creature* creature) : boss_illidari_councilAI(creature) { } + boss_gathios_the_shattererAI(Creature* creature) : boss_illidari_councilAI(creature) + { + Initialize(); + } + + void Initialize() + { + ConsecrationTimer = 40000; + HammerOfJusticeTimer = 10000; + SealTimer = 40000; + AuraTimer = 90000; + BlessingTimer = 60000; + } uint32 ConsecrationTimer; uint32 HammerOfJusticeTimer; @@ -461,11 +484,7 @@ public: void Reset() override { - ConsecrationTimer = 40000; - HammerOfJusticeTimer = 10000; - SealTimer = 40000; - AuraTimer = 90000; - BlessingTimer = 60000; + Initialize(); } void KilledUnit(Unit* /*victim*/) override @@ -583,7 +602,20 @@ public: struct boss_high_nethermancer_zerevorAI : public boss_illidari_councilAI { - boss_high_nethermancer_zerevorAI(Creature* creature) : boss_illidari_councilAI(creature) { } + boss_high_nethermancer_zerevorAI(Creature* creature) : boss_illidari_councilAI(creature) + { + Initialize(); + } + + void Initialize() + { + BlizzardTimer = urand(30, 91) * 1000; + FlamestrikeTimer = urand(30, 91) * 1000; + ArcaneBoltTimer = 10000; + DampenMagicTimer = 2000; + ArcaneExplosionTimer = 14000; + Cooldown = 0; + } uint32 BlizzardTimer; uint32 FlamestrikeTimer; @@ -594,12 +626,7 @@ public: void Reset() override { - BlizzardTimer = urand(30, 91) * 1000; - FlamestrikeTimer = urand(30, 91) * 1000; - ArcaneBoltTimer = 10000; - DampenMagicTimer = 2000; - ArcaneExplosionTimer = 14000; - Cooldown = 0; + Initialize(); } void KilledUnit(Unit* /*victim*/) override @@ -687,7 +714,18 @@ public: struct boss_lady_malandeAI : public boss_illidari_councilAI { - boss_lady_malandeAI(Creature* creature) : boss_illidari_councilAI(creature) { } + boss_lady_malandeAI(Creature* creature) : boss_illidari_councilAI(creature) + { + Initialize(); + } + + void Initialize() + { + EmpoweredSmiteTimer = 38000; + CircleOfHealingTimer = 20000; + DivineWrathTimer = 40000; + ReflectiveShieldTimer = 0; + } uint32 EmpoweredSmiteTimer; uint32 CircleOfHealingTimer; @@ -696,10 +734,7 @@ public: void Reset() override { - EmpoweredSmiteTimer = 38000; - CircleOfHealingTimer = 20000; - DivineWrathTimer = 40000; - ReflectiveShieldTimer = 0; + Initialize(); } void KilledUnit(Unit* /*victim*/) override @@ -765,9 +800,19 @@ public: struct boss_veras_darkshadowAI : public boss_illidari_councilAI { - boss_veras_darkshadowAI(Creature* creature) : boss_illidari_councilAI(creature) { } + boss_veras_darkshadowAI(Creature* creature) : boss_illidari_councilAI(creature) + { + Initialize(); + } - uint64 EnvenomTargetGUID; + void Initialize() + { + DeadlyPoisonTimer = 20000; + VanishTimer = urand(60, 121) * 1000; + AppearEnvenomTimer = 150000; + + HasVanished = false; + } uint32 DeadlyPoisonTimer; uint32 VanishTimer; @@ -777,13 +822,7 @@ public: void Reset() override { - EnvenomTargetGUID = 0; - - DeadlyPoisonTimer = 20000; - VanishTimer = urand(60, 121) * 1000; - AppearEnvenomTimer = 150000; - - HasVanished = false; + Initialize(); me->SetVisible(true); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp index 05db2c12b90..ca04d41e3c8 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp @@ -111,9 +111,19 @@ public: { boss_fathomlord_karathressAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + CataclysmicBolt_Timer = 10000; + Enrage_Timer = 600000; //10 minutes + SearNova_Timer = 20000 + rand32() % 40000; // 20 - 60 seconds + + BlessingOfTides = false; + } + InstanceScript* instance; uint32 CataclysmicBolt_Timer; @@ -126,11 +136,7 @@ public: void Reset() override { - CataclysmicBolt_Timer = 10000; - Enrage_Timer = 600000; //10 minutes - SearNova_Timer = 20000 + rand32() % 40000; // 20 - 60 seconds - - BlessingOfTides = false; + Initialize(); ObjectGuid RAdvisors[MAX_ADVISORS]; RAdvisors[0] = instance->GetGuidData(DATA_SHARKKIS); @@ -304,9 +310,20 @@ public: { boss_fathomguard_sharkkisAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + LeechingThrow_Timer = 20000; + TheBeastWithin_Timer = 30000; + Multishot_Timer = 15000; + Pet_Timer = 10000; + + pet = false; + } + InstanceScript* instance; uint32 LeechingThrow_Timer; @@ -320,12 +337,7 @@ public: void Reset() override { - LeechingThrow_Timer = 20000; - TheBeastWithin_Timer = 30000; - Multishot_Timer = 15000; - Pet_Timer = 10000; - - pet = false; + Initialize(); Creature* Pet = ObjectAccessor::GetCreature(*me, SummonedPet); if (Pet && Pet->IsAlive()) @@ -442,9 +454,18 @@ public: { boss_fathomguard_tidalvessAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + FrostShock_Timer = 25000; + Spitfire_Timer = 60000; + PoisonCleansing_Timer = 30000; + Earthbind_Timer = 45000; + } + InstanceScript* instance; uint32 FrostShock_Timer; @@ -454,10 +475,7 @@ public: void Reset() override { - FrostShock_Timer = 25000; - Spitfire_Timer = 60000; - PoisonCleansing_Timer = 30000; - Earthbind_Timer = 45000; + Initialize(); instance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED); } @@ -558,9 +576,18 @@ public: { boss_fathomguard_caribdisAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + WaterBoltVolley_Timer = 35000; + TidalSurge_Timer = 15000 + rand32() % 5000; + Heal_Timer = 55000; + Cyclone_Timer = 30000 + rand32() % 10000; + } + InstanceScript* instance; uint32 WaterBoltVolley_Timer; @@ -570,10 +597,7 @@ public: void Reset() override { - WaterBoltVolley_Timer = 35000; - TidalSurge_Timer = 15000 + rand32() % 5000; - Heal_Timer = 55000; - Cyclone_Timer = 30000 + rand32() % 10000; + Initialize(); instance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp index cea6a1854a1..d6117c9053f 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp @@ -93,9 +93,27 @@ public: { boss_hydross_the_unstableAI(Creature* creature) : ScriptedAI(creature), Summons(me) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + beams[0].Clear(); + beams[1].Clear(); + PosCheck_Timer = 2500; + MarkOfHydross_Timer = 15000; + MarkOfCorruption_Timer = 15000; + WaterTomb_Timer = 7000; + VileSludge_Timer = 7000; + MarkOfHydross_Count = 0; + MarkOfCorruption_Count = 0; + EnrageTimer = 600000; + + CorruptedForm = false; + beam = false; + } + InstanceScript* instance; ObjectGuid beams[2]; @@ -114,18 +132,8 @@ public: void Reset() override { DeSummonBeams(); - beams[0].Clear(); - beams[1].Clear(); - PosCheck_Timer = 2500; - MarkOfHydross_Timer = 15000; - MarkOfCorruption_Timer = 15000; - WaterTomb_Timer = 7000; - VileSludge_Timer = 7000; - MarkOfHydross_Count = 0; - MarkOfCorruption_Count = 0; - EnrageTimer = 600000; + Initialize(); - CorruptedForm = false; me->SetMeleeDamageSchool(SPELL_SCHOOL_FROST); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false); @@ -133,7 +141,6 @@ public: me->SetDisplayId(MODEL_CLEAN); instance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, NOT_STARTED); - beam = false; Summons.DespawnAll(); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp index 4630620c585..450ac350f0c 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp @@ -147,12 +147,34 @@ public: { boss_lady_vashjAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); Intro = false; JustCreated = true; + CanAttack = false; creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); // set it only once on Creature create (no need do intro if wiped) } + void Initialize() + { + AggroTimer = 19000; + ShockBlastTimer = 1 + rand32() % 60000; + EntangleTimer = 30000; + StaticChargeTimer = 10000 + rand32() % 15000; + ForkedLightningTimer = 2000; + CheckTimer = 15000; + EnchantedElementalTimer = 5000; + TaintedElementalTimer = 50000; + CoilfangEliteTimer = 45000 + rand32() % 5000; + CoilfangStriderTimer = 60000 + rand32() % 10000; + SummonSporebatTimer = 10000; + SummonSporebatStaticTimer = 30000; + EnchantedElementalPos = 0; + Phase = 0; + + Entangle = false; + } + InstanceScript* instance; ObjectGuid ShieldGeneratorChannel[4]; @@ -179,22 +201,8 @@ public: void Reset() override { - AggroTimer = 19000; - ShockBlastTimer = 1 + rand32() % 60000; - EntangleTimer = 30000; - StaticChargeTimer = 10000 + rand32() % 15000; - ForkedLightningTimer = 2000; - CheckTimer = 15000; - EnchantedElementalTimer = 5000; - TaintedElementalTimer = 50000; - CoilfangEliteTimer = 45000 + rand32() % 5000; - CoilfangStriderTimer = 60000 + rand32() % 10000; - SummonSporebatTimer = 10000; - SummonSporebatStaticTimer = 30000; - EnchantedElementalPos = 0; - Phase = 0; + Initialize(); - Entangle = false; if (JustCreated) { CanAttack = false; @@ -555,9 +563,20 @@ public: { npc_enchanted_elementalAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + Move = 0; + Phase = 1; + + X = ElementWPPos[0][0]; + Y = ElementWPPos[0][1]; + Z = ElementWPPos[0][2]; + } + InstanceScript* instance; uint32 Move; uint32 Phase; @@ -569,12 +588,7 @@ public: { me->SetSpeed(MOVE_WALK, 0.6f); // walk me->SetSpeed(MOVE_RUN, 0.6f); // run - Move = 0; - Phase = 1; - - X = ElementWPPos[0][0]; - Y = ElementWPPos[0][1]; - Z = ElementWPPos[0][2]; + Initialize(); //search for nearest waypoint (up on stairs) for (uint32 i = 1; i < 8; ++i) @@ -644,9 +658,16 @@ public: { npc_tainted_elementalAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + PoisonBoltTimer = 5000 + rand32() % 5000; + DespawnTimer = 30000; + } + InstanceScript* instance; uint32 PoisonBoltTimer; @@ -654,8 +675,7 @@ public: void Reset() override { - PoisonBoltTimer = 5000 + rand32() % 5000; - DespawnTimer = 30000; + Initialize(); } void JustDied(Unit* /*killer*/) override @@ -712,10 +732,19 @@ public: { npc_toxic_sporebatAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); EnterEvadeMode(); } + void Initialize() + { + MovementTimer = 0; + ToxicSporeTimer = 5000; + BoltTimer = 5500; + CheckTimer = 1000; + } + InstanceScript* instance; uint32 MovementTimer; @@ -727,10 +756,7 @@ public: { me->SetDisableGravity(true); me->setFaction(14); - MovementTimer = 0; - ToxicSporeTimer = 5000; - BoltTimer = 5500; - CheckTimer = 1000; + Initialize(); } void MoveInLineOfSight(Unit* /*who*/) override @@ -808,17 +834,23 @@ public: { npc_shield_generator_channelAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); instance = creature->GetInstanceScript(); } + void Initialize() + { + CheckTimer = 0; + Cast = false; + } + InstanceScript* instance; uint32 CheckTimer; bool Cast; void Reset() override { - CheckTimer = 0; - Cast = false; + Initialize(); me->SetDisplayId(11686); // invisible me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index b5e54fe85f0..5c95376cdfc 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -73,13 +73,6 @@ public: } } - uint64 OgreGUID; - - void Reset() override - { - OgreGUID = 0; - } - void UpdateAI(uint32 /*diff*/) override { } }; diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 0d7d8b61501..9c04aaa7578 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -459,7 +459,10 @@ class spell_dru_innervate : public SpellScriptLoader void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/) { - amount = CalculatePct(int32(GetUnitOwner()->GetCreatePowers(POWER_MANA) / aurEff->GetTotalTicks()), amount); + if (Unit* caster = GetCaster()) + amount = int32(CalculatePct(caster->GetCreatePowers(POWER_MANA), amount) / aurEff->GetTotalTicks()); + else + amount = 0; } void Register() override |