Merge branch 'azerothcore:master' into Playerbot
This commit is contained in:
@@ -223,7 +223,7 @@ function inst_simple_restarter {
|
||||
|
||||
function inst_download_client_data {
|
||||
# change the following version when needed
|
||||
local VERSION=v15
|
||||
local VERSION=v16
|
||||
|
||||
echo "#######################"
|
||||
echo "Client data downloader"
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
-- DB update 2023_01_04_02 -> 2023_01_05_00
|
||||
-- Pathing for Kel'Thuzad Entry: 20350
|
||||
UPDATE `creature` SET `wander_distance`=0,`MovementType`=0,`position_x`=1777.6586,`position_y`=1058.5917,`position_z`=7.1008496 WHERE `id1`=20350; -- Kel'Thuzad
|
||||
UPDATE `creature` SET `wander_distance`=0,`MovementType`=0,`position_x`=1777.6586,`position_y`=1058.5917,`position_z`=7.1008496 WHERE `id1`=20353; -- Helcular
|
||||
DELETE FROM `waypoints` WHERE `entry`=20350;
|
||||
INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`point_comment`) VALUES
|
||||
(20350,1,1777.6586,1058.5917,7.1008496,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,2,1785.8223,1057.3224,7.46938,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,3,1802.3959,1061.4431,8.593266,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,4,1816.5465,1069.8398,10.483082,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,5,1829.2474,1075.3346,11.50713,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,6,1840.346,1076.9652,13.023953,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,7,1854.4879,1072.2803,15.144437,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,8,1864.5223,1065.2603,15.909603,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,9,1883.5319,1056.9219,18.170403,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,10,1896.4857,1052.8398,17.920403,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,11,1917.8785,1051.4784,19.08978,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,12,1930.2494,1051.6864,19.907164,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,13,1947.8518,1045.3527,21.082039,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,14,1958.8525,1035.1572,23.207039,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,15,1969.4431,1028.3741,24.45784,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,16,1980.2985,1028.6941,25.294388,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,17,1969.4431,1028.3741,24.45784,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,18,1958.8616,1035.1549,23.17591,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,19,1947.8604,1045.3506,20.957039,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,20,1930.2494,1051.6864,19.907164,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,21,1917.8785,1051.4784,19.08978,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,22,1896.4857,1052.8398,17.920403,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,23,1883.5319,1056.9219,18.170403,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,24,1864.5223,1065.2603,15.909603,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,25,1854.4879,1072.2803,15.144437,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,26,1840.346,1076.9652,13.023953,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,27,1829.2474,1075.3346,11.50713,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,28,1816.5465,1069.8398,10.483082,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,29,1802.3959,1061.4431,8.593266,NULL,0,'Kel\'Thuzad'),
|
||||
(20350,30,1785.8223,1057.3224,7.46938,NULL,0,'Kel\'Thuzad');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 20350);
|
||||
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
|
||||
(20350, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 53, 0, 20350, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kel\'Thuzad - On Reset - Start Waypoint'),
|
||||
(20350, 0, 1, 0, 40, 0, 2, 0, 0, 20350, 0, 0, 0, 80, 2035000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kel\'Thuzad - On Waypoint 0 Reached - Run Script (2% Chance)');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2035000);
|
||||
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
|
||||
(2035000, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 54, 49200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kel\'Thuzad - On Script - Pause Waypoint'),
|
||||
(2035000, 9, 1, 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 20353, 10, 0, 0, 0, 0, 0, 0, 'Kel\'Thuzad - On Script - Set Data 1 1'), -- Intentionally delayed so that Helcular can catch up and Orientation is set correctly
|
||||
(2035000, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 20353, 10, 0, 0, 0, 0, 0, 0, 'Kel\'Thuzad - On Script - Set Orientation Closest Creature \'Helcular\''),
|
||||
(2035000, 9, 3, 0, 0, 0, 100, 0, 2600, 2600, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kel\'Thuzad - On Script - Say Line 0'),
|
||||
(2035000, 9, 4, 0, 0, 0, 100, 0, 8400, 8400, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kel\'Thuzad - On Script - Say Line 1'),
|
||||
(2035000, 9, 5, 0, 0, 0, 100, 0, 12000, 12000, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kel\'Thuzad - On Script - Say Line 2'),
|
||||
(2035000, 9, 6, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kel\'Thuzad - On Script - Say Line 3'),
|
||||
(2035000, 9, 7, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kel\'Thuzad - On Script - Say Line 4'),
|
||||
(2035000, 9, 8, 0, 0, 0, 100, 0, 1200, 1200, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kel\'Thuzad - On Script - Say Line 5');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 20353);
|
||||
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
|
||||
(20353, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 29, 0.05, 90, 0, 0, 0, 0, 19, 20350, 10, 0, 0, 0, 0, 0, 0, 'Helcular - On Reset - Start Follow Closest Creature \'Kel\'Thuzad\''),
|
||||
(20353, 0, 1, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 2035300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Helcular - On Data Set 1 1 - Run Script');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 2035300) AND (`source_type` = 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
|
||||
(2035300, 9, 0, 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 20350, 10, 0, 0, 0, 0, 0, 0, 'Helcular - On Script - Set Orientation Closest Creature \'Kel\'Thuzad\''),
|
||||
(2035300, 9, 1, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Helcular - On Script - Say Line 0'),
|
||||
(2035300, 9, 2, 0, 0, 0, 100, 0, 1200, 1200, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Helcular - On Script - Say Line 1'),
|
||||
(2035300, 9, 3, 0, 0, 0, 100, 0, 8400, 8400, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Helcular - On Script - Say Line 2'),
|
||||
(2035300, 9, 4, 0, 0, 0, 100, 0, 17000, 17000, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Helcular - On Script - Say Line 3'),
|
||||
(2035300, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Helcular - On Script - Set Data 1 0');
|
||||
|
||||
DELETE FROM `creature_text` WHERE `CreatureID`=20350;
|
||||
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
|
||||
(20350, 0, 0, 'Keep your voice down, Helcular. Strangers abound...', 12, 0, 100, 1, 0, 0, 18033, 0, 'Kel\'Thuzad'),
|
||||
(20350, 1, 0, 'Necromancy. It is called necromancy. And yes, I have it within my power to bless you with this gift.', 12, 0, 100, 1, 0, 0, 18042, 0, 'Kel\'Thuzad'),
|
||||
(20350, 2, 0, 'That is none of your concern, Helcular, as you are neither Kirin Tor nor a necromancer.', 12, 0, 100, 274, 0, 0, 18044, 0, 'Kel\'Thuzad'),
|
||||
(20350, 3, 0, 'But to be perfectly frank, I do not give a damn what the Kirin Tor think! They are fools, set in their archaic ways.', 12, 0, 100, 1, 0, 0, 18050, 0, 'Kel\'Thuzad'),
|
||||
(20350, 4, 0, '%s nods.', 16, 0, 100, 0, 0, 0, 18034, 0, 'Kel\'Thuzad'),
|
||||
(20350, 5, 0, 'In due time, Helcular... All in due time...', 12, 0, 100, 1, 0, 0, 18052, 0, 'Kel\'Thuzad');
|
||||
|
||||
DELETE FROM `creature_text` WHERE `CreatureID`=20353;
|
||||
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
|
||||
(20353, 0, 0, '%s nods.', 16, 0, 100, 273, 0, 0, 18034, 0, 'Helcular'),
|
||||
(20353, 1, 0, 'So you can teach me this... this...', 12, 0, 100, 6, 0, 0, 18041, 0, 'Helcular'),
|
||||
(20353, 2, 0, 'And the Kirin Tor? What have they to say of necromancy?', 12, 0, 100, 6, 0, 0, 18043, 0, 'Helcular'),
|
||||
(20353, 3, 0, 'Then teach me, Kel\'Thuzad. Teach me everything you know...', 12, 0, 100, 1, 0, 0, 18051, 0, 'Helcular');
|
||||
@@ -0,0 +1,179 @@
|
||||
-- DB update 2023_01_05_00 -> 2023_01_05_01
|
||||
-- Set correct spawn pos
|
||||
UPDATE `creature` SET `position_x`=1815.927978515625, `position_y`=1020.21331787109375, `position_z`=11.68548202514648437, `orientation`=4.817108631134033203, `equipment_id`=1, `VerifiedBuild`=47187 WHERE `id1`=20351;
|
||||
UPDATE `creature` SET `position_x`=1814.1473388671875, `position_y`=1018.730712890625, `position_z`=11.68548202514648437, `orientation`=6.2657318115234375, `equipment_id`=1, `VerifiedBuild`=47187 WHERE `id1`=20400;
|
||||
|
||||
-- Set Equipment (previously empty)
|
||||
DELETE FROM `creature_equip_template` WHERE (`CreatureID` IN (20351, 20400));
|
||||
INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `ItemID2`, `ItemID3`, `VerifiedBuild`) VALUES
|
||||
(20351, 1, 2704, 0, 0, 0),
|
||||
(20400, 1, 2704, 0, 0, 0);
|
||||
|
||||
DELETE FROM `creature_template_addon` WHERE (`entry` IN (20351, 20400));
|
||||
INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES
|
||||
(20351, 0, 0, 0, 1, 0, 0, ''),
|
||||
(20400, 0, 0, 0, 1, 0, 0, '');
|
||||
|
||||
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 20351;
|
||||
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 20351);
|
||||
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
|
||||
(20351, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Reset - Set Event Phase 1'),
|
||||
(20351, 0, 1, 0, 60, 1, 100, 0, 3600, 3600, 3600, 3600, 0, 5, 92, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Update - Play Emote 92 (Phase 1)'),
|
||||
(20351, 0, 2, 3, 60, 1, 100, 0, 180000, 180000, 180000, 180000, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Update - Set Event Phase 0 (Phase 1)'),
|
||||
(20351, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 80, 2035100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Update - Run Script'),
|
||||
(20351, 0, 4, 0, 40, 0, 100, 0, 11, 20351, 0, 0, 0, 80, 2035101, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Waypoint 11 Reached - Run Script'),
|
||||
(20351, 0, 5, 0, 40, 0, 100, 0, 14, 20351, 0, 0, 0, 80, 2035102, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Waypoint 14 Reached - Run Script'),
|
||||
(20351, 0, 6, 0, 58, 0, 100, 0, 29, 20351, 0, 0, 0, 80, 2035103, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Waypoint Finished - Run Script');
|
||||
|
||||
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 20400;
|
||||
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 20400);
|
||||
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
|
||||
(20400, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Reset - Set Event Phase 1'),
|
||||
(20400, 0, 1, 0, 60, 1, 100, 0, 3600, 3600, 3600, 3600, 0, 5, 92, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Update - Play Emote 92 (Phase 1)'),
|
||||
(20400, 0, 2, 3, 38, 0, 100, 0, 1, 1, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Data Set 1 1 - Set Event Phase 0'),
|
||||
(20400, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 80, 2040000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Data Set 1 1 - Run Script'),
|
||||
(20400, 0, 4, 0, 38, 0, 100, 0, 1, 2, 0, 0, 0, 80, 2040001, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Data Set 1 2 - Run Script'),
|
||||
(20400, 0, 5, 0, 38, 0, 100, 0, 1, 3, 0, 0, 0, 80, 2040002, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Data Set 1 3 - Run Script'),
|
||||
(20400, 0, 6, 0, 38, 0, 100, 0, 1, 4, 0, 0, 0, 80, 2040003, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Data Set 1 4 - Run Script');
|
||||
|
||||
-- Pathing for Captain Sanders Entry: 20351
|
||||
DELETE FROM `waypoints` WHERE `entry`=20351;
|
||||
INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`point_comment`) VALUES
|
||||
(20351,1,1811.1932,1025.7975,11.685483,NULL,0,'Captain Sanders'),
|
||||
(20351,2,1811.046,1035.7515,11.413217,NULL,0,'Captain Sanders'),
|
||||
(20351,3,1810.3229,1043.4323,11.685482,NULL,0,'Captain Sanders'),
|
||||
(20351,4,1817.0609,1043.4369,11.67465,NULL,0,'Captain Sanders'),
|
||||
(20351,5,1817.4949,1053.8794,11.11829,NULL,0,'Captain Sanders'),
|
||||
(20351,6,1811.2274,1060.154,9.906864,NULL,0,'Captain Sanders'),
|
||||
(20351,7,1800.7808,1061.7118,8.49329,NULL,0,'Captain Sanders'),
|
||||
(20351,8,1791.0525,1057.8472,7.8332715,NULL,0,'Captain Sanders'),
|
||||
(20351,9,1787.0084,1046.652,9.74416,NULL,0,'Captain Sanders'),
|
||||
(20351,10,1781.4646,1033.0979,9.537182,NULL,0,'Captain Sanders'),
|
||||
(20351,11,1775.1431,1014.3824,6.5410886,NULL,0,'Captain Sanders'), -- Intermediate Event
|
||||
(20351,12,1758.1819,1016.2374,5.8595204,NULL,0,'Captain Sanders'),
|
||||
(20351,13,1739.5063,1016.105,2.416039,NULL,0,'Captain Sanders'),
|
||||
(20351,14,1731.3119,1014.4211,1.5693786,NULL,0,'Captain Sanders'), -- Boat Scene
|
||||
(20351,15,1757.7401,1016.1464,5.8391347,NULL,0,'Captain Sanders'),
|
||||
(20351,16,1768.027,1016.7231,6.1815915,NULL,0,'Captain Sanders'),
|
||||
(20351,17,1775.2412,1017.6554,6.0808835,NULL,0,'Captain Sanders'),
|
||||
(20351,18,1784.6741,1026.9069,10.753368,NULL,0,'Captain Sanders'),
|
||||
(20351,19,1790.1174,1049.2361,9.626728,NULL,0,'Captain Sanders'),
|
||||
(20351,20,1799.3375,1057.9951,8.322407,NULL,0,'Captain Sanders'),
|
||||
(20351,21,1810.4957,1058.3661,10.12952,NULL,0,'Captain Sanders'),
|
||||
(20351,22,1816.9808,1056.8551,11.11829,NULL,0,'Captain Sanders'),
|
||||
(20351,23,1817.2922,1043.6241,11.674123,NULL,0,'Captain Sanders'),
|
||||
(20351,24,1810.0059,1042.9373,11.685482,NULL,0,'Captain Sanders'),
|
||||
(20351,25,1809.8413,1038.6426,11.685481,NULL,0,'Captain Sanders'),
|
||||
(20351,26,1811.0175,1032.7227,11.060482,NULL,0,'Captain Sanders'),
|
||||
(20351,27,1811.5898,1024.587,11.685483,NULL,0,'Captain Sanders'),
|
||||
(20351,28,1814.4944,1020.6591,11.685482,NULL,0,'Captain Sanders'),
|
||||
(20351,29,1815.928,1020.2133,11.685482,NULL,0,'Captain Sanders'); -- End
|
||||
-- 0x204214460013DFC000618C0000233C55 .go xyz 1811.1932 1025.7975 11.685483
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 2035100) AND (`source_type` = 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
|
||||
(2035100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Set Event Phase 0'),
|
||||
(2035100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Set Data 1 1'),
|
||||
(2035100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Set Orientation Closest Creature \'Captain Edward Hanes\''),
|
||||
(2035100, 9, 3, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Say Line 0'),
|
||||
(2035100, 9, 4, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 0, 53, 0, 20351, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Start Waypoint');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2040000);
|
||||
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
|
||||
(2040000, 9, 0, 0, 0, 0, 100, 0, 2500, 2500, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 20351, 10, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Set Orientation Closest Creature \'Captain Sanders\''),
|
||||
(2040000, 9, 1, 0, 0, 0, 100, 0, 7500, 7500, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 19, 20351, 10, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Say Line 0'),
|
||||
(2040000, 9, 2, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 29, 1, 180, 0, 0, 0, 0, 19, 20351, 10, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Start Follow Closest Creature \'Captain Sanders\'');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2035101);
|
||||
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
|
||||
(2035101, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 54, 14000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Pause Waypoint'),
|
||||
(2035101, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 2, 0, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Set Data 1 2'),
|
||||
(2035101, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1.0995573997497559, 'Captain Sanders - On Script - Set Orientation 1.0995573997497559'),
|
||||
(2035101, 9, 3, 0, 0, 0, 100, 0, 1600, 1600, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 5.777040004730225, 'Captain Sanders - On Script - Set Orientation 5.777040004730225'),
|
||||
(2035101, 9, 4, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Set Orientation Closest Creature \'Captain Edward Hanes\''),
|
||||
(2035101, 9, 5, 0, 0, 0, 100, 0, 1400, 1400, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Say Line 1'),
|
||||
(2035101, 9, 6, 0, 0, 0, 100, 0, 3600, 3600, 0, 0, 0, 1, 2, 0, 1, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Say Line 2');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 2040001) AND (`source_type` = 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
|
||||
(2040001, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Start Follow Self'),
|
||||
(2040001, 9, 1, 0, 0, 0, 100, 0, 3600, 3600, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 20351, 10, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Set Orientation Closest Creature \'Captain Sanders\''),
|
||||
(2040001, 9, 2, 0, 0, 0, 100, 0, 1400, 1400, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 19, 20351, 10, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Say Line 1'),
|
||||
(2040001, 9, 3, 0, 0, 0, 100, 0, 8600, 8600, 0, 0, 0, 5, 273, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Play Emote 273'),
|
||||
(2040001, 9, 4, 0, 0, 0, 100, 0, 1400, 1400, 0, 0, 0, 29, 1, 180, 0, 0, 0, 0, 19, 20351, 10, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Start Follow Closest Creature \'Captain Sanders\'');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 2040002) AND (`source_type` = 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
|
||||
(2040002, 9, 0 , 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Start Follow Self'),
|
||||
(2040002, 9, 1 , 0, 0, 0, 100, 0, 100, 100, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1729.3556, 1014.00525, 1.151654, 1.7166426181793213, 'Captain Edward Hanes - On Script - Move To Position'),
|
||||
(2040002, 9, 2 , 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 0, 1, 2, 0, 1, 0, 0, 0, 19, 20351, 1, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Say Line 2'),
|
||||
(2040002, 9, 3 , 0, 0, 0, 100, 0, 9700, 9700, 0, 0, 0, 1, 3, 0, 1, 0, 0, 0, 19, 20351, 10, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Say Line 3'),
|
||||
(2040002, 9, 4 , 0, 0, 0, 100, 0, 9600, 9600, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2.8274333477020264, 'Captain Edward Hanes - On Script - Set Orientation 2.8274333477020264'),
|
||||
(2040002, 9, 5 , 0, 0, 0, 100, 0, 1400, 1400, 0, 0, 0, 1, 4, 0, 1, 0, 0, 0, 19, 20351, 10, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Say Line 4'),
|
||||
(2040002, 9, 6 , 0, 0, 0, 100, 0, 10600, 10600, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 20351, 10, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Set Orientation Closest Creature \'Captain Sanders\''),
|
||||
(2040002, 9, 7 , 0, 0, 0, 100, 0, 1400, 1400, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Say Line 5'),
|
||||
(2040002, 9, 8 , 0, 0, 0, 100, 0, 23000, 23000, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Say Line 6'),
|
||||
(2040002, 9, 9 , 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 0, 1, 7, 0, 1, 0, 0, 0, 19, 20351, 10, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Say Line 7'),
|
||||
(2040002, 9, 10, 0, 0, 0, 100, 0, 9500, 9500, 0, 0, 0, 5, 273, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Play Emote 273'),
|
||||
(2040002, 9, 11, 0, 0, 0, 100, 0, 3600, 3600, 0, 0, 0, 29, 1, 180, 0, 0, 0, 0, 19, 20351, 10, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Start Follow Closest Creature \'Captain Sanders\'');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2035102);
|
||||
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
|
||||
(2035102, 9, 0 , 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 3, 0, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Set Data 1 3'),
|
||||
(2035102, 9, 1 , 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 54, 84900, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Pause Waypoint'),
|
||||
(2035102, 9, 2 , 0, 0, 0, 100, 0, 100, 100, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2.4434609413146973, 'Captain Sanders - On Script - Set Orientation 2.4434609413146973'),
|
||||
(2035102, 9, 3 , 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 3, 0, 1, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Say Line 3'),
|
||||
(2035102, 9, 4 , 0, 0, 0, 100, 0, 2100, 2100, 0, 0, 0, 5, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Play Emote 6'),
|
||||
(2035102, 9, 5 , 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 0, 5, 92, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Play Emote 92'),
|
||||
(2035102, 9, 6 , 0, 0, 0, 100, 0, 4900, 4900, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1.780235767364502, 'Captain Sanders - On Script - Set Orientation 1.780235767364502'),
|
||||
(2035102, 9, 7 , 0, 0, 0, 100, 0, 1400, 1400, 0, 0, 0, 1, 4, 0, 1, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Say Line 4'),
|
||||
(2035102, 9, 8 , 0, 0, 0, 100, 0, 2200, 2200, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Play Emote 5'),
|
||||
(2035102, 9, 9 , 0, 0, 0, 100, 0, 7400, 7400, 0, 0, 0, 1, 5, 0, 1, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Say Line 5'),
|
||||
(2035102, 9, 10, 0, 0, 0, 100, 0, 9600, 9600, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2.9146997928619385, 'Captain Sanders - On Script - Set Orientation 2.9146997928619385'),
|
||||
(2035102, 9, 11, 0, 0, 0, 100, 0, 3800, 3800, 0, 0, 0, 1, 6, 0, 1, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Say Line 6'),
|
||||
(2035102, 9, 12, 0, 0, 0, 100, 0, 7300, 7300, 0, 0, 0, 1, 7, 0, 1, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Say Line 7'),
|
||||
(2035102, 9, 13, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 0, 1, 8, 0, 1, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Say Line 8'),
|
||||
(2035102, 9, 14, 0, 0, 0, 100, 0, 7300, 7300, 0, 0, 0, 1, 9, 0, 1, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Say Line 9'),
|
||||
(2035102, 9, 15, 0, 0, 0, 100, 0, 2200, 2200, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Play Emote 5'),
|
||||
(2035102, 9, 16, 0, 0, 0, 100, 0, 6300, 6300, 0, 0, 0, 1, 10, 0, 1, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Say Line 10'),
|
||||
(2035102, 9, 17, 0, 0, 0, 100, 0, 13300, 13300, 0, 0, 0, 1, 11, 0, 1, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Say Line 11'),
|
||||
(2035102, 9, 18, 0, 0, 0, 100, 0, 3400, 3400, 0, 0, 0, 5, 273, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Play Emote 273');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 2035103) AND (`source_type` = 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
|
||||
(2035103, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 4, 0, 0, 0, 0, 19, 20400, 10, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Set Data 1 4'),
|
||||
(2035103, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1815.927978515625, 1020.2133178710938, 11.685482025146484, 4.817108631134033, 'Captain Sanders - On Script - Move To Position'),
|
||||
(2035103, 9, 2, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Sanders - On Script - Set Event Phase 1');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2040003);
|
||||
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
|
||||
(2040003, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Start Follow Self'),
|
||||
(2040003, 9, 1, 0, 0, 0, 100, 0, 200, 200, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1814.1473388671875, 1018.730712890625, 11.685482025146484, 6.2657318115234375, 'Captain Edward Hanes - On Script - Move To Position'),
|
||||
(2040003, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Set Data 1 0'),
|
||||
(2040003, 9, 3, 0, 0, 0, 100, 0, 4800, 4800, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captain Edward Hanes - On Script - Set Event Phase 1');
|
||||
|
||||
DELETE FROM `creature_text` WHERE `CreatureID`=20351;
|
||||
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
|
||||
(20351, 0 , 0, 'Avast, Ed! Lemme show ye me ship! *hic*', 12, 0, 100, 1, 0, 0, 18064, 0, 'Captain Sanders'),
|
||||
(20351, 1 , 0, 'I just be makin\' sure we wasn\'t followed! *hic*', 12, 0, 100, 5, 0, 0, 18067, 0, 'Captain Sanders'),
|
||||
(20351, 2 , 0, 'It be clear...', 12, 0, 100, 273, 0, 0, 18068, 0, 'Captain Sanders'),
|
||||
(20351, 3 , 0, 'Thar she be! Ain\'t she a beaut?', 12, 0, 100, 25, 0, 0, 18069, 0, 'Captain Sanders'),
|
||||
(20351, 4 , 0, 'That thar monster be yers, Ed? Arrr... She\'s a big\'un!', 12, 0, 100, 25, 0, 0, 18071, 0, 'Captain Sanders'),
|
||||
(20351, 5 , 0, 'Arrr, Ed! She definitely be seaworthy!', 12, 0, 100, 5, 0, 0, 18073, 0, 'Captain Sanders'),
|
||||
(20351, 6 , 0, 'Can ye keep a secret, Ed? Arr, dead men tell no tales!', 12, 0, 100, 6, 0, 0, 18075, 0, 'Captain Sanders'),
|
||||
(20351, 7 , 0, 'It be me treasure, Ed. Me life\'s work! Arrr... One white shirt fit fer a pirate king to be wearin\'!', 12, 0, 100, 1, 0, 0, 18077, 0, 'Captain Sanders'),
|
||||
(20351, 8 , 0, 'One red sash that ye can put on yer head or your britches. Pride o\' the fleet, that sash is...', 12, 0, 100, 1, 0, 0, 18078, 0, 'Captain Sanders'),
|
||||
(20351, 9 , 0, 'An\' last but certainly not least, one enormous bag! Big enough to fit eight whole apples! Eight, Ed! Can ye believe it!?', 12, 0, 100, 1, 0, 0, 18079, 0, 'Captain Sanders'),
|
||||
(20351, 10, 0, 'Yarrr! Keep it down, Ed! Thar be scallywags about! Their scallywag ears be listenin\' for gasps like the one that just escaped yer lips!', 12, 0, 100, 1, 0, 0, 18081, 0, 'Captain Sanders'),
|
||||
(20351, 11, 0, 'It be alright, Ed. Me booty be locked away good in that thar chest. No fool will ever have Cap\'n Sanders\'s treasure! Let\'s go get another drink. The spirits be runnin\' low.', 12, 0, 100, 1, 0, 0, 18083, 0, 'Captain Sanders');
|
||||
|
||||
DELETE FROM `creature_text` WHERE `CreatureID`=20400;
|
||||
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
|
||||
(20400, 0, 0, 'Lead the way, Sanders!', 12, 0, 100, 1, 0, 0, 18065, 0, 'Captain Edward Hanes'),
|
||||
(20400, 1, 0, 'What are you doing, Sanders?', 12, 0, 100, 1, 0, 0, 18066, 0, 'Captain Edward Hanes'),
|
||||
(20400, 2, 0, 'Aye, she\'s a beaut alright. And you parked her right next to my frigate! *hic*', 12, 0, 100, 1, 0, 0, 18070, 0, 'Captain Edward Hanes'),
|
||||
(20400, 3, 0, 'Ayep! She\'s all mine... I\'m gonna sail her around the world. Across the sea!', 12, 0, 100, 1, 0, 0, 18072, 0, 'Captain Edward Hanes'),
|
||||
(20400, 4, 0, 'Sanders, what have you got in that chest?', 12, 0, 100, 1, 0, 0, 18074, 0, 'Captain Edward Hanes'),
|
||||
(20400, 5, 0, '%s nods.', 16, 0, 100, 0, 0, 0, 18076, 0, 'Captain Edward Hanes'),
|
||||
(20400, 6, 0, '%s gasps.', 16, 0, 100, 0, 0, 0, 18080, 0, 'Captain Edward Hanes'),
|
||||
(20400, 7, 0, 'I\'m sorry, Sanders. I\'ve just never seen such a bounty. It took me by surprise.', 12, 0, 100, 1, 0, 0, 18082, 0, 'Captain Edward Hanes');
|
||||
@@ -0,0 +1,5 @@
|
||||
-- DB update 2023_01_05_01 -> 2023_01_05_02
|
||||
DELETE FROM `quest_greeting_locale` WHERE `ID` = 3390 AND `locale` IN ('esES', 'esMX');
|
||||
INSERT INTO `quest_greeting_locale` (`ID`, `type`, `locale`, `Greeting`, `VerifiedBuild`) VALUES
|
||||
(3390, 0, 'esES', 'Los Baldíos cuentan con una gran riqueza de sustancias de las que nosotros, los boticarios de Lordaeron, podemos aprovecharnos.', 47014),
|
||||
(3390, 0, 'esMX', 'Los Baldíos cuentan con una gran riqueza de sustancias de las que nosotros, los boticarios de Lordaeron, podemos aprovecharnos.', 47014);
|
||||
@@ -0,0 +1,33 @@
|
||||
-- DB update 2023_01_05_02 -> 2023_01_06_00
|
||||
DELETE FROM `gossip_menu_option` WHERE `MenuID` = 3651 AND `OptionID` IN (0, 1, 2);
|
||||
INSERT INTO `gossip_menu_option` (`MenuID`, `OptionID`, `OptionIcon`, `OptionText`, `OptionBroadcastTextID`, `OptionType`, `OptionNpcFlag`, `ActionMenuID`, `ActionPoiID`, `BoxCoded`, `BoxMoney`, `BoxText`, `BoxBroadcastTextID`, `VerifiedBuild`) VALUES
|
||||
(3651, 0, 0, 'May I have another Dawn\'s Gambit, Betina? I want to test it again...', 7198, 1, 1, 0, 0, 0, 0, '', 0, 0),
|
||||
(3651, 1, 0, 'Betina, I\'d like a replacement Seal of the Dawn please!', 10458, 1, 1, 0, 0, 0, 0, '', 0, 0),
|
||||
(3651, 2, 0, 'Betina, I\'d like a replacement Rune of the Dawn please!', 10462, 1, 1, 0, 0, 0, 0, '', 0, 0);
|
||||
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 15 AND `SourceGroup` = 3651 AND `SourceId` IN (0, 1, 2);
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||
(15, 3651, 0, 0, 0, 2, 0, 12368, 1, 0, 1, 0, 0, '', 'If player does not have \'Dawn\'s Gambit\' in inventory'),
|
||||
(15, 3651, 0, 0, 0, 2, 0, 12368, 1, 1, 1, 0, 0, '', 'If player does not have \'Dawn\'s Gambit\' in bank'),
|
||||
(15, 3651, 0, 0, 0, 8, 0, 4771, 0, 0, 0, 0, 0, '', 'If player has quest \'Dawn\'s Gambit\' rewarded'),
|
||||
(15, 3651, 1, 0, 0, 2, 0, 13209, 1, 0, 1, 0, 0, '', 'If player does not have \'Seal of the Dawn\' in inventory'),
|
||||
(15, 3651, 1, 0, 0, 2, 0, 13209, 1, 1, 1, 0, 0, '', 'If player does not have \'Seal of the Dawn\' in bank'),
|
||||
(15, 3651, 1, 0, 0, 2, 0, 19812, 1, 0, 1, 0, 0, '', 'If player does not have \'Rune of the Dawn\' in inventory'),
|
||||
(15, 3651, 1, 0, 0, 2, 0, 19812, 1, 1, 1, 0, 0, '', 'If player does not have \'Rune of the Dawn\' in bank'),
|
||||
(15, 3651, 1, 0, 0, 8, 0, 5213, 0, 0, 0, 0, 0, '', 'If player has quest \'The Active Agent\' rewarded'),
|
||||
(15, 3651, 2, 0, 0, 2, 0, 13209, 1, 0, 1, 0, 0, '', 'If player does not have \'Seal of the Dawn\' in inventory'),
|
||||
(15, 3651, 2, 0, 0, 2, 0, 13209, 1, 1, 1, 0, 0, '', 'If player does not have \'Seal of the Dawn\' in bank'),
|
||||
(15, 3651, 2, 0, 0, 2, 0, 19812, 1, 0, 1, 0, 0, '', 'If player does not have \'Rune of the Dawn\' in inventory'),
|
||||
(15, 3651, 2, 0, 0, 2, 0, 19812, 1, 1, 1, 0, 0, '', 'If player does not have \'Rune of the Dawn\' in bank'),
|
||||
(15, 3651, 2, 0, 0, 8, 0, 5213, 0, 0, 0, 0, 0, '', 'If player has quest \'The Active Agent\' rewarded');
|
||||
|
||||
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 11035;
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid` = 11035 AND `source_type` = 0 AND `id` IN (1, 2, 3, 4, 5, 6);
|
||||
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
|
||||
(11035, 0, 1, 2, 62, 0, 100, 0, 3651, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Betina Bigglezink - On Gossip Option 0 Selected - Close Gossip'),
|
||||
(11035, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 11, 18367, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Betina Bigglezink - On Link - Cast \'Create Dawn\'s Gambit\''),
|
||||
(11035, 0, 3, 4, 62, 0, 100, 0, 3651, 1, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Betina Bigglezink - On Gossip Option 1 Selected - Close Gossip'),
|
||||
(11035, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 11, 24179, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Betina Bigglezink - On Link - Cast \'Create Rune of the Dawn\''),
|
||||
(11035, 0, 5, 6, 62, 0, 100, 0, 3651, 2, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Betina Bigglezink - On Gossip Option 2 Selected - Close Gossip'),
|
||||
(11035, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 11, 24201, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Betina Bigglezink - On Link - Cast \'Create Seal of the Dawn\'');
|
||||
@@ -0,0 +1,8 @@
|
||||
-- DB update 2023_01_06_00 -> 2023_01_06_01
|
||||
--
|
||||
-- Worn Stone Tokens are 100%
|
||||
UPDATE `creature_loot_template` SET `Chance`=100 WHERE `Item`=3714 AND `entry` IN (2271, 2272, 2358, 2415, 2628);
|
||||
|
||||
-- Encrusted Tail Fins should be 100% and only off Saltscale Murlocs
|
||||
UPDATE `creature_loot_template` SET `Chance`=100 WHERE `Item`=5796 AND `entry` IN (871, 873, 875, 877, 879);
|
||||
DELETE FROM `creature_loot_template` WHERE `Entry` IN (4457, 4458, 4459, 4460, 4461) AND `Item`=5796 AND `Reference`=0 AND `GroupId`=0;
|
||||
@@ -0,0 +1,8 @@
|
||||
-- DB update 2023_01_06_01 -> 2023_01_07_00
|
||||
--
|
||||
UPDATE `creature_template` SET `ScriptName` = '', `AIName` = 'SmartAI' WHERE `Entry` = 22095;
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid`=22095;
|
||||
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
|
||||
(22095, 0, 0, 0, 6, 0, 75, 0, 0, 0, 0, 0, 0, 11, 39130, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Infested Root-Walker - On Just Died - Cast \'Summon Wood Mites\''),
|
||||
(22095, 0, 1, 0, 0, 0, 100, 0, 15000, 20000, 32000, 38000, 0, 11, 39000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Infested Root-Walker - In Combat - Cast \'Regrowth\' (No Repeat)');
|
||||
@@ -0,0 +1,5 @@
|
||||
-- DB update 2023_01_07_00 -> 2023_01_07_01
|
||||
--
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id` = 47776 AND `ScriptName` = 'spell_item_worn_troll_dice';
|
||||
INSERT INTO `spell_script_names` VALUES
|
||||
(47776, 'spell_item_worn_troll_dice');
|
||||
@@ -0,0 +1,3 @@
|
||||
-- DB update 2023_01_07_01 -> 2023_01_07_02
|
||||
--
|
||||
UPDATE `creature_template` SET `flags_extra`=`flags_extra`|0x00000200 WHERE `entry` IN (17536,18432);
|
||||
@@ -0,0 +1,9 @@
|
||||
-- DB update 2023_01_07_02 -> 2023_01_07_03
|
||||
-- Immunities
|
||||
UPDATE `creature_template` SET `mechanic_immune_mask` = 6292 WHERE (`entry` = 18423);
|
||||
-- Spawn time
|
||||
UPDATE `creature` SET `spawntimesecs`=60 WHERE `guid`=31747 AND `id1`=18423;
|
||||
-- Mortal strike
|
||||
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 18423) AND (`source_type` = 0) AND (`id` IN (3));
|
||||
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
|
||||
(18423, 0, 3, 0, 2, 0, 100, 0, 20, 80, 5000, 15000, 0, 11, 15708, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Cho\'war the Pillager - Between 20-80% Health - Cast \'15708\' (No Repeat)');
|
||||
@@ -0,0 +1,12 @@
|
||||
-- DB update 2023_01_07_03 -> 2023_01_07_04
|
||||
--
|
||||
DELETE FROM `creature_text` WHERE `CreatureID`=23577;
|
||||
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
|
||||
(23577,0,0,'Get on ya knees and bow.... to da fang and claw!',14,0,100,0,0,12020,0,0,'Halazzi - SAY_AGGRO'),
|
||||
(23577,1,0,'You can\t fight da power!',14,0,100,0,0,12026,0,0,'Halazzi - SAY_KILL'),
|
||||
(23577,1,1,'Ya all gonna fail!',14,0,100,0,0,12027,0,0,'Halazzi - SAY_KILL'),
|
||||
(23577,2,0,'Me gonna carve ya now!',14,0,100,0,0,12023,0,0,'Halazzi - SAY_SABER'),
|
||||
(23577,2,1,'You gonna leave in pieces!',14,0,100,0,0,12024,0,0,'Halazzi - SAY_SABER'),
|
||||
(23577,3,0,'I fight wit\ untamed spirit....',14,0,100,0,0,12021,0,0,'Halazzi - SAY_SPLIT'),
|
||||
(23577,4,0,'Spirit, come back to me!',14,0,100,0,0,12022,0,0,'Halazzi - SAY_MERGE'),
|
||||
(23577,5,0,'Chaga... choka\jinn.',14,0,100,0,0,12028,0,0,'Halazzi - SAY_DEATH');
|
||||
@@ -0,0 +1,12 @@
|
||||
-- DB update 2023_01_07_04 -> 2023_01_07_05
|
||||
--
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id` IN (31704,31701,31702,31703);
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||
(31704,'spell_the_black_stalker_levitate'),
|
||||
(31701,'spell_the_black_stalker_levitation_pulse'),
|
||||
(31702,'spell_the_black_stalker_someone_grab_me'),
|
||||
(31703,'spell_the_black_stalker_magnetic_pull');
|
||||
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 13 AND `SourceEntry` = 31702;
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
|
||||
(13,1,31702,0,0,31,0,3,17992,0,0,0,0,"","Group 0: Spell 'Someone Grab Me' (Effect 0) targets creature 'Coilfang Invisible Vacuum Dummy'");
|
||||
@@ -0,0 +1,5 @@
|
||||
-- DB update 2023_01_07_05 -> 2023_01_07_06
|
||||
--
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=32065;
|
||||
INSERT INTO `spell_script_names` VALUES
|
||||
(32065,'spell_fungal_decay');
|
||||
@@ -0,0 +1,5 @@
|
||||
-- DB update 2023_01_07_06 -> 2023_01_07_07
|
||||
--
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=37678 AND `ScriptName`='spell_item_elixir_of_shadows';
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(37678, 'spell_item_elixir_of_shadows');
|
||||
@@ -3803,6 +3803,14 @@ JoinBGAndLFG.Enable = 0
|
||||
|
||||
LeaveGroupOnLogout.Enabled = 1
|
||||
|
||||
#
|
||||
# QuestPOI.Enabled
|
||||
# Description: Show points of interest on the map
|
||||
# Default: 1 - Enabled
|
||||
# 0 - Disabled
|
||||
|
||||
QuestPOI.Enabled = 1
|
||||
|
||||
#
|
||||
# ChangeFaction.MaxMoney
|
||||
# Description: Maximum amount of gold allowed on the character to perform a faction change.
|
||||
|
||||
@@ -1267,10 +1267,14 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
||||
}
|
||||
case SMART_ACTION_SUMMON_CREATURE:
|
||||
{
|
||||
WorldObject* summoner = GetBaseObject() ? GetBaseObject() : unit;
|
||||
EnumFlag<SmartActionSummonCreatureFlags> flags(static_cast<SmartActionSummonCreatureFlags>(e.action.summonCreature.flags));
|
||||
bool preferUnit = flags.HasFlag(SmartActionSummonCreatureFlags::PreferUnit);
|
||||
WorldObject* summoner = preferUnit ? unit : Coalesce<WorldObject>(GetBaseObject(), unit);
|
||||
if (!summoner)
|
||||
break;
|
||||
|
||||
bool personalSpawn = flags.HasFlag(SmartActionSummonCreatureFlags::PersonalSpawn);
|
||||
|
||||
if (e.GetTargetType() == SMART_TARGET_RANDOM_POINT)
|
||||
{
|
||||
float range = (float)e.target.randomPoint.range;
|
||||
@@ -1282,7 +1286,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
||||
randomPoint = me->GetRandomPoint(me->GetPosition(), range);
|
||||
else
|
||||
randomPoint = me->GetRandomPoint(srcPos, range);
|
||||
if (Creature* summon = summoner->SummonCreature(e.action.summonCreature.creature, randomPoint, (TempSummonType)e.action.summonCreature.type, e.action.summonCreature.duration))
|
||||
if (Creature* summon = summoner->SummonCreature(e.action.summonCreature.creature, randomPoint, (TempSummonType)e.action.summonCreature.type, e.action.summonCreature.duration, 0, nullptr, personalSpawn))
|
||||
{
|
||||
if (unit && e.action.summonCreature.attackInvoker)
|
||||
summon->AI()->AttackStart(unit);
|
||||
@@ -1301,7 +1305,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
||||
y += e.target.y;
|
||||
z += e.target.z;
|
||||
o += e.target.o;
|
||||
if (Creature* summon = summoner->SummonCreature(e.action.summonCreature.creature, x, y, z, o, (TempSummonType)e.action.summonCreature.type, e.action.summonCreature.duration))
|
||||
if (Creature* summon = summoner->SummonCreature(e.action.summonCreature.creature, x, y, z, o, (TempSummonType)e.action.summonCreature.type, e.action.summonCreature.duration, nullptr, personalSpawn))
|
||||
{
|
||||
if (e.action.summonCreature.attackInvoker == 2) // pussywizard: proper attackInvoker implementation
|
||||
summon->AI()->AttackStart(unit);
|
||||
|
||||
@@ -534,7 +534,7 @@ enum SMART_ACTION
|
||||
SMART_ACTION_ACTIVATE_GOBJECT = 9, //
|
||||
SMART_ACTION_RANDOM_EMOTE = 10, // EmoteId1, EmoteId2, EmoteId3...
|
||||
SMART_ACTION_CAST = 11, // SpellId, CastFlags, LimitTargets
|
||||
SMART_ACTION_SUMMON_CREATURE = 12, // CreatureID, summonType, duration in ms, attackInvoker, attackScriptOwner
|
||||
SMART_ACTION_SUMMON_CREATURE = 12, // CreatureID, summonType, duration in ms, attackInvoker, attackScriptOwner, flags(SmartActionSummonCreatureFlags)
|
||||
SMART_ACTION_THREAT_SINGLE_PCT = 13, // Threat%
|
||||
SMART_ACTION_THREAT_ALL_PCT = 14, // Threat%
|
||||
SMART_ACTION_CALL_AREAEXPLOREDOREVENTHAPPENS = 15, // QuestID
|
||||
@@ -696,6 +696,17 @@ enum SMART_ACTION
|
||||
SMART_ACTION_AC_END = 225, // placeholder
|
||||
};
|
||||
|
||||
enum class SmartActionSummonCreatureFlags
|
||||
{
|
||||
None = 0,
|
||||
PersonalSpawn = 1,
|
||||
PreferUnit = 2,
|
||||
|
||||
All = PersonalSpawn | PreferUnit
|
||||
};
|
||||
|
||||
DEFINE_ENUM_FLAG(SmartActionSummonCreatureFlags);
|
||||
|
||||
struct SmartAction
|
||||
{
|
||||
SMART_ACTION type;
|
||||
@@ -820,6 +831,7 @@ struct SmartAction
|
||||
uint32 duration;
|
||||
SAIBool attackInvoker;
|
||||
uint32 attackScriptOwner;
|
||||
uint32 flags; // SmartActionSummonCreatureFlags
|
||||
} summonCreature;
|
||||
|
||||
struct
|
||||
|
||||
@@ -454,11 +454,27 @@ void ThreatMgr::AddThreat(Unit* victim, float threat, SpellSchoolMask schoolMask
|
||||
void ThreatMgr::DoAddThreat(Unit* victim, float threat)
|
||||
{
|
||||
uint32 redirectThreadPct = victim->GetRedirectThreatPercent();
|
||||
Unit* redirectTarget = victim->GetRedirectThreatTarget();
|
||||
|
||||
// Personal Spawns from same summoner can aggro each other
|
||||
if (TempSummon* tempSummonVictim = victim->ToTempSummon())
|
||||
{
|
||||
if (tempSummonVictim->IsVisibleBySummonerOnly())
|
||||
{
|
||||
if (!GetOwner()->ToTempSummon() ||
|
||||
!GetOwner()->ToTempSummon()->IsVisibleBySummonerOnly() ||
|
||||
tempSummonVictim->GetSummonerGUID() != GetOwner()->ToTempSummon()->GetSummonerGUID())
|
||||
{
|
||||
redirectThreadPct = 100;
|
||||
redirectTarget = tempSummonVictim->GetSummonerUnit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// must check > 0.0f, otherwise dead loop
|
||||
if (threat > 0.0f && redirectThreadPct)
|
||||
{
|
||||
if (Unit* redirectTarget = victim->GetRedirectThreatTarget())
|
||||
if (redirectTarget)
|
||||
{
|
||||
float redirectThreat = CalculatePct(threat, redirectThreadPct);
|
||||
threat -= redirectThreat;
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
TempSummon::TempSummon(SummonPropertiesEntry const* properties, ObjectGuid owner, bool isWorldObject) :
|
||||
Creature(isWorldObject), m_Properties(properties), m_type(TEMPSUMMON_MANUAL_DESPAWN),
|
||||
m_timer(0), m_lifetime(0)
|
||||
m_timer(0), m_lifetime(0), _visibleBySummonerOnly(false)
|
||||
{
|
||||
if (owner)
|
||||
{
|
||||
|
||||
@@ -57,14 +57,19 @@ public:
|
||||
uint32 GetTimer() { return m_timer; }
|
||||
void SetTimer(uint32 t) { m_timer = t; }
|
||||
|
||||
void SetVisibleBySummonerOnly(bool visibleBySummonerOnly) { _visibleBySummonerOnly = visibleBySummonerOnly; }
|
||||
[[nodiscard]] bool IsVisibleBySummonerOnly() const { return _visibleBySummonerOnly; }
|
||||
|
||||
const SummonPropertiesEntry* const m_Properties;
|
||||
|
||||
std::string GetDebugInfo() const override;
|
||||
|
||||
private:
|
||||
TempSummonType m_type;
|
||||
uint32 m_timer;
|
||||
uint32 m_lifetime;
|
||||
ObjectGuid m_summonerGUID;
|
||||
bool _visibleBySummonerOnly;
|
||||
};
|
||||
|
||||
class Minion : public TempSummon
|
||||
|
||||
@@ -1773,6 +1773,17 @@ bool WorldObject::CanSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo
|
||||
WorldObject const* viewpoint = this;
|
||||
if (Player const* thisPlayer = ToPlayer())
|
||||
{
|
||||
if (Creature const* creature = obj->ToCreature())
|
||||
{
|
||||
if (TempSummon const* tempSummon = creature->ToTempSummon())
|
||||
{
|
||||
if (tempSummon->IsVisibleBySummonerOnly() && GetGUID() != tempSummon->GetSummonerGUID())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (thisPlayer->isDead() && thisPlayer->GetHealth() > 0 && // Cheap way to check for ghost state
|
||||
!(obj->m_serverSideVisibility.GetValue(SERVERSIDE_VISIBILITY_GHOST) & m_serverSideVisibility.GetValue(SERVERSIDE_VISIBILITY_GHOST) & GHOST_VISIBILITY_GHOST))
|
||||
{
|
||||
@@ -2115,7 +2126,7 @@ void WorldObject::AddObjectToRemoveList()
|
||||
map->AddObjectToRemoveList(this);
|
||||
}
|
||||
|
||||
TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropertiesEntry const* properties /*= nullptr*/, uint32 duration /*= 0*/, WorldObject* summoner /*= nullptr*/, uint32 spellId /*= 0*/, uint32 vehId /*= 0*/)
|
||||
TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropertiesEntry const* properties /*= nullptr*/, uint32 duration /*= 0*/, WorldObject* summoner /*= nullptr*/, uint32 spellId /*= 0*/, uint32 vehId /*= 0*/, bool visibleBySummonerOnly /*= false*/)
|
||||
{
|
||||
uint32 mask = UNIT_MASK_SUMMON;
|
||||
if (properties)
|
||||
@@ -2204,6 +2215,9 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
|
||||
summon->SetHomePosition(pos);
|
||||
|
||||
summon->InitStats(duration);
|
||||
|
||||
summon->SetVisibleBySummonerOnly(visibleBySummonerOnly);
|
||||
|
||||
if (!AddToMap(summon->ToCreature(), summon->GetOwnerGUID().IsPlayer() || (summoner && summoner->GetTransport())))
|
||||
{
|
||||
delete summon;
|
||||
@@ -2236,7 +2250,7 @@ void Map::SummonCreatureGroup(uint8 group, std::list<TempSummon*>* list /*= null
|
||||
list->push_back(summon);
|
||||
}
|
||||
|
||||
TempSummon* WorldObject::SummonCreature(uint32 id, float x, float y, float z, float ang, TempSummonType spwtype, uint32 despwtime, SummonPropertiesEntry const* properties)
|
||||
TempSummon* WorldObject::SummonCreature(uint32 id, float x, float y, float z, float ang, TempSummonType spwtype, uint32 despwtime, SummonPropertiesEntry const* properties, bool visibleBySummonerOnly)
|
||||
{
|
||||
if (!x && !y && !z)
|
||||
{
|
||||
@@ -2245,7 +2259,7 @@ TempSummon* WorldObject::SummonCreature(uint32 id, float x, float y, float z, fl
|
||||
}
|
||||
Position pos;
|
||||
pos.Relocate(x, y, z, ang);
|
||||
return SummonCreature(id, pos, spwtype, despwtime, 0, properties);
|
||||
return SummonCreature(id, pos, spwtype, despwtime, 0, properties, visibleBySummonerOnly);
|
||||
}
|
||||
|
||||
GameObject* Map::SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime, bool checkTransport)
|
||||
@@ -2301,11 +2315,11 @@ void WorldObject::ClearZoneScript()
|
||||
m_zoneScript = nullptr;
|
||||
}
|
||||
|
||||
TempSummon* WorldObject::SummonCreature(uint32 entry, const Position& pos, TempSummonType spwtype, uint32 duration, uint32 /*vehId*/, SummonPropertiesEntry const* properties) const
|
||||
TempSummon* WorldObject::SummonCreature(uint32 entry, const Position& pos, TempSummonType spwtype, uint32 duration, uint32 /*vehId*/, SummonPropertiesEntry const* properties, bool visibleBySummonerOnly /*= false*/) const
|
||||
{
|
||||
if (Map* map = FindMap())
|
||||
{
|
||||
if (TempSummon* summon = map->SummonCreature(entry, pos, properties, duration, (WorldObject*) this))
|
||||
if (TempSummon* summon = map->SummonCreature(entry, pos, properties, duration, (WorldObject*)this, 0, 0, visibleBySummonerOnly))
|
||||
{
|
||||
summon->SetTempSummonType(spwtype);
|
||||
return summon;
|
||||
|
||||
@@ -522,8 +522,8 @@ public:
|
||||
void ClearZoneScript();
|
||||
[[nodiscard]] ZoneScript* GetZoneScript() const { return m_zoneScript; }
|
||||
|
||||
TempSummon* SummonCreature(uint32 id, const Position& pos, TempSummonType spwtype = TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime = 0, uint32 vehId = 0, SummonPropertiesEntry const* properties = nullptr) const;
|
||||
TempSummon* SummonCreature(uint32 id, float x, float y, float z, float ang = 0, TempSummonType spwtype = TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime = 0, SummonPropertiesEntry const* properties = nullptr);
|
||||
TempSummon* SummonCreature(uint32 id, const Position& pos, TempSummonType spwtype = TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime = 0, uint32 vehId = 0, SummonPropertiesEntry const* properties = nullptr, bool visibleBySummonerOnly = false) const;
|
||||
TempSummon* SummonCreature(uint32 id, float x, float y, float z, float ang = 0, TempSummonType spwtype = TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime = 0, SummonPropertiesEntry const* properties = nullptr, bool visibleBySummonerOnly = false);
|
||||
GameObject* SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime, bool checkTransport = true, GOSummonType summonType = GO_SUMMON_TIMED_OR_CORPSE_DESPAWN);
|
||||
Creature* SummonTrigger(float x, float y, float z, float ang, uint32 dur, bool setLevel = false, CreatureAI * (*GetAI)(Creature*) = nullptr);
|
||||
void SummonCreatureGroup(uint8 group, std::list<TempSummon*>* list = nullptr);
|
||||
|
||||
@@ -2441,6 +2441,10 @@ float Pet::GetNativeObjectScale() const
|
||||
else
|
||||
scale = creatureFamily->minScale + float(GetLevel() - creatureFamily->minScaleLevel) / creatureFamily->maxScaleLevel * (creatureFamily->maxScale - creatureFamily->minScale);
|
||||
|
||||
if (CreatureDisplayInfoEntry const* displayInfo = sCreatureDisplayInfoStore.LookupEntry(GetNativeDisplayId()))
|
||||
if (displayInfo->scale > 1.f && GetCreatureTemplate()->IsExotic())
|
||||
scale *= displayInfo->scale;
|
||||
|
||||
return scale;
|
||||
}
|
||||
|
||||
|
||||
@@ -16049,7 +16049,7 @@ void Player::RemoveRestFlag(RestFlag restFlag)
|
||||
|
||||
uint32 Player::DoRandomRoll(uint32 minimum, uint32 maximum)
|
||||
{
|
||||
ASSERT(minimum <= maximum || maximum <= 10000);
|
||||
ASSERT(minimum <= maximum);
|
||||
|
||||
uint32 roll = urand(minimum, maximum);
|
||||
|
||||
|
||||
@@ -1698,6 +1698,7 @@ void Unit::CalculateMeleeDamage(Unit* victim, CalcDamageInfo* damageInfo, Weapon
|
||||
if (fullBlockMask == ((1 << 0) | (1 << 1)))
|
||||
{
|
||||
damageInfo->TargetState = VICTIMSTATE_BLOCKS;
|
||||
damageInfo->procEx |= PROC_EX_FULL_BLOCK;
|
||||
damageInfo->blocked_amount -= remainingBlock;
|
||||
}
|
||||
break;
|
||||
@@ -1804,6 +1805,16 @@ void Unit::CalculateMeleeDamage(Unit* victim, CalcDamageInfo* damageInfo, Weapon
|
||||
{
|
||||
damageInfo->HitInfo |= (tmpHitInfo[0] & HITINFO_PARTIAL_RESIST);
|
||||
}
|
||||
|
||||
if (damageInfo->HitInfo & (HITINFO_PARTIAL_ABSORB | HITINFO_FULL_ABSORB))
|
||||
{
|
||||
damageInfo->procEx |= PROC_EX_ABSORB;
|
||||
}
|
||||
|
||||
if (damageInfo->HitInfo & HITINFO_FULL_RESIST)
|
||||
{
|
||||
damageInfo->procEx |= PROC_EX_RESIST;
|
||||
}
|
||||
}
|
||||
|
||||
void Unit::DealMeleeDamage(CalcDamageInfo* damageInfo, bool durabilityLoss)
|
||||
|
||||
@@ -7743,6 +7743,13 @@ void ObjectMgr::LoadPointsOfInterest()
|
||||
|
||||
void ObjectMgr::LoadQuestPOI()
|
||||
{
|
||||
if (!sWorld->getBoolConfig(CONFIG_QUEST_POI_ENABLED))
|
||||
{
|
||||
LOG_INFO("server.loading", ">> Loaded 0 quest POI definitions. Disabled by config.");
|
||||
LOG_INFO("server.loading", " ");
|
||||
return;
|
||||
}
|
||||
|
||||
uint32 oldMSTime = getMSTime();
|
||||
|
||||
_questPOIStore.clear(); // need for reload case
|
||||
|
||||
@@ -1264,7 +1264,21 @@ public:
|
||||
}
|
||||
[[nodiscard]] QuestGreetingLocale const* GetQuestGreetingLocale(TypeID type, uint32 id) const
|
||||
{
|
||||
QuestGreetingLocaleContainer::const_iterator itr = _questGreetingLocaleStore.find(MAKE_PAIR32(type, id));
|
||||
uint32 typeIndex;
|
||||
if (type == TYPEID_UNIT)
|
||||
{
|
||||
typeIndex = 0;
|
||||
}
|
||||
else if (type == TYPEID_GAMEOBJECT)
|
||||
{
|
||||
typeIndex = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
QuestGreetingLocaleContainer::const_iterator itr = _questGreetingLocaleStore.find(MAKE_PAIR32(typeIndex, id));
|
||||
if (itr == _questGreetingLocaleStore.end()) return nullptr;
|
||||
return &itr->second;
|
||||
}
|
||||
|
||||
@@ -597,7 +597,7 @@ namespace Acore
|
||||
void Visit(PlayerMapType& m)
|
||||
{
|
||||
for (PlayerMapType::iterator itr = m.begin(); itr != m.end(); ++itr)
|
||||
if (itr->GetSource()->InSamePhase(i_searcher) && itr->GetSource()->IsWithinDist(i_searcher, i_dist))
|
||||
if (itr->GetSource()->HaveAtClient(i_searcher) && itr->GetSource()->IsWithinDist(i_searcher, i_dist))
|
||||
i_do(itr->GetSource());
|
||||
}
|
||||
|
||||
|
||||
@@ -567,6 +567,12 @@ void WorldSession::HandleRandomRollOpcode(WorldPackets::Misc::RandomRollClient&
|
||||
minimum = packet.Min;
|
||||
maximum = packet.Max;
|
||||
|
||||
/** error handling **/
|
||||
if (minimum > maximum || maximum > 10000) // < 32768 for urand call
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
GetPlayer()->DoRandomRoll(minimum, maximum);
|
||||
}
|
||||
|
||||
|
||||
@@ -414,12 +414,13 @@ bool LootItem::AllowedForPlayer(Player const* player, ObjectGuid source) const
|
||||
}
|
||||
|
||||
bool isMasterLooter = player->GetGroup() && player->GetGroup()->GetMasterLooterGuid() == player->GetGUID();
|
||||
bool itemVisibleForMasterLooter = !needs_quest && (!follow_loot_rules || !is_underthreshold);
|
||||
|
||||
// DB conditions check
|
||||
if (!sConditionMgr->IsObjectMeetToConditions(const_cast<Player*>(player), conditions))
|
||||
{
|
||||
// Master Looter can see conditioned recipes
|
||||
if (isMasterLooter && (!follow_loot_rules || !is_underthreshold))
|
||||
if (isMasterLooter && itemVisibleForMasterLooter)
|
||||
{
|
||||
if ((pProto->Flags & ITEM_FLAG_HIDE_UNUSABLE_RECIPE) || (pProto->Class == ITEM_CLASS_RECIPE && pProto->Bonding == BIND_WHEN_PICKED_UP && pProto->Spells[1].SpellId != 0))
|
||||
{
|
||||
@@ -442,7 +443,7 @@ bool LootItem::AllowedForPlayer(Player const* player, ObjectGuid source) const
|
||||
}
|
||||
|
||||
// Master looter can see all items even if the character can't loot them
|
||||
if (isMasterLooter && (!follow_loot_rules || !is_underthreshold))
|
||||
if (isMasterLooter && itemVisibleForMasterLooter)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -500,7 +500,7 @@ public:
|
||||
|
||||
void UpdateIteratorBack(Player* player);
|
||||
|
||||
TempSummon* SummonCreature(uint32 entry, Position const& pos, SummonPropertiesEntry const* properties = nullptr, uint32 duration = 0, WorldObject* summoner = nullptr, uint32 spellId = 0, uint32 vehId = 0);
|
||||
TempSummon* SummonCreature(uint32 entry, Position const& pos, SummonPropertiesEntry const* properties = nullptr, uint32 duration = 0, WorldObject* summoner = nullptr, uint32 spellId = 0, uint32 vehId = 0, bool visibleBySummonerOnly = false);
|
||||
GameObject* SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime, bool checkTransport = true);
|
||||
GameObject* SummonGameObject(uint32 entry, Position const& pos, float rotation0 = 0.0f, float rotation1 = 0.0f, float rotation2 = 0.0f, float rotation3 = 0.0f, uint32 respawnTime = 100, bool checkTransport = true);
|
||||
void SummonCreatureGroup(uint8 group, std::list<TempSummon*>* list = nullptr);
|
||||
|
||||
@@ -191,7 +191,10 @@ namespace Movement
|
||||
|
||||
uint32 nodes = move_spline.getPath().size();
|
||||
data << nodes;
|
||||
data.append<Vector3>(&move_spline.getPath()[0], nodes);
|
||||
if (nodes)
|
||||
{
|
||||
data.append<Vector3>(&move_spline.getPath()[0], nodes);
|
||||
}
|
||||
data << uint8(move_spline.spline.mode()); // added in 3.1
|
||||
data << (move_spline.isCyclic() ? Vector3::zero() : move_spline.FinalDestination());
|
||||
}
|
||||
|
||||
@@ -6177,7 +6177,7 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster)
|
||||
case 56654:
|
||||
case 58882:
|
||||
int32 amount = int32(target->GetMaxPower(POWER_MANA) * GetAmount() / 100.0f);
|
||||
target->CastCustomSpell(target, triggerSpellId, &amount, nullptr, nullptr, true);
|
||||
target->CastCustomSpell(target, triggerSpellId, &amount, nullptr, nullptr, true, nullptr, this);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2917,6 +2917,15 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
|
||||
{
|
||||
m_caster->CombatStart(effectUnit, !(m_spellInfo->AttributesEx3 & SPELL_ATTR3_SUPRESS_TARGET_PROCS));
|
||||
|
||||
// Patch 3.0.8: All player spells which cause a creature to become aggressive to you will now also immediately cause the creature to be tapped.
|
||||
if (Creature* creature = effectUnit->ToCreature())
|
||||
{
|
||||
if (!creature->hasLootRecipient() && m_caster->IsPlayer())
|
||||
{
|
||||
creature->SetLootRecipient(m_caster);
|
||||
}
|
||||
}
|
||||
|
||||
// Unsure if there are more spells that are not supposed to stop enemy from
|
||||
// regenerating HP from food, so for now it stays as an ID.
|
||||
const uint32 SPELL_PREMEDITATION = 14183;
|
||||
|
||||
@@ -753,7 +753,7 @@ public:
|
||||
HitTriggerSpellList m_hitTriggerSpells;
|
||||
|
||||
// effect helpers
|
||||
void SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const* properties, uint32 numSummons);
|
||||
void SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const* properties, uint32 numSummons, bool personalSpawn);
|
||||
void CalculateJumpSpeeds(uint8 i, float dist, float& speedxy, float& speedz);
|
||||
|
||||
SpellCastResult CanOpenLock(uint32 effIndex, uint32 lockid, SkillType& skillid, int32& reqSkillValue, int32& skillValue);
|
||||
|
||||
@@ -2354,6 +2354,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
|
||||
if (!m_originalCaster)
|
||||
return;
|
||||
|
||||
bool personalSpawn = (properties->Flags & SUMMON_PROP_FLAG_ONLY_VISIBLE_TO_SUMMONER) != 0;
|
||||
int32 duration = m_spellInfo->GetDuration();
|
||||
if (Player* modOwner = m_originalCaster->GetSpellModOwner())
|
||||
modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_DURATION, duration);
|
||||
@@ -2398,7 +2399,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
|
||||
case SUMMON_CATEGORY_UNK:
|
||||
if (properties->Flags & 512)
|
||||
{
|
||||
SummonGuardian(effIndex, entry, properties, numSummons);
|
||||
SummonGuardian(effIndex, entry, properties, numSummons, personalSpawn);
|
||||
break;
|
||||
}
|
||||
switch (properties->Type)
|
||||
@@ -2407,18 +2408,18 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
|
||||
case SUMMON_TYPE_GUARDIAN:
|
||||
case SUMMON_TYPE_GUARDIAN2:
|
||||
case SUMMON_TYPE_MINION:
|
||||
SummonGuardian(effIndex, entry, properties, numSummons);
|
||||
SummonGuardian(effIndex, entry, properties, numSummons, personalSpawn);
|
||||
break;
|
||||
// Summons a vehicle, but doesn't force anyone to enter it (see SUMMON_CATEGORY_VEHICLE)
|
||||
case SUMMON_TYPE_VEHICLE:
|
||||
case SUMMON_TYPE_VEHICLE2:
|
||||
summon = m_caster->GetMap()->SummonCreature(entry, *destTarget, properties, duration, m_originalCaster, m_spellInfo->Id);
|
||||
summon = m_caster->GetMap()->SummonCreature(entry, *destTarget, properties, duration, m_originalCaster, m_spellInfo->Id, 0, personalSpawn);
|
||||
break;
|
||||
case SUMMON_TYPE_LIGHTWELL:
|
||||
case SUMMON_TYPE_TOTEM:
|
||||
{
|
||||
// protection code
|
||||
summon = m_caster->GetMap()->SummonCreature(entry, *destTarget, properties, duration, m_originalCaster, m_spellInfo->Id);
|
||||
summon = m_caster->GetMap()->SummonCreature(entry, *destTarget, properties, duration, m_originalCaster, m_spellInfo->Id, 0, personalSpawn);
|
||||
if (!summon || !summon->IsTotem())
|
||||
return;
|
||||
|
||||
@@ -2436,7 +2437,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
|
||||
case SUMMON_TYPE_JEEVES:
|
||||
case SUMMON_TYPE_MINIPET:
|
||||
{
|
||||
summon = m_caster->GetMap()->SummonCreature(entry, *destTarget, properties, duration, m_originalCaster, m_spellInfo->Id);
|
||||
summon = m_caster->GetMap()->SummonCreature(entry, *destTarget, properties, duration, m_originalCaster, m_spellInfo->Id, 0, personalSpawn);
|
||||
if (!summon || !summon->HasUnitTypeMask(UNIT_MASK_MINION))
|
||||
return;
|
||||
|
||||
@@ -2470,7 +2471,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
|
||||
// randomize position for multiple summons
|
||||
pos = m_caster->GetRandomPoint(*destTarget, radius);
|
||||
|
||||
summon = m_originalCaster->SummonCreature(entry, pos, summonType, duration);
|
||||
summon = m_originalCaster->SummonCreature(entry, pos, summonType, duration, 0, nullptr, personalSpawn);
|
||||
if (!summon)
|
||||
continue;
|
||||
|
||||
@@ -2492,10 +2493,10 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
|
||||
// Xinef: SummonGuardian function can summon a few npcs of same type, remove old summons with same entry here
|
||||
if (m_originalCaster)
|
||||
m_originalCaster->RemoveAllMinionsByEntry(entry);
|
||||
SummonGuardian(effIndex, entry, properties, numSummons);
|
||||
SummonGuardian(effIndex, entry, properties, numSummons, personalSpawn);
|
||||
break;
|
||||
case SUMMON_CATEGORY_PUPPET:
|
||||
summon = m_caster->GetMap()->SummonCreature(entry, *destTarget, properties, duration, m_originalCaster, m_spellInfo->Id);
|
||||
summon = m_caster->GetMap()->SummonCreature(entry, *destTarget, properties, duration, m_originalCaster, m_spellInfo->Id, 0, personalSpawn);
|
||||
break;
|
||||
case SUMMON_CATEGORY_VEHICLE:
|
||||
// Summoning spells (usually triggered by npc_spellclick) that spawn a vehicle and that cause the clicker
|
||||
@@ -2506,7 +2507,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
|
||||
if (std::fabs(m_caster->GetPositionZ() - destTarget->GetPositionZ()) > 6.0f)
|
||||
destTarget->m_positionZ = m_caster->GetPositionZ();
|
||||
|
||||
summon = m_originalCaster->GetMap()->SummonCreature(entry, *destTarget, properties, duration, m_caster, m_spellInfo->Id);
|
||||
summon = m_originalCaster->GetMap()->SummonCreature(entry, *destTarget, properties, duration, m_caster, m_spellInfo->Id, 0, personalSpawn);
|
||||
if (!summon || !summon->IsVehicle())
|
||||
return;
|
||||
|
||||
@@ -3176,7 +3177,7 @@ void Spell::EffectSummonPet(SpellEffIndex effIndex)
|
||||
// Xinef: unsummon old guardian
|
||||
if (Guardian* oldPet = m_originalCaster->GetGuardianPet())
|
||||
oldPet->UnSummon();
|
||||
SummonGuardian(effIndex, petentry, properties, 1);
|
||||
SummonGuardian(effIndex, petentry, properties, 1, false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -3903,17 +3904,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
|
||||
m_caster->TextEmote(buf);
|
||||
break;
|
||||
}
|
||||
// Roll 'dem Bones - Worn Troll Dice
|
||||
case 47776:
|
||||
{
|
||||
char buf[128];
|
||||
const char* gender = "his";
|
||||
if (m_caster->getGender() > 0)
|
||||
gender = "her";
|
||||
sprintf(buf, "%s causually tosses %s [Worn Troll Dice]. One %u and one %u.", m_caster->GetName().c_str(), gender, urand(1, 6), urand(1, 6));
|
||||
m_caster->TextEmote(buf);
|
||||
break;
|
||||
}
|
||||
case 52173: // Coyote Spirit Despawn
|
||||
case 60243: // Blood Parrot Despawn
|
||||
if (unitTarget->GetTypeId() == TYPEID_UNIT && unitTarget->ToCreature()->IsSummon())
|
||||
@@ -5186,7 +5176,7 @@ void Spell::EffectPullTowards(SpellEffIndex effIndex)
|
||||
pos.Relocate(m_caster->GetPositionX(), m_caster->GetPositionY(), m_caster->GetPositionZ() + 1.0f, m_caster->GetOrientation());
|
||||
}
|
||||
|
||||
float speedXY = float(m_spellInfo->Effects[effIndex].MiscValue) * 0.1f;
|
||||
float speedXY = float(m_spellInfo->Effects[effIndex].MiscValue) ? float(m_spellInfo->Effects[effIndex].MiscValue) * 0.1f : 30.f;
|
||||
float speedZ = unitTarget->GetDistance(pos) / speedXY * 0.5f * Movement::gravity;
|
||||
|
||||
unitTarget->GetMotionMaster()->MoveJump(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), speedXY, speedZ);
|
||||
@@ -6005,7 +5995,7 @@ void Spell::EffectGameObjectSetDestructionState(SpellEffIndex effIndex)
|
||||
gameObjTarget->SetDestructibleState(GameObjectDestructibleState(m_spellInfo->Effects[effIndex].MiscValue), player, true);
|
||||
}
|
||||
|
||||
void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const* properties, uint32 numGuardians)
|
||||
void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const* properties, uint32 numGuardians, bool personalSpawn)
|
||||
{
|
||||
Unit* caster = m_originalCaster;
|
||||
if (!caster)
|
||||
@@ -6105,7 +6095,7 @@ void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const*
|
||||
pos = m_caster->GetRandomPoint(*destTarget, radius);
|
||||
}
|
||||
|
||||
summon = map->SummonCreature(entry, pos, properties, duration, caster, m_spellInfo->Id);
|
||||
summon = map->SummonCreature(entry, pos, properties, duration, caster, m_spellInfo->Id, 0, personalSpawn);
|
||||
if (!summon)
|
||||
return;
|
||||
|
||||
|
||||
@@ -2725,6 +2725,7 @@ bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const
|
||||
return true;
|
||||
return false;
|
||||
case SPELL_AURA_MOD_ROOT:
|
||||
case SPELL_AURA_MOD_FEAR:
|
||||
case SPELL_AURA_MOD_SILENCE:
|
||||
case SPELL_AURA_GHOST:
|
||||
case SPELL_AURA_PERIODIC_LEECH:
|
||||
|
||||
@@ -174,6 +174,7 @@ enum WorldBoolConfigs
|
||||
CONFIG_ALLOW_JOIN_BG_AND_LFG,
|
||||
CONFIG_MISS_CHANCE_MULTIPLIER_ONLY_FOR_PLAYERS,
|
||||
CONFIG_LEAVE_GROUP_ON_LOGOUT,
|
||||
CONFIG_QUEST_POI_ENABLED,
|
||||
CONFIG_VMAP_BLIZZLIKE_PVP_LOS,
|
||||
CONFIG_OBJECT_SPARKLES,
|
||||
CONFIG_LOW_LEVEL_REGEN_BOOST,
|
||||
|
||||
@@ -1280,6 +1280,8 @@ void World::LoadConfigSettings(bool reload)
|
||||
|
||||
m_bool_configs[CONFIG_LEAVE_GROUP_ON_LOGOUT] = sConfigMgr->GetOption<bool>("LeaveGroupOnLogout.Enabled", true);
|
||||
|
||||
m_bool_configs[CONFIG_QUEST_POI_ENABLED] = sConfigMgr->GetOption<bool>("QuestPOI.Enabled", true);
|
||||
|
||||
m_int_configs[CONFIG_CHANGE_FACTION_MAX_MONEY] = sConfigMgr->GetOption<uint32>("ChangeFaction.MaxMoney", 0);
|
||||
|
||||
///- Read the "Data" directory from the config file
|
||||
|
||||
@@ -709,6 +709,13 @@ public:
|
||||
DoZoneInCombat();
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason reason) override
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode(reason);
|
||||
|
||||
instance->SetBossState(DATA_OPERA_PERFORMANCE, FAIL);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Talk(SAY_CRONE_DEATH);
|
||||
@@ -891,6 +898,13 @@ public:
|
||||
me->DespawnOrUnsummon();
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason reason) override
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode(reason);
|
||||
|
||||
instance->SetBossState(DATA_OPERA_PERFORMANCE, FAIL);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
DoPlaySoundToSet(me, SOUND_WOLF_DEATH);
|
||||
@@ -1138,6 +1152,13 @@ public:
|
||||
|
||||
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override;
|
||||
|
||||
void EnterEvadeMode(EvadeReason reason) override
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode(reason);
|
||||
|
||||
instance->SetBossState(DATA_OPERA_PERFORMANCE, FAIL);
|
||||
}
|
||||
|
||||
void JustDied(Unit*) override
|
||||
{
|
||||
Talk(SAY_JULIANNE_DEATH02);
|
||||
@@ -1287,6 +1308,13 @@ public:
|
||||
ScriptedAI::MoveInLineOfSight(who);
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason reason) override
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode(reason);
|
||||
|
||||
instance->SetBossState(DATA_OPERA_PERFORMANCE, FAIL);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Talk(SAY_ROMULO_DEATH);
|
||||
|
||||
@@ -73,7 +73,18 @@ public:
|
||||
case NPC_RELAY:
|
||||
m_uiRelayGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_BARNES:
|
||||
_barnesGUID = creature->GetGUID();
|
||||
if (GetBossState(DATA_OPERA_PERFORMANCE) != DONE && !creature->IsAlive())
|
||||
{
|
||||
creature->Respawn(true);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
InstanceScript::OnCreatureCreate(creature);
|
||||
}
|
||||
|
||||
void OnUnitDeath(Unit* unit) override
|
||||
@@ -162,6 +173,13 @@ public:
|
||||
sideEntrance->RemoveGameObjectFlag(GO_FLAG_LOCKED);
|
||||
instance->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, 16812, nullptr);
|
||||
}
|
||||
else if (state == FAIL)
|
||||
{
|
||||
HandleGameObject(m_uiStageDoorLeftGUID, false);
|
||||
HandleGameObject(m_uiStageDoorRightGUID, false);
|
||||
HandleGameObject(m_uiCurtainGUID, false);
|
||||
DoRespawnCreature(_barnesGUID, true);
|
||||
}
|
||||
break;
|
||||
case DATA_CHESS:
|
||||
if (state == DONE)
|
||||
@@ -336,6 +354,7 @@ public:
|
||||
ObjectGuid ImageGUID;
|
||||
ObjectGuid DustCoveredChest;
|
||||
ObjectGuid m_uiRelayGUID;
|
||||
ObjectGuid _barnesGUID;
|
||||
GuidVector _operaDecorations[EVENT_RAJ];
|
||||
};
|
||||
};
|
||||
|
||||
@@ -90,7 +90,8 @@ enum KZMiscCreatures
|
||||
NPC_DREADBEAST = 16177,
|
||||
NPC_SHADOWBEAST = 16176,
|
||||
NPC_KILREK = 17229,
|
||||
NPC_RELAY = 17645
|
||||
NPC_RELAY = 17645,
|
||||
NPC_BARNES = 16812
|
||||
};
|
||||
|
||||
enum KZGameObjectIds
|
||||
|
||||
@@ -56,12 +56,11 @@ enum PhaseHalazzi
|
||||
enum Yells
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_SABER = 1,
|
||||
SAY_SPLIT = 2,
|
||||
SAY_MERGE = 3,
|
||||
SAY_KILL = 4,
|
||||
SAY_DEATH = 5,
|
||||
SAY_BERSERK = 6
|
||||
SAY_KILL = 1,
|
||||
SAY_SABER = 2,
|
||||
SAY_SPLIT = 3,
|
||||
SAY_MERGE = 4,
|
||||
SAY_DEATH = 5
|
||||
};
|
||||
|
||||
class boss_halazzi : public CreatureScript
|
||||
@@ -197,7 +196,6 @@ public:
|
||||
|
||||
if (BerserkTimer <= diff)
|
||||
{
|
||||
Talk(SAY_BERSERK);
|
||||
DoCast(me, SPELL_BERSERK, true);
|
||||
BerserkTimer = 60000;
|
||||
}
|
||||
@@ -207,6 +205,7 @@ public:
|
||||
{
|
||||
if (SaberlashTimer <= diff)
|
||||
{
|
||||
Talk(SAY_SABER);
|
||||
// A tank with more than 490 defense skills should receive no critical hit
|
||||
//DoCast(me, 41296, true);
|
||||
DoCastVictim(SPELL_SABER_LASH, true);
|
||||
|
||||
@@ -211,7 +211,7 @@ public:
|
||||
return;
|
||||
}
|
||||
|
||||
if (summon->GetEntry() == NPC_ONYXIAN_LAIR_GUARD && Phase != PHASE_LANDED)
|
||||
if (summon->GetEntry() == NPC_ONYXIAN_LAIR_GUARD && Phase < PHASE_AIRPHASE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -221,8 +221,6 @@ public:
|
||||
summon->AI()->AttackStart(target);
|
||||
DoZoneInCombat(summon);
|
||||
}
|
||||
|
||||
summons.Summon(summon);
|
||||
}
|
||||
|
||||
void MovementInform(uint32 type, uint32 id) override
|
||||
|
||||
@@ -20,16 +20,33 @@
|
||||
#include "SpellScript.h"
|
||||
#include "the_underbog.h"
|
||||
|
||||
/*
|
||||
How levitation sequence works: boss casts Levitate and it triggers a chain of spells, target(any target, player or pet, any position in
|
||||
threat list) eventually gets pulled towards by randomly selected trigger. Then target becomes protected from Pull Towards by Suspension
|
||||
aura which is triggered every 1 sec up to 4 times. Since it has stun mechanic, diminishing returns cuts off its duration every cast in
|
||||
half (20 > 10 > 5 > 0). Eventually player becomes immune to Suspension and vulnerable to another pull towards.
|
||||
Whole levitate sequence is designed to pull player towards up to 3 times. Usually it works like this: player gets pulled towards,
|
||||
gets protected by Suspension from Pull Towards next 2 times. If player is unlucky, boss can cast Levitate on same player again, in that case
|
||||
player can be pulled towards 2 times in a row without any protection from fall damage by Suspension(case from sniffs).
|
||||
However currently diminishing returns affects Suspension after first cast, its duration is 10 instead of 20 seconds and player will be
|
||||
immune to 4th cast. That allows to pull player towards when levitation sequence ends. Levitation sequence has sensetive design and looks
|
||||
like lack of delays between packets makes it work differently too.
|
||||
Of course as was said above player can be pulled towards 2 times in a row but that looks like a rare case.
|
||||
*/
|
||||
|
||||
enum eBlackStalker
|
||||
{
|
||||
SPELL_LEVITATE = 31704,
|
||||
SPELL_SUSPENSION = 31719,
|
||||
SPELL_LEVITATION_PULSE = 31701,
|
||||
SPELL_MAGNETIC_PULL = 31705,
|
||||
SPELL_CHAIN_LIGHTNING = 31717,
|
||||
SPELL_STATIC_CHARGE = 31715,
|
||||
SPELL_SUMMON_SPORE_STRIDER = 38755,
|
||||
|
||||
SPELL_LEVITATION_PULSE = 31701,
|
||||
SPELL_SOMEONE_GRAB_ME = 31702,
|
||||
SPELL_MAGNETIC_PULL = 31703,
|
||||
SPELL_SUSPENSION_PRIMER = 31720,
|
||||
SPELL_SUSPENSION = 31719,
|
||||
|
||||
EVENT_LEVITATE = 1,
|
||||
EVENT_SPELL_CHAIN = 2,
|
||||
EVENT_SPELL_STATIC = 3,
|
||||
@@ -47,15 +64,9 @@ struct boss_the_black_stalker : public BossAI
|
||||
{
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
lTarget.Clear();
|
||||
BossAI::Reset();
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* who) override
|
||||
{
|
||||
events.ScheduleEvent(EVENT_LEVITATE, 12000);
|
||||
events.ScheduleEvent(EVENT_LEVITATE, urand(8000, 12000));
|
||||
events.ScheduleEvent(EVENT_SPELL_CHAIN, 6000);
|
||||
events.ScheduleEvent(EVENT_SPELL_STATIC, 10000);
|
||||
events.ScheduleEvent(EVENT_CHECK, 5000);
|
||||
@@ -88,6 +99,10 @@ struct boss_the_black_stalker : public BossAI
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_CHECK:
|
||||
@@ -107,7 +122,6 @@ struct boss_the_black_stalker : public BossAI
|
||||
case EVENT_SPELL_CHAIN:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
||||
me->CastSpell(target, SPELL_CHAIN_LIGHTNING, false);
|
||||
events.DelayEvents(3000);
|
||||
events.RepeatEvent(9000);
|
||||
break;
|
||||
case EVENT_SPELL_STATIC:
|
||||
@@ -116,46 +130,16 @@ struct boss_the_black_stalker : public BossAI
|
||||
events.RepeatEvent(10000);
|
||||
break;
|
||||
case EVENT_LEVITATE:
|
||||
events.RepeatEvent(15000);
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
|
||||
{
|
||||
me->CastSpell(target, SPELL_LEVITATE, false);
|
||||
lTarget = target->GetGUID();
|
||||
events.DelayEvents(5000);
|
||||
events.ScheduleEvent(EVENT_LEVITATE_TARGET_1, 2000);
|
||||
}
|
||||
DoCastSelf(SPELL_LEVITATE);
|
||||
events.RepeatEvent(urand(18000, 24000));
|
||||
break;
|
||||
case EVENT_LEVITATE_TARGET_1:
|
||||
if (Unit* target = ObjectAccessor::GetUnit(*me, lTarget))
|
||||
{
|
||||
if (!target->HasAura(SPELL_LEVITATE))
|
||||
lTarget.Clear();
|
||||
else
|
||||
{
|
||||
target->CastSpell(target, SPELL_MAGNETIC_PULL, true);
|
||||
events.ScheduleEvent(EVENT_LEVITATE_TARGET_2, 1500);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EVENT_LEVITATE_TARGET_2:
|
||||
if (Unit* target = ObjectAccessor::GetUnit(*me, lTarget))
|
||||
{
|
||||
if (!target->HasAura(SPELL_LEVITATE))
|
||||
lTarget.Clear();
|
||||
else
|
||||
{
|
||||
target->AddAura(SPELL_SUSPENSION, target);
|
||||
lTarget.Clear();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
ObjectGuid lTarget;
|
||||
};
|
||||
|
||||
class spell_gen_allergies : public AuraScript
|
||||
@@ -180,8 +164,97 @@ class spell_gen_allergies : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
// 31704 - Levitate
|
||||
class spell_the_black_stalker_levitate : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_the_black_stalker_levitate);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_LEVITATION_PULSE });
|
||||
}
|
||||
|
||||
void HandleScript(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_LEVITATION_PULSE, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_the_black_stalker_levitate::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
// 31701 - Levitation Pulse
|
||||
class spell_the_black_stalker_levitation_pulse : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_the_black_stalker_levitation_pulse);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_SOMEONE_GRAB_ME });
|
||||
}
|
||||
|
||||
void HandleScript(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
GetCaster()->CastSpell(GetCaster(), SPELL_SOMEONE_GRAB_ME, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHit += SpellEffectFn(spell_the_black_stalker_levitation_pulse::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
// 31702 - Someone Grab Me
|
||||
class spell_the_black_stalker_someone_grab_me : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_the_black_stalker_someone_grab_me);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_MAGNETIC_PULL, SPELL_SUSPENSION });
|
||||
}
|
||||
|
||||
void HandleScript(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (!GetCaster()->HasAura(SPELL_SUSPENSION))
|
||||
GetHitUnit()->CastSpell(GetCaster(), SPELL_MAGNETIC_PULL);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_the_black_stalker_someone_grab_me::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
// 31703 - Magnetic Pull
|
||||
class spell_the_black_stalker_magnetic_pull : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_the_black_stalker_magnetic_pull);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_SUSPENSION_PRIMER });
|
||||
}
|
||||
|
||||
void HandleScript(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_SUSPENSION_PRIMER, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_the_black_stalker_magnetic_pull::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_the_black_stalker()
|
||||
{
|
||||
RegisterUnderbogCreatureAI(boss_the_black_stalker);
|
||||
RegisterSpellScript(spell_gen_allergies);
|
||||
RegisterSpellScript(spell_the_black_stalker_levitate);
|
||||
RegisterSpellScript(spell_the_black_stalker_levitation_pulse);
|
||||
RegisterSpellScript(spell_the_black_stalker_someone_grab_me);
|
||||
RegisterSpellScript(spell_the_black_stalker_magnetic_pull);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Affero General Public License as published by the
|
||||
* Free Software Foundation; either version 3 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "SpellScript.h"
|
||||
#include "the_underbog.h"
|
||||
|
||||
class spell_fungal_decay : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_fungal_decay);
|
||||
|
||||
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
ModStackAmount(5);
|
||||
}
|
||||
|
||||
void PeriodicTick(AuraEffect const* /*aurEff*/)
|
||||
{
|
||||
ModStackAmount(-1);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_fungal_decay::OnApply, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_fungal_decay::PeriodicTick, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_underbog()
|
||||
{
|
||||
RegisterSpellScript(spell_fungal_decay);
|
||||
}
|
||||
+5
-1
@@ -196,6 +196,8 @@ public:
|
||||
{
|
||||
Talk(EMOTE_NAZAN);
|
||||
events.Reset();
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->InterruptNonMeleeSpells(true);
|
||||
me->GetMotionMaster()->MovePoint(POINT_MIDDLE, -1406.5f, 1746.5f, 81.2f, false);
|
||||
}
|
||||
}
|
||||
@@ -206,8 +208,10 @@ public:
|
||||
{
|
||||
me->SetCanFly(false);
|
||||
me->SetDisableGravity(false);
|
||||
events.ScheduleEvent(EVENT_RESTORE_COMBAT, 0);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
events.ScheduleEvent(EVENT_RESTORE_COMBAT, 1);
|
||||
events.ScheduleEvent(EVENT_SPELL_CONE_OF_FIRE, 5000);
|
||||
events.ScheduleEvent(EVENT_SPELL_FIREBALL, 6000);
|
||||
if (IsHeroic())
|
||||
events.ScheduleEvent(EVENT_SPELL_BELLOWING_ROAR, 10000);
|
||||
}
|
||||
|
||||
@@ -50,7 +50,8 @@ void AddSC_boss_hydromancer_thespia(); //CR Steam Vault
|
||||
void AddSC_boss_mekgineer_steamrigger();
|
||||
void AddSC_boss_warlord_kalithresh();
|
||||
void AddSC_instance_steam_vault();
|
||||
void AddSC_boss_hungarfen(); //CR Underbog
|
||||
void AddSC_underbog(); //CR Underbog
|
||||
void AddSC_boss_hungarfen();
|
||||
void AddSC_boss_ghazan();
|
||||
void AddSC_boss_the_black_stalker();
|
||||
void AddSC_instance_the_underbog();
|
||||
@@ -145,7 +146,8 @@ void AddOutlandScripts()
|
||||
AddSC_boss_mekgineer_steamrigger();
|
||||
AddSC_boss_warlord_kalithresh();
|
||||
AddSC_instance_steam_vault();
|
||||
AddSC_boss_hungarfen(); //CR Underbog
|
||||
AddSC_underbog(); //CR Underbog
|
||||
AddSC_boss_hungarfen();
|
||||
AddSC_boss_ghazan();
|
||||
AddSC_boss_the_black_stalker();
|
||||
AddSC_instance_the_underbog();
|
||||
|
||||
@@ -24,7 +24,6 @@ EndScriptData */
|
||||
|
||||
/* ContentData
|
||||
npc_unkor_the_ruthless
|
||||
npc_infested_root_walker
|
||||
npc_rotting_forest_rager
|
||||
npc_netherweb_victim
|
||||
npc_floon
|
||||
@@ -446,38 +445,6 @@ public:
|
||||
};
|
||||
};
|
||||
|
||||
/*######
|
||||
## npc_infested_root_walker
|
||||
######*/
|
||||
|
||||
class npc_infested_root_walker : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_infested_root_walker() : CreatureScript("npc_infested_root_walker") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return new npc_infested_root_walkerAI(creature);
|
||||
}
|
||||
|
||||
struct npc_infested_root_walkerAI : public ScriptedAI
|
||||
{
|
||||
npc_infested_root_walkerAI(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void Reset() override { }
|
||||
void EnterCombat(Unit* /*who*/) override { }
|
||||
|
||||
void DamageTaken(Unit* done_by, uint32& damage, DamageEffectType, SpellSchoolMask) override
|
||||
{
|
||||
if (done_by && done_by->GetTypeId() == TYPEID_PLAYER)
|
||||
if (me->GetHealth() <= damage)
|
||||
if (rand() % 100 < 75)
|
||||
//Summon Wood Mites
|
||||
DoCast(me, 39130, true);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
/*######
|
||||
## npc_rotting_forest_rager
|
||||
######*/
|
||||
@@ -872,7 +839,6 @@ void AddSC_terokkar_forest()
|
||||
|
||||
// Theirs
|
||||
new npc_unkor_the_ruthless();
|
||||
new npc_infested_root_walker();
|
||||
new npc_rotting_forest_rager();
|
||||
new npc_floon();
|
||||
new npc_isla_starmane();
|
||||
|
||||
@@ -23,7 +23,9 @@
|
||||
|
||||
#include "Battleground.h"
|
||||
#include "GameTime.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "Player.h"
|
||||
#include "Pet.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SkillDiscovery.h"
|
||||
@@ -3757,6 +3759,66 @@ class spell_item_green_whelp_armor : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
// 37678 - elixir of shadows
|
||||
/// @todo Temporary fix until pet restrictions vs player restrictions are investigated
|
||||
class spell_item_elixir_of_shadows : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_item_elixir_of_shadows);
|
||||
|
||||
void HandleEffect(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Player* player = GetCaster()->ToPlayer())
|
||||
if (Pet* pet = player->GetPet())
|
||||
pet->AddAura(37678 /*Elixir of Shadows*/, pet);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_item_elixir_of_shadows::HandleEffect, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_item_elixir_of_shadows::HandleEffect, EFFECT_1, SPELL_EFFECT_APPLY_AURA);
|
||||
}
|
||||
};
|
||||
|
||||
enum TrollDice
|
||||
{
|
||||
TEXT_WORN_TROLL_DICE = 26152
|
||||
};
|
||||
|
||||
// 47776 - Roll 'dem Bones
|
||||
class spell_item_worn_troll_dice : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_item_worn_troll_dice);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sObjectMgr->GetBroadcastText(TEXT_WORN_TROLL_DICE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Load() override
|
||||
{
|
||||
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
|
||||
}
|
||||
|
||||
void HandleScript(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
GetCaster()->TextEmote(TEXT_WORN_TROLL_DICE, GetHitUnit());
|
||||
|
||||
static uint32 const minimum = 1;
|
||||
static uint32 const maximum = 6;
|
||||
|
||||
// roll twice
|
||||
GetCaster()->ToPlayer()->DoRandomRoll(minimum, maximum);
|
||||
GetCaster()->ToPlayer()->DoRandomRoll(minimum, maximum);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_item_worn_troll_dice::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_item_spell_scripts()
|
||||
{
|
||||
RegisterSpellScript(spell_item_massive_seaforium_charge);
|
||||
@@ -3873,4 +3935,6 @@ void AddSC_item_spell_scripts()
|
||||
RegisterSpellScript(spell_item_snowman);
|
||||
RegisterSpellScript(spell_item_freeze_rookery_egg);
|
||||
RegisterSpellScript(spell_item_green_whelp_armor);
|
||||
RegisterSpellScript(spell_item_elixir_of_shadows);
|
||||
RegisterSpellScript(spell_item_worn_troll_dice);
|
||||
}
|
||||
|
||||
@@ -840,7 +840,10 @@ public:
|
||||
break;
|
||||
case TEXT_EMOTE_DANCE:
|
||||
if (!player->HasAura(SPELL_SEDUCTION))
|
||||
{
|
||||
player->RemoveAurasByType(SPELL_AURA_MOUNTED);
|
||||
DoCast(player, SPELL_SEDUCTION, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -426,22 +426,22 @@ enum SummonPropGroup
|
||||
enum SummonPropFlags
|
||||
{
|
||||
SUMMON_PROP_FLAG_NONE = 0x00000000, // 1342 spells in 3.0.3
|
||||
SUMMON_PROP_FLAG_ATTACK_SUMMONER = 0x00000001, // 75 spells in 3.0.3, something unfriendly TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_ASSIST_COMBAT_SUMMON = 0x00000002, // 616 spells in 3.0.3, something friendly TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_USE_LEVEL_OFFSET = 0x00000004, // 22 spells in 3.0.3, no idea... TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_DESPAWN_ON_SUMMONER_DEATH = 0x00000008, // 49 spells in 3.0.3, some mounts TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_ONLY_VISIBLE_TO_SUMMONER = 0x00000010, // 25 spells in 3.0.3, quest related? TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_CANNOT_DISMISS_PET = 0x00000020, // 0 spells in 3.3.5, unused TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_USE_DEMON_TIMEOUT = 0x00000040, // 12 spells in 3.0.3, no idea TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_UNLIMITED_SUMMONS = 0x00000080, // 4 spells in 3.0.3, no idea TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_USE_CREATURE_LEVEL = 0x00000100, // 51 spells in 3.0.3, no idea, many quest related TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_JOIN_SUMMONER_SPAWN_GROUP = 0x00000200, // 51 spells in 3.0.3, something defensive TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_DO_NOT_TOGGLE = 0x00000400, // 3 spells, requires something near? TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_DESPAWN_WHEN_EXPIRED = 0x00000800, // 30 spells in 3.0.3, no idea TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_USE_SUMMONER_FACTION = 0x00001000, // Lightwell, Jeeves, Gnomish Alarm-o-bot, Build vehicles(wintergrasp) TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_DO_NOT_FOLLOW_MOUNTED_SUMMONER = 0x00002000, // Guides, player follows TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_SAVE_PET_AUTOCAST = 0x00004000, // Force of Nature, Shadowfiend, Feral Spirit, Summon Water Elemental TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_IGNORE_SUMMONER_PHASE = 0x00008000, // Light/Dark Bullet, Soul/Fiery Consumption, Twisted Visage, Twilight Whelp. Phase related? TODO: Needs implementation
|
||||
SUMMON_PROP_FLAG_ATTACK_SUMMONER = 0x00000001, // NYI 75 spells in 3.0.3, something unfriendly
|
||||
SUMMON_PROP_FLAG_ASSIST_COMBAT_SUMMON = 0x00000002, // NYI 616 spells in 3.0.3, something friendly
|
||||
SUMMON_PROP_FLAG_USE_LEVEL_OFFSET = 0x00000004, // NYI 22 spells in 3.0.3, no idea...
|
||||
SUMMON_PROP_FLAG_DESPAWN_ON_SUMMONER_DEATH = 0x00000008, // NYI 49 spells in 3.0.3, some mounts
|
||||
SUMMON_PROP_FLAG_ONLY_VISIBLE_TO_SUMMONER = 0x00000010, // 25 spells in 3.0.3, quest related?
|
||||
SUMMON_PROP_FLAG_CANNOT_DISMISS_PET = 0x00000020, // NYI 0 spells in 3.3.5, unused
|
||||
SUMMON_PROP_FLAG_USE_DEMON_TIMEOUT = 0x00000040, // NYI 12 spells in 3.0.3, no idea
|
||||
SUMMON_PROP_FLAG_UNLIMITED_SUMMONS = 0x00000080, // NYI 4 spells in 3.0.3, no idea
|
||||
SUMMON_PROP_FLAG_USE_CREATURE_LEVEL = 0x00000100, // NYI 51 spells in 3.0.3, no idea, many quest related
|
||||
SUMMON_PROP_FLAG_JOIN_SUMMONER_SPAWN_GROUP = 0x00000200, // NYI 51 spells in 3.0.3, something defensive
|
||||
SUMMON_PROP_FLAG_DO_NOT_TOGGLE = 0x00000400, // NYI 3 spells, requires something near?
|
||||
SUMMON_PROP_FLAG_DESPAWN_WHEN_EXPIRED = 0x00000800, // NYI 30 spells in 3.0.3, no idea
|
||||
SUMMON_PROP_FLAG_USE_SUMMONER_FACTION = 0x00001000, // NYI Lightwell, Jeeves, Gnomish Alarm-o-bot, Build vehicles(wintergrasp)
|
||||
SUMMON_PROP_FLAG_DO_NOT_FOLLOW_MOUNTED_SUMMONER = 0x00002000, // NYI Guides, player follows
|
||||
SUMMON_PROP_FLAG_SAVE_PET_AUTOCAST = 0x00004000, // NYI Force of Nature, Shadowfiend, Feral Spirit, Summon Water Elemental
|
||||
SUMMON_PROP_FLAG_IGNORE_SUMMONER_PHASE = 0x00008000, // NYI Light/Dark Bullet, Soul/Fiery Consumption, Twisted Visage, Twilight Whelp. Phase related?
|
||||
};
|
||||
|
||||
enum VehicleSeatFlags
|
||||
|
||||
Reference in New Issue
Block a user