Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4

Conflicts:
	src/server/game/Achievements/AchievementMgr.cpp
	src/server/game/Achievements/AchievementMgr.h
	src/server/game/Globals/ObjectMgr.cpp
This commit is contained in:
Vincent-Michael
2014-09-20 22:39:37 +02:00
52 changed files with 3136 additions and 959 deletions

View File

@@ -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)

View File

@@ -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);

View File

@@ -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;

View File

@@ -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');

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -0,0 +1,2 @@
-- Stormpeak Wyrm proper respawntime
UPDATE `creature` SET `spawntimesecs`=300 WHERE `id`=29753;

View File

@@ -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);

View File

@@ -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

File diff suppressed because it is too large Load Diff

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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

View File

@@ -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();

File diff suppressed because it is too large Load Diff

View File

@@ -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 Save();
};
struct WGWorkshop
{
// 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);
void GiveControlTo(uint8 team, bool init /*for first call in setup*/);
void UpdateGraveyardAndWorkshop();
void FillInitialWorldStates(WorldPacket& data);
void Save();
};
// Structure for the 6 workshop
struct WintergraspWorkshopData
struct WintergraspWorkshop
{
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
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
WintergraspWorkshopData(BattlefieldWG* wg);
StaticWintergraspWorkshopInfo const* _staticInfo;
public:
WintergraspWorkshop(BattlefieldWG* wg, uint8 type);
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();
};

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -57,13 +57,10 @@ public:
void Initialize()
{
PlayerGUID = 0;
RebuffTimer = 0;
work = false;
}
uint64 PlayerGUID;
uint32 RebuffTimer;
bool work;

View File

@@ -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)

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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 Initialize()
{
_backstabTimer = 1300;
_tacticalBlinkTimer = 8000;
_tacticalBlinkCast = false;
}
void Reset() override
{
_backstabTimer = 1300;
_tacticalBlinkTimer = 8000;
_tacticalBlinkCast =false;
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);

View File

@@ -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

View File

@@ -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;
};

View File

@@ -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())

View File

@@ -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)

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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,13 +229,19 @@ class npc_voidtraveler : public CreatureScript
{
npc_voidtravelerAI(Creature* creature) : ScriptedAI(creature)
{
Initialize();
_instance = creature->GetInstanceScript();
}
void Initialize()
{
_moveTimer = 0;
_sacrificed = false;
}
void Reset() override
{
_moveTimer = 0;
_sacrificed = false;
Initialize();
}
void EnterCombat(Unit* /*who*/) override { }

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -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 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
{
WalkCount = 0;
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);
}

View File

@@ -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,19 +644,12 @@ 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();
}
ObjectGuid AggroTargetGUID;
uint32 CheckTankTimer;
uint32 SoulScreamTimer;
uint32 SpiteTimer;
std::list<uint64> SpiteTargetGUID;
bool CheckedAggro;
void Reset() override
void Initialize()
{
AggroTargetGUID.Clear();
@@ -642,11 +657,22 @@ public:
SoulScreamTimer = 10000;
SpiteTimer = 30000;
SpiteTargetGUID.clear();
CheckedAggro = false;
}
ObjectGuid AggroTargetGUID;
uint32 CheckTankTimer;
uint32 SoulScreamTimer;
uint32 SpiteTimer;
bool CheckedAggro;
void Reset() override
{
Initialize();
}
void EnterCombat(Unit* /*who*/) override
{
Talk(ANGER_SAY_FREED);

View File

@@ -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 Initialize()
{
spiritMend = false;
chainHeal = false;
summonerGuid.Clear();
}
void Reset() override
{
spiritMend = false;
chainHeal = false;
summonerGuid.Clear();
Initialize();
if (Unit* target = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_AKAMA_SHADE)))
AttackStart(target);

View File

@@ -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;

View File

@@ -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 { }

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -73,13 +73,6 @@ public:
}
}
uint64 OgreGUID;
void Reset() override
{
OgreGUID = 0;
}
void UpdateAI(uint32 /*diff*/) override { }
};

View File

@@ -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