Merge branch 'master' of https://github.com/ZhengPeiRu21/azerothcore-wotlk into Playerbot
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
-- DB update 2022_06_16_07 -> 2022_06_18_00
|
||||
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` IN (6748, 17359);
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE ((`entryorguid` = 6748) AND (`source_type` = 0) AND (`id` IN (0, 1))) OR (`entryorguid` = 17359) AND (`source_type` = 0) AND (`id` IN (5, 7, 8, 9));
|
||||
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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||
(6748, 0, 0, 0, 54, 0, 100, 513, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Water Spirit - On Just Summoned - Set Event Phase 1 (No Repeat)'),
|
||||
(6748, 0, 1, 0, 75, 1, 100, 1, 0, 17359, 30, 500, 0, 1, 0, 1500, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Water Spirit - On Distance To Creature - Say Line 0 (Phase 1) (No Repeat)'),
|
||||
(17359, 0, 5, 0, 0, 1, 100, 512, 5000, 5000, 5000, 5000, 0, 11, 9672, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Tel\'athion the Impure - In Combat - Cast \'Frostbolt\' (Phase 1)'),
|
||||
(17359, 0, 7, 0, 0, 1, 100, 512, 6200, 6200, 5000, 5000, 0, 11, 13339, 64, 0, 0, 0, 0, 5, 6748, 1, 0, 0, 0, 0, 0, 0, 'Tel\'athion the Impure - In Combat - Cast \'Fire Blast\' (Phase 1)'),
|
||||
(17359, 0, 8, 0, 9, 1, 100, 512, 0, 10, 13000, 13000, 0, 11, 11831, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Tel\'athion the Impure - Within 0-10 Range - Cast \'Frost Nova\' (Phase 1)'),
|
||||
(17359, 0, 9, 0, 0, 1, 100, 512, 8000, 8000, 10000, 10000, 0, 11, 15735, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Tel\'athion the Impure - In Combat - Cast \'Arcane Missiles\' (Phase 1)');
|
||||
@@ -0,0 +1,2 @@
|
||||
-- DB update 2022_06_18_00 -> 2022_06_18_01
|
||||
UPDATE `quest_template_addon` SET `PrevQuestID` = 1701 WHERE `ID` IN (1705, 1708, 1710);
|
||||
@@ -0,0 +1,3 @@
|
||||
-- DB update 2022_06_18_01 -> 2022_06_18_02
|
||||
--
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid`=9447 AND `source_type`=0 AND `id`=2;
|
||||
@@ -0,0 +1,2 @@
|
||||
-- DB update 2022_06_18_02 -> 2022_06_18_03
|
||||
UPDATE `creature_template` SET `npcflag` = 1, `gossip_menu_id` = '21208', `AIName` = 'SmartAI' WHERE (`entry` = 6669);
|
||||
@@ -0,0 +1,186 @@
|
||||
-- DB update 2022_06_18_03 -> 2022_06_18_04
|
||||
--
|
||||
DELETE FROM `pool_template` WHERE `entry` IN (391, 392, 393);
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES (391, 4, 'Brontus Kodo Pack Combo 1 -- 4 Barrens Kodo Pack');
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES (392, 4, 'Brontus Kodo Pack Combo 2 -- Mixed Kodo Pack');
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES (393, 4, 'Brontus Kodo Pack Combo 3 -- Brontus Pack');
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES (394, 1, 'Brontus Kodo Pack Pool of Pools');
|
||||
|
||||
DELETE FROM `creature` WHERE `guid` IN (51815);
|
||||
/* Combo 1 */
|
||||
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES
|
||||
(45809, 3236, 0, 0, 1, 0, 0, 1, 1, 0, -3787.7153, -1848.3755, 93.918015, 2.55345463752746582, 600, 0, 0, 1, 0, 2, 0, 0, 0, '', 0), -- .go xyz -3787.7153 -1848.3755 93.918015 Leader
|
||||
(45810, 3236, 0, 0, 1, 0, 0, 1, 1, 0, -3814.7678, -1845.9219, 93.61283, 0.949117600917816162, 600, 0, 0, 1, 0, 0, 0, 0, 0, '', 0),
|
||||
(45811, 3236, 0, 0, 1, 0, 0, 1, 1, 0, -3798.8208, -1829.7017, 94.17238, 4.366050243377685546, 600, 0, 0, 1, 0, 0, 0, 0, 0, '', 0),
|
||||
(45812, 3236, 0, 0, 1, 0, 0, 1, 1, 0, -3807.5981, -1865.3707, 92.56358, 1.319851279258728027, 600, 0, 0, 1, 0, 0, 0, 0, 0, '', 0),
|
||||
/* Combo 2 */
|
||||
(45813, 3235, 3236, 0, 1, 0, 0, 1, 1, 0, -3787.7153, -1848.3755, 93.918015, 2.55345463752746582, 900, 0, 0, 1, 0, 2, 0, 0, 0, '', 0), -- .go xyz -3787.7153 -1848.3755 93.918015 Leader
|
||||
(45814, 3237, 3236, 0, 1, 0, 0, 1, 1, 0, -3814.7678, -1845.9219, 93.61283, 0.949117600917816162, 900, 0, 0, 1, 0, 0, 0, 0, 0, '', 0),
|
||||
(45815, 3237, 3236, 0, 1, 0, 0, 1, 1, 0, -3798.8208, -1829.7017, 94.17238, 4.366050243377685546, 900, 0, 0, 1, 0, 0, 0, 0, 0, '', 0),
|
||||
(45816, 3235, 3236, 0, 1, 0, 0, 1, 1, 0, -3807.5981, -1865.3707, 92.56358, 1.319851279258728027, 900, 0, 0, 1, 0, 0, 0, 0, 0, '', 0),
|
||||
/* Combo 3 */
|
||||
(45817, 3237, 0, 0, 1, 0, 0, 1, 1, 0, -3787.7153, -1848.3755, 93.918015, 2.55345463752746582, 1800, 0, 0, 1, 0, 2, 0, 0, 0, '', 0), -- .go xyz -3787.7153 -1848.3755 93.918015 Leader
|
||||
(45818, 5827, 0, 0, 1, 0, 0, 1, 1, 0, -3814.7678, -1845.9219, 93.61283, 0.949117600917816162, 1800, 0, 0, 1, 0, 0, 0, 0, 0, '', 0),
|
||||
(45819, 3235, 0, 0, 1, 0, 0, 1, 1, 0, -3798.8208, -1829.7017, 94.17238, 4.366050243377685546, 1800, 0, 0, 1, 0, 0, 0, 0, 0, '', 0),
|
||||
(45820, 3236, 0, 0, 1, 0, 0, 1, 1, 0, -3807.5981, -1865.3707, 92.56358, 1.319851279258728027, 1800, 0, 0, 1, 0, 0, 0, 0, 0, '', 0);
|
||||
|
||||
DELETE FROM `pool_creature` WHERE `guid` IN (45809, 45810, 45811, 45812, 45813, 45814, 45815, 45816, 45817, 45818, 45819, 45820);
|
||||
INSERT INTO `pool_creature` (`guid`, `pool_entry`, `description`) VALUES
|
||||
(45809, 391, 'Brontus Kodo Pack Combo 1 -- 4 Barrens Kodo Pack Leader Mob'),
|
||||
(45810, 391, 'Brontus Kodo Pack Combo 1 -- 4 Barrens Kodo Pack'),
|
||||
(45811, 391, 'Brontus Kodo Pack Combo 1 -- 4 Barrens Kodo Pack'),
|
||||
(45812, 391, 'Brontus Kodo Pack Combo 1 -- 4 Barrens Kodo Pack'),
|
||||
(45813, 392, 'Brontus Kodo Pack Combo 2 -- Mixed Kodo Pack Leader Mob'),
|
||||
(45814, 392, 'Brontus Kodo Pack Combo 2 -- Mixed Kodo Pack'),
|
||||
(45815, 392, 'Brontus Kodo Pack Combo 2 -- Mixed Kodo Pack'),
|
||||
(45816, 392, 'Brontus Kodo Pack Combo 2 -- Mixed Kodo Pack'),
|
||||
(45817, 393, 'Brontus Kodo Pack Combo 3 -- Brontus Pack Leader Mob'),
|
||||
(45818, 393, 'Brontus Kodo Pack Combo 3 -- Brontus Pack'),
|
||||
(45819, 393, 'Brontus Kodo Pack Combo 3 -- Brontus Pack'),
|
||||
(45820, 393, 'Brontus Kodo Pack Combo 3 -- Brontus Pack');
|
||||
|
||||
DELETE FROM `pool_pool` WHERE `pool_id` IN (391, 392, 393);
|
||||
INSERT INTO `pool_pool` (`pool_id`, `mother_pool`, `chance`, `description`) VALUES
|
||||
(391, 394, 55, 'Brontus Kodo Pack Combo 1 -- 4 Barrens Kodo Pack'),
|
||||
(392, 394, 30, 'Brontus Kodo Pack Combo 2 -- Mixed Kodo Pack'),
|
||||
(393, 394, 15, 'Brontus Kodo Pack Combo 3 -- Brontus Pack');
|
||||
|
||||
-- Pathing for Kodos with Brontus
|
||||
SET @NPC := 45809;
|
||||
SET @path := @NPC * 10;
|
||||
DELETE FROM `creature_addon` WHERE `guid` IN (@NPC, @NPC+4, @NPC+8);
|
||||
INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES
|
||||
(@NPC,@path,0,0,1,0,0, ''),
|
||||
(@NPC+4,@path,0,0,1,0,0, ''),
|
||||
(@NPC+8,@path,0,0,1,0,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,-3780.6667,-1879.9966,94.51902,0,0,0,0,100,0),
|
||||
(@path,2,-3765.317,-1912.2642,92.659584,0,0,0,0,100,0),
|
||||
(@path,3,-3743.7683,-1944.3379,93.25019,0,0,0,0,100,0),
|
||||
(@path,4,-3718.9587,-1949.9241,94.24338,0,0,0,0,100,0),
|
||||
(@path,5,-3674.7666,-1972.0784,92.34276,0,0,0,0,100,0),
|
||||
(@path,6,-3633.491,-1962.7506,91.96043,0,0,0,0,100,0),
|
||||
(@path,7,-3604.3447,-1934.8683,93.6461,0,0,0,0,100,0),
|
||||
(@path,8,-3574.0989,-1917.8884,94.641045,0,0,0,0,100,0),
|
||||
(@path,9,-3543.6143,-1922.9417,93.78076,0,0,0,0,100,0),
|
||||
(@path,10,-3514.391,-1891.8881,96.05839,0,0,0,0,100,0),
|
||||
(@path,11,-3482.7354,-1879.4718,95.54532,0,0,0,0,100,0),
|
||||
(@path,12,-3447.3694,-1879.2826,94.04059,0,0,0,0,100,0),
|
||||
(@path,13,-3419.4883,-1883.6552,93.07612,0,0,0,0,100,0),
|
||||
(@path,14,-3401.6602,-1915.7799,93.66566,0,0,0,0,100,0),
|
||||
(@path,15,-3377.1729,-1946.9575,91.91544,0,0,0,0,100,0),
|
||||
(@path,16,-3359.4075,-1987.9889,93.354164,0,0,0,0,100,0),
|
||||
(@path,17,-3351.847,-2020.0239,93.34684,0,0,0,0,100,0),
|
||||
(@path,18,-3347.3481,-2061.3584,96.55564,0,0,0,0,100,0),
|
||||
(@path,19,-3337.5916,-2084.593,91.86515,0,0,0,0,100,0),
|
||||
(@path,20,-3305.2717,-2097.2861,91.791664,0,0,0,0,100,0),
|
||||
(@path,21,-3264.5898,-2110.5752,93.58816,0,0,0,0,100,0),
|
||||
(@path,22,-3221.6958,-2091.54,92.918495,0,0,0,0,100,0),
|
||||
(@path,23,-3175.735,-2081.8813,91.791664,0,0,0,0,100,0),
|
||||
(@path,24,-3131.3293,-2093.495,91.81647,0,0,0,0,100,0),
|
||||
(@path,25,-3093.5208,-2117.2578,93.19572,0,0,0,0,100,0),
|
||||
(@path,26,-3050.1245,-2119.8708,93.09464,0,0,0,0,100,0),
|
||||
(@path,27,-3005.5127,-2109.9685,92.291664,0,0,0,0,100,0),
|
||||
(@path,28,-2967.4277,-2095.7334,91.791664,0,0,0,0,100,0),
|
||||
(@path,29,-2936.955,-2117.254,91.791664,0,0,0,0,100,0),
|
||||
(@path,30,-2908.1777,-2144.7766,93.2714,0,0,0,0,100,0),
|
||||
(@path,31,-2871.219,-2160.007,92.05509,0,0,0,0,100,0),
|
||||
(@path,32,-2853.049,-2161.5356,91.791664,0,0,0,0,100,0),
|
||||
(@path,33,-2835.0942,-2182.703,95.2443,0,0,0,0,100,0),
|
||||
(@path,34,-2795.9773,-2209.954,95.784584,0,0,0,0,100,0),
|
||||
(@path,35,-2758.5547,-2238.7458,92.954506,0,0,0,0,100,0),
|
||||
(@path,36,-2721.4429,-2257.816,91.791664,0,0,0,0,100,0),
|
||||
(@path,37,-2681.0037,-2258.5547,91.95255,0,0,0,0,100,0),
|
||||
(@path,38,-2673.5525,-2282.2383,91.791664,0,0,0,0,100,0),
|
||||
(@path,39,-2647.4885,-2312.194,92.01603,0,0,0,0,100,0),
|
||||
(@path,40,-2624.1008,-2319.0713,92.736,0,0,0,0,100,0),
|
||||
(@path,41,-2583.4438,-2317.825,91.791664,0,0,0,0,100,0),
|
||||
(@path,42,-2553.0298,-2291.6404,93.56666,0,0,0,0,100,0),
|
||||
(@path,43,-2522.4128,-2288.3354,95.39027,0,0,0,0,100,0),
|
||||
(@path,44,-2480.3079,-2292.0088,94.91757,0,0,0,0,100,0),
|
||||
(@path,45,-2440.1282,-2314.39,94.61803,0,0,0,0,100,0),
|
||||
(@path,46,-2414.875,-2342.5525,91.83561,0,0,0,0,100,0),
|
||||
(@path,47,-2396.1902,-2380.3955,91.791664,0,0,0,0,100,0),
|
||||
(@path,48,-2380.417,-2413.0195,92.82902,0,0,0,0,100,0),
|
||||
(@path,49,-2353.339,-2423.769,95.19796,0,0,0,0,100,0),
|
||||
(@path,50,-2310.5186,-2422.7778,95.587776,0,0,0,0,100,0),
|
||||
(@path,51,-2293.4502,-2402.058,93.38322,0,0,0,0,100,0),
|
||||
(@path,52,-2295.2888,-2370.951,92.66499,0,0,0,0,100,0),
|
||||
(@path,53,-2286.9407,-2341.9426,93.4555,0,0,0,0,100,0),
|
||||
(@path,54,-2252.9795,-2320.2158,93.7934,0,0,0,0,100,0),
|
||||
(@path,55,-2207.6965,-2319.8152,93.1684,0,0,0,0,100,0),
|
||||
(@path,56,-2185.574,-2344.3398,94.98741,0,0,0,0,100,0),
|
||||
(@path,57,-2207.6965,-2319.8152,93.1684,0,0,0,0,100,0),
|
||||
(@path,58,-2252.9795,-2320.2158,93.7934,0,0,0,0,100,0),
|
||||
(@path,59,-2286.9407,-2341.9426,93.4555,0,0,0,0,100,0),
|
||||
(@path,60,-2295.2888,-2370.951,92.66499,0,0,0,0,100,0),
|
||||
(@path,61,-2293.4502,-2402.058,93.38322,0,0,0,0,100,0),
|
||||
(@path,62,-2310.5186,-2422.7778,95.587776,0,0,0,0,100,0),
|
||||
(@path,63,-2353.339,-2423.769,95.19796,0,0,0,0,100,0),
|
||||
(@path,64,-2380.417,-2413.0195,92.82902,0,0,0,0,100,0),
|
||||
(@path,65,-2396.1902,-2380.3955,91.791664,0,0,0,0,100,0),
|
||||
(@path,66,-2414.875,-2342.5525,91.83561,0,0,0,0,100,0),
|
||||
(@path,67,-2440.1282,-2314.39,94.61803,0,0,0,0,100,0),
|
||||
(@path,68,-2480.3079,-2292.0088,94.91757,0,0,0,0,100,0),
|
||||
(@path,69,-2522.4128,-2288.3354,95.39027,0,0,0,0,100,0),
|
||||
(@path,70,-2553.0298,-2291.6404,93.56666,0,0,0,0,100,0),
|
||||
(@path,71,-2583.4438,-2317.825,91.791664,0,0,0,0,100,0),
|
||||
(@path,72,-2624.1008,-2319.0713,92.736,0,0,0,0,100,0),
|
||||
(@path,73,-2647.4885,-2312.194,92.01603,0,0,0,0,100,0),
|
||||
(@path,74,-2673.5525,-2282.2383,91.791664,0,0,0,0,100,0),
|
||||
(@path,75,-2681.0037,-2258.5547,91.95255,0,0,0,0,100,0),
|
||||
(@path,76,-2721.4429,-2257.816,91.791664,0,0,0,0,100,0),
|
||||
(@path,77,-2758.5547,-2238.7458,92.954506,0,0,0,0,100,0),
|
||||
(@path,78,-2795.9773,-2209.954,95.784584,0,0,0,0,100,0),
|
||||
(@path,79,-2835.0942,-2182.703,95.2443,0,0,0,0,100,0),
|
||||
(@path,80,-2853.049,-2161.5356,91.791664,0,0,0,0,100,0),
|
||||
(@path,81,-2871.219,-2160.007,92.05509,0,0,0,0,100,0),
|
||||
(@path,82,-2908.1777,-2144.7766,93.2714,0,0,0,0,100,0),
|
||||
(@path,83,-2936.955,-2117.254,91.791664,0,0,0,0,100,0),
|
||||
(@path,84,-2967.4277,-2095.7334,91.791664,0,0,0,0,100,0),
|
||||
(@path,85,-3005.5127,-2109.9685,92.291664,0,0,0,0,100,0),
|
||||
(@path,86,-3050.1245,-2119.8708,93.09464,0,0,0,0,100,0),
|
||||
(@path,87,-3093.5208,-2117.2578,93.19572,0,0,0,0,100,0),
|
||||
(@path,88,-3131.3293,-2093.495,91.81647,0,0,0,0,100,0),
|
||||
(@path,89,-3175.735,-2081.8813,91.791664,0,0,0,0,100,0),
|
||||
(@path,90,-3221.6958,-2091.54,92.918495,0,0,0,0,100,0),
|
||||
(@path,91,-3264.5898,-2110.5752,93.58816,0,0,0,0,100,0),
|
||||
(@path,92,-3305.2717,-2097.2861,91.791664,0,0,0,0,100,0),
|
||||
(@path,93,-3337.5916,-2084.593,91.86515,0,0,0,0,100,0),
|
||||
(@path,94,-3347.3481,-2061.3584,96.55564,0,0,0,0,100,0),
|
||||
(@path,95,-3351.847,-2020.0239,93.34684,0,0,0,0,100,0),
|
||||
(@path,96,-3359.4075,-1987.9889,93.354164,0,0,0,0,100,0),
|
||||
(@path,97,-3377.1729,-1946.9575,91.91544,0,0,0,0,100,0),
|
||||
(@path,98,-3401.6602,-1915.7799,93.66566,0,0,0,0,100,0),
|
||||
(@path,99,-3419.4883,-1883.6552,93.07612,0,0,0,0,100,0),
|
||||
(@path,100,-3447.3694,-1879.2826,94.04059,0,0,0,0,100,0),
|
||||
(@path,101,-3482.7354,-1879.4718,95.54532,0,0,0,0,100,0),
|
||||
(@path,102,-3514.391,-1891.8881,96.05839,0,0,0,0,100,0),
|
||||
(@path,103,-3543.6143,-1922.9417,93.78076,0,0,0,0,100,0),
|
||||
(@path,104,-3574.0989,-1917.8884,94.641045,0,0,0,0,100,0),
|
||||
(@path,105,-3604.3447,-1934.8683,93.6461,0,0,0,0,100,0),
|
||||
(@path,106,-3633.491,-1962.7506,91.96043,0,0,0,0,100,0),
|
||||
(@path,107,-3674.7666,-1972.0784,92.34276,0,0,0,0,100,0),
|
||||
(@path,108,-3718.9587,-1949.9241,94.24338,0,0,0,0,100,0),
|
||||
(@path,109,-3743.7683,-1944.3379,93.25019,0,0,0,0,100,0),
|
||||
(@path,110,-3765.317,-1912.2642,92.659584,0,0,0,0,100,0),
|
||||
(@path,111,-3780.6667,-1879.9966,94.51902,0,0,0,0,100,0),
|
||||
(@path,112,-3802.9849,-1847.3167,94.4449,0,0,0,0,100,0);
|
||||
-- 0x204CB0002003294000001C00001E1E9F .go xyz -3780.6667 -1879.9966 94.51902
|
||||
|
||||
DELETE FROM `creature_formations` WHERE `leaderGUID` IN (45809, 45813, 45817);
|
||||
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
|
||||
(45809, 45809, 0, 0, 512, 0, 0), -- Leader
|
||||
(45809, 45810, 5, 190, 512, 0, 0), -- A
|
||||
(45809, 45811, 5, 170, 512, 0, 0), -- B
|
||||
(45809, 45812, 6, 180, 512, 0, 0), -- C
|
||||
(45813, 45813, 0, 0, 512, 0, 0), -- Leader
|
||||
(45813, 45814, 5, 190, 512, 0, 0), -- A
|
||||
(45813, 45815, 5, 170, 512, 0, 0), -- B
|
||||
(45813, 45816, 6, 180, 512, 0, 0), -- C
|
||||
(45817, 45817, 0, 0, 512, 0, 0), -- Leader
|
||||
(45817, 45818, 5, 170, 512, 0, 0), -- A
|
||||
(45817, 45819, 5, 190, 512, 0, 0), -- B
|
||||
(45817, 45820, 6, 180, 512, 0, 0); -- C
|
||||
@@ -0,0 +1,2 @@
|
||||
-- DB update 2022_06_18_04 -> 2022_06_18_05
|
||||
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 1940) AND (`source_type` = 0) AND (`id` IN (1, 2, 3, 4));
|
||||
@@ -0,0 +1,4 @@
|
||||
-- DB update 2022_06_18_05 -> 2022_06_18_06
|
||||
DELETE FROM `gameobject_loot_template` WHERE (`Entry` = 5000);
|
||||
INSERT INTO `gameobject_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
|
||||
(5000, 13172, 0, 0.0001, 1, 1, 0, 1, 1, 'Premium Siabi Tobacco - Siabi\'s Premium Tobacco');
|
||||
@@ -0,0 +1,4 @@
|
||||
-- DB update 2022_06_18_06 -> 2022_06_18_07
|
||||
-- Update Domesticated Felboar - they should not provide XP, Loot, or be Skinnable as of an exploit fix in 2.4
|
||||
UPDATE `creature_template` SET `lootid` = 0, `skinloot` = 0, `ExperienceModifier` = 0 WHERE `entry` = 21195;
|
||||
DELETE FROM `creature_loot_template` WHERE `entry` = 21195;
|
||||
@@ -0,0 +1,57 @@
|
||||
-- DB update 2022_06_18_07 -> 2022_06_18_08
|
||||
DELETE FROM `creature_summon_groups` WHERE `summonerId` = 15589;
|
||||
INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`) VALUES
|
||||
-- Group 1
|
||||
(15589, 0, 0, 15726, -8603.775391, 1974.709351, 100.220718, 0.0, 2, 300000),
|
||||
(15589, 0, 0, 15726, -8605.348633, 1994.268188, 100.221367, 0.0, 2, 300000),
|
||||
(15589, 0, 0, 15726, -8589.451172, 2012.543823, 100.220688, 0.0, 2, 300000),
|
||||
(15589, 0, 0, 15726, -8563.065430, 2010.912842, 100.220688, 0.0, 2, 300000),
|
||||
(15589, 0, 0, 15726, -8550.451172, 1992.396851, 100.171875, 0.0, 2, 300000),
|
||||
(15589, 0, 0, 15726, -8554.344727, 1972.097046, 100.221184, 0.0, 2, 300000),
|
||||
(15589, 0, 0, 15726, -8565.425781, 1961.392578, 100.220581, 0.0, 2, 300000),
|
||||
(15589, 0, 0, 15726, -8588.680664, 1957.962646, 100.498169, 0.0, 2, 300000),
|
||||
-- Group 2
|
||||
(15589, 0, 1, 15726, -8604.788086, 1977.721191, 100.220673, 0.0, 2, 300000),
|
||||
(15589, 0, 1, 15726, -8604.773438, 1997.835571, 100.220657, 0.0, 2, 300000),
|
||||
(15589, 0, 1, 15726, -8586.697266, 2014.359497, 100.221024, 0.0, 2, 300000),
|
||||
(15589, 0, 1, 15726, -8560.730469, 2009.243042, 100.312027, 0.0, 2, 300000),
|
||||
(15589, 0, 1, 15726, -8549.125977, 1989.693115, 100.218964, 0.0, 2, 300000),
|
||||
(15589, 0, 1, 15726, -8555.000977, 1969.066040, 100.220825, 0.0, 2, 300000),
|
||||
(15589, 0, 1, 15726, -8567.546875, 1959.600464, 100.340576, 0.0, 2, 300000),
|
||||
(15589, 0, 1, 15726, -8591.760742, 1960.183838, 100.220749, 0.0, 2, 300000),
|
||||
-- Group 3
|
||||
(15589, 0, 2, 15726, -8584.177734, 2015.206665, 100.220627, 0.0, 2, 300000),
|
||||
(15589, 0, 2, 15726, -8558.459961, 2007.343140, 100.500259, 0.0, 2, 300000),
|
||||
(15589, 0, 2, 15726, -8548.819336, 1987.051270, 100.219139, 0.0, 2, 300000),
|
||||
(15589, 0, 2, 15726, -8557.414063, 1967.254272, 100.220711, 0.0, 2, 300000),
|
||||
(15589, 0, 2, 15726, -8570.909180, 1958.947632, 100.220642, 0.0, 2, 300000),
|
||||
(15589, 0, 2, 15726, -8594.705078, 1962.332764, 100.220726, 0.0, 2, 300000),
|
||||
(15589, 0, 2, 15726, -8605.216797, 1981.862793, 100.220512, 0.0, 2, 300000),
|
||||
(15589, 0, 2, 15726, -8602.661133, 2000.301636, 100.300171, 0.0, 2, 300000),
|
||||
-- Group 4
|
||||
(15589, 0, 3, 15726, -8574.696289, 1958.381958, 100.220482, 0.0, 2, 300000),
|
||||
(15589, 0, 3, 15726, -8597.281250, 1964.753052, 100.220665, 0.0, 2, 300000),
|
||||
(15589, 0, 3, 15726, -8605.613281, 1984.794800, 100.220833, 0.0, 2, 300000),
|
||||
(15589, 0, 3, 15726, -8601.550781, 2002.827759, 100.411690, 0.0, 2, 300000),
|
||||
(15589, 0, 3, 15726, -8580.916016, 2015.309814, 100.220802, 0.0, 2, 300000),
|
||||
(15589, 0, 3, 15726, -8556.536133, 2004.968018, 100.220840, 0.0, 2, 300000),
|
||||
(15589, 0, 3, 15726, -8549.049805, 1984.366577, 100.220390, 0.0, 2, 300000),
|
||||
(15589, 0, 3, 15726, -8559.099609, 1965.337646, 100.220795, 0.0, 2, 300000),
|
||||
-- Group 5
|
||||
(15589, 0, 4, 15726, -8606.484375, 1987.263062, 100.220650, 0.0, 2, 300000),
|
||||
(15589, 0, 4, 15726, -8598.741211, 2005.753418, 100.220520, 0.0, 2, 300000),
|
||||
(15589, 0, 4, 15726, -8577.381836, 2015.370239, 100.220665, 0.0, 2, 300000),
|
||||
(15589, 0, 4, 15726, -8554.274414, 2001.834106, 100.167274, 0.0, 2, 300000),
|
||||
(15589, 0, 4, 15726, -8550.043945, 1980.844604, 100.218864, 0.0, 2, 300000),
|
||||
(15589, 0, 4, 15726, -8560.641602, 1963.641602, 100.218864, 0.0, 2, 300000),
|
||||
(15589, 0, 4, 15726, -8578.719727, 1957.526001, 100.403954, 0.0, 2, 300000),
|
||||
(15589, 0, 4, 15726, -8599.988281, 1968.158936, 100.220963, 0.0, 2, 300000),
|
||||
-- Group 6
|
||||
(15589, 0, 5, 15726, -8562.926758, 1962.273071, 100.220818, 0.0, 2, 300000),
|
||||
(15589, 0, 5, 15726, -8583.307617, 1956.971558, 100.498611, 0.0, 2, 300000),
|
||||
(15589, 0, 5, 15726, -8601.906250, 1970.630859, 100.263298, 0.0, 2, 300000),
|
||||
(15589, 0, 5, 15726, -8606.078125, 1990.227051, 100.220634, 0.0, 2, 300000),
|
||||
(15589, 0, 5, 15726, -8595.287109, 2009.543457, 100.220711, 0.0, 2, 300000),
|
||||
(15589, 0, 5, 15726, -8573.629883, 2014.623413, 100.220512, 0.0, 2, 300000),
|
||||
(15589, 0, 5, 15726, -8552.320313, 1998.953735, 100.130707, 0.0, 2, 300000),
|
||||
(15589, 0, 5, 15726, -8550.862305, 1978.124878, 100.219307, 0.0, 2, 300000);
|
||||
@@ -0,0 +1,10 @@
|
||||
-- DB update 2022_06_18_08 -> 2022_06_18_09
|
||||
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 11350;
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 11350);
|
||||
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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||
(11350, 0, 0, 0, 4, 0, 30, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurubashi Axe Thrower - On Aggro - Say Line 1'),
|
||||
(11350, 0, 1, 0, 9, 0, 100, 1, 5, 30, 1500, 2000, 0, 11, 22887, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurubashi Axe Thrower - Within 5-30 Range - Cast \'Throw\' (No Repeat)'),
|
||||
(11350, 0, 2, 0, 2, 0, 100, 1, 0, 30, 0, 0, 0, 11, 8269, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurubashi Axe Thrower - Between 0-30% Health - Cast \'Frenzy\' (No Repeat)'),
|
||||
(11350, 0, 3, 0, 2, 0, 100, 1, 0, 30, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurubashi Axe Thrower - Between 0-30% Health - Say Line 0 (No Repeat)'),
|
||||
(11350, 0, 4, 0, 0, 0, 100, 0, 15000, 15000, 25000, 28000, 0, 11, 24018, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurubashi Axe Thrower - In Combat - Cast \'Axe Flurry\'');
|
||||
@@ -0,0 +1,2 @@
|
||||
-- DB update 2022_06_18_09 -> 2022_06_18_10
|
||||
UPDATE `creature_template` SET `mechanic_immune_mask`=`mechanic_immune_mask`&~(16384) WHERE `entry` IN (12265, 12101, 12100, 12076, 11665, 11667, 11669, 11666, 11668, 12099);
|
||||
@@ -0,0 +1,25 @@
|
||||
-- DB update 2022_06_18_10 -> 2022_06_18_11
|
||||
|
||||
UPDATE `quest_template` SET `LogDescription` = 'Talin Keeneye would like you to kill 12 Small Crag Boars.' WHERE `ID` = 183;
|
||||
UPDATE `quest_template` SET `QuestCompletionLog` = 'Return to Orgnil Soulscar in Durotar.' WHERE `ID` = 806;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 6610 WHERE `ID` = 6611;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 6610 WHERE `ID` = 6612;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 8347 WHERE `ID` = 8335;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 9409 WHERE `ID` = 9280;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 9294 WHERE `ID` = 9293;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 8350 WHERE `ID` = 9705;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 0 WHERE `ID` = 11160;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 11559 WHERE `ID` = 11571;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 0 WHERE `ID` = 11662;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 12070 WHERE `ID` = 12249;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 12555 WHERE `ID` = 12598;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 0 WHERE `ID` = 12606;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 0 WHERE `ID` = 12880;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 12932 WHERE `ID` = 12974;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 0 WHERE `ID` = 13005;
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 13718 WHERE `ID` = 13593;
|
||||
UPDATE `quest_template` SET `RewardMoney` = -20000 WHERE `ID` IN(3644,3645,3646,3647);
|
||||
UPDATE `quest_template` SET `RewardItem1` = 23846 WHERE `ID` = 9561;
|
||||
UPDATE `quest_template` SET `RewardAmount1` = 1 WHERE `ID` = 9561;
|
||||
UPDATE `quest_template` SET `RewardItem1` = 28168 WHERE `ID` = 10172;
|
||||
UPDATE `quest_template` SET `RewardAmount1` = 1 WHERE `ID` = 10172;
|
||||
@@ -0,0 +1,10 @@
|
||||
-- DB update 2022_06_18_11 -> 2022_06_18_12
|
||||
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 2624;
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 2624);
|
||||
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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||
(2624, 0, 0, 0, 0, 0, 100, 0, 6000, 12000, 7000, 15000, 0, 11, 5403, 64, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gazban - In Combat - Cast \'Crash of Waves\''),
|
||||
(2624, 0, 1, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gazban - On Just Summoned - Say Line 0'),
|
||||
(2624, 0, 2, 0, 0, 0, 100, 1, 4000, 4000, 4000, 4000, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gazban - In Combat - Say Line 1 (No Repeat)'),
|
||||
(2624, 0, 3, 4, 0, 0, 100, 1, 4000, 4000, 4000, 4000, 0, 11, 5402, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gazban - In Combat - Cast \'Serverside - Gazban Transform\' (No Repeat)'),
|
||||
(2624, 0, 4, 0, 61, 0, 100, 1, 0, 0, 0, 0, 0, 11, 5404, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gazban - In Combat - Cast \'Gazban Water Form\' (No Repeat)');
|
||||
@@ -0,0 +1,2 @@
|
||||
-- DB update 2022_06_18_12 -> 2022_06_18_13
|
||||
UPDATE `creature_template` SET `flags_extra` = `flags_extra`|4194304 WHERE (`entry` = 15163);
|
||||
@@ -0,0 +1,17 @@
|
||||
-- DB update 2022_06_18_13 -> 2022_06_18_14
|
||||
--
|
||||
DELETE FROM `creature_loot_template` WHERE item=6838;
|
||||
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
|
||||
(1111, 6838, 0, 100, 1, 1, 2, 1, 1, 'Leech Stalker - Scorched Spider Fang'),
|
||||
(1111, 6838, 0, 50, 1, 1, 3, 1, 1, 'Leech Stalker - Scorched Spider Fang'),
|
||||
(4040, 6838, 0, 100, 1, 1, 2, 1, 1, 'Cave Stalker - Scorched Spider Fang'),
|
||||
(4040, 6838, 0, 50, 1, 1, 3, 1, 1, 'Cave Stalker - Scorched Spider Fang');
|
||||
|
||||
DELETE FROM `creature_loot_template` WHERE item=6839;
|
||||
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
|
||||
(4031, 6839, 0, 100, 1, 1, 2, 1, 1, 'Fledgling Chimaera - Charred Horn'),
|
||||
(4031, 6839, 0, 34, 1, 1, 3, 1, 1, 'Fledgling Chimaera - Charred Horn'),
|
||||
(4031, 6839, 0, 34, 1, 1, 4, 1, 1, 'Fledgling Chimaera - Charred Horn'),
|
||||
(4032, 6839, 0, 100, 1, 1, 2, 1, 1, 'Young Chimaera - Charred Horn'),
|
||||
(4032, 6839, 0, 34, 1, 1, 3, 1, 1, 'Young Chimaera - Charred Horn'),
|
||||
(4032, 6839, 0, 34, 1, 1, 4, 1, 1, 'Young Chimaera - Charred Horn');
|
||||
@@ -0,0 +1,167 @@
|
||||
-- DB update 2022_06_18_14 -> 2022_06_18_15
|
||||
--
|
||||
-- Mulgore 10618 Gameobjects that need removed before Mulgore can be rebuilt
|
||||
DELETE FROM `gameobject` WHERE `guid` IN (18442, 18443, 18444, 18445, 18446, 18447, 18448, 18449, 18450, 18451, 18452, 18453, 18454, 18455, 85767, 85772, 85882, 85883);
|
||||
|
||||
-- This includes the pools, but there are none
|
||||
|
||||
-- All Mulgore Battered Chest Gameobjects (106318) that exist
|
||||
SET @OGUID := 9838;
|
||||
|
||||
DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+40;
|
||||
INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES
|
||||
-- 0-3
|
||||
(@OGUID+0, 106318, 1, 215, 0, 1, 1, -1057.6275634765625, 465.5982666015625, 23.50528907775878906, 2.024578809738159179, 0, 0, 0.848047256469726562, 0.529920578002929687, 360, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
(@OGUID+1, 106318, 1, 215, 0, 1, 1, -1075.2293701171875, 542.53753662109375, 49.8483428955078125, 4.031712055206298828, 0, 0, -0.90258502960205078, 0.430511653423309326, 360, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
(@OGUID+2, 106318, 1, 215, 0, 1, 1, -1161.16845703125, 529.53985595703125, 28.19378280639648437, 5.235987663269042968, 0, 0, -0.5, 0.866025388240814208, 360, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
(@OGUID+3, 106318, 1, 215, 0, 1, 1, -998.08270263671875, 589.4744873046875, 81.93946075439453125, 2.530723094940185546, 0, 0, 0.953716278076171875, 0.300707906484603881, 360, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
-- 4-7
|
||||
(@OGUID+4, 106318, 1, 215, 0, 1, 1, -546.70684814453125, 72.729278564453125, 52.28420257568359375, 0.802850961685180664, 0, 0, 0.390730857849121093, 0.920504987239837646, 360, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
(@OGUID+5, 106318, 1, 215, 0, 1, 1, -657.78033447265625, 193.8148956298828125, 46.80418014526367187, 0.506144583225250244, 0, 0, 0.250379562377929687, 0.968147754669189453, 360, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
(@OGUID+6, 106318, 1, 215, 0, 1, 1, -715.582275390625, 163.0640716552734375, 43.65098953247070312, 1.256635904312133789, 0, 0, 0.587784767150878906, 0.809017360210418701, 360, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
(@OGUID+7, 106318, 1, 215, 215, 1, 1, -631.74151611328125, 111.4527664184570312, 17.11371040344238281, 1.082102894783020019, 0, 0, 0.51503753662109375, 0.857167601585388183, 360, 255, 1, 0), -- 106318 (Area: 215 - Difficulty: 0)
|
||||
-- 8-9
|
||||
(@OGUID+8, 106318, 1, 215, 0, 1, 1, -826.25250244140625, -36.7276496887207031, -13.1952342987060546, 3.926995515823364257, 0, 0, -0.92387866973876953, 0.38268551230430603, 360, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
(@OGUID+9, 106318, 1, 215, 215, 1, 1, -798.07769775390625, -9.66634082794189453, -13.128173828125, 4.136432647705078125, 0, 0, -0.87881660461425781, 0.477159708738327026, 360, 255, 1, 0), -- 106318 (Area: 215 - Difficulty: 0)
|
||||
-- 10-13
|
||||
(@OGUID+10, 106318, 1, 215, 819, 1, 1, -591.3314208984375, -681.55999755859375, 27.44317245483398437, 5.427974700927734375, 0, 0, -0.41469287872314453, 0.909961462020874023, 360, 255, 1, 0), -- 106318 (Area: 819 - Difficulty: 0)
|
||||
(@OGUID+11, 106318, 1, 215, 819, 1, 1, -665.03692626953125, -787.12469482421875, 43.61326980590820312, 1.431168079376220703, 0, 0, 0.656058311462402343, 0.754710197448730468, 360, 255, 1, 0), -- 106318 (Area: 819 - Difficulty: 0)
|
||||
(@OGUID+12, 106318, 1, 215, 819, 1, 1, -779.68829345703125, -866.58966064453125, 25.97847366333007812, 3.9793548583984375, 0, 0, -0.9135446548461914, 0.406738430261611938, 360, 255, 1, 0), -- 106318 (Area: 819 - Difficulty: 0)
|
||||
(@OGUID+13, 106318, 1, 215, 819, 1, 1, -824.10137939453125, -780.58660888671875, -2.71320295333862304, 4.276057243347167968, 0, 0, -0.84339141845703125, 0.537299633026123046, 360, 255, 1, 0), -- 106318 (Area: 819 - Difficulty: 0)
|
||||
-- 14-17
|
||||
(@OGUID+14, 106318, 1, 215, 360, 1, 1, -1568.312255859375, -1081.0145263671875, 103.8672866821289062, 3.857182979583740234, 0, 0, -0.93667125701904296, 0.350209832191467285, 360, 255, 1, 0), -- 106318 (Area: 360 - Difficulty: 0)
|
||||
(@OGUID+15, 106318, 1, 215, 360, 1, 1, -1585.0709228515625, -1151.2315673828125, 104.118377685546875, 0.122172988951206207, 0, 0, 0.061048507690429687, 0.998134791851043701, 360, 255, 1, 0), -- 106318 (Area: 360 - Difficulty: 0)
|
||||
(@OGUID+16, 106318, 1, 215, 360, 1, 1, -1672.001708984375, -1324.0699462890625, 132.7880859375, 1.343901276588439941, 0, 0, 0.622513771057128906, 0.78260880708694458, 360, 255, 1, 0), -- 106318 (Area: 360 - Difficulty: 0)
|
||||
(@OGUID+17, 106318, 1, 215, 360, 1, 1, -1681.0875244140625, -1218.5963134765625, 127.4188613891601562, 0.453785061836242675, 0, 0, 0.224950790405273437, 0.974370121955871582, 360, 255, 1, 0), -- 106318 (Area: 360 - Difficulty: 0)
|
||||
-- 18-19
|
||||
(@OGUID+18, 106318, 1, 215, 0, 1, 1, -1889.326416015625, -1096.98095703125, 90.32932281494140625, 2.809975385665893554, 0, 0, 0.986285209655761718, 0.165049895644187927, 360, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
(@OGUID+19, 106318, 1, 215, 360, 1, 1, -1925.3721923828125, -1050.7725830078125, 44.04982376098632812, 5.462882041931152343, 0, 0, -0.39874839782714843, 0.917060375213623046, 360, 255, 1, 0), -- 106318 (Area: 360 - Difficulty: 0)
|
||||
-- 20-23
|
||||
(@OGUID+20, 106318, 1, 215, 821, 1, 1, -2625.284423828125, -1390.2613525390625, 24.50350379943847656, 5.724681377410888671, 0, 0, -0.27563667297363281, 0.961261868476867675, 360, 255, 1, 0), -- 106318 (Area: 821 - Difficulty: 0)
|
||||
(@OGUID+21, 106318, 1, 215, 821, 1, 1, -2635.93505859375, -1249.2003173828125, 13.64171695709228515, 2.251473426818847656, 0, 0, 0.902585029602050781, 0.430511653423309326, 360, 255, 1, 0), -- 106318 (Area: 821 - Difficulty: 0)
|
||||
(@OGUID+22, 106318, 1, 215, 821, 1, 1, -2643.494873046875, -1320.986328125, 12.12032413482666015, 0.907570242881774902, 0, 0, 0.438370704650878906, 0.898794233798980712, 360, 255, 1, 0), -- 106318 (Area: 821 - Difficulty: 0)
|
||||
(@OGUID+23, 106318, 1, 215, 821, 1, 1, -2716.833740234375, -1188.42822265625, 16.78433990478515625, 5.078907966613769531, 0, 0, -0.56640625, 0.824126183986663818, 360, 255, 1, 0), -- 106318 (Area: 821 - Difficulty: 0)
|
||||
-- 24-25
|
||||
(@OGUID+24, 106318, 1, 215, 0, 1, 1, -2777.55859375, -691.963134765625, 7.008191108703613281, 3.385940074920654296, 0, 0, -0.99254608154296875, 0.121869951486587524, 360, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
(@OGUID+25, 106318, 1, 215, 0, 1, 1, -2782.115478515625, -707.653564453125, 6.424570083618164062, 2.687806606292724609, 0, 0, 0.974370002746582031, 0.224951311945915222, 180, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
-- 26-27
|
||||
(@OGUID+26, 106318, 1, 215, 0, 1, 1, -2742.504150390625, -445.18304443359375, -3.45379900932312011, 0.122172988951206207, 0, 0, 0.061048507690429687, 0.998134791851043701, 180, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
(@OGUID+27, 106318, 1, 215, 0, 1, 1, -2750.028564453125, -430.93402099609375, -2.93078994750976562, 2.949595451354980468, 0, 0, 0.995395660400390625, 0.095851235091686248, 360, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
-- 28-29
|
||||
(@OGUID+28, 106318, 1, 215, 0, 1, 1, -2402.0634765625, 233.6727142333984375, 49.24333953857421875, 2.809975385665893554, 0, 0, 0.986285209655761718, 0.165049895644187927, 360, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
(@OGUID+29, 106318, 1, 215, 0, 1, 1, -2413.068359375, 221.974609375, 48.83074951171875, 4.956737518310546875, 0, 0, -0.61566066741943359, 0.788011372089385986, 360, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
-- 30-33
|
||||
(@OGUID+30, 106318, 1, 215, 818, 1, 1, -2352.908447265625, 457.480377197265625, 57.6083984375, 3.630291461944580078, 0, 0, -0.97029495239257812, 0.241925001144409179, 360, 255, 1, 0), -- 106318 (Area: 818 - Difficulty: 0)
|
||||
(@OGUID+31, 106318, 1, 215, 818, 1, 1, -2358.603271484375, 379.66888427734375, 64.85495758056640625, 3.43830275535583496, 0, 0, -0.98901557922363281, 0.147811368107795715, 360, 255, 1, 0), -- 106318 (Area: 818 - Difficulty: 0)
|
||||
(@OGUID+32, 106318, 1, 215, 818, 1, 1, -2388.364990234375, 444.8865966796875, 75.9410400390625, 1.151916384696960449, 0, 0, 0.544638633728027343, 0.838670849800109863, 360, 255, 1, 0), -- 106318 (Area: 818 - Difficulty: 0)
|
||||
(@OGUID+33, 106318, 1, 215, 818, 1, 1, -2445.70751953125, 438.708526611328125, 61.7602691650390625, 0.541050612926483154, 0, 0, 0.267237663269042968, 0.96363067626953125, 360, 255, 1, 0), -- 106318 (Area: 818 - Difficulty: 0)
|
||||
-- 34-35
|
||||
(@OGUID+34, 106318, 1, 215, 404, 1, 1, -1893.6497802734375, 353.875457763671875, 107.3605728149414062, 5.672322273254394531, 0, 0, -0.3007049560546875, 0.953717231750488281, 360, 255, 1, 0), -- 106318 (Area: 404 - Difficulty: 0)
|
||||
(@OGUID+35, 106318, 1, 215, 404, 1, 1, -1896.4586181640625, 340.1953125, 105.6117172241210937, 1.291541695594787597, 0, 0, 0.60181427001953125, 0.798636078834533691, 360, 255, 1, 0), -- 106318 (Area: 404 - Difficulty: 0)
|
||||
-- 36-37
|
||||
(@OGUID+36, 106318, 1, 215, 0, 1, 1, -1708.905517578125, 433.57623291015625, 96.52761077880859375, 2.967041015625, 0, 0, 0.996193885803222656, 0.087165042757987976, 360, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
(@OGUID+37, 106318, 1, 215, 0, 1, 1, -1734.919189453125, 420.683441162109375, 97.20781707763671875, 0.27925160527229309, 0, 0, 0.139172554016113281, 0.990268170833587646, 360, 255, 1, 0), -- 106318 (Area: 0 - Difficulty: 0)
|
||||
-- 38-40
|
||||
(@OGUID+38, 106318, 1, 215, 224, 1, 1, -1912.48876953125, -712.5831298828125, 3.573940992355346679, 0.174532130360603332, 0, 0, 0.087155342102050781, 0.996194720268249511, 360, 255, 1, 0), -- 106318 (Area: 224 - Difficulty: 0)
|
||||
(@OGUID+39, 106318, 1, 215, 224, 1, 1, -1922.71533203125, -692.86309814453125, 2.616070032119750976, 6.195919513702392578, 0, 0, -0.04361915588378906, 0.999048233032226562, 360, 255, 1, 0), -- 106318 (Area: 224 - Difficulty: 0)
|
||||
(@OGUID+40, 106318, 1, 215, 224, 1, 1, -1931.8563232421875, -715.7557373046875, 3.48775792121887207, 6.073746204376220703, 0, 0, -0.10452842712402343, 0.994521915912628173, 360, 255, 1, 0); -- 106318 (Area: 224 - Difficulty: 0)
|
||||
|
||||
DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+40;
|
||||
DELETE FROM `pool_template` WHERE `entry` BETWEEN 433 AND 446;
|
||||
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
|
||||
(433, 1, 'Mulgore NW Harpies, Battered Chest 106318');
|
||||
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
|
||||
(@OGUID+0, 433, 0, 'Mulgore NW Harpies Chest 1 of 4'),
|
||||
(@OGUID+1, 433, 0, 'Mulgore NW Harpies Chest 2 of 4'),
|
||||
(@OGUID+2, 433, 0, 'Mulgore NW Harpies Chest 3 of 4'),
|
||||
(@OGUID+3, 433, 0, 'Mulgore NW Harpies Chest 4 of 4');
|
||||
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
|
||||
(434, 1, 'Mulgore N Harpies, Battered Chest 106318');
|
||||
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
|
||||
(@OGUID+4, 434, 0, 'Mulgore N Harpies Chest 1 of 4'),
|
||||
(@OGUID+5, 434, 0, 'Mulgore N Harpies Chest 2 of 4'),
|
||||
(@OGUID+6, 434, 0, 'Mulgore N Harpies Chest 3 of 4'),
|
||||
(@OGUID+7, 434, 0, 'Mulgore N Harpies Chest 4 of 4');
|
||||
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
|
||||
(435, 1, 'Wildmane Water Well, Battered Chest 106318');
|
||||
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
|
||||
(@OGUID+8, 435, 0, 'Mulgore Wildmane Water Well Chest 1 of 2'),
|
||||
(@OGUID+9, 435, 0, 'Mulgore Wildmane Water Well Chest 2 of 2');
|
||||
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
|
||||
(436, 1, 'Mulgore NE Harpies, Battered Chest 106318');
|
||||
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
|
||||
(@OGUID+10, 436, 0, 'Mulgore NE Harpies Chest 1 of 4'),
|
||||
(@OGUID+11, 436, 0, 'Mulgore NE Harpies Chest 2 of 4'),
|
||||
(@OGUID+12, 436, 0, 'Mulgore NE Harpies Chest 3 of 4'),
|
||||
(@OGUID+13, 436, 0, 'Mulgore NE Harpies Chest 4 of 4');
|
||||
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
|
||||
(437, 1, 'Mulgore Venture Co Cave Inside, Battered Chest 106318');
|
||||
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
|
||||
(@OGUID+14, 437, 0, 'Mulgore Venture Co Cave Inside Chest 1 of 4'),
|
||||
(@OGUID+15, 437, 0, 'Mulgore Venture Co Cave Inside Chest 2 of 4'),
|
||||
(@OGUID+16, 437, 0, 'Mulgore Venture Co Cave Inside Chest 3 of 4'),
|
||||
(@OGUID+17, 437, 0, 'Mulgore Venture Co Cave Inside Chest 4 of 4');
|
||||
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
|
||||
(438, 1, 'Mulgore Venture Co Cave Outside, Battered Chest 106318');
|
||||
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
|
||||
(@OGUID+18, 438, 0, 'Mulgore Venture Co Cave Outside Chest 1 of 2'),
|
||||
(@OGUID+19, 438, 0, 'Mulgore Venture Co Cave Outside Chest 2 of 2');
|
||||
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
|
||||
(439, 1, 'Mulgore SE Harpies, Battered Chest 106318');
|
||||
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
|
||||
(@OGUID+20, 439, 0, 'Mulgore SE Harpies Chest 1 of 4'),
|
||||
(@OGUID+21, 439, 0, 'Mulgore SE Harpies Chest 2 of 4'),
|
||||
(@OGUID+22, 439, 0, 'Mulgore SE Harpies Chest 3 of 4'),
|
||||
(@OGUID+23, 439, 0, 'Mulgore SE Harpies Chest 4 of 4');
|
||||
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
|
||||
(440, 1, 'Mulgore East Palemane Gnoll Camp, Battered Chest 106318');
|
||||
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
|
||||
(@OGUID+24, 440, 0, 'Mulgore East Palemane Gnoll Camp Chest 1 of 2'),
|
||||
(@OGUID+25, 440, 0, 'Mulgore East Palemane Gnoll Camp Chest 2 of 2');
|
||||
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
|
||||
(441, 1, 'Mulgore West Palemane Gnoll Camp, Battered Chest 106318');
|
||||
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
|
||||
(@OGUID+26, 441, 0, 'Mulgore West Palemane Gnoll Camp Chest 1 of 2'),
|
||||
(@OGUID+27, 441, 0, 'Mulgore West Palemane Gnoll Camp Chest 2 of 2');
|
||||
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
|
||||
(442, 1, 'Mulgore Gnolls Outside Cave Camp, Battered Chest 106318');
|
||||
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
|
||||
(@OGUID+28, 442, 0, 'Mulgore Gnolls Outside Cave Camp Chest 1 of 2'),
|
||||
(@OGUID+29, 442, 0, 'Mulgore Gnolls Outside Cave Camp Chest 2 of 2');
|
||||
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
|
||||
(443, 1, 'Mulgore Gnoll Cave, Battered Chest 106318');
|
||||
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
|
||||
(@OGUID+30, 443, 0, 'Mulgore Gnoll Cave Chest 1 of 4'),
|
||||
(@OGUID+31, 443, 0, 'Mulgore Gnoll Cave Chest 2 of 4'),
|
||||
(@OGUID+32, 443, 0, 'Mulgore Gnoll Cave Chest 3 of 4'),
|
||||
(@OGUID+33, 443, 0, 'Mulgore Gnoll Cave Chest 4 of 4');
|
||||
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
|
||||
(444, 1, 'Mulgore Dwarven Camp, Battered Chest 106318');
|
||||
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
|
||||
(@OGUID+34, 444, 0, 'Mulgore Dwarven Camp Chest 1 of 2'),
|
||||
(@OGUID+35, 444, 0, 'Mulgore Dwarven Camp Chest 2 of 2');
|
||||
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
|
||||
(445, 1, 'Mulgore Western Harpies, Battered Chest 106318');
|
||||
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
|
||||
(@OGUID+36, 445, 0, 'Mulgore Western Harpies Chest 1 of 2'),
|
||||
(@OGUID+37, 445, 0, 'Mulgore Western Harpies Chest 2 of 2');
|
||||
|
||||
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
|
||||
(446, 1, 'Mulgore Venture Co Caravan, Battered Chest 106318');
|
||||
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
|
||||
(@OGUID+38, 446, 0, 'Mulgore Venture Co Caravan Chest 1 of 3'),
|
||||
(@OGUID+39, 446, 0, 'Mulgore Venture Co Caravan Chest 2 of 3'),
|
||||
(@OGUID+40, 446, 0, 'Mulgore Venture Co Caravan Chest 3 of 3');
|
||||
@@ -0,0 +1,5 @@
|
||||
-- DB update 2022_06_18_15 -> 2022_06_19_00
|
||||
--
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_mandokir_charge';
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(24408, 'spell_mandokir_charge');
|
||||
@@ -0,0 +1,7 @@
|
||||
-- DB update 2022_06_19_00 -> 2022_06_21_00
|
||||
--
|
||||
DELETE FROM `creature_formations` WHERE `leaderGUID` = 49310;
|
||||
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
|
||||
(49310, 49310, 0, 0, 27, 0, 0),
|
||||
(49310, 49311, 0, 0, 27, 0, 0),
|
||||
(49310, 49312, 0, 0, 27, 0, 0);
|
||||
+1
-54
@@ -33,15 +33,12 @@
|
||||
#pragma float_control( precise, off )
|
||||
#endif
|
||||
|
||||
|
||||
namespace G3D {
|
||||
|
||||
bool CollisionDetection::ignoreBool;
|
||||
Vector3 CollisionDetection::ignore;
|
||||
Array<Vector3> CollisionDetection::ignoreArray;
|
||||
|
||||
|
||||
|
||||
Vector3 CollisionDetection::separatingAxisForSolidBoxSolidBox(
|
||||
const int separatingAxisIndex,
|
||||
const Box & box1,
|
||||
@@ -179,7 +176,6 @@ float CollisionDetection::projectedDistanceForSolidBoxSolidBox(
|
||||
return (R - (R0 + R1));
|
||||
}
|
||||
|
||||
|
||||
bool CollisionDetection::parallelAxisForSolidBoxSolidBox(
|
||||
const double* ca,
|
||||
const double epsilon,
|
||||
@@ -196,9 +192,6 @@ bool CollisionDetection::parallelAxisForSolidBoxSolidBox(
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void CollisionDetection::fillSolidBoxSolidBoxInfo(
|
||||
const Box & box1,
|
||||
const Box & box2,
|
||||
@@ -234,8 +227,6 @@ void CollisionDetection::fillSolidBoxSolidBoxInfo(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool CollisionDetection::conservativeBoxBoxTest(
|
||||
const Vector3 & a, const Vector3 & b, const Vector3 & D) {
|
||||
// do a quick bounding sphere test because it is relatively
|
||||
@@ -245,9 +236,6 @@ bool CollisionDetection::conservativeBoxBoxTest(
|
||||
return (D.squaredMagnitude() < square(boxRadius1 + boxRadius2));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool CollisionDetection::fixedSolidBoxIntersectsFixedSolidBox(
|
||||
const Box& box1,
|
||||
const Box& box2,
|
||||
@@ -304,8 +292,6 @@ bool CollisionDetection::fixedSolidBoxIntersectsFixedSolidBox(
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CollisionDetection::closestPointsBetweenLineAndLine(
|
||||
const Line & line1,
|
||||
const Line & line2,
|
||||
@@ -342,8 +328,6 @@ void CollisionDetection::closestPointsBetweenLineAndLine(
|
||||
closest2 = Q0 + (tc * v);
|
||||
}
|
||||
|
||||
|
||||
|
||||
float CollisionDetection::penetrationDepthForFixedBoxFixedBox(
|
||||
const Box& box1,
|
||||
const Box& box2,
|
||||
@@ -548,9 +532,6 @@ float CollisionDetection::penetrationDepthForFixedBoxFixedBox(
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
float CollisionDetection::penetrationDepthForFixedSphereFixedBox(
|
||||
const Sphere& sphere,
|
||||
const Box& box,
|
||||
@@ -573,7 +554,6 @@ float CollisionDetection::penetrationDepthForFixedSphereFixedBox(
|
||||
|
||||
// Find the square of the distance from the sphere to the box
|
||||
|
||||
|
||||
// Distance along each axis from the closest side of the box
|
||||
// to the sphere center. Negative values are *inside* the box.
|
||||
Vector3 distOutsideBox;
|
||||
@@ -760,7 +740,6 @@ ZAXIS:
|
||||
return depth;
|
||||
}
|
||||
|
||||
|
||||
float CollisionDetection::penetrationDepthForFixedSphereFixedSphere(
|
||||
const Sphere& sphereA,
|
||||
const Sphere& sphereB,
|
||||
@@ -784,7 +763,6 @@ float CollisionDetection::penetrationDepthForFixedSphereFixedSphere(
|
||||
return depth;
|
||||
}
|
||||
|
||||
|
||||
float CollisionDetection::penetrationDepthForFixedSphereFixedPlane(
|
||||
const Sphere& sphereA,
|
||||
const Plane& planeB,
|
||||
@@ -809,7 +787,6 @@ float CollisionDetection::penetrationDepthForFixedSphereFixedPlane(
|
||||
return depth;
|
||||
}
|
||||
|
||||
|
||||
float CollisionDetection::penetrationDepthForFixedBoxFixedPlane(
|
||||
const Box& box,
|
||||
const Plane& plane,
|
||||
@@ -843,7 +820,6 @@ float CollisionDetection::penetrationDepthForFixedBoxFixedPlane(
|
||||
return -lowest;
|
||||
}
|
||||
|
||||
|
||||
float CollisionDetection::collisionTimeForMovingPointFixedPlane(
|
||||
const Vector3& point,
|
||||
const Vector3& velocity,
|
||||
@@ -1028,7 +1004,6 @@ float CollisionDetection::collisionTimeForMovingPointFixedSphere(
|
||||
return time;
|
||||
}
|
||||
|
||||
|
||||
float CollisionDetection::collisionTimeForMovingSphereFixedSphere(
|
||||
const Sphere& movingSphere,
|
||||
const Vector3& velocity,
|
||||
@@ -1060,7 +1035,6 @@ float CollisionDetection::collisionTimeForMovingSphereFixedSphere(
|
||||
return time;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
float CollisionDetection::collisionTimeForMovingPointFixedTriangle(
|
||||
const Vector3& point,
|
||||
@@ -1206,7 +1180,6 @@ float CollisionDetection::collisionTimeForMovingPointFixedBox(
|
||||
return bestTime;
|
||||
}
|
||||
|
||||
|
||||
float CollisionDetection::collisionTimeForMovingPointFixedAABox(
|
||||
const Vector3& origin,
|
||||
const Vector3& dir,
|
||||
@@ -1222,7 +1195,6 @@ float CollisionDetection::collisionTimeForMovingPointFixedAABox(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool CollisionDetection::collisionLocationForMovingPointFixedAABox(
|
||||
const Vector3& origin,
|
||||
const Vector3& dir,
|
||||
@@ -1303,8 +1275,6 @@ bool CollisionDetection::collisionLocationForMovingPointFixedAABox(
|
||||
#undef IR
|
||||
}
|
||||
|
||||
|
||||
|
||||
float CollisionDetection::collisionTimeForMovingPointFixedRectangle(
|
||||
const Vector3& point,
|
||||
const Vector3& velocity,
|
||||
@@ -1506,7 +1476,6 @@ static int findRayCapsuleIntersectionAux(
|
||||
return iQuantity;
|
||||
}
|
||||
|
||||
|
||||
/** Used by collisionTimeForMovingPointFixedCapsule.
|
||||
@cite From magic software http://www.magic-software.com/Source/Intersection3D/MgcIntr3DLinCap.cpp
|
||||
|
||||
@@ -1585,7 +1554,6 @@ float CollisionDetection::collisionTimeForMovingPointFixedCapsule(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
float CollisionDetection::collisionTimeForMovingSphereFixedPlane(
|
||||
const Sphere& sphere,
|
||||
const Vector3& velocity,
|
||||
@@ -1631,7 +1599,6 @@ float CollisionDetection::collisionTimeForMovingSphereFixedPlane(
|
||||
|
||||
}
|
||||
|
||||
|
||||
float CollisionDetection::collisionTimeForMovingSphereFixedTriangle
|
||||
(const Sphere& sphere,
|
||||
const Vector3& velocity,
|
||||
@@ -1746,7 +1713,6 @@ float CollisionDetection::collisionTimeForMovingSphereFixedTriangle
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
float CollisionDetection::collisionTimeForMovingSphereFixedRectangle(
|
||||
const Sphere& sphere,
|
||||
const Vector3& velocity,
|
||||
@@ -1786,7 +1752,6 @@ float CollisionDetection::collisionTimeForMovingSphereFixedRectangle(
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
float CollisionDetection::collisionTimeForMovingSphereFixedBox(
|
||||
const Sphere& sphere,
|
||||
const Vector3& velocity,
|
||||
@@ -1822,7 +1787,6 @@ float CollisionDetection::collisionTimeForMovingSphereFixedBox(
|
||||
return bestTime;
|
||||
}
|
||||
|
||||
|
||||
float CollisionDetection::collisionTimeForMovingSphereFixedCapsule(
|
||||
const Sphere& sphere,
|
||||
const Vector3& velocity,
|
||||
@@ -1846,7 +1810,6 @@ float CollisionDetection::collisionTimeForMovingSphereFixedCapsule(
|
||||
return time;
|
||||
}
|
||||
|
||||
|
||||
Vector3 CollisionDetection::bounceDirection(
|
||||
const Sphere& sphere,
|
||||
const Vector3& velocity,
|
||||
@@ -1870,7 +1833,6 @@ Vector3 CollisionDetection::bounceDirection(
|
||||
return direction - 2.0 * normal * normal.dot(direction);
|
||||
}
|
||||
|
||||
|
||||
Vector3 CollisionDetection::slideDirection(
|
||||
const Sphere& sphere,
|
||||
const Vector3& velocity,
|
||||
@@ -1885,7 +1847,6 @@ Vector3 CollisionDetection::slideDirection(
|
||||
return direction - normal * normal.dot(direction);
|
||||
}
|
||||
|
||||
|
||||
Vector3 CollisionDetection::closestPointOnLineSegment(
|
||||
const Vector3& v0,
|
||||
const Vector3& v1,
|
||||
@@ -1931,7 +1892,6 @@ Vector3 CollisionDetection::closestPointOnLineSegment(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Vector3 CollisionDetection::closestPointOnTrianglePerimeter(
|
||||
const Vector3& v0,
|
||||
const Vector3& v1,
|
||||
@@ -1951,7 +1911,6 @@ Vector3 CollisionDetection::closestPointOnTrianglePerimeter(
|
||||
return closestPointOnTrianglePerimeter(v, edgeDirection, edgeLength, point, edgeIndex);
|
||||
}
|
||||
|
||||
|
||||
Vector3 CollisionDetection::closestPointOnTrianglePerimeter(
|
||||
const Vector3 v[3],
|
||||
const Vector3 edgeDirection[3],
|
||||
@@ -2005,7 +1964,6 @@ Vector3 CollisionDetection::closestPointOnTrianglePerimeter(
|
||||
return r[edgeIndex];
|
||||
}
|
||||
|
||||
|
||||
bool CollisionDetection::isPointInsideTriangle(
|
||||
const Vector3& v0,
|
||||
const Vector3& v1,
|
||||
@@ -2082,7 +2040,6 @@ bool CollisionDetection::isPointInsideTriangle(
|
||||
return (b[2] >= 0.0f) && (b[2] <= 1.0f);
|
||||
}
|
||||
|
||||
|
||||
bool CollisionDetection::isPointInsideRectangle(
|
||||
const Vector3& v0,
|
||||
const Vector3& v1,
|
||||
@@ -2095,7 +2052,6 @@ bool CollisionDetection::isPointInsideRectangle(
|
||||
isPointInsideTriangle(v2, v3, v0, normal, point);
|
||||
}
|
||||
|
||||
|
||||
Vector3 CollisionDetection::closestPointToRectanglePerimeter(
|
||||
const Vector3& v0,
|
||||
const Vector3& v1,
|
||||
@@ -2144,7 +2100,6 @@ Vector3 CollisionDetection::closestPointToRectanglePerimeter(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Vector3 CollisionDetection::closestPointToRectangle(
|
||||
const Vector3& v0,
|
||||
const Vector3& v1,
|
||||
@@ -2168,7 +2123,6 @@ Vector3 CollisionDetection::closestPointToRectangle(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool CollisionDetection::fixedSolidSphereIntersectsFixedSolidSphere(
|
||||
const Sphere& sphere1,
|
||||
const Sphere& sphere2) {
|
||||
@@ -2176,7 +2130,6 @@ bool CollisionDetection::fixedSolidSphereIntersectsFixedSolidSphere(
|
||||
return (sphere1.center - sphere2.center).squaredMagnitude() < square(sphere1.radius + sphere2.radius);
|
||||
}
|
||||
|
||||
|
||||
bool CollisionDetection::fixedSolidSphereIntersectsFixedSolidBox(
|
||||
const Sphere& sphere,
|
||||
const Box& box) {
|
||||
@@ -2203,7 +2156,6 @@ bool CollisionDetection::fixedSolidSphereIntersectsFixedSolidBox(
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool CollisionDetection::movingSpherePassesThroughFixedBox(
|
||||
const Sphere& sphere,
|
||||
const Vector3& velocity,
|
||||
@@ -2221,7 +2173,6 @@ bool CollisionDetection::movingSpherePassesThroughFixedBox(
|
||||
return (collisionTimeForMovingSphereFixedBox(sphere, velocity, box, dummy1, dummy2) < timeLimit);
|
||||
}
|
||||
|
||||
|
||||
bool CollisionDetection::movingSpherePassesThroughFixedSphere(
|
||||
const Sphere& sphere,
|
||||
const Vector3& velocity,
|
||||
@@ -2240,8 +2191,6 @@ bool CollisionDetection::movingSpherePassesThroughFixedSphere(
|
||||
return (collisionTimeForMovingPointFixedSphere(sphere.center, velocity, bigFixed, dummy1, dummy2) < timeLimit);
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool CollisionDetection::fixedSolidSphereIntersectsFixedTriangle(
|
||||
const Sphere& sphere,
|
||||
const Triangle& triangle) {
|
||||
@@ -2272,9 +2221,8 @@ bool CollisionDetection::fixedSolidSphereIntersectsFixedTriangle(
|
||||
return ((v - sphere.center).squaredLength() <= square(sphere.radius));
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// AABB-triangle overlap test code based on Tomas Akenine-M�öller's
|
||||
// AABB-triangle overlap test code based on Tomas Akenine-Möller's
|
||||
// http://www.cs.lth.se/home/Tomas_Akenine_Moller/code/tribox3.txt
|
||||
// Ported 2008-12-28
|
||||
|
||||
@@ -2452,7 +2400,6 @@ bool CollisionDetection::fixedSolidBoxIntersectsFixedTriangle(
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
} // namespace
|
||||
|
||||
#ifdef _MSC_VER
|
||||
|
||||
@@ -215,7 +215,7 @@ void npc_escortAI::EnterEvadeMode(EvadeReason /*why*/)
|
||||
{
|
||||
me->GetMotionMaster()->MoveTargetedHome();
|
||||
if (HasImmuneToNPCFlags)
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToNPC(true);
|
||||
Reset();
|
||||
}
|
||||
}
|
||||
@@ -497,10 +497,10 @@ void npc_escortAI::Start(bool isActiveAttacker /* = true*/, bool run /* = false
|
||||
|
||||
//disable npcflags
|
||||
me->ReplaceAllNpcFlags(UNIT_NPC_FLAG_NONE);
|
||||
if (me->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC))
|
||||
if (me->IsImmuneToNPC())
|
||||
{
|
||||
HasImmuneToNPCFlags = true;
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToNPC(false);
|
||||
}
|
||||
|
||||
LOG_DEBUG("scripts.ai", "EscortAI started with {} waypoints. ActiveAttacker = {}, Run = {}, PlayerGUID = {}",
|
||||
|
||||
@@ -132,7 +132,7 @@ struct ArenaTeamStats
|
||||
uint32 Rank;
|
||||
};
|
||||
|
||||
#define MAX_ARENA_SLOT 3 // 0..2 slots
|
||||
#define MAX_ARENA_SLOT 4 // 0..2 slots
|
||||
|
||||
class ArenaTeam
|
||||
{
|
||||
|
||||
@@ -197,3 +197,65 @@ void Corpse::ResetGhostTime()
|
||||
{
|
||||
m_time = GameTime::GetGameTime().count();
|
||||
}
|
||||
|
||||
void Corpse::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const
|
||||
{
|
||||
if (!target)
|
||||
return;
|
||||
|
||||
ByteBuffer fieldBuffer;
|
||||
UpdateMask updateMask;
|
||||
updateMask.SetCount(m_valuesCount);
|
||||
|
||||
uint32* flags = nullptr;
|
||||
uint32 visibleFlag = GetUpdateFieldData(target, flags);
|
||||
|
||||
for (uint16 index = 0; index < m_valuesCount; ++index)
|
||||
{
|
||||
if (_fieldNotifyFlags & flags[index] || ((updateType == UPDATETYPE_VALUES ? _changesMask.GetBit(index) : m_uint32Values[index]) && (flags[index] & visibleFlag)))
|
||||
{
|
||||
updateMask.SetBit(index);
|
||||
|
||||
if (index == CORPSE_FIELD_BYTES_1 || index == CORPSE_FIELD_BYTES_2)
|
||||
{
|
||||
Player* owner = ObjectAccessor::GetPlayer(*this, GetOwnerGUID());
|
||||
if (owner && owner != target && sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && owner->IsInRaidWith(target) && owner->GetTeamId() != target->GetTeamId())
|
||||
{
|
||||
uint32 playerBytes = target->GetUInt32Value(PLAYER_BYTES);
|
||||
uint32 playerBytes2 = target->GetUInt32Value(PLAYER_BYTES_2);
|
||||
|
||||
uint8 race = target->getRace();
|
||||
uint8 skin = (uint8)(playerBytes);
|
||||
uint8 face = (uint8)(playerBytes >> 8);
|
||||
uint8 hairstyle = (uint8)(playerBytes >> 16);
|
||||
uint8 haircolor = (uint8)(playerBytes >> 24);
|
||||
uint8 facialhair = (uint8)(playerBytes2);
|
||||
|
||||
uint32 corpseBytes1 = ((0x00) | (race << 8) | (target->GetByteValue(PLAYER_BYTES_3, 0) << 16) | (skin << 24));
|
||||
uint32 corpseBytes2 = ((face) | (hairstyle << 8) | (haircolor << 16) | (facialhair << 24));
|
||||
|
||||
if (index == CORPSE_FIELD_BYTES_1)
|
||||
{
|
||||
fieldBuffer << corpseBytes1;
|
||||
}
|
||||
else
|
||||
{
|
||||
fieldBuffer << corpseBytes2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fieldBuffer << m_uint32Values[index];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fieldBuffer << m_uint32Values[index];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*data << uint8(updateMask.GetBlockCount());
|
||||
updateMask.AppendToPacket(data);
|
||||
data->append(fieldBuffer);
|
||||
}
|
||||
|
||||
@@ -54,6 +54,8 @@ public:
|
||||
void AddToWorld() override;
|
||||
void RemoveFromWorld() override;
|
||||
|
||||
void BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const override;
|
||||
|
||||
bool Create(ObjectGuid::LowType guidlow);
|
||||
bool Create(ObjectGuid::LowType guidlow, Player* owner);
|
||||
|
||||
|
||||
@@ -215,13 +215,13 @@ bool TemporaryThreatModifierEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
|
||||
return true;
|
||||
}
|
||||
|
||||
Creature::Creature(bool isWorldObject): Unit(isWorldObject), MovableMapObject(), m_groupLootTimer(0), lootingGroupLowGUID(0), m_PlayerDamageReq(0), m_lootRecipientGroup(0),
|
||||
Creature::Creature(bool isWorldObject): Unit(isWorldObject), MovableMapObject(), m_groupLootTimer(0), lootingGroupLowGUID(0), m_lootRecipientGroup(0),
|
||||
m_corpseRemoveTime(0), m_respawnTime(0), m_respawnDelay(300), m_corpseDelay(60), m_wanderDistance(0.0f), m_boundaryCheckTime(2500),
|
||||
m_transportCheckTimer(1000), lootPickPocketRestoreTime(0), m_reactState(REACT_AGGRESSIVE), m_defaultMovementType(IDLE_MOTION_TYPE),
|
||||
m_spawnId(0), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false),
|
||||
m_AlreadySearchedAssistance(false), m_regenHealth(true), m_AI_locked(false), m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL), m_originalEntry(0), m_moveInLineOfSightDisabled(false), m_moveInLineOfSightStrictlyDisabled(false),
|
||||
m_homePosition(), m_transportHomePosition(), m_creatureInfo(nullptr), m_creatureData(nullptr), m_detectionDistance(20.0f), m_waypointID(0), m_path_id(0), m_formation(nullptr), _lastDamagedTime(nullptr), m_cannotReachTimer(0),
|
||||
_isMissingSwimmingFlagOutOfCombat(false), m_assistanceTimer(0)
|
||||
m_homePosition(), m_transportHomePosition(), m_creatureInfo(nullptr), m_creatureData(nullptr), m_detectionDistance(20.0f), m_waypointID(0), m_path_id(0), m_formation(nullptr), _lastDamagedTime(nullptr), m_cannotReachTarget(false), m_cannotReachTimer(0),
|
||||
_isMissingSwimmingFlagOutOfCombat(false), m_assistanceTimer(0), _playerDamageReq(0), _damagedByPlayer(false)
|
||||
{
|
||||
m_regenTimer = CREATURE_REGEN_INTERVAL;
|
||||
m_valuesCount = UNIT_END;
|
||||
@@ -526,7 +526,7 @@ bool Creature::UpdateEntry(uint32 Entry, const CreatureData* data, bool changele
|
||||
|
||||
uint32 previousHealth = GetHealth();
|
||||
uint32 previousMaxHealth = GetMaxHealth();
|
||||
uint32 previousPlayerDamageReq = m_PlayerDamageReq;
|
||||
uint32 previousPlayerDamageReq = _playerDamageReq;
|
||||
|
||||
SelectLevel(changelevel);
|
||||
if (previousHealth > 0)
|
||||
@@ -535,11 +535,11 @@ bool Creature::UpdateEntry(uint32 Entry, const CreatureData* data, bool changele
|
||||
|
||||
if (previousMaxHealth && previousMaxHealth > GetMaxHealth())
|
||||
{
|
||||
m_PlayerDamageReq = (uint32)(previousPlayerDamageReq * GetMaxHealth() / previousMaxHealth);
|
||||
_playerDamageReq = (uint32)(previousPlayerDamageReq * GetMaxHealth() / previousMaxHealth);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_PlayerDamageReq = previousPlayerDamageReq;
|
||||
_playerDamageReq = previousPlayerDamageReq;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1831,14 +1831,14 @@ bool Creature::CanStartAttack(Unit const* who) const
|
||||
return false;
|
||||
|
||||
// This set of checks is should be done only for creatures
|
||||
if ((HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC) && who->GetTypeId() != TYPEID_PLAYER) || // flag is valid only for non player characters
|
||||
(HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC) && who->GetTypeId() == TYPEID_PLAYER)) // immune to PC and target is a player, return false
|
||||
if ((IsImmuneToNPC() && who->GetTypeId() != TYPEID_PLAYER) || // flag is valid only for non player characters
|
||||
(IsImmuneToPC() && who->GetTypeId() == TYPEID_PLAYER)) // immune to PC and target is a player, return false
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Unit* owner = who->GetOwner())
|
||||
if (owner->GetTypeId() == TYPEID_PLAYER && HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC)) // immune to PC and target has player owner
|
||||
if (owner->GetTypeId() == TYPEID_PLAYER && IsImmuneToPC()) // immune to PC and target has player owner
|
||||
return false;
|
||||
|
||||
// Do not attack non-combat pets
|
||||
@@ -2369,7 +2369,7 @@ bool Creature::CanAssistTo(Unit const* u, Unit const* enemy, bool checkfaction /
|
||||
if (IsCivilian())
|
||||
return false;
|
||||
|
||||
if (HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC))
|
||||
if (HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE) || IsImmuneToNPC())
|
||||
return false;
|
||||
|
||||
// skip fighting creature
|
||||
@@ -3578,3 +3578,30 @@ void Creature::ModifyThreatPercentTemp(Unit* victim, int32 percent, Milliseconds
|
||||
m_Events.AddEvent(pEvent, m_Events.CalculateTime(duration.count()));
|
||||
}
|
||||
}
|
||||
|
||||
bool Creature::IsDamageEnoughForLootingAndReward() const
|
||||
{
|
||||
return (m_creatureInfo->flags_extra & CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ) || (_playerDamageReq == 0 && _damagedByPlayer);
|
||||
}
|
||||
|
||||
void Creature::LowerPlayerDamageReq(uint32 unDamage, bool damagedByPlayer /*= true*/)
|
||||
{
|
||||
if (_playerDamageReq)
|
||||
_playerDamageReq > unDamage ? _playerDamageReq -= unDamage : _playerDamageReq = 0;
|
||||
|
||||
if (!_damagedByPlayer)
|
||||
{
|
||||
_damagedByPlayer = damagedByPlayer;
|
||||
}
|
||||
}
|
||||
|
||||
void Creature::ResetPlayerDamageReq()
|
||||
{
|
||||
_playerDamageReq = GetHealth() / 2;
|
||||
_damagedByPlayer = false;
|
||||
}
|
||||
|
||||
uint32 Creature::GetPlayerDamageReq() const
|
||||
{
|
||||
return _playerDamageReq;
|
||||
}
|
||||
|
||||
@@ -340,14 +340,10 @@ public:
|
||||
|
||||
void SetDisableReputationGain(bool disable) { DisableReputationGain = disable; }
|
||||
[[nodiscard]] bool IsReputationGainDisabled() const { return DisableReputationGain; }
|
||||
[[nodiscard]] bool IsDamageEnoughForLootingAndReward() const { return (m_creatureInfo->flags_extra & CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ) || (m_PlayerDamageReq == 0); }
|
||||
void LowerPlayerDamageReq(uint32 unDamage)
|
||||
{
|
||||
if (m_PlayerDamageReq)
|
||||
m_PlayerDamageReq > unDamage ? m_PlayerDamageReq -= unDamage : m_PlayerDamageReq = 0;
|
||||
}
|
||||
void ResetPlayerDamageReq() { m_PlayerDamageReq = GetHealth() / 2; }
|
||||
uint32 m_PlayerDamageReq;
|
||||
[[nodiscard]] bool IsDamageEnoughForLootingAndReward() const;
|
||||
void LowerPlayerDamageReq(uint32 unDamage, bool damagedByPlayer = true);
|
||||
void ResetPlayerDamageReq();
|
||||
[[nodiscard]] uint32 GetPlayerDamageReq() const;
|
||||
|
||||
[[nodiscard]] uint32 GetOriginalEntry() const { return m_originalEntry; }
|
||||
void SetOriginalEntry(uint32 entry) { m_originalEntry = entry; }
|
||||
@@ -468,6 +464,8 @@ private:
|
||||
|
||||
uint32 m_assistanceTimer;
|
||||
|
||||
uint32 _playerDamageReq;
|
||||
bool _damagedByPlayer;
|
||||
};
|
||||
|
||||
class AssistDelayEvent : public BasicEvent
|
||||
|
||||
@@ -270,6 +270,11 @@ void CreatureGroup::MemberEvaded(Creature* member)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (itr.second.HasGroupFlag(std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_DONT_RESPAWN_LEADER_ON_EVADE)) && pMember == m_leader)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
pMember->Respawn();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,10 +28,11 @@ class CreatureGroup;
|
||||
|
||||
enum class GroupAIFlags : uint16
|
||||
{
|
||||
GROUP_AI_FLAG_MEMBER_ASSIST_LEADER = 0x001,
|
||||
GROUP_AI_FLAG_LEADER_ASSIST_MEMBER = 0x002,
|
||||
GROUP_AI_FLAG_EVADE_TOGETHER = 0x004,
|
||||
GROUP_AI_FLAG_RESPAWN_ON_EVADE = 0x008,
|
||||
GROUP_AI_FLAG_MEMBER_ASSIST_LEADER = 0x001,
|
||||
GROUP_AI_FLAG_LEADER_ASSIST_MEMBER = 0x002,
|
||||
GROUP_AI_FLAG_EVADE_TOGETHER = 0x004,
|
||||
GROUP_AI_FLAG_RESPAWN_ON_EVADE = 0x008,
|
||||
GROUP_AI_FLAG_DONT_RESPAWN_LEADER_ON_EVADE = 0x010,
|
||||
//GROUP_AI_FLAG_UNK3 = 0x010,
|
||||
//GROUP_AI_FLAG_UNK4 = 0x020,
|
||||
//GROUP_AI_FLAG_UNK5 = 0x040,
|
||||
|
||||
@@ -2089,7 +2089,7 @@ void GameObject::CastSpell(Unit* target, uint32 spellId)
|
||||
trigger->SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP);
|
||||
|
||||
// xinef: Remove Immunity flags
|
||||
trigger->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
trigger->SetImmuneToNPC(false);
|
||||
// xinef: set proper orientation, fixes cast against stealthed targets
|
||||
if (target)
|
||||
trigger->SetInFront(target);
|
||||
|
||||
@@ -183,46 +183,64 @@ bool ItemCanGoIntoBag(ItemTemplate const* pProto, ItemTemplate const* pBagProto)
|
||||
switch (pBagProto->Class)
|
||||
{
|
||||
case ITEM_CLASS_CONTAINER:
|
||||
switch (pBagProto->SubClass)
|
||||
{
|
||||
if (pBagProto->SubClass == ITEM_SUBCLASS_CONTAINER)
|
||||
{
|
||||
case ITEM_SUBCLASS_CONTAINER:
|
||||
return true;
|
||||
case ITEM_SUBCLASS_SOUL_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_SOUL_SHARDS))
|
||||
return false;
|
||||
return true;
|
||||
case ITEM_SUBCLASS_HERB_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_HERBS))
|
||||
return false;
|
||||
return true;
|
||||
case ITEM_SUBCLASS_ENCHANTING_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_ENCHANTING_SUPP))
|
||||
return false;
|
||||
return true;
|
||||
case ITEM_SUBCLASS_MINING_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_MINING_SUPP))
|
||||
return false;
|
||||
return true;
|
||||
case ITEM_SUBCLASS_ENGINEERING_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_ENGINEERING_SUPP))
|
||||
return false;
|
||||
return true;
|
||||
case ITEM_SUBCLASS_GEM_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_GEMS))
|
||||
return false;
|
||||
return true;
|
||||
case ITEM_SUBCLASS_LEATHERWORKING_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_LEATHERWORKING_SUPP))
|
||||
return false;
|
||||
return true;
|
||||
case ITEM_SUBCLASS_INSCRIPTION_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_INSCRIPTION_SUPP))
|
||||
return false;
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pProto->Class == ITEM_CLASS_CONTAINER)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (pBagProto->SubClass)
|
||||
{
|
||||
case ITEM_SUBCLASS_SOUL_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_SOUL_SHARDS))
|
||||
return false;
|
||||
return true;
|
||||
case ITEM_SUBCLASS_HERB_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_HERBS))
|
||||
return false;
|
||||
return true;
|
||||
case ITEM_SUBCLASS_ENCHANTING_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_ENCHANTING_SUPP))
|
||||
return false;
|
||||
return true;
|
||||
case ITEM_SUBCLASS_MINING_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_MINING_SUPP))
|
||||
return false;
|
||||
return true;
|
||||
case ITEM_SUBCLASS_ENGINEERING_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_ENGINEERING_SUPP))
|
||||
return false;
|
||||
return true;
|
||||
case ITEM_SUBCLASS_GEM_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_GEMS))
|
||||
return false;
|
||||
return true;
|
||||
case ITEM_SUBCLASS_LEATHERWORKING_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_LEATHERWORKING_SUPP))
|
||||
return false;
|
||||
return true;
|
||||
case ITEM_SUBCLASS_INSCRIPTION_CONTAINER:
|
||||
if (!(pProto->BagFamily & BAG_FAMILY_MASK_INSCRIPTION_SUPP))
|
||||
return false;
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
case ITEM_CLASS_QUIVER:
|
||||
{
|
||||
if (pProto->Class == ITEM_CLASS_QUIVER)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (pBagProto->SubClass)
|
||||
{
|
||||
case ITEM_SUBCLASS_QUIVER:
|
||||
@@ -236,7 +254,9 @@ bool ItemCanGoIntoBag(ItemTemplate const* pProto, ItemTemplate const* pBagProto)
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -2643,12 +2643,13 @@ void Player::InitStatsForLevel(bool reapplyMods)
|
||||
|
||||
// cleanup unit flags (will be re-applied if need at aura load).
|
||||
RemoveFlag(UNIT_FIELD_FLAGS,
|
||||
UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NOT_ATTACKABLE_1 |
|
||||
UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_LOOTING |
|
||||
UNIT_FLAG_PET_IN_COMBAT | UNIT_FLAG_SILENCED | UNIT_FLAG_PACIFIED |
|
||||
UNIT_FLAG_STUNNED | UNIT_FLAG_IN_COMBAT | UNIT_FLAG_DISARMED |
|
||||
UNIT_FLAG_CONFUSED | UNIT_FLAG_FLEEING | UNIT_FLAG_NOT_SELECTABLE |
|
||||
UNIT_FLAG_SKINNABLE | UNIT_FLAG_MOUNT | UNIT_FLAG_TAXI_FLIGHT );
|
||||
UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NOT_ATTACKABLE_1 |
|
||||
UNIT_FLAG_LOOTING | UNIT_FLAG_PET_IN_COMBAT | UNIT_FLAG_SILENCED |
|
||||
UNIT_FLAG_PACIFIED | UNIT_FLAG_STUNNED | UNIT_FLAG_IN_COMBAT |
|
||||
UNIT_FLAG_DISARMED | UNIT_FLAG_CONFUSED | UNIT_FLAG_FLEEING |
|
||||
UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_SKINNABLE | UNIT_FLAG_MOUNT |
|
||||
UNIT_FLAG_TAXI_FLIGHT);
|
||||
SetImmuneToAll(false);
|
||||
SetUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED); // must be set
|
||||
|
||||
SetUnitFlag2(UNIT_FLAG2_REGENERATE_POWER);// must be set
|
||||
|
||||
@@ -1000,7 +1000,11 @@ uint32 Unit::DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage
|
||||
victim->ToCreature()->SetLootRecipient(attacker);
|
||||
|
||||
if (!attacker || attacker->IsControlledByPlayer() || attacker->IsCreatedByPlayer())
|
||||
victim->ToCreature()->LowerPlayerDamageReq(health < damage ? health : damage);
|
||||
{
|
||||
uint32 unDamage = health < damage ? health : damage;
|
||||
bool damagedByPlayer = unDamage && attacker && attacker->m_movedByPlayer != nullptr;
|
||||
victim->ToCreature()->LowerPlayerDamageReq(unDamage, damagedByPlayer);
|
||||
}
|
||||
}
|
||||
|
||||
if (health <= damage)
|
||||
@@ -3867,7 +3871,11 @@ bool Unit::isInAccessiblePlaceFor(Creature const* c) const
|
||||
return false;
|
||||
}
|
||||
|
||||
if (IsInWater())
|
||||
LiquidStatus liquidStatus = GetLiquidData().Status;
|
||||
bool isInWater = (liquidStatus & MAP_LIQUID_STATUS_SWIMMING) != 0;
|
||||
|
||||
// In water or jumping in water
|
||||
if (isInWater || (liquidStatus == LIQUID_MAP_ABOVE_WATER && (IsFalling() || (ToPlayer() && ToPlayer()->IsFalling()))))
|
||||
{
|
||||
return c->CanEnterWater();
|
||||
}
|
||||
@@ -13045,6 +13053,24 @@ void Unit::SetInCombatWith(Unit* enemy, uint32 duration)
|
||||
SetInCombatState(false, enemy, duration);
|
||||
}
|
||||
|
||||
void Unit::SetImmuneToPC(bool apply, bool keepCombat)
|
||||
{
|
||||
(void)keepCombat;
|
||||
if (apply)
|
||||
SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
else
|
||||
RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
}
|
||||
|
||||
void Unit::SetImmuneToNPC(bool apply, bool keepCombat)
|
||||
{
|
||||
(void)keepCombat;
|
||||
if (apply)
|
||||
SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
else
|
||||
RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
}
|
||||
|
||||
void Unit::CombatStart(Unit* victim, bool initialAggro)
|
||||
{
|
||||
// Xinef: Dont allow to start combat with triggers
|
||||
@@ -13158,8 +13184,8 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy, uint32 duration)
|
||||
return;
|
||||
|
||||
// xinef: if we somehow engage in combat (scripts, dunno) with player, remove this flag so he can fight back
|
||||
if (GetTypeId() == TYPEID_UNIT && enemy && HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC) && enemy->GetCharmerOrOwnerPlayerOrPlayerItself())
|
||||
RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); // unit has engaged in combat, remove immunity so players can fight back
|
||||
if (GetTypeId() == TYPEID_UNIT && enemy && IsImmuneToPC() && enemy->GetCharmerOrOwnerPlayerOrPlayerItself())
|
||||
SetImmuneToPC(true); // unit has engaged in combat, remove immunity so players can fight back
|
||||
|
||||
if (IsInCombat())
|
||||
return;
|
||||
@@ -13225,7 +13251,7 @@ void Unit::ClearInCombat()
|
||||
if (Creature* creature = ToCreature())
|
||||
{
|
||||
if (creature->GetCreatureTemplate() && creature->GetCreatureTemplate()->unit_flags & UNIT_FLAG_IMMUNE_TO_PC)
|
||||
SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); // set immunity state to the one from db on evade
|
||||
SetImmuneToPC(true); // set immunity state to the one from db on evade
|
||||
|
||||
ClearUnitState(UNIT_STATE_ATTACK_PLAYER);
|
||||
if (HasDynamicFlag(UNIT_DYNFLAG_TAPPED))
|
||||
@@ -13269,7 +13295,7 @@ bool Unit::isTargetableForAttack(bool checkFakeDeath, Unit const* byWho) const
|
||||
if (HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE))
|
||||
return false;
|
||||
|
||||
if (HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC) && byWho && byWho->GetCharmerOrOwnerPlayerOrPlayerItself())
|
||||
if (IsImmuneToPC() && byWho && byWho->GetCharmerOrOwnerPlayerOrPlayerItself())
|
||||
return false;
|
||||
|
||||
if (GetTypeId() == TYPEID_PLAYER && ToPlayer()->IsGameMaster())
|
||||
@@ -13324,11 +13350,11 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo
|
||||
}
|
||||
// check flags
|
||||
if (target->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_TAXI_FLIGHT | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_NON_ATTACKABLE_2)
|
||||
|| (!HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && target->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC))
|
||||
|| (!target->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC))
|
||||
|| (HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && target->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC))
|
||||
|| (!HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && target->IsImmuneToNPC())
|
||||
|| (!target->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && IsImmuneToNPC())
|
||||
|| (HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && target->IsImmuneToPC())
|
||||
// check if this is a world trigger cast - GOs are using world triggers to cast their spells, so we need to ignore their immunity flag here, this is a temp workaround, needs removal when go cast is implemented properly
|
||||
|| ((GetEntry() != WORLD_TRIGGER && (!obj || !obj->isType(TYPEMASK_GAMEOBJECT | TYPEMASK_DYNAMICOBJECT))) && target->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC)))
|
||||
|| ((GetEntry() != WORLD_TRIGGER && (!obj || !obj->isType(TYPEMASK_GAMEOBJECT | TYPEMASK_DYNAMICOBJECT))) && target->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && IsImmuneToPC()))
|
||||
return false;
|
||||
|
||||
// CvC case - can attack each other only when one of them is hostile
|
||||
@@ -13443,12 +13469,12 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co
|
||||
|
||||
if (HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED))
|
||||
{
|
||||
if (target->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC))
|
||||
if (target->IsImmuneToPC())
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (target->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC))
|
||||
if (target->IsImmuneToNPC())
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -15737,9 +15763,9 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u
|
||||
else // For attacker
|
||||
{
|
||||
// Overpower on victim dodge
|
||||
if (procExtra & PROC_EX_DODGE )
|
||||
if (procExtra & PROC_EX_DODGE)
|
||||
{
|
||||
if (GetTypeId() == TYPEID_PLAYER && getClass() == CLASS_WARRIOR)
|
||||
if (getClass() == CLASS_WARRIOR)
|
||||
{
|
||||
AddComboPoints(target, 1);
|
||||
StartReactiveTimer(REACTIVE_OVERPOWER);
|
||||
@@ -16530,8 +16556,10 @@ void Unit::UpdateReactives(uint32 p_time)
|
||||
ModifyAuraState(AURA_STATE_HUNTER_PARRY, false);
|
||||
break;
|
||||
case REACTIVE_OVERPOWER:
|
||||
if (getClass() == CLASS_WARRIOR && GetTypeId() == TYPEID_PLAYER)
|
||||
if (getClass() == CLASS_WARRIOR)
|
||||
{
|
||||
ClearComboPoints();
|
||||
}
|
||||
break;
|
||||
case REACTIVE_WOLVERINE_BITE:
|
||||
if (IsHunterPet())
|
||||
|
||||
@@ -1648,6 +1648,13 @@ public:
|
||||
|
||||
[[nodiscard]] bool IsInFlight() const { return HasUnitState(UNIT_STATE_IN_FLIGHT); }
|
||||
|
||||
void SetImmuneToAll(bool apply, bool keepCombat = false) { SetImmuneToPC(apply, keepCombat); SetImmuneToNPC(apply, keepCombat); }
|
||||
bool IsImmuneToAll() const { return IsImmuneToPC() && IsImmuneToNPC(); }
|
||||
void SetImmuneToPC(bool apply, bool keepCombat = false);
|
||||
bool IsImmuneToPC() const { return HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); }
|
||||
void SetImmuneToNPC(bool apply, bool keepCombat = false);
|
||||
bool IsImmuneToNPC() const { return HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC); }
|
||||
|
||||
bool IsEngaged() const { return IsInCombat(); }
|
||||
bool IsEngagedBy(Unit const* who) const { return IsInCombatWith(who); }
|
||||
|
||||
|
||||
@@ -1113,7 +1113,7 @@ namespace Acore
|
||||
{}
|
||||
bool operator()(Unit* u)
|
||||
{
|
||||
if (!u->IsAlive() || u->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE) || (u->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC) && !u->IsInCombat()))
|
||||
if (!u->IsAlive() || u->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE) || (u->IsImmuneToPC() && !u->IsInCombat()))
|
||||
return false;
|
||||
if (u->GetGUID() == i_funit->GetGUID())
|
||||
return false;
|
||||
|
||||
@@ -3635,7 +3635,7 @@ Corpse* Map::ConvertCorpseToBones(ObjectGuid const ownerGuid, bool insignia /*=
|
||||
bones->SetPhaseMask(corpse->GetPhaseMask(), false);
|
||||
|
||||
bones->SetUInt32Value(CORPSE_FIELD_FLAGS, CORPSE_FLAG_UNK2 | CORPSE_FLAG_BONES);
|
||||
bones->SetGuidValue(CORPSE_FIELD_OWNER, ObjectGuid::Empty);
|
||||
bones->SetGuidValue(CORPSE_FIELD_OWNER, corpse->GetOwnerGUID());
|
||||
|
||||
for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i)
|
||||
if (corpse->GetUInt32Value(CORPSE_FIELD_ITEM + i))
|
||||
|
||||
@@ -124,9 +124,9 @@ uint32 Acore::XP::Gain(Player* player, Unit* unit, bool isBattleGround /*= false
|
||||
}
|
||||
|
||||
// if players dealt less than 50% of the damage and were credited anyway (due to CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ), scale XP gained appropriately (linear scaling)
|
||||
if (creature && creature->m_PlayerDamageReq)
|
||||
if (creature && creature->GetPlayerDamageReq())
|
||||
{
|
||||
xpMod *= 1.0f - 2.0f * creature->m_PlayerDamageReq / creature->GetMaxHealth();
|
||||
xpMod *= 1.0f - 2.0f * creature->GetPlayerDamageReq() / creature->GetMaxHealth();
|
||||
}
|
||||
|
||||
gain = uint32(gain * xpMod);
|
||||
|
||||
@@ -2868,10 +2868,15 @@ void DynObjAura::FillTargetMap(std::map<Unit*, uint8>& targets, Unit* /*caster*/
|
||||
|
||||
for (UnitList::iterator itr = targetList.begin(); itr != targetList.end(); ++itr)
|
||||
{
|
||||
// xinef: check z level and los dependence
|
||||
Unit* target = *itr;
|
||||
if (!spellInfo->HasAttribute(SPELL_ATTR2_IGNORE_LINE_OF_SIGHT) && !spellInfo->HasAttribute(SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT) && !target->IsWithinLOSInMap(GetDynobjOwner()))
|
||||
float zLevel = GetDynobjOwner()->GetPositionZ();
|
||||
if (target->GetPositionZ() + 3.0f < zLevel || target->GetPositionZ() - 5.0f > zLevel)
|
||||
{
|
||||
continue;
|
||||
if (!spellInfo->HasAttribute(SPELL_ATTR2_IGNORE_LINE_OF_SIGHT) && !spellInfo->HasAttribute(SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT) && !target->IsWithinLOSInMap(GetDynobjOwner()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
std::map<Unit*, uint8>::iterator existing = targets.find(*itr);
|
||||
|
||||
@@ -5851,31 +5851,27 @@ SpellCastResult Spell::CheckCast(bool strict)
|
||||
if ((!m_caster->IsTotem() || !m_spellInfo->IsPositive()) && !m_spellInfo->HasAttribute(SPELL_ATTR2_IGNORE_LINE_OF_SIGHT) &&
|
||||
!m_spellInfo->HasAttribute(SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT) && !(m_spellFlags & SPELL_FLAG_REDIRECTED))
|
||||
{
|
||||
WorldObject* losCenter = nullptr;
|
||||
bool castedByGameobject = false;
|
||||
uint32 losChecks = LINEOFSIGHT_ALL_CHECKS;
|
||||
if (m_originalCasterGUID.IsGameObject())
|
||||
{
|
||||
losCenter = m_caster->GetMap()->GetGameObject(m_originalCasterGUID);
|
||||
castedByGameobject = m_caster->GetMap()->GetGameObject(m_originalCasterGUID) != nullptr;
|
||||
}
|
||||
else if (m_caster->GetEntry() == WORLD_TRIGGER)
|
||||
{
|
||||
if (TempSummon* tempSummon = m_caster->ToTempSummon())
|
||||
{
|
||||
losCenter = tempSummon->GetSummonerGameObject();
|
||||
castedByGameobject = tempSummon->GetSummonerGameObject() != nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
if (losCenter)
|
||||
if (castedByGameobject)
|
||||
{
|
||||
// If spell casted by gameobject then ignore M2 models
|
||||
losChecks &= ~LINEOFSIGHT_CHECK_GOBJECT_M2;
|
||||
}
|
||||
else
|
||||
{
|
||||
losCenter = m_caster;
|
||||
}
|
||||
|
||||
if (!losCenter->IsWithinLOSInMap(target, VMAP::ModelIgnoreFlags::M2, LineOfSightChecks(losChecks)))
|
||||
if (!m_caster->IsWithinLOSInMap(target, VMAP::ModelIgnoreFlags::M2, LineOfSightChecks(losChecks)))
|
||||
{
|
||||
return SPELL_FAILED_LINE_OF_SIGHT;
|
||||
}
|
||||
@@ -7968,7 +7964,6 @@ bool Spell::CheckEffectTarget(Unit const* target, uint32 eff) const
|
||||
}
|
||||
}
|
||||
|
||||
WorldObject* caster = nullptr;
|
||||
if (gobCaster)
|
||||
{
|
||||
if (gobCaster->GetGOInfo()->IsIgnoringLOSChecks())
|
||||
@@ -7976,15 +7971,9 @@ bool Spell::CheckEffectTarget(Unit const* target, uint32 eff) const
|
||||
return true;
|
||||
}
|
||||
|
||||
caster = gobCaster;
|
||||
|
||||
// If spell casted by gameobject then ignore M2 models
|
||||
losChecks &= ~LINEOFSIGHT_CHECK_GOBJECT_M2;
|
||||
}
|
||||
else
|
||||
{
|
||||
caster = m_caster;
|
||||
}
|
||||
|
||||
if (target != m_caster)
|
||||
{
|
||||
@@ -7999,7 +7988,7 @@ bool Spell::CheckEffectTarget(Unit const* target, uint32 eff) const
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (!target->IsWithinLOSInMap(caster, VMAP::ModelIgnoreFlags::M2, LineOfSightChecks(losChecks)))
|
||||
else if (!m_caster->IsWithinLOSInMap(target, VMAP::ModelIgnoreFlags::M2, LineOfSightChecks(losChecks)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2172,8 +2172,12 @@ void Spell::EffectOpenLock(SpellEffIndex effIndex)
|
||||
if (gameObjTarget)
|
||||
{
|
||||
// Allow one skill-up until respawned
|
||||
if (!gameObjTarget->IsInSkillupList(player->GetGUID()) && player->UpdateGatherSkill(skillId, pureSkillValue, reqSkillValue))
|
||||
if (!gameObjTarget->IsInSkillupList(player->GetGUID()))
|
||||
{
|
||||
gameObjTarget->AddToSkillupList(player->GetGUID());
|
||||
player->UpdateGatherSkill(skillId, pureSkillValue, reqSkillValue);
|
||||
}
|
||||
|
||||
}
|
||||
else if (itemTarget)
|
||||
{
|
||||
@@ -2424,7 +2428,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
|
||||
summon->SelectLevel(); // some summoned creaters have different from 1 DB data for level/hp
|
||||
summon->ReplaceAllNpcFlags(NPCFlags(summon->GetCreatureTemplate()->npcflag));
|
||||
|
||||
summon->ReplaceAllUnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
summon->SetImmuneToAll(true);
|
||||
summon->SetReactState(REACT_PASSIVE);
|
||||
|
||||
// Xinef: Pet can have some auras in creature_addon or in scripts, do not remove them instantly
|
||||
|
||||
@@ -1369,6 +1369,12 @@ void SpellMgr::LoadSpellInfoCorrections()
|
||||
spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CAST;
|
||||
});
|
||||
|
||||
// Frightening Shout
|
||||
ApplySpellFix({ 19134 }, [](SpellInfo* spellInfo)
|
||||
{
|
||||
spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_DUMMY;
|
||||
});
|
||||
|
||||
// Isle of Conquest
|
||||
ApplySpellFix({ 66551 }, [](SpellInfo* spellInfo)
|
||||
{
|
||||
|
||||
@@ -496,7 +496,7 @@ public:
|
||||
}
|
||||
|
||||
//show info of gameobject
|
||||
static bool HandleGameObjectInfoCommand(ChatHandler* handler, Optional<Variant<GameObjectEntry, std::string_view>> objectId)
|
||||
static bool HandleGameObjectInfoCommand(ChatHandler* handler, Optional<EXACT_SEQUENCE("guid")> isGuid, Variant<Hyperlink<gameobject_entry>, Hyperlink<gameobject>, uint32> data)
|
||||
{
|
||||
uint32 entry = 0;
|
||||
uint32 type = 0;
|
||||
@@ -505,17 +505,24 @@ public:
|
||||
uint32 lootId = 0;
|
||||
GameObject* gameObject = nullptr;
|
||||
|
||||
if (!objectId)
|
||||
ObjectGuid::LowType spawnId = 0;
|
||||
if (isGuid || data.holds_alternative<Hyperlink<gameobject>>())
|
||||
{
|
||||
if (WorldObject* object = handler->getSelectedObject())
|
||||
spawnId = *data;
|
||||
GameObjectData const* spawnData = sObjectMgr->GetGOData(spawnId);
|
||||
if (!spawnData)
|
||||
{
|
||||
entry = object->GetEntry();
|
||||
if (object->GetTypeId() == TYPEID_GAMEOBJECT)
|
||||
gameObject = object->ToGameObject();
|
||||
handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, spawnId);
|
||||
handler->SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
entry = spawnData->id;
|
||||
gameObject = handler->GetObjectFromPlayerMapByDbGuid(spawnId);
|
||||
}
|
||||
else
|
||||
entry = static_cast<uint32>(objectId->get<GameObjectEntry>());
|
||||
{
|
||||
entry = *data;
|
||||
}
|
||||
|
||||
GameObjectTemplate const* gameObjectInfo = sObjectMgr->GetGameObjectTemplate(entry);
|
||||
if (!gameObjectInfo)
|
||||
|
||||
+1
-1
@@ -179,7 +179,7 @@ public:
|
||||
me->SetFaction(FACTION_FRIENDLY);
|
||||
|
||||
// was set before event start, so set again
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(true);
|
||||
|
||||
if (instance->GetData(TYPE_TOMB_OF_SEVEN) == DONE) // what is this trying to do? Probably some kind of crash recovery
|
||||
{
|
||||
|
||||
+2
-2
@@ -752,7 +752,7 @@ public:
|
||||
{
|
||||
++TombEventCounter;
|
||||
boss->SetFaction(FACTION_DARK_IRON_DWARVES);
|
||||
boss->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
boss->SetImmuneToPC(false);
|
||||
|
||||
// find suitable target here.
|
||||
Player* target = boss->SelectNearestPlayer(130);
|
||||
@@ -786,7 +786,7 @@ public:
|
||||
boss->SetLootRecipient(nullptr);
|
||||
}
|
||||
boss->SetFaction(FACTION_FRIENDLY);
|
||||
boss->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); // think this is useless
|
||||
boss->SetImmuneToPC(true); // think this is useless
|
||||
if (i == 6) // doomrel needs explicit reset
|
||||
{
|
||||
boss->AI()->Reset();
|
||||
|
||||
+6
-4
@@ -79,7 +79,8 @@ public:
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToPC(true);
|
||||
events.Reset();
|
||||
// Apply auras on spawn and reset
|
||||
// DoCast(me, SPELL_FIRE_SHIELD_TRIGGER); // Need to find this in old DBC if possible
|
||||
@@ -157,7 +158,8 @@ public:
|
||||
me->CastSpell(me, SPELL_EMBERSEER_FULL_STRENGTH);
|
||||
Talk(EMOTE_FREE_OF_BONDS);
|
||||
Talk(YELL_FREE_OF_BONDS);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToPC(false);
|
||||
events.ScheduleEvent(EVENT_ENTER_COMBAT, 2000);
|
||||
}
|
||||
}
|
||||
@@ -338,7 +340,7 @@ public:
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
if (Creature* Emberseer = me->FindNearestCreature(NPC_PYROGAURD_EMBERSEER, 30.0f, true))
|
||||
Emberseer->AI()->SetData(1, 3);
|
||||
|
||||
@@ -364,7 +366,7 @@ public:
|
||||
{
|
||||
if (data == 1 && value == 1)
|
||||
{
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(false);
|
||||
me->InterruptSpell(CURRENT_CHANNELED_SPELL);
|
||||
DoZoneInCombat();
|
||||
_events.CancelEvent(EVENT_ENCAGED_EMBERSEER);
|
||||
|
||||
+4
-2
@@ -114,11 +114,13 @@ public:
|
||||
|
||||
if (instance->GetBossState(DATA_GYTH) == IN_PROGRESS)
|
||||
{
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_PREPARATION);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PREPARATION);
|
||||
me->SetImmuneToAll(false);
|
||||
return;
|
||||
}
|
||||
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_PREPARATION);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PREPARATION);
|
||||
me->SetImmuneToAll(true);
|
||||
gythEvent = false;
|
||||
victorGUID.Clear();
|
||||
waveDoorGUID.Clear();
|
||||
|
||||
+3
-1
@@ -358,6 +358,7 @@ public:
|
||||
|
||||
DoCast(me, SPELL_NEFARIANS_BARRIER);
|
||||
SetCombatMovement(false);
|
||||
me->SetImmuneToPC(false);
|
||||
AttackStart(SelectTarget(SelectTargetMethod::Random, 0, 200.f, true));
|
||||
events.ScheduleEvent(EVENT_SHADOWBLINK, 500);
|
||||
events.ScheduleEvent(EVENT_SHADOW_BOLT, 3000);
|
||||
@@ -499,7 +500,8 @@ public:
|
||||
me->SetFaction(FACTION_DRAGONFLIGHT_BLACK);
|
||||
me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
||||
me->SetStandState(UNIT_STAND_STATE_STAND);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToPC(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-3
@@ -151,7 +151,8 @@ public:
|
||||
{
|
||||
summon->CastSpell(summon, SPELL_RAGNAROS_FADE);
|
||||
summon->CastSpell(summon, SPELL_RAGNAROS_SUBMERGE_EFFECT, true);
|
||||
summon->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
|
||||
summon->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
summon->SetImmuneToAll(true);
|
||||
summon->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
}
|
||||
@@ -180,7 +181,7 @@ public:
|
||||
else
|
||||
{
|
||||
events.SetPhase(PHASE_NONE);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
||||
me->SetFaction(FACTION_MAJORDOMO_FRIENDLY);
|
||||
}
|
||||
@@ -282,7 +283,7 @@ public:
|
||||
instance->SetBossState(DATA_MAJORDOMO_EXECUTUS, DONE);
|
||||
events.CancelEventGroup(PHASE_COMBAT);
|
||||
me->GetMap()->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, me->GetEntry(), me);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetFaction(FACTION_MAJORDOMO_FRIENDLY);
|
||||
EnterEvadeMode();
|
||||
Talk(SAY_DEFEAT);
|
||||
|
||||
@@ -137,7 +137,8 @@ public:
|
||||
extraEvents.Reset();
|
||||
extraEvents.SetPhase(PHASE_EMERGED);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC|UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE);
|
||||
}
|
||||
@@ -276,7 +277,8 @@ public:
|
||||
_isIntroDone = true;
|
||||
extraEvents.SetPhase(PHASE_EMERGED);
|
||||
me->RemoveAurasDueToSpell(SPELL_RAGNAROS_SUBMERGE_EFFECT);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
DoZoneInCombat();
|
||||
break;
|
||||
|
||||
@@ -107,7 +107,7 @@ void SummonCroneIfReady(InstanceScript* instance, Creature* creature)
|
||||
if (creature->GetVictim())
|
||||
pCrone->AI()->AttackStart(creature->GetVictim());
|
||||
pCrone->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
pCrone->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
pCrone->SetImmuneToPC(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@ public:
|
||||
summons.DespawnAll();
|
||||
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false);
|
||||
instance->SetData(DATA_KAELTHAS_EVENT, NOT_STARTED);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(false);
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon) override
|
||||
@@ -120,7 +120,7 @@ public:
|
||||
void InitializeAI() override
|
||||
{
|
||||
ScriptedAI::InitializeAI();
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
}
|
||||
|
||||
void JustDied(Unit*) override
|
||||
@@ -162,7 +162,8 @@ public:
|
||||
if (me->isRegeneratingHealth())
|
||||
{
|
||||
me->SetRegeneratingHealth(false);
|
||||
me->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE);
|
||||
me->SetImmuneToAll(true);
|
||||
me->CombatStop();
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
LapseAction(ACTION_REMOVE_FLY);
|
||||
@@ -200,7 +201,7 @@ public:
|
||||
switch (events2.ExecuteEvent())
|
||||
{
|
||||
case EVENT_INIT_COMBAT:
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(false);
|
||||
if (Unit* target = SelectTargetFromPlayerList(50.0f))
|
||||
AttackStart(target);
|
||||
return;
|
||||
|
||||
@@ -219,7 +219,7 @@ public:
|
||||
if (creature->AI()->GetData(DATA_IN_PROGRESS))
|
||||
return true;
|
||||
|
||||
creature->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
creature->SetImmuneToPC(false);
|
||||
creature->RemoveUnitFlag(UNIT_FLAG_SWIMMING);
|
||||
|
||||
player->CastSpell(creature, SPELL_DUEL, false);
|
||||
@@ -584,7 +584,7 @@ public:
|
||||
{
|
||||
ScriptedAI::MoveInLineOfSight(who);
|
||||
|
||||
if (!who->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC) && who->GetEntry() == NPC_GHOUL && me->IsWithinDistInMap(who, 10.0f))
|
||||
if (!who->IsImmuneToNPC() && who->GetEntry() == NPC_GHOUL && me->IsWithinDistInMap(who, 10.0f))
|
||||
if (Unit* owner = who->GetOwner())
|
||||
if (Player* player = owner->ToPlayer())
|
||||
{
|
||||
@@ -593,7 +593,7 @@ public:
|
||||
creature->CastSpell(owner, 52517, true);
|
||||
|
||||
creature->AI()->SetGUID(me->GetGUID());
|
||||
creature->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
creature->SetImmuneToAll(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -743,7 +743,7 @@ public:
|
||||
phase = PHASE_CHAINED;
|
||||
events.Reset();
|
||||
me->SetFaction(FACTION_CREATURE);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(true);
|
||||
me->SetUInt32Value(UNIT_FIELD_BYTES_1, 8);
|
||||
me->LoadEquipment(0, true);
|
||||
}
|
||||
@@ -844,7 +844,7 @@ public:
|
||||
else
|
||||
{
|
||||
me->SetFaction(FACTION_MONSTER);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
phase = PHASE_ATTACKING;
|
||||
|
||||
if (Player* target = ObjectAccessor::GetPlayer(*me, playerGUID))
|
||||
@@ -964,7 +964,7 @@ public:
|
||||
{
|
||||
npc_scarlet_miner_cartAI(Creature* creature) : PassiveAI(creature)
|
||||
{
|
||||
me->ReplaceAllUnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetFaction(FACTION_FRIENDLY);
|
||||
me->SetDisplayId(me->GetCreatureTemplate()->Modelid1); // Modelid2 is a horse.
|
||||
}
|
||||
@@ -987,7 +987,8 @@ public:
|
||||
me->SetSpeed(MOVE_RUN, 1.25f);
|
||||
|
||||
me->GetMotionMaster()->MoveFollow(miner, 1.0f, 0);
|
||||
me->ReplaceAllUnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->ReplaceAllUnitFlags(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetFaction(FACTION_FRIENDLY);
|
||||
}
|
||||
}
|
||||
@@ -1097,7 +1098,8 @@ public:
|
||||
{
|
||||
me->SetFacingToObject(car);
|
||||
// xinef: add some flags
|
||||
car->ReplaceAllUnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
car->ReplaceAllUnitFlags(UNIT_FLAG_NON_ATTACKABLE);
|
||||
car->SetImmuneToAll(true);
|
||||
car->SetFaction(FACTION_FRIENDLY);
|
||||
}
|
||||
Talk(SAY_SCARLET_MINER_0);
|
||||
|
||||
@@ -255,7 +255,7 @@ public:
|
||||
else
|
||||
{
|
||||
me->GetMotionMaster()->MoveTargetedHome();
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToNPC(true);
|
||||
Reset();
|
||||
}
|
||||
}
|
||||
@@ -313,7 +313,7 @@ public:
|
||||
m_uiValrothGUID = summoned->GetGUID();
|
||||
|
||||
summoned->AddThreat(me, 0.0f);
|
||||
summoned->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
summoned->SetImmuneToPC(false);
|
||||
summons.Summon(summoned);
|
||||
}
|
||||
|
||||
@@ -666,7 +666,7 @@ public:
|
||||
ExecuteSpeech_Counter = 0;
|
||||
PlayerGUID.Clear();
|
||||
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
}
|
||||
|
||||
bool MeetQuestCondition(Player* player)
|
||||
@@ -780,7 +780,7 @@ public:
|
||||
case 9:
|
||||
Talk(SAY_EXEC_TIME_6, player);
|
||||
me->SetStandState(UNIT_STAND_STATE_KNEEL);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
break;
|
||||
case 10:
|
||||
Talk(SAY_EXEC_WAITING, player);
|
||||
@@ -826,7 +826,7 @@ public:
|
||||
case 9:
|
||||
Talk(SAY_EXEC_TIME_8, player);
|
||||
me->SetStandState(UNIT_STAND_STATE_KNEEL);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
break;
|
||||
case 10:
|
||||
Talk(SAY_EXEC_WAITING, player);
|
||||
@@ -872,7 +872,7 @@ public:
|
||||
case 9:
|
||||
Talk(SAY_EXEC_TIME_3, player);
|
||||
me->SetStandState(UNIT_STAND_STATE_KNEEL);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
break;
|
||||
case 10:
|
||||
Talk(SAY_EXEC_WAITING, player);
|
||||
@@ -918,7 +918,7 @@ public:
|
||||
case 9:
|
||||
Talk(SAY_EXEC_TIME_7, player);
|
||||
me->SetStandState(UNIT_STAND_STATE_KNEEL);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
break;
|
||||
case 10:
|
||||
Talk(SAY_EXEC_WAITING, player);
|
||||
@@ -964,7 +964,7 @@ public:
|
||||
case 9:
|
||||
Talk(SAY_EXEC_TIME_4, player);
|
||||
me->SetStandState(UNIT_STAND_STATE_KNEEL);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
break;
|
||||
case 10:
|
||||
Talk(SAY_EXEC_WAITING, player);
|
||||
@@ -1010,7 +1010,7 @@ public:
|
||||
case 9:
|
||||
Talk(SAY_EXEC_TIME_9, player);
|
||||
me->SetStandState(UNIT_STAND_STATE_KNEEL);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
break;
|
||||
case 10:
|
||||
Talk(SAY_EXEC_WAITING, player);
|
||||
@@ -1056,7 +1056,7 @@ public:
|
||||
case 9:
|
||||
Talk(SAY_EXEC_TIME_5, player);
|
||||
me->SetStandState(UNIT_STAND_STATE_KNEEL);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
break;
|
||||
case 10:
|
||||
Talk(SAY_EXEC_WAITING, player);
|
||||
@@ -1102,7 +1102,7 @@ public:
|
||||
case 9:
|
||||
Talk(SAY_EXEC_TIME_10, player);
|
||||
me->SetStandState(UNIT_STAND_STATE_KNEEL);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
break;
|
||||
case 10:
|
||||
Talk(SAY_EXEC_WAITING, player);
|
||||
@@ -1146,7 +1146,7 @@ public:
|
||||
case 9:
|
||||
Talk(SAY_EXEC_TIME_1, player);
|
||||
me->SetStandState(UNIT_STAND_STATE_KNEEL);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
break;
|
||||
case 10:
|
||||
Talk(SAY_EXEC_WAITING, player);
|
||||
@@ -1192,7 +1192,7 @@ public:
|
||||
case 9:
|
||||
Talk(SAY_EXEC_TIME_2, player);
|
||||
me->SetStandState(UNIT_STAND_STATE_KNEEL);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
break;
|
||||
case 10:
|
||||
Talk(SAY_EXEC_WAITING, player);
|
||||
|
||||
@@ -465,7 +465,7 @@ public:
|
||||
if (battleStarted == ENCOUNTER_STATE_OUTRO && cr->GetEntry() == NPC_DEFENDER_OF_THE_LIGHT)
|
||||
{
|
||||
cr->SetReactState(REACT_PASSIVE);
|
||||
cr->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
cr->SetImmuneToAll(true);
|
||||
cr->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H);
|
||||
cr->HandleEmoteCommand(EMOTE_STATE_READY1H);
|
||||
}
|
||||
@@ -546,7 +546,7 @@ public:
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->ReplaceAllNpcFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
|
||||
me->SetStandState(UNIT_STAND_STATE_STAND);
|
||||
me->SetVisible(true);
|
||||
@@ -670,7 +670,7 @@ public:
|
||||
break;
|
||||
}
|
||||
case EVENT_START_COUNTDOWN_14:
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SummonCreatureGroup(5);
|
||||
return;
|
||||
case EVENT_FINISH_FIGHT_1:
|
||||
@@ -698,13 +698,13 @@ public:
|
||||
{
|
||||
summon->CombatStop(true);
|
||||
summon->GetThreatMgr().ClearAllThreat();
|
||||
summon->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
summon->SetImmuneToAll(true);
|
||||
summon->SetReactState(REACT_PASSIVE);
|
||||
summon->GetMotionMaster()->Clear(false);
|
||||
}
|
||||
me->CombatStop(true);
|
||||
me->GetThreatMgr().ClearAllThreat();
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->GetMotionMaster()->Clear(false);
|
||||
|
||||
@@ -1027,7 +1027,7 @@ public:
|
||||
{
|
||||
tirion->CastSpell(tirion, SPELL_TIRION_CHARGE, true);
|
||||
tirion->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
|
||||
tirion->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
tirion->SetImmuneToAll(true);
|
||||
}
|
||||
break;
|
||||
case EVENT_OUTRO_SCENE_44:
|
||||
|
||||
@@ -113,8 +113,7 @@ public:
|
||||
me->SetDisableGravity(true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); // for some reason he aggroes if we don't have this.
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC); // might not be needed, but guardians and stuff like that could mess up.
|
||||
me->SetImmuneToAll(true); // for some reason he aggroes if we don't have this.
|
||||
}
|
||||
|
||||
void MovementInform(uint32 type, uint32 id) override
|
||||
@@ -154,8 +153,7 @@ public:
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
|
||||
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_KIRTONOS_STAFF));
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
break;
|
||||
case INTRO_6:
|
||||
|
||||
@@ -139,7 +139,7 @@ public:
|
||||
})
|
||||
.Schedule(12s, [this](TaskContext context)
|
||||
{
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(false);
|
||||
_phase = PHASE_COMBAT;
|
||||
DoZoneInCombat();
|
||||
|
||||
@@ -185,7 +185,7 @@ public:
|
||||
}
|
||||
});
|
||||
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(true);
|
||||
me->SetFaction(FACTION_MONSTER);
|
||||
summons.DoAction(ACTION_START_EVENT);
|
||||
}
|
||||
@@ -293,13 +293,13 @@ struct npc_apothecary_genericAI : public ScriptedAI
|
||||
{
|
||||
if (action == ACTION_START_EVENT)
|
||||
{
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(true);
|
||||
me->SetFaction(FACTION_MONSTER);
|
||||
me->GetMotionMaster()->MovePoint(1, _movePos);
|
||||
}
|
||||
else if (action == ACTION_START_FIGHT)
|
||||
{
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(false);
|
||||
DoZoneInCombat();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,7 +111,8 @@ struct boss_jarien : public BossAI
|
||||
});
|
||||
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToNPC(true);
|
||||
_talked = false;
|
||||
_phase = PHASE_TALK;
|
||||
}
|
||||
@@ -145,7 +146,8 @@ struct boss_jarien : public BossAI
|
||||
_talked = true;
|
||||
_phase = PHASE_FIGHT;
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToNPC(false);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -234,7 +236,8 @@ struct boss_sothos : public BossAI
|
||||
});
|
||||
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToNPC(true);
|
||||
_talked = false;
|
||||
_phase = PHASE_TALK;
|
||||
}
|
||||
@@ -261,7 +264,8 @@ struct boss_sothos : public BossAI
|
||||
_talked = true;
|
||||
_phase = PHASE_FIGHT;
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToNPC(false);
|
||||
})
|
||||
.Schedule(3s, [this](TaskContext /*context*/)
|
||||
{
|
||||
|
||||
@@ -201,14 +201,14 @@ public:
|
||||
{
|
||||
Creature* target = GetUnitOwner()->ToCreature();
|
||||
target->SetReactState(REACT_PASSIVE);
|
||||
target->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
target->SetImmuneToAll(true);
|
||||
}
|
||||
|
||||
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
Creature* target = GetUnitOwner()->ToCreature();
|
||||
target->SetReactState(REACT_AGGRESSIVE);
|
||||
target->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
target->SetImmuneToAll(false);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
|
||||
@@ -724,13 +724,13 @@ public:
|
||||
if (ptarget->GetPositionX() > 120)
|
||||
{
|
||||
ptarget->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_SPEAR));
|
||||
ptarget->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
ptarget->SetImmuneToPC(true);
|
||||
ptarget->SetReactState(REACT_PASSIVE);
|
||||
ptarget->AI()->SetData(0, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
ptarget->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
ptarget->SetImmuneToPC(true);
|
||||
ptarget->SetReactState(REACT_PASSIVE);
|
||||
ptarget->AI()->SetData(0, 2);
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ enum Spells
|
||||
SPELL_LEVEL_UP = 24312,
|
||||
SPELL_EXECUTE = 7160,
|
||||
SPELL_MANDOKIR_CLEAVE = 20691,
|
||||
SPELL_SUMMON_PLAYER = 25104,
|
||||
|
||||
SPELL_REVIVE = 24341 // chained spirit
|
||||
};
|
||||
@@ -63,8 +64,7 @@ enum Events
|
||||
EVENT_WATCH_PLAYER = 8,
|
||||
EVENT_CHARGE_PLAYER = 9,
|
||||
EVENT_EXECUTE = 10,
|
||||
EVENT_FRIGHTENING_SHOUT = 11,
|
||||
EVENT_CLEAVE = 12
|
||||
EVENT_CLEAVE = 11
|
||||
};
|
||||
|
||||
enum Action
|
||||
@@ -113,6 +113,32 @@ Position const PosMandokir[2] =
|
||||
{ -12197.86f, -1949.392f, 130.2745f, 0.0f }
|
||||
};
|
||||
|
||||
void RevivePlayer(Unit* victim, ObjectGuid& reviveGUID)
|
||||
{
|
||||
std::list<Creature*> chainedSpirits;
|
||||
GetCreatureListWithEntryInGrid(chainedSpirits, victim, NPC_CHAINED_SPIRIT, 200.f);
|
||||
if (chainedSpirits.empty())
|
||||
return;
|
||||
|
||||
// Sort the list by distance to the victim.
|
||||
chainedSpirits.sort([victim](Creature const* c1, Creature const* c2)
|
||||
{
|
||||
return c1->GetDistance2d(victim) < c2->GetDistance2d(victim);
|
||||
});
|
||||
|
||||
// Now we have to check if the spirit is already reviving someone...
|
||||
for (Creature* spirit : chainedSpirits)
|
||||
{
|
||||
if (!spirit->isMoving() && !spirit->HasUnitState(UNIT_STATE_CASTING))
|
||||
{
|
||||
spirit->AI()->SetGUID(reviveGUID);
|
||||
spirit->AI()->DoAction(ACTION_REVIVE);
|
||||
reviveGUID.Clear();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class boss_mandokir : public CreatureScript
|
||||
{
|
||||
public:
|
||||
@@ -138,22 +164,20 @@ public:
|
||||
}
|
||||
}
|
||||
me->RemoveAurasDueToSpell(SPELL_FRENZY);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(false);
|
||||
instance->SetBossState(DATA_OHGAN, NOT_STARTED);
|
||||
me->Mount(MODEL_OHGAN_MOUNT);
|
||||
reviveGUID.Clear();
|
||||
_useExecute = false;
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
// Do not want to unsummon Ohgan
|
||||
for (int i = 0; i < CHAINED_SPIRIT_COUNT; ++i)
|
||||
{
|
||||
if (Creature* unsummon = ObjectAccessor::GetCreature(*me, chainedSpiritGUIDs[i]))
|
||||
{
|
||||
unsummon->DespawnOrUnsummon();
|
||||
}
|
||||
}
|
||||
std::list<Creature*> chainedSpirits;
|
||||
GetCreatureListWithEntryInGrid(chainedSpirits, me, NPC_CHAINED_SPIRIT, 200.f);
|
||||
for (Creature* spirit : chainedSpirits)
|
||||
spirit->DespawnOrUnsummon();
|
||||
|
||||
instance->SetBossState(DATA_MANDOKIR, DONE);
|
||||
instance->SaveToDB();
|
||||
}
|
||||
@@ -161,14 +185,13 @@ public:
|
||||
void EnterCombat(Unit* /*who*/) override
|
||||
{
|
||||
_EnterCombat();
|
||||
events.ScheduleEvent(EVENT_OVERPOWER, urand(6000, 8000));
|
||||
events.ScheduleEvent(EVENT_OVERPOWER, 1000);
|
||||
events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand(14000, 28000));
|
||||
events.ScheduleEvent(EVENT_WHIRLWIND, urand(24000, 30000));
|
||||
events.ScheduleEvent(EVENT_CHECK_OHGAN, 1000);
|
||||
events.ScheduleEvent(EVENT_WATCH_PLAYER, urand(12000, 24000));
|
||||
events.ScheduleEvent(EVENT_CHARGE_PLAYER, urand(30000, 40000));
|
||||
events.ScheduleEvent(EVENT_EXECUTE, urand(7000, 14000));
|
||||
events.ScheduleEvent(EVENT_CLEAVE, urand(10000, 20000));
|
||||
events.ScheduleEvent(EVENT_CLEAVE, 1000);
|
||||
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
|
||||
Talk(SAY_AGGRO);
|
||||
me->Dismount();
|
||||
@@ -176,8 +199,7 @@ public:
|
||||
me->SummonCreature(NPC_OHGAN, me->GetPositionX() - 3, me->GetPositionY(), me->GetPositionZ(), me->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 35000);
|
||||
for (int i = 0; i < CHAINED_SPIRIT_COUNT; ++i)
|
||||
{
|
||||
Creature* chainedSpirit = me->SummonCreature(NPC_CHAINED_SPIRIT, PosSummonChainedSpirits[i], TEMPSUMMON_CORPSE_DESPAWN);
|
||||
chainedSpiritGUIDs[i] = chainedSpirit->GetGUID();
|
||||
me->SummonCreature(NPC_CHAINED_SPIRIT, PosSummonChainedSpirits[i], TEMPSUMMON_CORPSE_DESPAWN);
|
||||
}
|
||||
DoZoneInCombat();
|
||||
}
|
||||
@@ -188,7 +210,7 @@ public:
|
||||
return;
|
||||
|
||||
reviveGUID = victim->GetGUID();
|
||||
DoAction(ACTION_START_REVIVE);
|
||||
RevivePlayer(victim, reviveGUID);
|
||||
if (++killCount == 3)
|
||||
{
|
||||
Talk(SAY_DING_KILL);
|
||||
@@ -199,32 +221,11 @@ public:
|
||||
jindo->AI()->Talk(SAY_GRATS_JINDO);
|
||||
}
|
||||
}
|
||||
DoCast(me, SPELL_LEVEL_UP, true);
|
||||
DoCastSelf(SPELL_LEVEL_UP, true);
|
||||
killCount = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void DoAction(int32 action) override
|
||||
{
|
||||
if (action == ACTION_START_REVIVE)
|
||||
{
|
||||
std::list<Creature*> creatures;
|
||||
GetCreatureListWithEntryInGrid(creatures, me, NPC_CHAINED_SPIRIT, 200.0f);
|
||||
if (creatures.empty())
|
||||
return;
|
||||
|
||||
for (std::list<Creature*>::iterator itr = creatures.begin(); itr != creatures.end(); ++itr)
|
||||
{
|
||||
if (Creature* chainedSpirit = ObjectAccessor::GetCreature(*me, (*itr)->GetGUID()))
|
||||
{
|
||||
chainedSpirit->AI()->SetGUID(reviveGUID);
|
||||
chainedSpirit->AI()->DoAction(ACTION_REVIVE);
|
||||
reviveGUID.Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SetGUID(ObjectGuid const guid, int32 /*type = 0 */) override
|
||||
{
|
||||
reviveGUID = guid;
|
||||
@@ -243,6 +244,26 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void DamageDealt(Unit* doneTo, uint32& damage, DamageEffectType /*damagetype*/) override
|
||||
{
|
||||
if (doneTo && doneTo == me->GetVictim())
|
||||
{
|
||||
if (doneTo->HealthBelowPctDamaged(20, damage))
|
||||
{
|
||||
if (!_useExecute)
|
||||
{
|
||||
_useExecute = true;
|
||||
events.ScheduleEvent(EVENT_EXECUTE, 1000);
|
||||
}
|
||||
}
|
||||
else if (_useExecute)
|
||||
{
|
||||
_useExecute = false;
|
||||
events.CancelEvent(EVENT_EXECUTE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
events.Update(diff);
|
||||
@@ -267,7 +288,7 @@ public:
|
||||
}
|
||||
break;
|
||||
case EVENT_STARTED:
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -277,7 +298,7 @@ public:
|
||||
return;
|
||||
}
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING) || me->HasUnitState(UNIT_STATE_CHARGING))
|
||||
return;
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
@@ -285,8 +306,14 @@ public:
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_OVERPOWER:
|
||||
DoCastVictim(SPELL_OVERPOWER);
|
||||
events.ScheduleEvent(EVENT_OVERPOWER, urand(6000, 8000));
|
||||
if (DoCastVictim(SPELL_OVERPOWER) == SPELL_CAST_OK)
|
||||
{
|
||||
events.ScheduleEvent(EVENT_OVERPOWER, urand(6000, 8000));
|
||||
}
|
||||
else
|
||||
{
|
||||
events.ScheduleEvent(EVENT_OVERPOWER, 1000);
|
||||
}
|
||||
break;
|
||||
case EVENT_MORTAL_STRIKE:
|
||||
DoCastVictim(SPELL_MORTAL_STRIKE);
|
||||
@@ -316,24 +343,28 @@ public:
|
||||
events.ScheduleEvent(EVENT_WATCH_PLAYER, urand(12000, 24000));
|
||||
break;
|
||||
case EVENT_CHARGE_PLAYER:
|
||||
DoCast(SelectTarget(SelectTargetMethod::Random, 0, 40, true), SPELL_CHARGE);
|
||||
events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 1500);
|
||||
if (Unit* mainTarget = SelectTarget(SelectTargetMethod::MaxThreat, 0, 100.0f))
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, [this](Unit const* target)
|
||||
{
|
||||
if (!me || !target)
|
||||
return false;
|
||||
if (target->GetTypeId() != TYPEID_PLAYER || !me->IsWithinLOSInMap(target))
|
||||
return false;
|
||||
return true;
|
||||
}))
|
||||
{
|
||||
me->GetThreatMgr().modifyThreatPercent(mainTarget, -100);
|
||||
DoCast(target, SPELL_CHARGE);
|
||||
events.DelayEvents(1500);
|
||||
if (Unit* mainTarget = SelectTarget(SelectTargetMethod::MaxThreat, 0, 100.0f))
|
||||
{
|
||||
me->GetThreatMgr().modifyThreatPercent(mainTarget, -100);
|
||||
}
|
||||
}
|
||||
events.ScheduleEvent(EVENT_CHARGE_PLAYER, urand(30000, 40000));
|
||||
break;
|
||||
case EVENT_EXECUTE:
|
||||
if (me->GetVictim() && me->GetVictim()->HealthBelowPct(20))
|
||||
{
|
||||
DoCastVictim(SPELL_EXECUTE, true);
|
||||
}
|
||||
DoCastVictim(SPELL_EXECUTE, true);
|
||||
events.ScheduleEvent(EVENT_EXECUTE, urand(7000, 14000));
|
||||
break;
|
||||
case EVENT_FRIGHTENING_SHOUT:
|
||||
DoCastAOE(SPELL_FRIGHTENING_SHOUT);
|
||||
break;
|
||||
case EVENT_CLEAVE:
|
||||
{
|
||||
std::list<Unit*> meleeRangeTargets;
|
||||
@@ -349,21 +380,26 @@ public:
|
||||
if (meleeRangeTargets.size() >= 5)
|
||||
{
|
||||
DoCastVictim(SPELL_MANDOKIR_CLEAVE);
|
||||
events.ScheduleEvent(EVENT_CLEAVE, urand(10000, 20000));
|
||||
}
|
||||
else
|
||||
{
|
||||
events.ScheduleEvent(EVENT_CLEAVE, 1000);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_CLEAVE, urand(10000, 20000));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
uint8 killCount;
|
||||
ObjectGuid chainedSpiritGUIDs[CHAINED_SPIRIT_COUNT];
|
||||
ObjectGuid reviveGUID;
|
||||
bool _useExecute;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
@@ -373,7 +409,6 @@ public:
|
||||
};
|
||||
|
||||
// Ohgan
|
||||
|
||||
enum OhganSpells
|
||||
{
|
||||
SPELL_SUNDERARMOR = 24317,
|
||||
@@ -394,9 +429,9 @@ public:
|
||||
me->AddAura(SPELL_THRASH, me);
|
||||
_scheduler.CancelAll();
|
||||
_scheduler.SetValidator([this]
|
||||
{
|
||||
return !me->HasUnitState(UNIT_STATE_CASTING);
|
||||
});
|
||||
{
|
||||
return !me->HasUnitState(UNIT_STATE_CASTING);
|
||||
});
|
||||
|
||||
reviveGUID.Clear();
|
||||
}
|
||||
@@ -406,12 +441,10 @@ public:
|
||||
if (victim->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
reviveGUID = victim->GetGUID();
|
||||
DoAction(ACTION_START_REVIVE);
|
||||
_scheduler.Schedule(6s, 12s, [this](TaskContext context)
|
||||
{
|
||||
DoCastVictim(SPELL_SUNDERARMOR);
|
||||
context.Repeat(6s, 12s);
|
||||
DoCastVictim(SPELL_SUNDERARMOR);
|
||||
context.Repeat(6s, 12s);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -421,25 +454,7 @@ public:
|
||||
return;
|
||||
|
||||
reviveGUID = victim->GetGUID();
|
||||
DoAction(ACTION_START_REVIVE);
|
||||
}
|
||||
|
||||
void DoAction(int32 action) override
|
||||
{
|
||||
if (action == ACTION_START_REVIVE)
|
||||
{
|
||||
std::list<Creature*> creatures;
|
||||
GetCreatureListWithEntryInGrid(creatures, me, NPC_CHAINED_SPIRIT, 200.0f);
|
||||
if (creatures.empty())
|
||||
return;
|
||||
|
||||
for (Creature* chainedSpirit : creatures)
|
||||
{
|
||||
chainedSpirit->AI()->SetGUID(reviveGUID);
|
||||
chainedSpirit->AI()->DoAction(ACTION_REVIVE);
|
||||
reviveGUID.Clear();
|
||||
}
|
||||
}
|
||||
RevivePlayer(victim, reviveGUID);
|
||||
}
|
||||
|
||||
void SetGUID(ObjectGuid const guid, int32 /*type = 0 */) override
|
||||
@@ -525,15 +540,6 @@ public:
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Player* target = ObjectAccessor::GetPlayer(*me, revivePlayerGUID);
|
||||
if (!target || target->IsAlive())
|
||||
return;
|
||||
|
||||
if (Creature* mandokir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_MANDOKIR)))
|
||||
{
|
||||
mandokir->GetAI()->SetGUID(target->GetGUID());
|
||||
mandokir->GetAI()->DoAction(ACTION_START_REVIVE);
|
||||
}
|
||||
me->DespawnOrUnsummon();
|
||||
}
|
||||
|
||||
@@ -551,61 +557,50 @@ enum VilebranchSpells
|
||||
SPELL_CLEAVE = 15284
|
||||
};
|
||||
|
||||
class npc_vilebranch_speaker : public CreatureScript
|
||||
struct npc_vilebranch_speaker : public ScriptedAI
|
||||
{
|
||||
public:
|
||||
npc_vilebranch_speaker() : CreatureScript("npc_vilebranch_speaker") { }
|
||||
npc_vilebranch_speaker(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()) { }
|
||||
|
||||
struct npc_vilebranch_speakerAI : public ScriptedAI
|
||||
void Reset() override
|
||||
{
|
||||
npc_vilebranch_speakerAI(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()) { }
|
||||
_scheduler.CancelAll();
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
demoralizing_Shout_Timer = urand(2000, 4000);
|
||||
cleave_Timer = urand(5000, 8000);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/) override { }
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
instance->SetBossState(DATA_MANDOKIR, SPECIAL);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
// Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (demoralizing_Shout_Timer <= diff)
|
||||
void EnterCombat(Unit* /*who*/) override
|
||||
{
|
||||
_scheduler
|
||||
.Schedule(2s, 4s, [this](TaskContext context)
|
||||
{
|
||||
DoCast(me, SPELL_DEMORALIZING_SHOUT);
|
||||
demoralizing_Shout_Timer = urand(22000, 30000);
|
||||
}
|
||||
else demoralizing_Shout_Timer -= diff;
|
||||
|
||||
if (cleave_Timer <= diff)
|
||||
DoCastAOE(SPELL_DEMORALIZING_SHOUT);
|
||||
context.Repeat(22s, 30s);
|
||||
})
|
||||
.Schedule(5s, 8s, [this](TaskContext context)
|
||||
{
|
||||
DoCastVictim(SPELL_CLEAVE, true);
|
||||
cleave_Timer = urand(6000, 9000);
|
||||
}
|
||||
else cleave_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 demoralizing_Shout_Timer;
|
||||
uint32 cleave_Timer;
|
||||
InstanceScript* instance;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return GetZulGurubAI<npc_vilebranch_speakerAI>(creature);
|
||||
context.Repeat(6s, 9s);
|
||||
});
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
instance->SetBossState(DATA_MANDOKIR, SPECIAL);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
// Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
_scheduler.Update(diff, [this]
|
||||
{
|
||||
DoMeleeAttackIfReady();
|
||||
});
|
||||
}
|
||||
|
||||
private:
|
||||
TaskScheduler _scheduler;
|
||||
InstanceScript* instance;
|
||||
};
|
||||
|
||||
class spell_threatening_gaze : public SpellScriptLoader
|
||||
@@ -643,11 +638,30 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class spell_mandokir_charge : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_mandokir_charge);
|
||||
|
||||
void LaunchHit(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
Unit* target = GetHitUnit();
|
||||
if (caster && target)
|
||||
caster->CastSpell(target, SPELL_FRIGHTENING_SHOUT, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_mandokir_charge::LaunchHit, EFFECT_0, SPELL_EFFECT_CHARGE);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_mandokir()
|
||||
{
|
||||
new boss_mandokir();
|
||||
new npc_ohgan();
|
||||
RegisterZulGurubCreatureAI(npc_chained_spirit);
|
||||
new npc_vilebranch_speaker();
|
||||
RegisterZulGurubCreatureAI(npc_vilebranch_speaker);
|
||||
new spell_threatening_gaze();
|
||||
RegisterSpellScript(spell_mandokir_charge);
|
||||
}
|
||||
|
||||
@@ -103,35 +103,6 @@ public:
|
||||
zealot->ResetFaction();
|
||||
}
|
||||
|
||||
// TODO: do this in formations, once a flag is added to prevent leaders from respawning as well.
|
||||
std::list<Creature*> creatureList;
|
||||
GetCreatureListWithEntryInGrid(creatureList, me, NPC_ZULGURUB_TIGER, 15.0f);
|
||||
|
||||
if (_catGuids.empty())
|
||||
{
|
||||
for (Creature* creature : creatureList)
|
||||
{
|
||||
_catGuids.push_back(creature->GetGUID());
|
||||
if (!creature->IsAlive())
|
||||
{
|
||||
creature->Respawn(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (ObjectGuid guid : _catGuids)
|
||||
{
|
||||
if (Creature* creature = ObjectAccessor::GetCreature(*me, guid))
|
||||
{
|
||||
if (!creature->IsAlive())
|
||||
{
|
||||
creature->Respawn(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_scheduler.SetValidator([this]
|
||||
{
|
||||
return !me->HasUnitState(UNIT_STATE_CASTING);
|
||||
|
||||
@@ -372,7 +372,7 @@ public:
|
||||
continue;
|
||||
else
|
||||
c->AI()->Talk(SAY_MORLEN_4);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
c->SetImmuneToAll(false);
|
||||
c->AI()->AttackStart(me);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -53,7 +53,7 @@ public:
|
||||
phase = 0;
|
||||
mockingBlowTimer = 5000;
|
||||
shieldBashTimer = 8000;
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToNPC(true);
|
||||
}
|
||||
|
||||
void sQuestAccept(Player* player, Quest const* quest) override
|
||||
@@ -62,7 +62,7 @@ public:
|
||||
{
|
||||
Talk(SAY_CORPORAL_1, player);
|
||||
npc_escortAI::Start(true, false, player->GetGUID(), quest);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToNPC(false);
|
||||
me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_ACTIVE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ public:
|
||||
if (quest->GetQuestId() == QUEST_590)
|
||||
{
|
||||
creature->SetFaction(FACTION_ENEMY);
|
||||
creature->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
creature->SetImmuneToPC(false);
|
||||
CAST_AI(npc_calvin_montague::npc_calvin_montagueAI, creature->AI())->AttackStart(player);
|
||||
}
|
||||
return true;
|
||||
@@ -80,8 +80,8 @@ public:
|
||||
|
||||
me->RestoreFaction();
|
||||
|
||||
if (!me->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC))
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
if (!me->IsImmuneToPC())
|
||||
me->SetImmuneToPC(true);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/) override { }
|
||||
@@ -104,7 +104,7 @@ public:
|
||||
uiDamage = 0;
|
||||
|
||||
me->RestoreFaction();
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(true);
|
||||
me->CombatStop(true);
|
||||
|
||||
m_uiPhase = 1;
|
||||
|
||||
@@ -1420,8 +1420,7 @@ public:
|
||||
{
|
||||
thrallGUID = temp->GetGUID();
|
||||
temp->SetReactState(REACT_PASSIVE);
|
||||
temp->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
temp->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
temp->SetImmuneToAll(true);
|
||||
temp->CastSpell(temp, SPELL_THRALL_BUFF);
|
||||
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
|
||||
}
|
||||
@@ -1429,8 +1428,7 @@ public:
|
||||
{
|
||||
sylvanasGUID = temp->GetGUID();
|
||||
temp->SetReactState(REACT_PASSIVE);
|
||||
temp->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
temp->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
temp->SetImmuneToAll(true);
|
||||
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
|
||||
}
|
||||
for (uint8 i = 0; i < HORDE_FORCE_MAXCOUNT; ++i)
|
||||
@@ -1439,8 +1437,7 @@ public:
|
||||
{
|
||||
hordeForcesGUID[i] = temp->GetGUID();
|
||||
temp->SetReactState(REACT_PASSIVE);
|
||||
temp->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
temp->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
temp->SetImmuneToAll(true);
|
||||
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
|
||||
}
|
||||
}
|
||||
@@ -1451,8 +1448,7 @@ public:
|
||||
if (Unit* temp = me->SummonCreature(NPC_SW_SOLDIER, AllianceSpawn[i + 25].x, AllianceSpawn[i + 25].y, AllianceSpawn[i + 25].z, AllianceSpawn[i + 25].o, TEMPSUMMON_MANUAL_DESPAWN))
|
||||
{
|
||||
allianceForcesGUID[i] = temp->GetGUID();
|
||||
temp->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
temp->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
temp->SetImmuneToAll(true);
|
||||
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
|
||||
}
|
||||
}
|
||||
@@ -1476,7 +1472,7 @@ public:
|
||||
if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
|
||||
{
|
||||
jaina->GetMotionMaster()->Clear();
|
||||
jaina->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
jaina->SetImmuneToNPC(false);
|
||||
jaina->SetReactState(REACT_AGGRESSIVE);
|
||||
}
|
||||
SetHoldState(true);
|
||||
@@ -1820,8 +1816,7 @@ public:
|
||||
case 53:
|
||||
if (Creature* putress = ObjectAccessor::GetCreature(*me, putressGUID))
|
||||
{
|
||||
putress->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
putress->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
putress->SetImmuneToAll(false);
|
||||
putress->AddThreat(me, 100.0f);
|
||||
me->AddThreat(putress, 100.0f);
|
||||
putress->RemoveAura(SPELL_PUTRESS_CASTING_STATE);
|
||||
@@ -1894,7 +1889,7 @@ public:
|
||||
case 66:
|
||||
if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
|
||||
jaina->AI()->Talk(JAINA_SAY_THRONE_1);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToNPC(true);
|
||||
bStepping = false;
|
||||
JumpToNextStep(0);
|
||||
break;
|
||||
@@ -1907,8 +1902,7 @@ public:
|
||||
if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID))
|
||||
{
|
||||
jaina->GetMotionMaster()->MovePoint(0, AllianceWP[8].x, AllianceWP[8].y, AllianceWP[8].z);
|
||||
jaina->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
jaina->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
jaina->SetImmuneToAll(true);
|
||||
}
|
||||
SetEscortPaused(false);
|
||||
bStepping = false;
|
||||
@@ -1933,12 +1927,12 @@ public:
|
||||
break;
|
||||
case 73:
|
||||
Talk(WRYNN_SAY_THRONE_9);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToAll(false);
|
||||
if (Creature* thrall = ObjectAccessor::GetCreature(*me, thrallGUID))
|
||||
{
|
||||
thrall->SetReactState(REACT_AGGRESSIVE);
|
||||
thrall->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
thrall->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
thrall->SetImmuneToNPC(false);
|
||||
thrall->SetImmuneToPC(true);
|
||||
thrall->AddThreat(me, 100.0f);
|
||||
me->AddThreat(thrall, 100.0f);
|
||||
thrall->AI()->AttackStart(me);
|
||||
@@ -1946,8 +1940,8 @@ public:
|
||||
if (Creature* sylvanas = ObjectAccessor::GetCreature(*me, sylvanasGUID))
|
||||
{
|
||||
sylvanas->SetReactState(REACT_AGGRESSIVE);
|
||||
sylvanas->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
sylvanas->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
sylvanas->SetImmuneToNPC(false);
|
||||
sylvanas->SetImmuneToPC(true);
|
||||
sylvanas->AddThreat(me, 100.0f);
|
||||
sylvanas->AI()->AttackStart(me);
|
||||
me->AddThreat(sylvanas, 100.0f);
|
||||
@@ -1957,8 +1951,8 @@ public:
|
||||
if (Creature* temp = ObjectAccessor::GetCreature(*me, hordeForcesGUID[i]))
|
||||
{
|
||||
temp->SetReactState(REACT_AGGRESSIVE);
|
||||
temp->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
temp->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
temp->SetImmuneToNPC(false);
|
||||
temp->SetImmuneToPC(true);
|
||||
}
|
||||
}
|
||||
for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
|
||||
@@ -1969,8 +1963,8 @@ public:
|
||||
{
|
||||
temp->SetReactState(REACT_AGGRESSIVE);
|
||||
temp2->SetReactState(REACT_AGGRESSIVE);
|
||||
temp->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
temp2->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
temp->SetImmuneToAll(false);
|
||||
temp2->SetImmuneToAll(false);
|
||||
temp->AddThreat(temp2, 100.0f);
|
||||
temp->AI()->AttackStart(temp2);
|
||||
temp2->AddThreat(temp, 100.0f);
|
||||
@@ -2564,7 +2558,7 @@ public:
|
||||
if (Creature* sylvanas = ObjectAccessor::GetCreature(*me, sylvanasfollowGUID))
|
||||
{
|
||||
sylvanas->GetMotionMaster()->Clear();
|
||||
sylvanas->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
sylvanas->SetImmuneToAll(false);
|
||||
sylvanas->SetReactState(REACT_AGGRESSIVE);
|
||||
sylvanas->SetFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE);
|
||||
sylvanas->GetMotionMaster()->MoveFollow(me, 1, M_PI * 0.1f);
|
||||
@@ -2606,7 +2600,7 @@ public:
|
||||
if (Unit* temp = me->SummonCreature(NPC_VARIMATHRAS, ThrallSpawn[23].x, ThrallSpawn[23].y, ThrallSpawn[23].z, ThrallSpawn[23].o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 900 * IN_MILLISECONDS))
|
||||
{
|
||||
ValimathrasGUID = temp->GetGUID();
|
||||
temp->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
temp->SetImmuneToAll(true);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
@@ -2729,7 +2723,7 @@ public:
|
||||
if (Unit* temp = me->SummonCreature(NPC_VARIMATHRAS, ThrallSpawn[63].x, ThrallSpawn[63].y, ThrallSpawn[63].z, ThrallSpawn[63].o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 300 * IN_MILLISECONDS))
|
||||
{
|
||||
ValimathrasGUID = temp->GetGUID();
|
||||
temp->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
temp->SetImmuneToAll(true);
|
||||
}
|
||||
break;
|
||||
case 13:
|
||||
@@ -2820,7 +2814,7 @@ public:
|
||||
if (Creature* temp = me->SummonCreature(NPC_VARIMATHRAS, ThrallSpawn[73].x, ThrallSpawn[73].y, ThrallSpawn[73].z, ThrallSpawn[73].o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 1200 * IN_MILLISECONDS))
|
||||
{
|
||||
ValimathrasGUID = temp->GetGUID();
|
||||
temp->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
temp->SetImmuneToAll(true);
|
||||
temp->CastSpell(me, SPELL_AURA_OF_VARIMATHRAS);
|
||||
temp->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
|
||||
temp->AI()->Talk(SAY_CLOSE_DOOR);
|
||||
@@ -3671,7 +3665,7 @@ public:
|
||||
case 137:
|
||||
if (Creature* valimathras = ObjectAccessor::GetCreature(*me, ValimathrasGUID))
|
||||
{
|
||||
valimathras->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
valimathras->SetImmuneToAll(false);
|
||||
valimathras->RemoveAura(SPELL_AURA_OF_VARIMATHRAS);
|
||||
valimathras->RemoveAura(SPELL_OPENING_LEGION_PORTALS);
|
||||
valimathras->AI()->Talk(SAY_VALIMATHRAS_ATTACK);
|
||||
@@ -3740,8 +3734,7 @@ public:
|
||||
if (Creature* temp = me->SummonCreature(NPC_SW_SOLDIER, AllianceSpawn[i + 25].x, AllianceSpawn[i + 25].y, AllianceSpawn[i + 25].z, AllianceSpawn[i + 25].o, TEMPSUMMON_MANUAL_DESPAWN))
|
||||
{
|
||||
allianceForcesGUID[i] = temp->GetGUID();
|
||||
temp->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
temp->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
temp->SetImmuneToAll(true);
|
||||
temp->ApplySpellImmune(0, IMMUNITY_ID, SPELL_SYLVANAS_BUFF, true);
|
||||
temp->SetReactState(REACT_PASSIVE);
|
||||
temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
|
||||
@@ -3750,8 +3743,7 @@ public:
|
||||
if (Creature* wrynn = me->SummonCreature(NPC_WRYNN, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
|
||||
{
|
||||
WrynnGUID = wrynn->GetGUID();
|
||||
wrynn->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
wrynn->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
wrynn->SetImmuneToAll(true);
|
||||
wrynn->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
|
||||
wrynn->SetReactState(REACT_PASSIVE);
|
||||
wrynn->GetMotionMaster()->MovePoint(0, 1302.543f, 359.472f, -67.295f, true);
|
||||
@@ -3759,8 +3751,7 @@ public:
|
||||
if (Creature* jaina = me->SummonCreature(NPC_JAINA, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
|
||||
{
|
||||
JainaGUID = jaina->GetGUID();
|
||||
jaina->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
jaina->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
jaina->SetImmuneToAll(true);
|
||||
jaina->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
JumpToNextStep(6 * IN_MILLISECONDS);
|
||||
@@ -3788,11 +3779,11 @@ public:
|
||||
break;
|
||||
// Wrynn Fight
|
||||
case 152:
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToAll(false);
|
||||
if (Creature* wrynn = ObjectAccessor::GetCreature(*me, WrynnGUID))
|
||||
{
|
||||
wrynn->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
wrynn->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
wrynn->SetImmuneToNPC(false);
|
||||
wrynn->SetImmuneToPC(true);
|
||||
wrynn->SetReactState(REACT_AGGRESSIVE);
|
||||
wrynn->AddThreat(me, 100.0f);
|
||||
me->AddThreat(wrynn, 100.0f);
|
||||
@@ -3803,7 +3794,7 @@ public:
|
||||
{
|
||||
if (Creature* temp = ObjectAccessor::GetCreature(*me, allianceForcesGUID[i]))
|
||||
{
|
||||
temp->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
temp->SetImmuneToAll(false);
|
||||
temp->SetReactState(REACT_AGGRESSIVE);
|
||||
temp->AddThreat(me, 100.0f);
|
||||
temp->AI()->AttackStart(me);
|
||||
|
||||
@@ -1557,7 +1557,7 @@ struct npc_coren_direbrew : public ScriptedAI
|
||||
{
|
||||
_events.Reset();
|
||||
_summons.DespawnAll();
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(true);
|
||||
me->SetFaction(FACTION_FRIENDLY);
|
||||
_events.SetPhase(PHASE_ALL);
|
||||
|
||||
@@ -1596,7 +1596,7 @@ struct npc_coren_direbrew : public ScriptedAI
|
||||
if (action == ACTION_START_FIGHT)
|
||||
{
|
||||
_events.SetPhase(PHASE_ONE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
me->SetFaction(FACTION_GOBLIN_DARK_IRON_BAR_PATRON);
|
||||
DoZoneInCombat();
|
||||
|
||||
@@ -1830,7 +1830,7 @@ struct npc_direbrew_antagonist : public ScriptedAI
|
||||
Talk(SAY_ANTAGONIST_2);
|
||||
break;
|
||||
case ACTION_ANTAGONIST_HOSTILE:
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
me->SetFaction(FACTION_GOBLIN_DARK_IRON_BAR_PATRON);
|
||||
DoZoneInCombat();
|
||||
break;
|
||||
|
||||
@@ -112,7 +112,7 @@ public:
|
||||
damage = 0;
|
||||
finished = true;
|
||||
me->SetRegeneratingHealth(false);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
if (InstanceScript* pInstance = me->GetInstanceScript())
|
||||
|
||||
+8
-8
@@ -472,7 +472,7 @@ public:
|
||||
{
|
||||
summons.Despawn(cr);
|
||||
summons.Summon(cr);
|
||||
cr->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
cr->SetImmuneToAll(true);
|
||||
cr->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
Talk(SAY_PHASE501);
|
||||
@@ -972,7 +972,7 @@ public:
|
||||
if (Creature* cr = GetEventNpc(NPC_CITY_MAN))
|
||||
{
|
||||
cr->UpdateEntry(NPC_INFINITE_HUNTER, nullptr, false);
|
||||
cr->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
cr->SetImmuneToAll(true);
|
||||
cr->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
ScheduleNextEvent(currentEvent, 2000);
|
||||
@@ -981,7 +981,7 @@ public:
|
||||
if (Creature* cr = GetEventNpc(NPC_CITY_MAN4))
|
||||
{
|
||||
cr->UpdateEntry(NPC_INFINITE_AGENT, nullptr, false);
|
||||
cr->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
cr->SetImmuneToAll(true);
|
||||
cr->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
ScheduleNextEvent(currentEvent, 2000);
|
||||
@@ -996,14 +996,14 @@ public:
|
||||
}
|
||||
if (Creature* cr = GetEventNpc(NPC_INFINITE_AGENT)) // it is infinite agent now :)
|
||||
{
|
||||
cr->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
cr->SetImmuneToAll(false);
|
||||
cr->SetReactState(REACT_AGGRESSIVE);
|
||||
cr->SetInCombatWithZone();
|
||||
cr->AddThreat(me, 0.0f);
|
||||
}
|
||||
if (Creature* cr = GetEventNpc(NPC_INFINITE_HUNTER)) // it is infinite hunter now :)
|
||||
{
|
||||
cr->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
cr->SetImmuneToAll(false);
|
||||
cr->SetReactState(REACT_AGGRESSIVE);
|
||||
cr->SetInCombatWithZone();
|
||||
cr->AddThreat(me, 0.0f);
|
||||
@@ -1076,7 +1076,7 @@ public:
|
||||
me->SummonCreature(NPC_TIME_RIFT, EventPos[EVENT_SRC_EPOCH], TEMPSUMMON_TIMED_DESPAWN, 20000);
|
||||
if (Creature* cr = me->SummonCreature(NPC_EPOCH, EventPos[EVENT_SRC_EPOCH]))
|
||||
{
|
||||
cr->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
cr->SetImmuneToAll(true);
|
||||
cr->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetTarget(cr->GetGUID());
|
||||
cr->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_EPOCH]);
|
||||
@@ -1097,7 +1097,7 @@ public:
|
||||
case EVENT_ACTION_PHASE3+18:
|
||||
if (Creature* cr = GetEventNpc(NPC_EPOCH))
|
||||
{
|
||||
cr->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
cr->SetImmuneToAll(false);
|
||||
cr->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
cr->SetReactState(REACT_AGGRESSIVE);
|
||||
cr->AddThreat(me, 0.0f);
|
||||
@@ -1122,7 +1122,7 @@ public:
|
||||
case EVENT_ACTION_PHASE5:
|
||||
if (Creature* cr = GetEventNpc(NPC_MAL_GANIS))
|
||||
{
|
||||
cr->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
cr->SetImmuneToAll(false);
|
||||
cr->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
cr->SetInCombatWithZone();
|
||||
cr->AddThreat(me, 0.0f);
|
||||
|
||||
+4
-4
@@ -82,7 +82,7 @@ public:
|
||||
summons.Summon(summon);
|
||||
if (Creature* thrall = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(DATA_THRALL_GUID)))
|
||||
thrall->AI()->JustSummoned(summon);
|
||||
summon->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
summon->SetImmuneToAll(true);
|
||||
|
||||
if (summon->GetEntry() == NPC_SKARLOC_MOUNT)
|
||||
return;
|
||||
@@ -103,7 +103,7 @@ public:
|
||||
path.push_back(G3D::Vector3(startPath[i].GetPositionX(), startPath[i].GetPositionY(), startPath[i].GetPositionZ()));
|
||||
|
||||
me->GetMotionMaster()->MoveSplinePath(&path);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->Mount(SKARLOC_MOUNT_MODEL);
|
||||
}
|
||||
|
||||
@@ -168,13 +168,13 @@ public:
|
||||
Talk(SAY_ENTER);
|
||||
break;
|
||||
case EVENT_START_FIGHT:
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetInCombatWithZone();
|
||||
for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr)
|
||||
if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr))
|
||||
if (summon->GetEntry() != NPC_SKARLOC_MOUNT)
|
||||
{
|
||||
summon->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
summon->SetImmuneToAll(false);
|
||||
summon->SetInCombatWithZone();
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -620,7 +620,7 @@ public:
|
||||
case EVENT_SUMMON_CHRONO:
|
||||
if (Creature* epoch = me->SummonCreature(NPC_EPOCH_HUNTER, 2640.49f, 696.15f, 64.31f, 4.51f, TEMPSUMMON_MANUAL_DESPAWN))
|
||||
{
|
||||
epoch->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
epoch->SetImmuneToAll(true);
|
||||
epoch->AI()->Talk(SAY_EPOCH_ENTER1);
|
||||
}
|
||||
break;
|
||||
@@ -703,7 +703,7 @@ public:
|
||||
case EVENT_CALL_EPOCH:
|
||||
if (Creature* epoch = summons.GetCreatureWithEntry(NPC_EPOCH_HUNTER))
|
||||
{
|
||||
epoch->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
epoch->SetImmuneToAll(false);
|
||||
epoch->GetMotionMaster()->MovePoint(0, *me, false, true);
|
||||
}
|
||||
break;
|
||||
@@ -759,7 +759,7 @@ public:
|
||||
Talk(SAY_EVENT_COMPLETE);
|
||||
break;
|
||||
case EVENT_THRALL_RUN_AWAY:
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
SetEscortPaused(false);
|
||||
break;
|
||||
|
||||
@@ -91,6 +91,14 @@ enum Spells
|
||||
enum Actions
|
||||
{
|
||||
ACTION_FLESH_TENTACLE_KILLED = 1,
|
||||
|
||||
ACTION_SPAWN_EYE_TENTACLES = 1,
|
||||
};
|
||||
|
||||
enum Misc
|
||||
{
|
||||
MAX_TENTACLE_GROUPS = 5,
|
||||
GROUP_BEAM_PHASE = 1
|
||||
};
|
||||
|
||||
enum Yells
|
||||
@@ -146,45 +154,22 @@ public:
|
||||
|
||||
struct eye_of_cthunAI : public ScriptedAI
|
||||
{
|
||||
eye_of_cthunAI(Creature* creature) : ScriptedAI(creature)
|
||||
eye_of_cthunAI(Creature* creature) : ScriptedAI(creature), _summons(creature)
|
||||
{
|
||||
instance = creature->GetInstanceScript();
|
||||
|
||||
SetCombatMovement(false);
|
||||
}
|
||||
|
||||
InstanceScript* instance;
|
||||
|
||||
//Global variables
|
||||
uint32 PhaseTimer;
|
||||
|
||||
//Eye beam phase
|
||||
uint32 BeamTimer;
|
||||
uint32 EyeTentacleTimer;
|
||||
uint32 ClawTentacleTimer;
|
||||
|
||||
//Dark Glare phase
|
||||
uint32 DarkGlareTick;
|
||||
uint32 DarkGlareTickTimer;
|
||||
float DarkGlareAngle;
|
||||
bool ClockWise;
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
//Phase information
|
||||
PhaseTimer = 50000; //First dark glare in 50 seconds
|
||||
|
||||
//Eye beam phase 50 seconds
|
||||
BeamTimer = 3000;
|
||||
EyeTentacleTimer = 45000; //Always spawns 5 seconds before Dark Beam
|
||||
ClawTentacleTimer = 12500; //4 per Eye beam phase (unsure if they spawn during Dark beam)
|
||||
|
||||
//Dark Beam phase 35 seconds (each tick = 1 second, 35 ticks)
|
||||
DarkGlareTick = 0;
|
||||
DarkGlareTickTimer = 1000;
|
||||
DarkGlareAngle = 0;
|
||||
ClockWise = false;
|
||||
|
||||
_eyeTentacleCounter = 0;
|
||||
|
||||
//Reset flags
|
||||
me->RemoveAurasDueToSpell(SPELL_RED_COLORATION);
|
||||
me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM);
|
||||
@@ -198,20 +183,128 @@ public:
|
||||
Creature* pPortal = me->FindNearestCreature(NPC_CTHUN_PORTAL, 10);
|
||||
if (pPortal)
|
||||
pPortal->SetReactState(REACT_PASSIVE);
|
||||
|
||||
_summons.DespawnAll();
|
||||
_scheduler.CancelAll();
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/) override
|
||||
{
|
||||
DoZoneInCombat();
|
||||
ScheduleTasks();
|
||||
instance->SetData(DATA_CTHUN_PHASE, PHASE_EYE_GREEN_BEAM);
|
||||
}
|
||||
|
||||
void SpawnEyeTentacle(float x, float y)
|
||||
void DoAction(int32 action) override
|
||||
{
|
||||
if (Creature* Spawned = DoSpawnCreature(NPC_EYE_TENTACLE, x, y, 0, 0, TEMPSUMMON_CORPSE_DESPAWN, 500))
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
||||
if (Spawned->AI())
|
||||
Spawned->AI()->AttackStart(target);
|
||||
if (action == ACTION_SPAWN_EYE_TENTACLES)
|
||||
{
|
||||
me->SummonCreatureGroup(_eyeTentacleCounter);
|
||||
_eyeTentacleCounter++;
|
||||
|
||||
if (_eyeTentacleCounter >= MAX_TENTACLE_GROUPS)
|
||||
{
|
||||
_eyeTentacleCounter = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ScheduleTasks()
|
||||
{
|
||||
_scheduler.Schedule(3s, [this](TaskContext task)
|
||||
{
|
||||
DoCastRandomTarget(SPELL_GREEN_BEAM);
|
||||
task.SetGroup(GROUP_BEAM_PHASE);
|
||||
task.Repeat();
|
||||
}).Schedule(12s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
|
||||
{
|
||||
if (Creature* tentacle = me->SummonCreature(NPC_CLAW_TENTACLE, *target, TEMPSUMMON_CORPSE_DESPAWN, 1000))
|
||||
{
|
||||
tentacle->AI()->AttackStart(target);
|
||||
}
|
||||
}
|
||||
|
||||
task.SetGroup(GROUP_BEAM_PHASE);
|
||||
task.Repeat();
|
||||
}).Schedule(45s, [this](TaskContext task)
|
||||
{
|
||||
DoAction(ACTION_SPAWN_EYE_TENTACLES);
|
||||
task.SetGroup(GROUP_BEAM_PHASE);
|
||||
task.Repeat();
|
||||
}).Schedule(50s, [this](TaskContext /*task*/)
|
||||
{
|
||||
_scheduler.CancelGroup(GROUP_BEAM_PHASE);
|
||||
|
||||
me->StopMoving();
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
me->SetTarget(ObjectGuid::Empty);
|
||||
|
||||
_scheduler.Schedule(1s, [this](TaskContext /*task*/)
|
||||
{
|
||||
//Select random target for dark beam to start on
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
|
||||
{
|
||||
//Face our target
|
||||
DarkGlareAngle = me->GetAngle(target);
|
||||
DarkGlareTick = 0;
|
||||
ClockWise = RAND(true, false);
|
||||
|
||||
me->SetTarget(target->GetGUID());
|
||||
|
||||
//Add red coloration to C'thun
|
||||
DoCast(me, SPELL_RED_COLORATION, true);
|
||||
|
||||
//Freeze animation
|
||||
DoCast(me, SPELL_FREEZE_ANIM, true);
|
||||
|
||||
me->StopMoving();
|
||||
me->SetFacingToObject(target);
|
||||
me->SetOrientation(DarkGlareAngle);
|
||||
}
|
||||
|
||||
_scheduler.Schedule(3s, [this](TaskContext tasker)
|
||||
{
|
||||
me->SetTarget(ObjectGuid::Empty);
|
||||
me->StopMoving();
|
||||
|
||||
if (ClockWise)
|
||||
{
|
||||
me->SetFacingTo(DarkGlareAngle + DarkGlareTick * float(M_PI) / 35);
|
||||
me->SetOrientation(DarkGlareAngle + DarkGlareTick * float(M_PI) / 35);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
me->SetFacingTo(DarkGlareAngle - DarkGlareTick * float(M_PI) / 35);
|
||||
me->SetOrientation(DarkGlareAngle - DarkGlareTick * float(M_PI) / 35);
|
||||
}
|
||||
|
||||
DoCastSelf(SPELL_DARK_GLARE);
|
||||
++DarkGlareTick;
|
||||
|
||||
if (tasker.GetRepeatCounter() >= 35)
|
||||
{
|
||||
_scheduler.CancelAll();
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->RemoveAurasDueToSpell(SPELL_RED_COLORATION);
|
||||
me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM);
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
ScheduleTasks();
|
||||
}
|
||||
else
|
||||
tasker.Repeat(1s);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon) override
|
||||
{
|
||||
_summons.Summon(summon);
|
||||
summon->SetInCombatWithZone();
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@@ -220,162 +313,8 @@ public:
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
uint32 currentPhase = instance->GetData(DATA_CTHUN_PHASE);
|
||||
if (currentPhase == PHASE_EYE_GREEN_BEAM || currentPhase == PHASE_EYE_RED_BEAM)
|
||||
switch (instance->GetData(DATA_CTHUN_PHASE))
|
||||
{
|
||||
// EyeTentacleTimer
|
||||
if (EyeTentacleTimer <= diff)
|
||||
{
|
||||
//Spawn the 8 Eye Tentacles in the corret spots
|
||||
SpawnEyeTentacle(0, 20); //south
|
||||
SpawnEyeTentacle(10, 10); //south west
|
||||
SpawnEyeTentacle(20, 0); //west
|
||||
SpawnEyeTentacle(10, -10); //north west
|
||||
|
||||
SpawnEyeTentacle(0, -20); //north
|
||||
SpawnEyeTentacle(-10, -10); //north east
|
||||
SpawnEyeTentacle(-20, 0); // east
|
||||
SpawnEyeTentacle(-10, 10); // south east
|
||||
|
||||
EyeTentacleTimer = 45000;
|
||||
}
|
||||
else EyeTentacleTimer -= diff;
|
||||
}
|
||||
|
||||
switch (currentPhase)
|
||||
{
|
||||
case PHASE_EYE_GREEN_BEAM:
|
||||
//BeamTimer
|
||||
if (BeamTimer <= diff)
|
||||
{
|
||||
//SPELL_GREEN_BEAM
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
||||
{
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
DoCast(target, SPELL_GREEN_BEAM);
|
||||
|
||||
//Correctly update our target
|
||||
me->SetTarget(target->GetGUID());
|
||||
}
|
||||
|
||||
//Beam every 3 seconds
|
||||
BeamTimer = 3000;
|
||||
}
|
||||
else BeamTimer -= diff;
|
||||
|
||||
//ClawTentacleTimer
|
||||
if (ClawTentacleTimer <= diff)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
||||
{
|
||||
//Spawn claw tentacle on the random target
|
||||
Creature* spawned = me->SummonCreature(NPC_CLAW_TENTACLE, *target, TEMPSUMMON_CORPSE_DESPAWN, 500);
|
||||
|
||||
if (spawned && spawned->AI())
|
||||
{
|
||||
spawned->AI()->AttackStart(target);
|
||||
}
|
||||
}
|
||||
|
||||
//One claw tentacle every 12.5 seconds
|
||||
ClawTentacleTimer = 12500;
|
||||
}
|
||||
else ClawTentacleTimer -= diff;
|
||||
|
||||
//PhaseTimer
|
||||
if (PhaseTimer <= diff)
|
||||
{
|
||||
//Switch to Dark Beam
|
||||
instance->SetData(DATA_CTHUN_PHASE, PHASE_EYE_RED_BEAM);
|
||||
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
|
||||
//Remove any target
|
||||
me->SetTarget();
|
||||
|
||||
//Select random target for dark beam to start on
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
||||
{
|
||||
//Face our target
|
||||
DarkGlareAngle = me->GetAngle(target);
|
||||
DarkGlareTickTimer = 4000;
|
||||
DarkGlareTick = 0;
|
||||
ClockWise = RAND(true, false);
|
||||
}
|
||||
|
||||
//Add red coloration to C'thun
|
||||
DoCast(me, SPELL_RED_COLORATION, true);
|
||||
|
||||
//Freeze animation
|
||||
DoCast(me, SPELL_FREEZE_ANIM);
|
||||
me->StopMoving();
|
||||
me->SetFacingTo(DarkGlareAngle);
|
||||
me->SetOrientation(DarkGlareAngle);
|
||||
|
||||
//Darkbeam for 35 seconds
|
||||
PhaseTimer = 35000;
|
||||
}
|
||||
else PhaseTimer -= diff;
|
||||
|
||||
break;
|
||||
|
||||
case PHASE_EYE_RED_BEAM:
|
||||
if (DarkGlareTick < 35)
|
||||
{
|
||||
if (DarkGlareTickTimer <= diff)
|
||||
{
|
||||
me->StopMoving();
|
||||
|
||||
//Set angle and cast
|
||||
if (ClockWise)
|
||||
{
|
||||
me->SetFacingTo(DarkGlareAngle + DarkGlareTick * M_PI / 35);
|
||||
me->SetOrientation(DarkGlareAngle + DarkGlareTick * M_PI / 35);
|
||||
}
|
||||
else
|
||||
{
|
||||
me->SetFacingTo(DarkGlareAngle - DarkGlareTick * M_PI / 35);
|
||||
me->SetOrientation(DarkGlareAngle - DarkGlareTick * M_PI / 35);
|
||||
}
|
||||
|
||||
//Actual dark glare cast, maybe something missing here?
|
||||
DoCast(me, SPELL_DARK_GLARE, false);
|
||||
|
||||
//Increase tick
|
||||
++DarkGlareTick;
|
||||
|
||||
//1 second per tick
|
||||
DarkGlareTickTimer = 1000;
|
||||
}
|
||||
else DarkGlareTickTimer -= diff;
|
||||
}
|
||||
|
||||
//PhaseTimer
|
||||
if (PhaseTimer <= diff)
|
||||
{
|
||||
//Switch to Eye Beam
|
||||
instance->SetData(DATA_CTHUN_PHASE, PHASE_EYE_GREEN_BEAM);
|
||||
|
||||
BeamTimer = 3000;
|
||||
ClawTentacleTimer = 12500; //4 per Eye beam phase (unsure if they spawn during Dark beam)
|
||||
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
|
||||
//Remove Red coloration from c'thun
|
||||
me->RemoveAurasDueToSpell(SPELL_RED_COLORATION);
|
||||
me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM);
|
||||
|
||||
//set it back to aggressive
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
|
||||
//Eye Beam for 50 seconds
|
||||
PhaseTimer = 50000;
|
||||
}
|
||||
else PhaseTimer -= diff;
|
||||
|
||||
break;
|
||||
|
||||
//Transition phase
|
||||
case PHASE_CTHUN_TRANSITION:
|
||||
//Remove any target
|
||||
@@ -386,13 +325,16 @@ public:
|
||||
|
||||
//Dead phase
|
||||
case PHASE_CTHUN_DONE:
|
||||
Creature* pPortal = me->FindNearestCreature(NPC_CTHUN_PORTAL, 10);
|
||||
if (pPortal)
|
||||
if (Creature* pPortal = me->FindNearestCreature(NPC_CTHUN_PORTAL, 10))
|
||||
{
|
||||
pPortal->DespawnOrUnsummon();
|
||||
}
|
||||
|
||||
me->DespawnOrUnsummon();
|
||||
break;
|
||||
}
|
||||
|
||||
_scheduler.Update(diff);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
|
||||
@@ -437,6 +379,18 @@ public:
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
InstanceScript* instance;
|
||||
|
||||
//Dark Glare phase
|
||||
uint32 DarkGlareTick;
|
||||
float DarkGlareAngle;
|
||||
bool ClockWise;
|
||||
|
||||
uint32 _eyeTentacleCounter;
|
||||
TaskScheduler _scheduler;
|
||||
SummonList _summons;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -522,15 +476,6 @@ public:
|
||||
DoZoneInCombat();
|
||||
}
|
||||
|
||||
void SpawnEyeTentacle(float x, float y)
|
||||
{
|
||||
Creature* Spawned;
|
||||
Spawned = DoSpawnCreature(NPC_EYE_TENTACLE, x, y, 0, 0, TEMPSUMMON_CORPSE_DESPAWN, 500);
|
||||
if (Spawned && Spawned->AI())
|
||||
if (Unit* target = SelectRandomNotStomach())
|
||||
Spawned->AI()->AttackStart(target);
|
||||
}
|
||||
|
||||
Unit* SelectRandomNotStomach()
|
||||
{
|
||||
if (Stomach_Map.empty())
|
||||
@@ -607,16 +552,10 @@ public:
|
||||
// EyeTentacleTimer
|
||||
if (EyeTentacleTimer <= diff)
|
||||
{
|
||||
//Spawn the 8 Eye Tentacles in the corret spots
|
||||
SpawnEyeTentacle(0, 20); //south
|
||||
SpawnEyeTentacle(10, 10); //south west
|
||||
SpawnEyeTentacle(20, 0); //west
|
||||
SpawnEyeTentacle(10, -10); //north west
|
||||
|
||||
SpawnEyeTentacle(0, -20); //north
|
||||
SpawnEyeTentacle(-10, -10); //north east
|
||||
SpawnEyeTentacle(-20, 0); // east
|
||||
SpawnEyeTentacle(-10, 10); // south east
|
||||
if (Creature* eye = instance->GetCreature(DATA_EYE_OF_CTHUN))
|
||||
{
|
||||
eye->AI()->DoAction(ACTION_SPAWN_EYE_TENTACLES);
|
||||
}
|
||||
|
||||
EyeTentacleTimer = 30000; // every 30sec in phase 2
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ EndScriptData */
|
||||
ObjectData const creatureData[] =
|
||||
{
|
||||
{ NPC_SARTURA, DATA_SARTURA },
|
||||
{ NPC_EYE_OF_CTHUN, DATA_EYE_OF_CTHUN }
|
||||
};
|
||||
|
||||
class instance_temple_of_ahnqiraj : public InstanceMapScript
|
||||
|
||||
@@ -38,12 +38,14 @@ enum DataTypes
|
||||
DATA_BUG_TRIO_DEATH = 14,
|
||||
DATA_CTHUN_PHASE = 20,
|
||||
DATA_VISCIDUS = 21,
|
||||
DATA_SARTURA = 22
|
||||
DATA_SARTURA = 22,
|
||||
|
||||
DATA_EYE_OF_CTHUN = 23
|
||||
};
|
||||
|
||||
enum Creatures
|
||||
{
|
||||
BOSS_EYE_OF_CTHUN = 15589,
|
||||
NPC_EYE_OF_CTHUN = 15589,
|
||||
NPC_CTHUN_PORTAL = 15896,
|
||||
NPC_CLAW_TENTACLE = 15725,
|
||||
NPC_EYE_TENTACLE = 15726,
|
||||
|
||||
@@ -258,14 +258,14 @@ public:
|
||||
{
|
||||
summon->SetFaction(faction);
|
||||
if (remove)
|
||||
summon->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
summon->SetImmuneToNPC(false);
|
||||
else
|
||||
summon->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
summon->SetImmuneToNPC(true);
|
||||
}
|
||||
if (remove)
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToNPC(false);
|
||||
else
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToNPC(true);
|
||||
me->SetFaction(faction);
|
||||
}
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ public:
|
||||
return;
|
||||
|
||||
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
SetCombatMovement(true);
|
||||
|
||||
if (me->IsInCombat())
|
||||
|
||||
@@ -99,7 +99,7 @@ public:
|
||||
void InitializeAI() override
|
||||
{
|
||||
me->SetNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->RestoreFaction();
|
||||
|
||||
_events.Reset();
|
||||
@@ -203,7 +203,7 @@ public:
|
||||
Talk(TALK_0, player);
|
||||
|
||||
me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE);
|
||||
me->GetMotionMaster()->MoveFollow(player, 3.f, M_PI);
|
||||
|
||||
|
||||
@@ -584,7 +584,7 @@ public:
|
||||
{
|
||||
npc_omenAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(true);
|
||||
me->GetMotionMaster()->MovePoint(1, 7549.977f, -2855.137f, 456.9678f);
|
||||
}
|
||||
|
||||
@@ -598,7 +598,7 @@ public:
|
||||
if (pointId == 1)
|
||||
{
|
||||
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
if (Player* player = me->SelectNearestPlayer(40.0f))
|
||||
AttackStart(player);
|
||||
}
|
||||
|
||||
@@ -153,7 +153,7 @@ public:
|
||||
|
||||
creature->AI()->Talk(SAY_START);
|
||||
creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE);
|
||||
creature->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
creature->SetImmuneToPC(false);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -165,7 +165,8 @@ struct boss_jedoga_shadowseeker : public BossAI
|
||||
void Reset() override
|
||||
{
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
me->AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
|
||||
me->SetDisableGravity(true);
|
||||
me->SetHover(true);
|
||||
@@ -254,7 +255,8 @@ struct boss_jedoga_shadowseeker : public BossAI
|
||||
{
|
||||
summon->GetMotionMaster()->MovePoint(POINT_INITIAL, VolunteerSpotPositions[i][1]);
|
||||
summon->SetReactState(REACT_PASSIVE);
|
||||
summon->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC );
|
||||
summon->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
|
||||
summon->SetImmuneToAll(true);
|
||||
summons.Summon(summon);
|
||||
}
|
||||
}
|
||||
@@ -357,6 +359,7 @@ struct boss_jedoga_shadowseeker : public BossAI
|
||||
me->ClearUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
|
||||
ReschedulleCombatEvents();
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
|
||||
me->RemoveAurasDueToSpell(SPELL_SPHERE_VISUAL);
|
||||
@@ -583,7 +586,8 @@ struct npc_twilight_volunteer : public ScriptedAI
|
||||
DoCastSelf(SPELL_ACTIVATE_INITIATE, true);
|
||||
me->RemoveAurasDueToSpell(SPELL_WHITE_SPHERE);
|
||||
me->SetControlled(false, UNIT_STATE_STUNNED);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
|
||||
Talk(SAY_CHOSEN);
|
||||
me->SetStandState(UNIT_STAND_STATE_STAND);
|
||||
|
||||
@@ -214,7 +214,7 @@ struct boss_taldaram : public BossAI
|
||||
// Event not started
|
||||
if (instance->GetData(DATA_TELDRAM_SPHERE1) != DONE || instance->GetData(DATA_TELDRAM_SPHERE2) != DONE)
|
||||
{
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetDisableGravity(true);
|
||||
me->SetHover(true);
|
||||
if (!me->HasAura(SPELL_BEAM_VISUAL))
|
||||
@@ -260,7 +260,8 @@ struct boss_taldaram : public BossAI
|
||||
me->SetDisableGravity(false);
|
||||
me->SetHover(false);
|
||||
me->RemoveAllAuras();
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE| UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
me->UpdatePosition(me->GetHomePosition(), true);
|
||||
}
|
||||
summons.DespawnEntry(NPC_JEDOGA_CONTROLLER);
|
||||
@@ -274,7 +275,8 @@ struct boss_taldaram : public BossAI
|
||||
me->SetDisableGravity(false);
|
||||
me->SetHover(false);
|
||||
me->RemoveAllAuras();
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE| UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -310,7 +310,7 @@ public:
|
||||
continue;
|
||||
}
|
||||
|
||||
dragon->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
dragon->SetImmuneToNPC(true);
|
||||
dragon->SetFullHealth();
|
||||
|
||||
++dragonsCount;
|
||||
@@ -729,7 +729,7 @@ struct boss_sartharion_dragonAI : public BossAI
|
||||
events.Reset();
|
||||
ClearInstance();
|
||||
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToNPC(false);
|
||||
me->SetSpeed(MOVE_FLIGHT, 1.0f);
|
||||
me->SetCanFly(false);
|
||||
me->ResetLootMode();
|
||||
@@ -790,7 +790,7 @@ struct boss_sartharion_dragonAI : public BossAI
|
||||
}
|
||||
}
|
||||
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToNPC(false);
|
||||
me->SetInCombatWithZone();
|
||||
}
|
||||
|
||||
|
||||
+4
-1
@@ -105,7 +105,10 @@ public:
|
||||
{
|
||||
BossAI::Reset();
|
||||
if (instance->GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && instance->GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
{
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToPC(false);
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* who) override
|
||||
|
||||
@@ -187,7 +187,10 @@ public:
|
||||
case DATA_BALTHARUS_THE_WARBORN:
|
||||
if (GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE && GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE)
|
||||
if (Creature* zarithrian = instance->GetCreature(GeneralZarithrianGUID))
|
||||
zarithrian->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
{
|
||||
zarithrian->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
zarithrian->SetImmuneToPC(false);
|
||||
}
|
||||
break;
|
||||
case DATA_GENERAL_ZARITHRIAN:
|
||||
if (state == DONE)
|
||||
|
||||
+8
-4
@@ -158,7 +158,8 @@ public:
|
||||
me->GetThreatMgr().clearReferences();
|
||||
me->SetRegeneratingHealth(false);
|
||||
_EnterEvadeMode();
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
if( pInstance )
|
||||
pInstance->SetData(BOSS_ARGENT_CHALLENGE, DONE);
|
||||
}
|
||||
@@ -305,7 +306,8 @@ public:
|
||||
me->GetThreatMgr().clearReferences();
|
||||
me->SetRegeneratingHealth(false);
|
||||
_EnterEvadeMode();
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
if( pInstance )
|
||||
{
|
||||
pInstance->SetData(BOSS_ARGENT_CHALLENGE, DONE);
|
||||
@@ -404,7 +406,8 @@ public:
|
||||
events.Reset();
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetObjectScale(0.01f);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
events.ScheduleEvent(EVENT_MEMORY_SCALE, 500);
|
||||
}
|
||||
|
||||
@@ -440,7 +443,8 @@ public:
|
||||
|
||||
break;
|
||||
case EVENT_MEMORY_START_ATTACK:
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
if( Unit* target = me->SelectNearestTarget(200.0f) )
|
||||
{
|
||||
AttackStart(target);
|
||||
|
||||
+6
-3
@@ -120,7 +120,8 @@ public:
|
||||
summons.DespawnAll();
|
||||
Phase = 1;
|
||||
me->SetDisplayId(me->GetNativeDisplayId());
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
if( pInstance )
|
||||
pInstance->SetData(BOSS_BLACK_KNIGHT, NOT_STARTED);
|
||||
@@ -193,7 +194,8 @@ public:
|
||||
{
|
||||
case SPELL_BLACK_KNIGHT_RES:
|
||||
me->SetHealth(me->GetMaxHealth());
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetControlled(false, UNIT_STATE_STUNNED);
|
||||
|
||||
me->RemoveUnitFlag(UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT);
|
||||
@@ -342,7 +344,8 @@ public:
|
||||
{
|
||||
Start(false, true, ObjectGuid::Empty, nullptr);
|
||||
SetDespawnAtEnd(true);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
}
|
||||
|
||||
void DoAction(int32 param) override
|
||||
|
||||
+12
-6
@@ -400,7 +400,8 @@ public:
|
||||
{
|
||||
DoAction(1);
|
||||
DoAction(2);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
}
|
||||
@@ -488,7 +489,8 @@ public:
|
||||
me->SetRegeneratingHealth(true);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_PACIFIED);
|
||||
me->SetSpeed(MOVE_RUN, 1.0f, false);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
|
||||
me->RemoveAllAuras();
|
||||
AddCreatureAddonAuras();
|
||||
@@ -556,7 +558,8 @@ public:
|
||||
me->StopMoving();
|
||||
me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
|
||||
me->SetRegeneratingHealth(false);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
|
||||
if( pInstance )
|
||||
{
|
||||
@@ -584,7 +587,8 @@ public:
|
||||
me->CombatStop(true);
|
||||
me->GetMotionMaster()->Clear();
|
||||
me->SetRegeneratingHealth(false);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
if( pInstance )
|
||||
pInstance->SetData(DATA_GRAND_CHAMPION_DIED, BossOrder);
|
||||
}
|
||||
@@ -627,7 +631,8 @@ public:
|
||||
events.ScheduleEvent(EVENT_SHIELD_BREAKER, urand(5000, 8000));
|
||||
events.ScheduleEvent(EVENT_THRUST, urand(3000, 5000));
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
if( Unit* target = me->SelectNearestTarget(200.0f) )
|
||||
AttackStart(target);
|
||||
DoZoneInCombat();
|
||||
@@ -720,7 +725,8 @@ public:
|
||||
{
|
||||
me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
|
||||
NewMountGUID = mount->GetGUID();
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
me->GetMotionMaster()->MovePoint(7, *mount);
|
||||
events.RepeatEvent(200);
|
||||
break;
|
||||
|
||||
+18
-9
@@ -733,7 +733,8 @@ public:
|
||||
{
|
||||
NPC_GrandChampionGUID[BossOrder] = pBoss->GetGUID();
|
||||
pBoss->ToCreature()->SetReactState(REACT_PASSIVE);
|
||||
pBoss->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_PACIFIED);
|
||||
pBoss->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED);
|
||||
pBoss->SetImmuneToAll(true);
|
||||
pBoss->ToCreature()->SetHomePosition(748.309f, 619.448f, 411.3f, M_PI / 2);
|
||||
pBoss->AI()->SetData(BossOrder, (shortver ? 1 : 0));
|
||||
|
||||
@@ -742,7 +743,8 @@ public:
|
||||
{
|
||||
NPC_GrandChampionMinionsGUID[BossOrder][i] = pAdd->GetGUID();
|
||||
pAdd->SetReactState(REACT_PASSIVE);
|
||||
pAdd->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
pAdd->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
pAdd->SetImmuneToAll(true);
|
||||
pAdd->SetHomePosition(748.309f, 619.448f, 411.3f, M_PI / 2);
|
||||
pAdd->GetMotionMaster()->MoveFollow(pBoss, 2.0f, (i + 1)*M_PI / 2);
|
||||
}
|
||||
@@ -839,7 +841,8 @@ public:
|
||||
if( Creature* c = instance->GetCreature(NPC_GrandChampionMinionsGUID[1][i]) )
|
||||
{
|
||||
c->SetReactState(REACT_AGGRESSIVE);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
c->SetImmuneToAll(false);
|
||||
if( Unit* target = c->SelectNearestTarget(200.0f) )
|
||||
c->AI()->AttackStart(target);
|
||||
c->AI()->DoZoneInCombat();
|
||||
@@ -865,7 +868,8 @@ public:
|
||||
if( Creature* c = instance->GetCreature(NPC_GrandChampionMinionsGUID[0][i]) )
|
||||
{
|
||||
c->SetReactState(REACT_AGGRESSIVE);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
c->SetImmuneToAll(false);
|
||||
if( Unit* target = c->SelectNearestTarget(200.0f) )
|
||||
c->AI()->AttackStart(target);
|
||||
c->AI()->DoZoneInCombat();
|
||||
@@ -890,7 +894,8 @@ public:
|
||||
if( Creature* c = instance->GetCreature(NPC_GrandChampionMinionsGUID[2][i]) )
|
||||
{
|
||||
c->SetReactState(REACT_AGGRESSIVE);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
c->SetImmuneToAll(false);
|
||||
if( Unit* target = c->SelectNearestTarget(200.0f) )
|
||||
c->AI()->AttackStart(target);
|
||||
c->AI()->DoZoneInCombat();
|
||||
@@ -915,7 +920,8 @@ public:
|
||||
if( Creature* c = instance->GetCreature(NPC_GrandChampionGUID[i]) )
|
||||
{
|
||||
c->SetReactState(REACT_AGGRESSIVE);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
c->SetImmuneToAll(false);
|
||||
if( Unit* target = c->SelectNearestTarget(200.0f) )
|
||||
c->AI()->AttackStart(target);
|
||||
c->AI()->DoZoneInCombat();
|
||||
@@ -952,7 +958,8 @@ public:
|
||||
if( Creature* c = instance->GetCreature(NPC_GrandChampionGUID[i]) )
|
||||
{
|
||||
c->SetReactState(REACT_AGGRESSIVE);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
c->SetImmuneToAll(false);
|
||||
if( Unit* target = c->SelectNearestTarget(200.0f) )
|
||||
c->AI()->AttackStart(target);
|
||||
c->AI()->DoZoneInCombat();
|
||||
@@ -1056,7 +1063,8 @@ public:
|
||||
if( Creature* c = instance->GetCreature(NPC_ArgentSoldierGUID[i][j]) )
|
||||
{
|
||||
c->SetReactState(REACT_AGGRESSIVE);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
c->SetImmuneToAll(false);
|
||||
//c->AI()->DoZoneInCombat();
|
||||
}
|
||||
if( Creature* tirion = instance->GetCreature(NPC_TirionGUID) )
|
||||
@@ -1077,7 +1085,8 @@ public:
|
||||
if( Creature* boss = instance->GetCreature(NPC_ArgentChampionGUID) )
|
||||
{
|
||||
boss->SetReactState(REACT_AGGRESSIVE);
|
||||
boss->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
boss->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
boss->SetImmuneToAll(false);
|
||||
if( Unit* target = boss->SelectNearestTarget(200.0f) )
|
||||
boss->AI()->AttackStart(target);
|
||||
boss->AI()->DoZoneInCombat();
|
||||
|
||||
@@ -66,7 +66,7 @@ public:
|
||||
{
|
||||
startFightTimer = 0;
|
||||
uiHopelessnessCount = 0;
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetControlled(false, UNIT_STATE_ROOT);
|
||||
events.Reset();
|
||||
if (pInstance)
|
||||
@@ -75,7 +75,7 @@ public:
|
||||
|
||||
void EnterCombat(Unit* /*who*/) override
|
||||
{
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(false);
|
||||
|
||||
events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 5000);
|
||||
events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 11000);
|
||||
|
||||
@@ -63,7 +63,7 @@ public:
|
||||
void Reset() override
|
||||
{
|
||||
startFightTimer = 0;
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
events.Reset();
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_MARWYN, NOT_STARTED);
|
||||
@@ -71,7 +71,7 @@ public:
|
||||
|
||||
void EnterCombat(Unit* /*who*/) override
|
||||
{
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(false);
|
||||
|
||||
events.ScheduleEvent(EVENT_OBLITERATE, 15000);
|
||||
events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000);
|
||||
|
||||
@@ -755,7 +755,10 @@ public:
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode(why);
|
||||
if (me->GetInstanceScript()->GetData(DATA_WAVE_NUMBER))
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
{
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
@@ -851,7 +854,10 @@ public:
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode(why);
|
||||
if (me->GetInstanceScript()->GetData(DATA_WAVE_NUMBER))
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
{
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
@@ -994,7 +1000,10 @@ public:
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode(why);
|
||||
if (me->GetInstanceScript()->GetData(DATA_WAVE_NUMBER))
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
{
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
@@ -1077,7 +1086,10 @@ public:
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode(why);
|
||||
if (me->GetInstanceScript()->GetData(DATA_WAVE_NUMBER))
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
{
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
@@ -1161,7 +1173,10 @@ public:
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode(why);
|
||||
if (me->GetInstanceScript()->GetData(DATA_WAVE_NUMBER))
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
{
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
+7
-5
@@ -68,7 +68,7 @@ public:
|
||||
break;
|
||||
case 8:
|
||||
_owner.SetReactState(REACT_AGGRESSIVE);
|
||||
_owner.RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
_owner.SetImmuneToAll(false);
|
||||
if (InstanceScript* instance = _owner.GetInstanceScript())
|
||||
instance->SetData(DATA_BATTERED_HILT, 8);
|
||||
break;
|
||||
@@ -96,7 +96,7 @@ public:
|
||||
{
|
||||
Position homePos = _owner.GetHomePosition();
|
||||
_owner.SetReactState(REACT_PASSIVE);
|
||||
_owner.SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
_owner.SetImmuneToAll(true);
|
||||
_owner.SetVisible(false);
|
||||
_owner.UpdatePosition(homePos.GetPositionX(), homePos.GetPositionY(), homePos.GetPositionZ(), homePos.GetOrientation(), true);
|
||||
_owner.StopMovingOnCurrentPos();
|
||||
@@ -629,7 +629,7 @@ public:
|
||||
if (Creature* c = instance->GetCreature(NPC_QuelDelarGUID))
|
||||
{
|
||||
c->SetReactState(REACT_AGGRESSIVE);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
c->SetImmuneToAll(false);
|
||||
c->RemoveAurasDueToSpell(70300);
|
||||
}
|
||||
break;
|
||||
@@ -889,7 +889,8 @@ public:
|
||||
if (c->GetEntry() == entry)
|
||||
{
|
||||
TrashActive[j] = true;
|
||||
c->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
c->SetImmuneToAll(false);
|
||||
c->AI()->DoAction(1);
|
||||
break;
|
||||
}
|
||||
@@ -918,7 +919,8 @@ public:
|
||||
c->GetThreatMgr().ClearAllThreat();
|
||||
c->CombatStop(true);
|
||||
c->InterruptNonMeleeSpells(true);
|
||||
c->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
c->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
c->SetImmuneToAll(true);
|
||||
c->Respawn(true);
|
||||
c->UpdatePosition(c->GetHomePosition(), true);
|
||||
c->StopMovingOnCurrentPos();
|
||||
|
||||
@@ -418,7 +418,8 @@ public:
|
||||
c->CastSpell(c, 69753, false);
|
||||
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetUnitFlag(UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
|
||||
me->SetDynamicFlag(UNIT_DYNFLAG_DEAD);
|
||||
me->AddUnitState(UNIT_STATE_DIED);
|
||||
|
||||
@@ -930,7 +930,7 @@ public:
|
||||
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_TYRANNUS_GUID)))
|
||||
{
|
||||
c->AI()->Talk(SAY_PREFIGHT_1);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
c->SetImmuneToPC(false);
|
||||
c->SetReactState(REACT_AGGRESSIVE);
|
||||
//c->ClearUnitState(UNIT_STATE_ONVEHICLE);
|
||||
if (Player* plr = c->SelectNearestPlayer(100.0f))
|
||||
|
||||
@@ -212,7 +212,7 @@ public:
|
||||
|
||||
me->SetDynamicFlag(UNIT_DYNFLAG_DEAD);
|
||||
me->SetUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
}
|
||||
@@ -367,7 +367,8 @@ public:
|
||||
{
|
||||
case ACTION_STAND_UP:
|
||||
summons.DespawnEntry(WORLD_TRIGGER);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
me->RemoveDynamicFlag(UNIT_DYNFLAG_DEAD);
|
||||
me->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
@@ -471,7 +472,7 @@ public:
|
||||
|
||||
me->SetDynamicFlag(UNIT_DYNFLAG_DEAD);
|
||||
me->SetUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
}
|
||||
@@ -636,7 +637,8 @@ public:
|
||||
{
|
||||
case ACTION_STAND_UP:
|
||||
summons.DespawnEntry(WORLD_TRIGGER);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
me->RemoveDynamicFlag(UNIT_DYNFLAG_DEAD);
|
||||
me->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
@@ -755,7 +757,7 @@ public:
|
||||
|
||||
me->SetDynamicFlag(UNIT_DYNFLAG_DEAD);
|
||||
me->SetUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
}
|
||||
@@ -929,7 +931,8 @@ public:
|
||||
{
|
||||
case ACTION_STAND_UP:
|
||||
summons.DespawnEntry(WORLD_TRIGGER);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
me->RemoveDynamicFlag(UNIT_DYNFLAG_DEAD);
|
||||
me->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
|
||||
@@ -251,7 +251,7 @@ public:
|
||||
void Reset() override
|
||||
{
|
||||
_Reset();
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetReactState(REACT_DEFENSIVE);
|
||||
events.Reset();
|
||||
_introDone = false;
|
||||
@@ -323,7 +323,7 @@ public:
|
||||
|
||||
void AttackStart(Unit* victim) override
|
||||
{
|
||||
if (!_introDone || me->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC))
|
||||
if (!_introDone || me->IsImmuneToPC())
|
||||
return;
|
||||
|
||||
ScriptedAI::AttackStart(victim);
|
||||
@@ -707,7 +707,7 @@ public:
|
||||
if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_DEATHBRINGER_SAURFANG)))
|
||||
{
|
||||
deathbringer->AI()->DoAction(ACTION_INTRO_DONE);
|
||||
deathbringer->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
deathbringer->SetImmuneToPC(false);
|
||||
if (Player* target = deathbringer->SelectNearestPlayer(100.0f))
|
||||
deathbringer->AI()->AttackStart(target);
|
||||
}
|
||||
@@ -945,7 +945,7 @@ public:
|
||||
if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_DEATHBRINGER_SAURFANG)))
|
||||
{
|
||||
deathbringer->AI()->DoAction(ACTION_INTRO_DONE);
|
||||
deathbringer->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
deathbringer->SetImmuneToPC(false);
|
||||
if (Player* target = deathbringer->SelectNearestPlayer(100.0f))
|
||||
deathbringer->AI()->AttackStart(target);
|
||||
}
|
||||
|
||||
@@ -1431,7 +1431,7 @@ public:
|
||||
return;
|
||||
|
||||
me->setActive(true);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(true);
|
||||
float moveTime = me->GetExactDist(&SpinestalkerFlyPos) / (me->GetSpeed(MOVE_RUN) * 0.001f);
|
||||
me->m_Events.AddEvent(new FrostwyrmLandEvent(*me, SpinestalkerLandPos), me->m_Events.CalculateTime(uint64(moveTime) + 250));
|
||||
me->SetDefaultMovementType(IDLE_MOTION_TYPE);
|
||||
@@ -1450,7 +1450,7 @@ public:
|
||||
me->SetDisableGravity(false);
|
||||
me->SetHomePosition(SpinestalkerLandPos);
|
||||
me->SetFacingTo(SpinestalkerLandPos.GetOrientation());
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@@ -1562,7 +1562,7 @@ public:
|
||||
return;
|
||||
|
||||
me->setActive(true);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(true);
|
||||
float moveTime = me->GetExactDist(&RimefangFlyPos) / (me->GetSpeed(MOVE_RUN) * 0.001f);
|
||||
me->m_Events.AddEvent(new FrostwyrmLandEvent(*me, RimefangLandPos), me->m_Events.CalculateTime(uint64(moveTime) + 250));
|
||||
me->SetDefaultMovementType(IDLE_MOTION_TYPE);
|
||||
@@ -1583,7 +1583,7 @@ public:
|
||||
me->SetDisableGravity(false);
|
||||
me->SetHomePosition(RimefangLandPos);
|
||||
me->SetFacingTo(RimefangLandPos.GetOrientation());
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
}
|
||||
else if (point == POINT_LAND_GROUND)
|
||||
{
|
||||
|
||||
@@ -631,7 +631,7 @@ public:
|
||||
boss_the_lich_kingAI(Creature* creature) : BossAI(creature, DATA_THE_LICH_KING)
|
||||
{
|
||||
me->AddAura(SPELL_EMOTE_SIT_NO_SHEATH, me);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
|
||||
@@ -658,7 +658,7 @@ public:
|
||||
_Reset();
|
||||
DoAction(ACTION_RESTORE_LIGHT);
|
||||
SetEquipmentSlots(true);
|
||||
if (me->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC))
|
||||
if (me->IsImmuneToPC())
|
||||
me->SetStandState(UNIT_STAND_STATE_SIT);
|
||||
}
|
||||
|
||||
@@ -704,7 +704,7 @@ public:
|
||||
Cell::VisitGridObjects(me, worker, 333.0f);
|
||||
|
||||
me->AddAura(SPELL_EMOTE_SIT_NO_SHEATH, me);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetStandState(UNIT_STAND_STATE_SIT);
|
||||
}
|
||||
@@ -1207,7 +1207,7 @@ public:
|
||||
spawner->CastSpell(spawner, SPELL_SUMMON_SPIRIT_BOMB_1, true); // summons bombs randomly
|
||||
spawner->CastSpell(spawner, SPELL_SUMMON_SPIRIT_BOMB_2, true); // summons bombs on players
|
||||
spawner->m_Events.AddEvent(new TriggerWickedSpirit(spawner), spawner->m_Events.CalculateTime(3000));
|
||||
terenas->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); // to avoid being healed by player trinket procs. terenas' health doesn't matter on heroic
|
||||
terenas->SetImmuneToAll(true); // to avoid being healed by player trinket procs. terenas' health doesn't matter on heroic
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1454,7 +1454,7 @@ public:
|
||||
if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING)))
|
||||
{
|
||||
theLichKing->SetWalk(false);
|
||||
theLichKing->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
theLichKing->SetImmuneToPC(false);
|
||||
theLichKing->SetReactState(REACT_AGGRESSIVE);
|
||||
theLichKing->SetInCombatWithZone();
|
||||
if (!theLichKing->IsInCombat())
|
||||
@@ -1587,7 +1587,7 @@ public:
|
||||
terenas->CastSpell((Unit*)nullptr, SPELL_MASS_RESURRECTION, false);
|
||||
if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING)))
|
||||
{
|
||||
lichKing->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
lichKing->SetImmuneToNPC(false);
|
||||
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
|
||||
me->RemoveAllAuras();
|
||||
SetEquipmentSlots(true);
|
||||
@@ -3708,7 +3708,8 @@ public:
|
||||
if (!target)
|
||||
return;
|
||||
|
||||
target->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
target->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_ATTACKABLE_1);
|
||||
target->SetImmuneToAll(false);
|
||||
target->ForceValuesUpdateAtIndex(UNIT_FIELD_FLAGS);
|
||||
VileSpiritActivateEvent(target).Execute(0, 0);
|
||||
}
|
||||
|
||||
@@ -743,7 +743,8 @@ public:
|
||||
return;
|
||||
|
||||
me->setActive(true);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
// Load Grid with Sister Svalna
|
||||
me->GetMap()->LoadGrid(4356.71f, 2484.33f);
|
||||
if (Creature* svalna = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SISTER_SVALNA)))
|
||||
@@ -930,7 +931,8 @@ public:
|
||||
Talk(SAY_CROK_INTRO_3);
|
||||
break;
|
||||
case EVENT_START_PATHING:
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
Start(true, true);
|
||||
break;
|
||||
case EVENT_SCOURGE_STRIKE:
|
||||
@@ -998,7 +1000,7 @@ public:
|
||||
void Reset() override
|
||||
{
|
||||
_Reset();
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetCanFly(true);
|
||||
me->SetDisableGravity(true);
|
||||
@@ -1007,7 +1009,7 @@ public:
|
||||
|
||||
void AttackStart(Unit* victim) override
|
||||
{
|
||||
if (me->HasReactState(REACT_PASSIVE) || me->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC))
|
||||
if (me->HasReactState(REACT_PASSIVE) || me->IsImmuneToAll())
|
||||
return;
|
||||
BossAI::AttackStart(victim);
|
||||
}
|
||||
@@ -1037,10 +1039,10 @@ public:
|
||||
|
||||
void EnterCombat(Unit* /*attacker*/) override
|
||||
{
|
||||
if (me->HasReactState(REACT_PASSIVE) || me->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC))
|
||||
if (me->HasReactState(REACT_PASSIVE) || me->IsImmuneToAll())
|
||||
{
|
||||
me->CombatStop(false);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
return;
|
||||
}
|
||||
@@ -1121,7 +1123,7 @@ public:
|
||||
if (type != EFFECT_MOTION_TYPE || id != POINT_LAND)
|
||||
return;
|
||||
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetCanFly(false);
|
||||
me->SetDisableGravity(false);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
@@ -1915,7 +1917,8 @@ public:
|
||||
if (Creature* target = GetTarget()->ToCreature())
|
||||
{
|
||||
target->SetReactState(REACT_PASSIVE);
|
||||
target->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
target->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
target->SetImmuneToPC(true);
|
||||
target->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_CUSTOM_SPELL_02);
|
||||
}
|
||||
}
|
||||
@@ -1925,7 +1928,8 @@ public:
|
||||
if (Creature* target = GetTarget()->ToCreature())
|
||||
{
|
||||
target->SetReactState(REACT_AGGRESSIVE);
|
||||
target->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
target->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
target->SetImmuneToPC(false);
|
||||
target->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -225,7 +225,8 @@ public:
|
||||
BossAI::Reset();
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_DISABLE_MOVE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_DISABLE_MOVE);
|
||||
me->SetImmuneToPC(false);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
secondPhase = false;
|
||||
gateOpened = false;
|
||||
@@ -485,7 +486,8 @@ public:
|
||||
Talk(EMOTE_PHASE_TWO);
|
||||
me->CastSpell(me, SPELL_TELEPORT_LIVE, false);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_DISABLE_MOVE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_DISABLE_MOVE);
|
||||
me->SetImmuneToPC(false);
|
||||
me->RemoveAllAuras();
|
||||
summons.DoZoneInCombat();
|
||||
events.ScheduleEvent(EVENT_SHADOW_BOLT, 1000);
|
||||
|
||||
@@ -168,7 +168,7 @@ public:
|
||||
cr->InterruptNonMeleeSpells(true);
|
||||
cr->CastSpell(cr, SPELL_FEUGEN_CHAIN, false);
|
||||
cr->SetDisableGravity(true);
|
||||
cr->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
cr->SetImmuneToPC(false);
|
||||
cr->SetControlled(true, UNIT_STATE_ROOT);
|
||||
}
|
||||
if (Creature* cr = me->SummonCreature(NPC_TESLA_COIL, 3487.04f, -2911.68f, 318.75f, 0.0f))
|
||||
@@ -177,7 +177,7 @@ public:
|
||||
cr->InterruptNonMeleeSpells(true);
|
||||
cr->CastSpell(cr, SPELL_STALAGG_CHAIN, false);
|
||||
cr->SetDisableGravity(true);
|
||||
cr->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
cr->SetImmuneToPC(false);
|
||||
cr->SetControlled(true, UNIT_STATE_ROOT);
|
||||
}
|
||||
|
||||
@@ -403,7 +403,7 @@ public:
|
||||
if (Creature* cr = me->FindNearestCreature(NPC_TESLA_COIL, 150.0f))
|
||||
{
|
||||
cr->CastSpell(cr, me->GetEntry() == NPC_STALAGG ? SPELL_STALAGG_CHAIN : SPELL_FEUGEN_CHAIN, false);
|
||||
cr->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
cr->SetImmuneToPC(false);
|
||||
myCoil = cr->GetGUID();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -377,7 +377,7 @@ public:
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
me->SetSheath(SHEATH_STATE_UNARMED);
|
||||
me->SetFaction(190);
|
||||
me->CastSpell(me, SPELL_DUAL_WIELD, true);
|
||||
@@ -403,7 +403,7 @@ public:
|
||||
{
|
||||
case ACTION_START_INTRO:
|
||||
{
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(true);
|
||||
me->SetUnitFlag2(UNIT_FLAG2_DO_NOT_FADE_IN);
|
||||
me->SetDisableGravity(true);
|
||||
me->CastSpell(me, SPELL_ARRIVAL, true);
|
||||
@@ -446,7 +446,7 @@ public:
|
||||
case ACTION_INIT_ALGALON:
|
||||
_firstPull = false;
|
||||
_fedOnTears = false;
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
break;
|
||||
case ACTION_ASCEND:
|
||||
summons.DespawnAll();
|
||||
@@ -477,7 +477,8 @@ public:
|
||||
uint32 introDelay = 0;
|
||||
me->setActive(true);
|
||||
me->SetInCombatWithZone();
|
||||
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToNPC(true);
|
||||
events.Reset();
|
||||
events.SetPhase(PHASE_ROLE_PLAY);
|
||||
|
||||
@@ -649,7 +650,7 @@ public:
|
||||
break;
|
||||
case EVENT_INTRO_FINISH:
|
||||
events.Reset();
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetImmuneToPC(false);
|
||||
if (Creature* brann = ObjectAccessor::GetCreature(*me, m_pInstance->GetGuidData(NPC_BRANN_BRONZBEARD_ALG)))
|
||||
brann->AI()->DoAction(ACTION_FINISH_INTRO);
|
||||
break;
|
||||
@@ -659,7 +660,8 @@ public:
|
||||
break;
|
||||
case EVENT_REMOVE_UNNATTACKABLE:
|
||||
me->SetSheath(SHEATH_STATE_MELEE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToNPC(false);
|
||||
break;
|
||||
case EVENT_INTRO_TIMER_DONE:
|
||||
events.SetPhase(PHASE_NORMAL);
|
||||
@@ -985,7 +987,8 @@ public:
|
||||
{
|
||||
case ACTION_ACTIVATE_STAR:
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
_isActive = true;
|
||||
|
||||
if (Player* target = SelectTargetFromPlayerList(250.0f))
|
||||
|
||||
@@ -770,7 +770,8 @@ public:
|
||||
}
|
||||
else
|
||||
{
|
||||
turret->ReplaceAllUnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
turret->ReplaceAllUnitFlags(UNIT_FLAG_NOT_SELECTABLE);
|
||||
turret->SetImmuneToAll(true);
|
||||
if (turret->GetTypeId() == TYPEID_UNIT)
|
||||
turret->ToCreature()->AI()->EnterEvadeMode();
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user