mirror of
https://github.com/azerothcore/azerothcore-wotlk.git
synced 2025-11-10 20:44:17 +08:00
Compare commits
22 Commits
db654df311
...
1f89b5778f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f89b5778f | ||
|
|
618db3fcc9 | ||
|
|
5bef92d5ea | ||
|
|
723aae9039 | ||
|
|
283f03bdcd | ||
|
|
57daeed03a | ||
|
|
36d739ee42 | ||
|
|
3ad79541f6 | ||
|
|
be58898d06 | ||
|
|
611a85529d | ||
|
|
040e7a0a4d | ||
|
|
d4cd580ddc | ||
|
|
37833c66e6 | ||
|
|
ec274182a2 | ||
|
|
d9b2e775e3 | ||
|
|
c85c86b285 | ||
|
|
125e1aec9d | ||
|
|
fca2e12056 | ||
|
|
c9aedce67f | ||
|
|
e1d28ae712 | ||
|
|
983557345e | ||
|
|
743a764c3c |
5
data/sql/updates/db_world/2025_11_08_01.sql
Normal file
5
data/sql/updates/db_world/2025_11_08_01.sql
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
-- DB update 2025_11_08_00 -> 2025_11_08_01
|
||||||
|
--
|
||||||
|
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 17) AND (`SourceGroup` = 0) AND (`SourceEntry` = 40969) AND (`SourceId` = 0) AND (`ElseGroup` = 0) AND (`ConditionTypeOrReference` = 31) AND (`ConditionTarget` = 1) AND (`ConditionValue1` = 3) AND (`ConditionValue2` = 23689) AND (`ConditionValue3` = 0);
|
||||||
|
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||||
|
(17, 0, 40969, 0, 0, 31, 1, 3, 23689, 0, 0, 0, 0, '', 'Malister Frost Wand require Proto-Drake');
|
||||||
172
data/sql/updates/db_world/2025_11_08_02.sql
Normal file
172
data/sql/updates/db_world/2025_11_08_02.sql
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
-- DB update 2025_11_08_01 -> 2025_11_08_02
|
||||||
|
SET @BossXPMod = 7.5,
|
||||||
|
@FinalBossXPMod = 10;
|
||||||
|
|
||||||
|
UPDATE `creature_template` SET `ExperienceModifier` = @BossXPMod WHERE `entry` IN (
|
||||||
|
-- Utgarde Keep
|
||||||
|
23953, -- Prince Keleseth
|
||||||
|
30748,
|
||||||
|
24200, -- Skarvald the Constructor
|
||||||
|
31679,
|
||||||
|
24201, -- Dalronn the Controller
|
||||||
|
31656,
|
||||||
|
-- Azjol-Nerub
|
||||||
|
28684, -- Krik'thir the Gatewatcher
|
||||||
|
31612,
|
||||||
|
28921, -- Hadronox
|
||||||
|
31611,
|
||||||
|
-- Ahn'kahet: The Old Kingdom
|
||||||
|
29309, -- Elder Nadox
|
||||||
|
31456,
|
||||||
|
29308, -- Prince Taldaram
|
||||||
|
31469,
|
||||||
|
29310, -- Jedoga Shadowseeker
|
||||||
|
31465,
|
||||||
|
30258, -- Amanitar
|
||||||
|
31463,
|
||||||
|
-- The Nexus
|
||||||
|
26731, -- Grand Magus Telestra
|
||||||
|
30510,
|
||||||
|
26763, -- Anomalus
|
||||||
|
30529,
|
||||||
|
26794, -- Ormorok the Tree-Shaper
|
||||||
|
30532,
|
||||||
|
26796, -- Commander Stoutbeard
|
||||||
|
30398,
|
||||||
|
26798, -- Commander Kolurg
|
||||||
|
30397,
|
||||||
|
-- Drak'Tharon Keep
|
||||||
|
26630, -- Trollgore
|
||||||
|
31362,
|
||||||
|
26631, -- Novos the Summoner
|
||||||
|
31350,
|
||||||
|
-- 27483, -- King Dred, observed to not give as much experience as this
|
||||||
|
-- 31349,
|
||||||
|
-- The Violet Hold
|
||||||
|
29315, -- Erekem
|
||||||
|
31507,
|
||||||
|
29316, -- Moragg
|
||||||
|
31510,
|
||||||
|
29313, -- Ichoron
|
||||||
|
31508,
|
||||||
|
29266, -- Xevozz
|
||||||
|
31511,
|
||||||
|
29312, -- Lavanthor
|
||||||
|
31509,
|
||||||
|
29314, -- Zuramat the Obliterator
|
||||||
|
31512,
|
||||||
|
-- Gundrak
|
||||||
|
29304, -- Slad'ran
|
||||||
|
31370,
|
||||||
|
-- 29573, -- Drakkari Elemental, observed to not give as much experience as this
|
||||||
|
-- 31367,
|
||||||
|
29305, -- Moorabi
|
||||||
|
30530,
|
||||||
|
29932, -- Eck the Ferocious
|
||||||
|
-- Halls of Stone
|
||||||
|
27975, -- Maiden of Grief
|
||||||
|
31384,
|
||||||
|
27977, -- Krystallus
|
||||||
|
31381,
|
||||||
|
-- Halls of Lightning
|
||||||
|
28586, -- General Bjarngrim
|
||||||
|
31533,
|
||||||
|
28587, -- Volkhan
|
||||||
|
31536,
|
||||||
|
28546, -- Ionar
|
||||||
|
31537,
|
||||||
|
-- The Oculus
|
||||||
|
27654, -- Drakos the Interrogator
|
||||||
|
31558,
|
||||||
|
27447, -- Varos Cloudstrider
|
||||||
|
31559,
|
||||||
|
27655, -- Mage-Lord Urom
|
||||||
|
31560,
|
||||||
|
-- Utgarde Pinnacle
|
||||||
|
26668, -- Svala Sorrowgrave
|
||||||
|
30810,
|
||||||
|
26687, -- Gortok Palehoof
|
||||||
|
30774,
|
||||||
|
26693, -- Skadi the Ruthless
|
||||||
|
30807,
|
||||||
|
-- The Culling of Stratholme
|
||||||
|
26529, -- Meathook
|
||||||
|
31211,
|
||||||
|
26530, -- Salramm the Fleshcrafter
|
||||||
|
31212,
|
||||||
|
26532, -- Chrono-Lord Epoch
|
||||||
|
31215,
|
||||||
|
32273, -- Infinite Corruptor
|
||||||
|
32313,
|
||||||
|
-- Trial of the Champion
|
||||||
|
34705, -- Marshal Jacob Alerius
|
||||||
|
36088,
|
||||||
|
34702, -- Ambrose Boltspark
|
||||||
|
36082,
|
||||||
|
34701, -- Colosos
|
||||||
|
36083,
|
||||||
|
34657, -- Jaelyne Evensong
|
||||||
|
36086,
|
||||||
|
34703, -- Lana Stouthammer
|
||||||
|
36087,
|
||||||
|
35572, -- Mokra the Skullcrusher
|
||||||
|
36089,
|
||||||
|
35569, -- Eressea Dawnsinger
|
||||||
|
36085,
|
||||||
|
35571, -- Runok Wildmane
|
||||||
|
36090,
|
||||||
|
35570, -- Zul'tore
|
||||||
|
36091,
|
||||||
|
35617, -- Deathstalker Visceri
|
||||||
|
36084,
|
||||||
|
35119, -- Eadric the Pure
|
||||||
|
35518,
|
||||||
|
34928, -- Argent Confessor Paletress
|
||||||
|
35517,
|
||||||
|
-- The Forge of Souls
|
||||||
|
36497, -- Bronjahm
|
||||||
|
36498,
|
||||||
|
-- Pit of Saron
|
||||||
|
36494, -- Forgemaster Garfrost
|
||||||
|
37613,
|
||||||
|
36476, -- Ick
|
||||||
|
37627,
|
||||||
|
-- Halls of Reflection
|
||||||
|
38112, -- Falric
|
||||||
|
38599,
|
||||||
|
38113, -- Marwyn
|
||||||
|
38603
|
||||||
|
);
|
||||||
|
|
||||||
|
UPDATE `creature_template` SET `ExperienceModifier` = @FinalBossXPMod WHERE `entry` IN (
|
||||||
|
23954, -- Ingvar the Plunderer, Utgarde Keep
|
||||||
|
31673,
|
||||||
|
29120, -- Anub'arak, Azjol-Nerub
|
||||||
|
31610,
|
||||||
|
29311, -- Herald Volazj,
|
||||||
|
31464,
|
||||||
|
26723, -- Keristrasza
|
||||||
|
30540,
|
||||||
|
26632, -- The Prophet Tharon'ja
|
||||||
|
31360,
|
||||||
|
31134, -- Cyanigosa
|
||||||
|
31506,
|
||||||
|
29306, -- Gal'darah
|
||||||
|
31368,
|
||||||
|
27978, -- Sjonnir The Ironshaper
|
||||||
|
31386,
|
||||||
|
28923, -- Loken
|
||||||
|
31538,
|
||||||
|
27656, -- Ley-Guardian Eregos
|
||||||
|
31561,
|
||||||
|
26861, -- King Ymiron
|
||||||
|
30788,
|
||||||
|
26533, -- Mal'Ganis
|
||||||
|
31217,
|
||||||
|
35451, -- The Black Knight, Trial of the Champion
|
||||||
|
35490,
|
||||||
|
36502, -- Devourer of Souls, Forge of Souls
|
||||||
|
37677,
|
||||||
|
36658, -- Scourgelord Tyrannus, Pit of Saron
|
||||||
|
36938
|
||||||
|
);
|
||||||
3
data/sql/updates/db_world/2025_11_09_00.sql
Normal file
3
data/sql/updates/db_world/2025_11_09_00.sql
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
-- DB update 2025_11_08_02 -> 2025_11_09_00
|
||||||
|
--
|
||||||
|
UPDATE `creature_addon` SET `visibilityDistanceType` = 3 WHERE `guid` = 103278;
|
||||||
3
data/sql/updates/db_world/2025_11_09_01.sql
Normal file
3
data/sql/updates/db_world/2025_11_09_01.sql
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
-- DB update 2025_11_09_00 -> 2025_11_09_01
|
||||||
|
--
|
||||||
|
UPDATE `creature_template` SET `flags_extra` = `flags_extra`|64 WHERE `entry` IN (28220, 28218, 28242, 28103, 28212, 28207, 28170);
|
||||||
3
data/sql/updates/db_world/2025_11_09_02.sql
Normal file
3
data/sql/updates/db_world/2025_11_09_02.sql
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
-- DB update 2025_11_09_01 -> 2025_11_09_02
|
||||||
|
--
|
||||||
|
DELETE FROM `creature` WHERE `id1` = 10218;
|
||||||
67
data/sql/updates/db_world/2025_11_09_03.sql
Normal file
67
data/sql/updates/db_world/2025_11_09_03.sql
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
-- DB update 2025_11_09_02 -> 2025_11_09_03
|
||||||
|
--
|
||||||
|
-- Fixes "Bluff", Set `allowOverride` of action list
|
||||||
|
UPDATE `smart_scripts` SET `action_param3` = 1 WHERE (`entryorguid` IN (23672, 23673, 23675, 24271)) AND (`source_type` = 0) AND (`event_type` = 8) AND (`event_param1` = 44609);
|
||||||
|
|
||||||
|
-- Removes double spawns
|
||||||
|
DELETE FROM `gameobject` WHERE `id` = 186959 AND `guid` IN (264459, 264460, 264461, 264462, 264463, 264464, 264465);
|
||||||
|
|
||||||
|
-- Add missing aura. Usage is unknown
|
||||||
|
DELETE FROM `creature_template_addon` WHERE (`entry` = 24825);
|
||||||
|
INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES
|
||||||
|
(24825, 0, 0, 0, 0, 0, 0, '44652');
|
||||||
|
|
||||||
|
-- Disable flying vehicle, but causes camera stuttering on rocket jump
|
||||||
|
UPDATE `creature_template_movement` SET `Flight` = 0 WHERE (`CreatureId` = 24825);
|
||||||
|
|
||||||
|
DELETE FROM `creature_text` WHERE (`CreatureID` = 24825) AND (`GroupID` = 1);
|
||||||
|
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
|
||||||
|
(24825, 1, 0, 'Launching.', 12, 0, 100, 0, 0, 0, 23860, 0, 'Iron Rune Construct');
|
||||||
|
|
||||||
|
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 24825) AND (`source_type` = 0) AND (`id` IN (15, 16));
|
||||||
|
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`, `event_param6`, `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
|
||||||
|
(24825, 0, 15, 0, 31, 0, 100, 512, 44609, 0, 3000, 3000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Iron Rune Construct - On Spellhit \'Bluff\' - Say Line 0'),
|
||||||
|
(24825, 0, 16, 0, 8, 0, 100, 512, 44626, 0, 5000, 5000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Iron Rune Construct - On Spellhit \'Rocket Jump\' - Say Line 1');
|
||||||
|
-- Remove unused 'Say Line 0' in actionscripts
|
||||||
|
DELETE FROM `smart_scripts` WHERE (`entryorguid` IN (2367201, 2367301, 2367501, 2427101)) AND `source_type` = 9 AND `id` = 1 AND `target_type` = 19 AND `target_param1` = 24825 AND `action_type` = 1 AND `target_param2` = 20;
|
||||||
|
|
||||||
|
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` IN (2, 4)) AND (`SourceEntry` = 44608) AND (`SourceId` = 0) AND (`ConditionTypeOrReference` = 31);
|
||||||
|
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||||
|
(13, 4, 44608, 0, 0, 31, 0, 3, 24826, 0, 0, 0, 0, '', 'Rocket Jump'),
|
||||||
|
(13, 4, 44608, 0, 1, 31, 0, 3, 24827, 0, 0, 0, 0, '', 'Rocket Jump'),
|
||||||
|
(13, 4, 44608, 0, 2, 31, 0, 3, 24828, 0, 0, 0, 0, '', 'Rocket Jump'),
|
||||||
|
(13, 4, 44608, 0, 3, 31, 0, 3, 24829, 0, 0, 0, 0, '', 'Rocket Jump'),
|
||||||
|
(13, 4, 44608, 0, 4, 31, 0, 3, 24831, 0, 0, 0, 0, '', 'Rocket Jump'),
|
||||||
|
(13, 4, 44608, 0, 5, 31, 0, 3, 24832, 0, 0, 0, 0, '', 'Rocket Jump'),
|
||||||
|
(13, 2, 44608, 0, 0, 31, 0, 5, 186953, 0, 0, 0, 0, '', 'Rocket Jump'),
|
||||||
|
(13, 2, 44608, 0, 1, 31, 0, 5, 186960, 0, 0, 0, 0, '', 'Rocket Jump'),
|
||||||
|
(13, 2, 44608, 0, 2, 31, 0, 5, 186961, 0, 0, 0, 0, '', 'Rocket Jump'),
|
||||||
|
(13, 2, 44608, 0, 3, 31, 0, 5, 186963, 0, 0, 0, 0, '', 'Rocket Jump'),
|
||||||
|
(13, 2, 44608, 0, 4, 31, 0, 5, 186962, 0, 0, 0, 0, '', 'Rocket Jump'),
|
||||||
|
(13, 2, 44608, 0, 5, 31, 0, 5, 186964, 0, 0, 0, 0, '', 'Rocket Jump');
|
||||||
|
|
||||||
|
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 24825);
|
||||||
|
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`, `event_param6`, `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
|
||||||
|
(24825, 0, 0, 0, 54, 0, 100, 512, 0, 0, 0, 0, 0, 0, 75, 44643, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Iron Rune Construct - On Just Summoned - Add Aura \'Reputation and Language\''),
|
||||||
|
(24825, 0, 1, 0, 28, 0, 100, 512, 0, 0, 0, 0, 0, 0, 28, 44643, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Iron Rune Construct - On Passenger Removed - Remove Aura \'Reputation and Language\''),
|
||||||
|
(24825, 0, 2, 0, 38, 0, 100, 512, 0, 1, 0, 0, 0, 0, 53, 2, 24826, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Iron Rune Construct - On Data Set 0 1 - Start Waypoint Path 24826'),
|
||||||
|
(24825, 0, 3, 0, 38, 0, 100, 512, 0, 2, 0, 0, 0, 0, 53, 2, 24827, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Iron Rune Construct - On Data Set 0 2 - Start Waypoint Path 24827'),
|
||||||
|
(24825, 0, 4, 0, 38, 0, 100, 512, 0, 3, 0, 0, 0, 0, 53, 2, 24828, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Iron Rune Construct - On Data Set 0 3 - Start Waypoint Path 24828'),
|
||||||
|
(24825, 0, 5, 0, 38, 0, 100, 512, 0, 4, 0, 0, 0, 0, 53, 2, 24831, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Iron Rune Construct - On Data Set 0 4 - Start Waypoint Path 24831'),
|
||||||
|
(24825, 0, 6, 0, 38, 0, 100, 512, 0, 5, 0, 0, 0, 0, 53, 2, 24829, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Iron Rune Construct - On Data Set 0 5 - Start Waypoint Path 24829'),
|
||||||
|
(24825, 0, 7, 0, 38, 0, 100, 512, 0, 6, 0, 0, 0, 0, 53, 2, 24832, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Iron Rune Construct - On Data Set 0 6 - Start Waypoint Path 24832'),
|
||||||
|
(24825, 0, 8, 0, 58, 0, 100, 512, 0, 0, 0, 0, 0, 0, 28, 44626, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Iron Rune Construct - On Path 0 Finished - Remove Aura \'Rocket Jump\''),
|
||||||
|
(24825, 0, 9, 0, 31, 0, 100, 512, 44609, 0, 3000, 3000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Iron Rune Construct - On Target Spellhit \'Bluff\' - Say Line 0'),
|
||||||
|
(24825, 0, 10, 0, 8, 0, 100, 512, 44626, 0, 5000, 5000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Iron Rune Construct - On Spellhit \'Rocket Jump\' - Say Line 1');
|
||||||
|
--
|
||||||
|
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE (`entry` IN (24826, 24827, 24828, 24829, 24831, 24832));
|
||||||
|
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (24826, 24827, 24828, 24829, 24831, 24832));
|
||||||
|
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`, `event_param6`, `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
|
||||||
|
(24826, 0, 0, 0, 8, 0, 100, 0, 44608, 0, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'On Spellhit \'Rocket Jump\' - Set Data 0 1'),
|
||||||
|
(24827, 0, 0, 0, 8, 0, 100, 0, 44608, 0, 0, 0, 0, 0, 45, 0, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'On Spellhit \'Rocket Jump\' - Set Data 0 2'),
|
||||||
|
(24828, 0, 0, 0, 8, 0, 100, 0, 44608, 0, 0, 0, 0, 0, 45, 0, 3, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'On Spellhit \'Rocket Jump\' - Set Data 0 3'),
|
||||||
|
(24831, 0, 0, 0, 8, 0, 100, 0, 44608, 0, 0, 0, 0, 0, 45, 0, 4, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'On Spellhit \'Rocket Jump\' - Set Data 0 4'),
|
||||||
|
(24829, 0, 0, 0, 8, 0, 100, 0, 44608, 0, 0, 0, 0, 0, 45, 0, 5, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'On Spellhit \'Rocket Jump\' - Set Data 0 5'),
|
||||||
|
(24832, 0, 0, 0, 8, 0, 100, 0, 44608, 0, 0, 0, 0, 0, 45, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'On Spellhit \'Rocket Jump\' - Set Data 0 6');
|
||||||
|
|
||||||
|
DELETE FROM `smart_scripts` WHERE `source_type` = 9 AND `entryorguid` IN (2482600, 2482700, 2482800, 2482900, 2483100, 2483200);
|
||||||
6
data/sql/updates/db_world/2025_11_09_04.sql
Normal file
6
data/sql/updates/db_world/2025_11_09_04.sql
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
-- DB update 2025_11_09_03 -> 2025_11_09_04
|
||||||
|
--
|
||||||
|
DELETE FROM `spell_custom_attr` WHERE `spell_id` IN (52671, 59834);
|
||||||
|
INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES
|
||||||
|
(52671, 0x00400000),
|
||||||
|
(59834, 0x00400000);
|
||||||
79
data/sql/updates/db_world/2025_11_09_05.sql
Normal file
79
data/sql/updates/db_world/2025_11_09_05.sql
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
-- DB update 2025_11_09_04 -> 2025_11_09_05
|
||||||
|
--
|
||||||
|
-- v11_2_5_63906
|
||||||
|
SET @VBUILD := 63906;
|
||||||
|
|
||||||
|
DELETE FROM `creature_template_addon` WHERE (`entry` = 28503);
|
||||||
|
INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES
|
||||||
|
(28503, 0, 0, 0, 0, 0, 0, '58837');
|
||||||
|
|
||||||
|
DELETE FROM `creature_template_addon` WHERE (`entry` = 28998);
|
||||||
|
INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES
|
||||||
|
(28998, 0, 0, 0, 0, 0, 0, '58837');
|
||||||
|
|
||||||
|
DELETE FROM `creature` WHERE (`id1` = 28998) AND (`guid` IN (1974609));
|
||||||
|
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `Comment`, `VerifiedBuild`) VALUES
|
||||||
|
(1974609, 28998, 0, 0, 571, 0, 0, 1, 1, 0, 6175.2456, -2017.6545, 590.9613, 3.0019662, 300, 0, 0, 550001, 0, 0, 0, 0, 0, '', NULL, @VBUILD);
|
||||||
|
|
||||||
|
DELETE FROM `creature_template_addon` WHERE (`entry` = 28998);
|
||||||
|
INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES
|
||||||
|
(28998, 0, 0, 0, 1, 0, 0, '');
|
||||||
|
|
||||||
|
UPDATE `spell_target_position` SET `PositionX`=6161.15, `PositionY`=-2015.36, `PositionZ`=590.878, `Orientation`=6.283189773559570312, `VerifiedBuild`=@VBUILD WHERE `ID`=52863 AND `EffectIndex`=0;
|
||||||
|
|
||||||
|
UPDATE `creature_template_addon` SET `bytes2` = 1 WHERE (`entry` = 28717);
|
||||||
|
|
||||||
|
-- Update comments
|
||||||
|
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 28498) AND (`source_type` = 0) AND (`id` IN (0, 1, 2, 3, 4));
|
||||||
|
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`, `event_param6`, `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
|
||||||
|
(28498, 0, 0, 0, 54, 0, 100, 512, 0, 0, 0, 0, 0, 0, 53, 1, 28498, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - On Just Summoned - Start Waypoint Path 28498'),
|
||||||
|
(28498, 0, 1, 2, 40, 0, 100, 512, 2, 0, 0, 0, 0, 0, 54, 83000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - On Point 2 of Path Any Reached - Pause Waypoint'),
|
||||||
|
(28498, 0, 2, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 80, 2849800, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - On Point 2 of Path Any Reached - Run Script'),
|
||||||
|
(28498, 0, 3, 4, 40, 0, 100, 512, 3, 0, 0, 0, 0, 0, 45, 0, 2, 0, 0, 0, 0, 10, 127495, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - On Point 3 of Path Any Reached - Set Data 0 2'),
|
||||||
|
(28498, 0, 4, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'The Lich King - On Point 3 of Path Any Reached - Despawn Instant');
|
||||||
|
|
||||||
|
-- Disable gravity
|
||||||
|
DELETE FROM `creature_template_movement` WHERE (`CreatureId` = 29100);
|
||||||
|
INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES
|
||||||
|
(29100, 0, 0, 1, 0, 0, 0, 0);
|
||||||
|
|
||||||
|
-- Idle
|
||||||
|
UPDATE `creature` SET `MovementType` = 0, `wander_distance` = 0 WHERE `id1` = 29100 AND `guid` IN (112307, 112308, 112309, 112310);
|
||||||
|
|
||||||
|
UPDATE `gameobject_template` SET `AIName` = 'SmartGameObjectAI' WHERE `entry` = 202357;
|
||||||
|
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 202357) AND (`source_type` = 1) AND (`id` IN (0));
|
||||||
|
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `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
|
||||||
|
(202357, 1, 0, 0, 62, 0, 100, 0, 11091, 0, 0, 0, 0, 0, 11, 57553, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakuru\'s Last Wish - On Gossip Option 0 Selected - Cast \'Escape Voltarus\'');
|
||||||
|
|
||||||
|
-- Drakuru's Last Wish
|
||||||
|
UPDATE `gameobject_template_addon` SET `flags` = 32 WHERE (`entry` = 202357);
|
||||||
|
|
||||||
|
-- Skull and Portal spells target 'Totally Generic Bunny (JSB)'
|
||||||
|
DELETE FROM `creature` WHERE (`id1` = 28960) and `guid` IN (98914, 98920);
|
||||||
|
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `Comment`, `VerifiedBuild`) VALUES
|
||||||
|
(98914, 28960, 0, 0, 571, 0, 0, 1, 1, 0, 6144.01, -2011.8, 590.963, 6.16101, 300, 0, 0, 4979, 0, 0, 0, 0, 0, '', '\'Throw Portal Crystal\' guid target', @VBUILD),
|
||||||
|
(98920, 28960, 0, 0, 571, 0, 0, 1, 1, 0, 6181.5137, -2032.4258, 590.96124, 1.01229, 300, 0, 0, 4979, 0, 0, 0, 0, 0, '', '\'Drakuru\'s Skull Missile\' guid target', @VBUILD);
|
||||||
|
|
||||||
|
UPDATE `conditions` SET `ConditionValue3` = 98914, `Comment` = 'target Totally Generic Bunny (JSB)' WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 1) AND (`SourceEntry` = 54209) AND (`SourceId` = 0) AND (`ElseGroup` = 0) AND (`ConditionTypeOrReference` = 31) AND (`ConditionTarget` = 0) AND (`ConditionValue1` = 3) AND (`ConditionValue2` = 28960) AND (`ConditionValue3` = 0);
|
||||||
|
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 1) AND (`SourceEntry` = 54250) AND (`SourceId` = 0) AND (`ElseGroup` = 0) AND (`ConditionTypeOrReference` = 31) AND (`ConditionTarget` = 0) AND (`ConditionValue1` = 3) AND (`ConditionValue2` = 28960);
|
||||||
|
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||||
|
(13, 1, 54250, 0, 0, 31, 0, 3, 28960, 98920, 0, 0, 0, '', 'target Totally Generic Bunny (JSB)');
|
||||||
|
|
||||||
|
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 1) AND (`SourceEntry` = 54089) AND (`SourceId` = 0) AND (`ElseGroup` = 0) AND (`ConditionTypeOrReference` = 1) AND (`ConditionTarget` = 0) AND (`ConditionValue1` = 51966) AND (`ConditionValue2` = 0) AND (`ConditionValue3` = 0);
|
||||||
|
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||||
|
(13, 1, 54089, 0, 0, 1, 0, 51966, 0, 0, 0, 0, 0, '', 'Has Aura \'Scourge Disguise\'');
|
||||||
|
|
||||||
|
-- 54104 Blight Fog
|
||||||
|
UPDATE `creature_template_addon` SET `auras` = '54104' WHERE (`entry` = 28998);
|
||||||
|
|
||||||
|
DELETE FROM `creature_summon_groups` WHERE `summonerId` = 28998 and `summonerType` = 0 AND `groupId` = 1;
|
||||||
|
INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`, `Comment`) VALUES
|
||||||
|
(28998, 0, 1, 28931, 6184.1455, -1970.1699, 586.84186, 4.5902, 8, 0, 'Overlord Drakuru - Group 1 - Blightblood Troll'),
|
||||||
|
(28998, 0, 1, 28931, 6222.855, -2026.6315, 586.84186, 3.00197, 8, 0, 'Overlord Drakuru - Group 1 - Blightblood Troll'),
|
||||||
|
(28998, 0, 1, 28931, 6166.278, -2065.3123, 586.84186, 1.44862, 8, 0, 'Overlord Drakuru - Group 1 - Blightblood Troll'),
|
||||||
|
(28998, 0, 1, 28931, 6127.5117, -2008.6506, 586.84186, 6.16101, 8, 0, 'Overlord Drakuru - Group 1 - Blightblood Troll');
|
||||||
|
|
||||||
|
-- 54105 Blight Fog
|
||||||
|
DELETE FROM `spell_script_names` WHERE (`spell_id` = 54105);
|
||||||
|
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||||
|
(54105, 'spell_blight_fog');
|
||||||
@ -19586,12 +19586,6 @@ void Unit::_ExitVehicle(Position const* exitPosition)
|
|||||||
|
|
||||||
sScriptMgr->AnticheatSetUnderACKmount(player);
|
sScriptMgr->AnticheatSetUnderACKmount(player);
|
||||||
}
|
}
|
||||||
else if (HasUnitMovementFlag(MOVEMENTFLAG_ROOT))
|
|
||||||
{
|
|
||||||
WorldPacket data(SMSG_SPLINE_MOVE_UNROOT, 8);
|
|
||||||
data << GetPackGUID();
|
|
||||||
SendMessageToSet(&data, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// xinef: hack for flameleviathan seat vehicle
|
// xinef: hack for flameleviathan seat vehicle
|
||||||
VehicleEntry const* vehicleInfo = vehicle->GetVehicleInfo();
|
VehicleEntry const* vehicleInfo = vehicle->GetVehicleInfo();
|
||||||
|
|||||||
@ -2187,12 +2187,6 @@ void SpellMgr::LoadSpellInfoCorrections()
|
|||||||
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(1);
|
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Halls of Lightning, Arcing Burn
|
|
||||||
ApplySpellFix({ 52671, 59834 }, [](SpellInfo* spellInfo)
|
|
||||||
{
|
|
||||||
spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Trial of the Champion, Death's Respite
|
// Trial of the Champion, Death's Respite
|
||||||
ApplySpellFix({ 68306 }, [](SpellInfo* spellInfo)
|
ApplySpellFix({ 68306 }, [](SpellInfo* spellInfo)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -133,13 +133,13 @@ struct boss_anub_arak : public BossAI
|
|||||||
DoCastSelf(SPELL_IMPALE_PERIODIC, true);
|
DoCastSelf(SPELL_IMPALE_PERIODIC, true);
|
||||||
|
|
||||||
++_submergePhase;
|
++_submergePhase;
|
||||||
|
events.Reset();
|
||||||
ScheduleSubmerged();
|
ScheduleSubmerged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScheduleEmerged()
|
void ScheduleEmerged()
|
||||||
{
|
{
|
||||||
events.Reset();
|
|
||||||
events.SetPhase(PHASE_EMERGED);
|
events.SetPhase(PHASE_EMERGED);
|
||||||
events.ScheduleEvent(EVENT_CARRION_BEETLES, 6500ms, 0, PHASE_EMERGED);
|
events.ScheduleEvent(EVENT_CARRION_BEETLES, 6500ms, 0, PHASE_EMERGED);
|
||||||
events.ScheduleEvent(EVENT_LEECHING_SWARM, 20s, 0, PHASE_EMERGED);
|
events.ScheduleEvent(EVENT_LEECHING_SWARM, 20s, 0, PHASE_EMERGED);
|
||||||
@ -148,7 +148,6 @@ struct boss_anub_arak : public BossAI
|
|||||||
|
|
||||||
void ScheduleSubmerged()
|
void ScheduleSubmerged()
|
||||||
{
|
{
|
||||||
events.Reset();
|
|
||||||
events.SetPhase(PHASE_SUBMERGED);
|
events.SetPhase(PHASE_SUBMERGED);
|
||||||
events.ScheduleEvent(EVENT_EMERGE, 60s, 0, PHASE_SUBMERGED);
|
events.ScheduleEvent(EVENT_EMERGE, 60s, 0, PHASE_SUBMERGED);
|
||||||
|
|
||||||
@ -209,14 +208,13 @@ struct boss_anub_arak : public BossAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustEngagedWith(Unit* who) override
|
void JustEngagedWith(Unit* /*who*/) override
|
||||||
{
|
{
|
||||||
BossAI::JustEngagedWith(who);
|
|
||||||
Talk(SAY_AGGRO);
|
Talk(SAY_AGGRO);
|
||||||
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
|
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
|
||||||
|
|
||||||
events.SetPhase(PHASE_EMERGED);
|
events.SetPhase(PHASE_EMERGED);
|
||||||
events.ScheduleEvent(EVENT_CLOSE_DOORS, 5s);
|
events.ScheduleEvent(EVENT_CLOSE_DOORS, 5s, 0, PHASE_EMERGED);
|
||||||
ScheduleEmerged();
|
ScheduleEmerged();
|
||||||
|
|
||||||
// set up world triggers
|
// set up world triggers
|
||||||
@ -288,7 +286,8 @@ struct boss_anub_arak : public BossAI
|
|||||||
if (_remainingLargeSummonsBeforeEmerge == 0)
|
if (_remainingLargeSummonsBeforeEmerge == 0)
|
||||||
{
|
{
|
||||||
events.Reset();
|
events.Reset();
|
||||||
events.ScheduleEvent(EVENT_EMERGE, 5s);
|
events.SetPhase(PHASE_SUBMERGED);
|
||||||
|
events.ScheduleEvent(EVENT_EMERGE, 5s, 0, PHASE_SUBMERGED);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -333,10 +332,10 @@ struct boss_anub_arak : public BossAI
|
|||||||
DoCastSelf(SPELL_SELF_ROOT, true);
|
DoCastSelf(SPELL_SELF_ROOT, true);
|
||||||
me->DisableRotate(true);
|
me->DisableRotate(true);
|
||||||
me->SendMovementFlagUpdate();
|
me->SendMovementFlagUpdate();
|
||||||
events.ScheduleEvent(EVENT_ENABLE_ROTATE, 3300ms);
|
events.ScheduleEvent(EVENT_ENABLE_ROTATE, 3300ms, 0, PHASE_EMERGED);
|
||||||
DoCast(target, SPELL_POUND);
|
DoCast(target, SPELL_POUND);
|
||||||
}
|
}
|
||||||
events.ScheduleEvent(EVENT_POUND, 18s);
|
events.ScheduleEvent(EVENT_POUND, 18s, 0, PHASE_EMERGED);
|
||||||
break;
|
break;
|
||||||
case EVENT_ENABLE_ROTATE:
|
case EVENT_ENABLE_ROTATE:
|
||||||
me->RemoveAurasDueToSpell(SPELL_SELF_ROOT);
|
me->RemoveAurasDueToSpell(SPELL_SELF_ROOT);
|
||||||
|
|||||||
@ -33,7 +33,6 @@ enum Yells
|
|||||||
enum Spells
|
enum Spells
|
||||||
{
|
{
|
||||||
SPELL_CURSE_OF_LIFE = 49527,
|
SPELL_CURSE_OF_LIFE = 49527,
|
||||||
SPELL_RAIN_OF_FIRE = 49518,
|
|
||||||
SPELL_SHADOW_VOLLEY = 49528,
|
SPELL_SHADOW_VOLLEY = 49528,
|
||||||
|
|
||||||
// flesh spells
|
// flesh spells
|
||||||
@ -56,7 +55,6 @@ enum Misc
|
|||||||
ACTION_TURN_BONES = 1,
|
ACTION_TURN_BONES = 1,
|
||||||
|
|
||||||
EVENT_SPELL_CURSE_OF_LIFE = 1,
|
EVENT_SPELL_CURSE_OF_LIFE = 1,
|
||||||
EVENT_SPELL_RAIN_OF_FIRE = 2,
|
|
||||||
EVENT_SPELL_SHADOW_VOLLEY = 3,
|
EVENT_SPELL_SHADOW_VOLLEY = 3,
|
||||||
EVENT_SPELL_EYE_BEAM = 4,
|
EVENT_SPELL_EYE_BEAM = 4,
|
||||||
EVENT_SPELL_LIGHTNING_BREATH = 5,
|
EVENT_SPELL_LIGHTNING_BREATH = 5,
|
||||||
@ -97,7 +95,6 @@ public:
|
|||||||
Talk(SAY_AGGRO);
|
Talk(SAY_AGGRO);
|
||||||
BossAI::JustEngagedWith(who);
|
BossAI::JustEngagedWith(who);
|
||||||
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 5s);
|
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 5s);
|
||||||
events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, 14s, 18s);
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 8s, 10s);
|
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 8s, 10s);
|
||||||
events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1s);
|
events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1s);
|
||||||
}
|
}
|
||||||
@ -146,17 +143,11 @@ public:
|
|||||||
switch (events.ExecuteEvent())
|
switch (events.ExecuteEvent())
|
||||||
{
|
{
|
||||||
case EVENT_SPELL_CURSE_OF_LIFE:
|
case EVENT_SPELL_CURSE_OF_LIFE:
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true))
|
DoCastRandomTarget(SPELL_CURSE_OF_LIFE, 0, 30.0f, false);
|
||||||
me->CastSpell(target, SPELL_CURSE_OF_LIFE, false);
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 13s);
|
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 13s);
|
||||||
break;
|
break;
|
||||||
case EVENT_SPELL_RAIN_OF_FIRE:
|
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true))
|
|
||||||
me->CastSpell(target, SPELL_RAIN_OF_FIRE, false);
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, 16s);
|
|
||||||
break;
|
|
||||||
case EVENT_SPELL_SHADOW_VOLLEY:
|
case EVENT_SPELL_SHADOW_VOLLEY:
|
||||||
me->CastSpell(me, SPELL_SHADOW_VOLLEY, false);
|
DoCastAOE(SPELL_SHADOW_VOLLEY);
|
||||||
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 9s);
|
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 9s);
|
||||||
break;
|
break;
|
||||||
case EVENT_SPELL_TURN_FLESH:
|
case EVENT_SPELL_TURN_FLESH:
|
||||||
@ -173,9 +164,8 @@ public:
|
|||||||
events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1s);
|
events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1s);
|
||||||
break;
|
break;
|
||||||
case EVENT_TURN_FLESH_REAL:
|
case EVENT_TURN_FLESH_REAL:
|
||||||
me->CastSpell(me, SPELL_DUMMY, true);
|
DoCastSelf(SPELL_DUMMY, true);
|
||||||
|
me->ResumeChasingVictim();
|
||||||
me->GetMotionMaster()->MoveChase(me->GetVictim());
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_EYE_BEAM, 11s);
|
events.ScheduleEvent(EVENT_SPELL_EYE_BEAM, 11s);
|
||||||
events.ScheduleEvent(EVENT_SPELL_LIGHTNING_BREATH, 3s);
|
events.ScheduleEvent(EVENT_SPELL_LIGHTNING_BREATH, 3s);
|
||||||
events.ScheduleEvent(EVENT_SPELL_POISON_CLOUD, 6s);
|
events.ScheduleEvent(EVENT_SPELL_POISON_CLOUD, 6s);
|
||||||
@ -199,7 +189,6 @@ public:
|
|||||||
me->CastSpell(me, SPELL_CLEAR_GIFT, true);
|
me->CastSpell(me, SPELL_CLEAR_GIFT, true);
|
||||||
events.Reset();
|
events.Reset();
|
||||||
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 1s);
|
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 1s);
|
||||||
events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, 12s, 14s);
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 8s, 10s);
|
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 8s, 10s);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -249,7 +238,6 @@ class spell_tharon_ja_dummy_aura : public AuraScript
|
|||||||
{
|
{
|
||||||
PreventDefaultAction();
|
PreventDefaultAction();
|
||||||
GetUnitOwner()->GetThreatMgr().ResetAllThreat();
|
GetUnitOwner()->GetThreatMgr().ResetAllThreat();
|
||||||
GetUnitOwner()->GetMotionMaster()->Clear();
|
|
||||||
GetUnitOwner()->CastSpell((Unit*)nullptr, SPELL_TURN_BONES, false);
|
GetUnitOwner()->CastSpell((Unit*)nullptr, SPELL_TURN_BONES, false);
|
||||||
GetUnitOwner()->GetAI()->DoAction(ACTION_TURN_BONES);
|
GetUnitOwner()->GetAI()->DoAction(ACTION_TURN_BONES);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -41,6 +41,7 @@ enum VolkhanOther
|
|||||||
NPC_VOLKHAN_ANVIL = 28823,
|
NPC_VOLKHAN_ANVIL = 28823,
|
||||||
NPC_MOLTEN_GOLEM = 28695,
|
NPC_MOLTEN_GOLEM = 28695,
|
||||||
NPC_BRITTLE_GOLEM = 28681,
|
NPC_BRITTLE_GOLEM = 28681,
|
||||||
|
NPC_SLAG = 28585,
|
||||||
|
|
||||||
// Misc
|
// Misc
|
||||||
ACTION_SHATTER = 1,
|
ACTION_SHATTER = 1,
|
||||||
@ -77,7 +78,7 @@ enum Yells
|
|||||||
|
|
||||||
struct boss_volkhan : public BossAI
|
struct boss_volkhan : public BossAI
|
||||||
{
|
{
|
||||||
boss_volkhan(Creature* creature) : BossAI(creature, DATA_VOLKHAN), summons(creature) { }
|
boss_volkhan(Creature* creature) : BossAI(creature, DATA_VOLKHAN) { }
|
||||||
|
|
||||||
void Reset() override
|
void Reset() override
|
||||||
{
|
{
|
||||||
@ -104,6 +105,18 @@ struct boss_volkhan : public BossAI
|
|||||||
{
|
{
|
||||||
_JustDied();
|
_JustDied();
|
||||||
Talk(SAY_DEATH);
|
Talk(SAY_DEATH);
|
||||||
|
|
||||||
|
std::list<Creature*> slags;
|
||||||
|
GetCreatureListWithEntryInGrid(slags, me, NPC_SLAG, 100.0f);
|
||||||
|
|
||||||
|
if (!slags.empty())
|
||||||
|
{
|
||||||
|
for (Creature* slag : slags)
|
||||||
|
{
|
||||||
|
if (slag)
|
||||||
|
slag->DespawnOrUnsummon();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GetNextPos()
|
void GetNextPos()
|
||||||
@ -286,8 +299,6 @@ struct boss_volkhan : public BossAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
EventMap events;
|
|
||||||
SummonList summons;
|
|
||||||
float x, y, z;
|
float x, y, z;
|
||||||
uint8 PointID;
|
uint8 PointID;
|
||||||
uint8 ShatteredCount;
|
uint8 ShatteredCount;
|
||||||
|
|||||||
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#include "CreatureScript.h"
|
#include "CreatureScript.h"
|
||||||
#include "GameObjectScript.h"
|
#include "GameObjectScript.h"
|
||||||
|
#include "GridNotifiers.h"
|
||||||
#include "PassiveAI.h"
|
#include "PassiveAI.h"
|
||||||
#include "Player.h"
|
#include "Player.h"
|
||||||
#include "ScriptedCreature.h"
|
#include "ScriptedCreature.h"
|
||||||
@ -26,6 +27,7 @@
|
|||||||
#include "SpellScript.h"
|
#include "SpellScript.h"
|
||||||
#include "SpellScriptLoader.h"
|
#include "SpellScriptLoader.h"
|
||||||
#include "Vehicle.h"
|
#include "Vehicle.h"
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
enum AlchemistItemRequirements
|
enum AlchemistItemRequirements
|
||||||
{
|
{
|
||||||
@ -234,297 +236,376 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
enum overlordDrakuru
|
enum OverlordDrakuru
|
||||||
{
|
{
|
||||||
SPELL_SHADOW_BOLT = 54113,
|
SPELL_SHADOW_BOLT = 54113,
|
||||||
SPELL_SCOURGE_DISGUISE_EXPIRING = 52010,
|
SPELL_SCOURGE_DISGUISE_EXPIRING = 52010,
|
||||||
SPELL_THROW_BRIGHT_CRYSTAL = 54087,
|
SPELL_DROP_DISGUISE = 54089,
|
||||||
SPELL_TELEPORT_EFFECT = 52096,
|
SPELL_THROW_BRIGHT_CRYSTAL = 54087,
|
||||||
SPELL_SCOURGE_DISGUISE = 51966,
|
SPELL_TELEPORT_EFFECT = 52096,
|
||||||
SPELL_SCOURGE_DISGUISE_INSTANT_CAST = 52192,
|
SPELL_SCOURGE_SPOTLIGHT = 53104,
|
||||||
SPELL_BLIGHT_FOG = 54104,
|
SPELL_SCOURGE_DISGUISE = 51966,
|
||||||
SPELL_THROW_PORTAL_CRYSTAL = 54209,
|
SPELL_SCOURGE_DISGUISE_INSTANT_CAST = 52192,
|
||||||
SPELL_ARTHAS_PORTAL = 51807,
|
SPELL_BLIGHT_FOG = 54104,
|
||||||
SPELL_TOUCH_OF_DEATH = 54236,
|
SPELL_THROW_PORTAL_CRYSTAL = 54209,
|
||||||
SPELL_DRAKURU_DEATH = 54248,
|
SPELL_ARTHAS_PORTAL = 51807,
|
||||||
SPELL_SUMMON_SKULL = 54253,
|
SPELL_TOUCH_OF_DEATH = 54236,
|
||||||
|
SPELL_DRAKURU_DEATH = 54248,
|
||||||
|
SPELL_SUMMON_SKULL = 54253,
|
||||||
|
SPELL_BLOATED_ABOMINATION_FEIGN_DEATH = 52593,
|
||||||
|
SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT = 52523,
|
||||||
|
SPELL_EXPLODE_ABOMINATION_MEAT = 52520,
|
||||||
|
SPELL_DRAKURUS_SKULL_MISSILE = 54250,
|
||||||
|
SPELL_BURST_AT_THE_SEAMS_BONE = 52516,
|
||||||
|
|
||||||
QUEST_BETRAYAL = 12713,
|
QUEST_BETRAYAL = 12713,
|
||||||
|
|
||||||
NPC_BLIGHTBLOOD_TROLL = 28931,
|
NPC_BLIGHTBLOOD_TROLL = 28931,
|
||||||
NPC_LICH_KING = 28498,
|
NPC_LICH_KING = 28498,
|
||||||
|
NPC_TOTALLY_GENERIC_BUNNY = 29100,
|
||||||
|
NPC_TOTALLY_GENERIC_BUNNY_JSB = 28960,
|
||||||
|
GO_DRAKURUS_LAST_WISH = 202357,
|
||||||
|
|
||||||
EVENT_BETRAYAL_1 = 1,
|
ACTION_SUMMON_DRAKURU_LAST_WISH = 1,
|
||||||
EVENT_BETRAYAL_2 = 2,
|
ACTION_DESTROY_DRAKURU_LAST_WISH = 2,
|
||||||
EVENT_BETRAYAL_3 = 3,
|
ACTION_REMOVE_SPOTLIGHTS = 3,
|
||||||
EVENT_BETRAYAL_4 = 4,
|
|
||||||
EVENT_BETRAYAL_5 = 5,
|
|
||||||
EVENT_BETRAYAL_6 = 6,
|
|
||||||
EVENT_BETRAYAL_7 = 7,
|
|
||||||
EVENT_BETRAYAL_8 = 8,
|
|
||||||
EVENT_BETRAYAL_9 = 9,
|
|
||||||
EVENT_BETRAYAL_10 = 10,
|
|
||||||
EVENT_BETRAYAL_11 = 11,
|
|
||||||
EVENT_BETRAYAL_12 = 12,
|
|
||||||
EVENT_BETRAYAL_13 = 13,
|
|
||||||
EVENT_BETRAYAL_14 = 14,
|
|
||||||
EVENT_BETRAYAL_SHADOW_BOLT = 20,
|
|
||||||
EVENT_BETRAYAL_CRYSTAL = 21,
|
|
||||||
EVENT_BETRAYAL_COMBAT_TALK = 22,
|
|
||||||
|
|
||||||
SAY_DRAKURU_0 = 0,
|
SUMMON_GROUP_BLIGHTBLOOD_TROLL = 1,
|
||||||
SAY_DRAKURU_1 = 1,
|
|
||||||
SAY_DRAKURU_2 = 2,
|
EVENT_BETRAYAL_INTRO_1 = 1,
|
||||||
SAY_DRAKURU_3 = 3,
|
EVENT_BETRAYAL_INTRO_2 = 2,
|
||||||
SAY_DRAKURU_4 = 4,
|
EVENT_BETRAYAL_INTRO_3 = 3,
|
||||||
SAY_DRAKURU_5 = 5,
|
EVENT_BETRAYAL_INTRO_4 = 4,
|
||||||
SAY_DRAKURU_6 = 6,
|
EVENT_BETRAYAL_EVADE_CHECK = 5,
|
||||||
SAY_DRAKURU_7 = 7,
|
EVENT_BETRAYAL_EPILOGUE_1 = 6,
|
||||||
SAY_LICH_7 = 7,
|
EVENT_BETRAYAL_EPILOGUE_2 = 7,
|
||||||
SAY_LICH_8 = 8,
|
EVENT_BETRAYAL_EPILOGUE_3 = 8,
|
||||||
SAY_LICH_9 = 9,
|
EVENT_BETRAYAL_EPILOGUE_4 = 9,
|
||||||
SAY_LICH_10 = 10,
|
EVENT_BETRAYAL_EPILOGUE_5 = 10,
|
||||||
SAY_LICH_11 = 11,
|
EVENT_BETRAYAL_EPILOGUE_6 = 11,
|
||||||
SAY_LICH_12 = 12,
|
EVENT_BETRAYAL_EPILOGUE_7 = 12,
|
||||||
|
EVENT_BETRAYAL_EPILOGUE_8 = 13,
|
||||||
|
EVENT_BETRAYAL_EPILOGUE_9 = 14,
|
||||||
|
EVENT_BETRAYAL_EPILOGUE_10 = 15,
|
||||||
|
|
||||||
|
SAY_DRAKURU_0 = 0,
|
||||||
|
SAY_DRAKURU_1 = 1,
|
||||||
|
SAY_DRAKURU_2 = 2,
|
||||||
|
SAY_DRAKURU_3 = 3,
|
||||||
|
SAY_DRAKURU_4 = 4,
|
||||||
|
SAY_DRAKURU_5 = 5,
|
||||||
|
SAY_DRAKURU_6 = 6,
|
||||||
|
SAY_DRAKURU_7 = 7,
|
||||||
|
SAY_LICH_7 = 7,
|
||||||
|
SAY_LICH_8 = 8,
|
||||||
|
SAY_LICH_9 = 9,
|
||||||
|
SAY_LICH_10 = 10,
|
||||||
|
SAY_LICH_11 = 11,
|
||||||
|
SAY_LICH_12 = 12,
|
||||||
};
|
};
|
||||||
|
|
||||||
class npc_overlord_drakuru_betrayal : public CreatureScript
|
enum BetrayalState
|
||||||
{
|
{
|
||||||
public:
|
BETRAYAL_NOT_STARTED,
|
||||||
npc_overlord_drakuru_betrayal() : CreatureScript("npc_overlord_drakuru_betrayal") { }
|
BETRAYAL_IN_PROGRESS,
|
||||||
|
BETRAYAL_EPILOGUE,
|
||||||
|
BETRAYAL_EVADE,
|
||||||
|
};
|
||||||
|
|
||||||
CreatureAI* GetAI(Creature* creature) const override
|
struct npc_overlord_drakuru_betrayal : public ScriptedAI
|
||||||
|
{
|
||||||
|
npc_overlord_drakuru_betrayal(Creature* creature) : ScriptedAI(creature), _summons(me), _state(BETRAYAL_NOT_STARTED)
|
||||||
{
|
{
|
||||||
return new npc_overlord_drakuru_betrayalAI(creature);
|
me->SetCombatMovement(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct npc_overlord_drakuru_betrayalAI : public ScriptedAI
|
void EnterEvadeMode(EvadeReason why) override
|
||||||
{
|
{
|
||||||
npc_overlord_drakuru_betrayalAI(Creature* creature) : ScriptedAI(creature), summons(me)
|
if (_state != BETRAYAL_EVADE)
|
||||||
{
|
return;
|
||||||
}
|
me->SetFaction(FACTION_UNDEAD_SCOURGE);
|
||||||
|
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||||
|
ScriptedAI::EnterEvadeMode(why);
|
||||||
|
}
|
||||||
|
|
||||||
EventMap events;
|
void Reset() override
|
||||||
SummonList summons;
|
{
|
||||||
ObjectGuid playerGUID;
|
events.Reset();
|
||||||
ObjectGuid lichGUID;
|
scheduler.CancelAll();
|
||||||
|
_summons.DespawnAll();
|
||||||
|
_playerGUID.Clear();
|
||||||
|
_lichGUID.Clear();
|
||||||
|
me->SetFaction(FACTION_UNDEAD_SCOURGE);
|
||||||
|
me->SetVisible(false);
|
||||||
|
DoAction(ACTION_SUMMON_DRAKURU_LAST_WISH);
|
||||||
|
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||||
|
me->SetImmuneToPC(true);
|
||||||
|
_state = BETRAYAL_NOT_STARTED;
|
||||||
|
DoAction(ACTION_REMOVE_SPOTLIGHTS);
|
||||||
|
}
|
||||||
|
|
||||||
void EnterEvadeMode(EvadeReason why) override
|
void DoAction(int32 action) override
|
||||||
|
{
|
||||||
|
switch (action)
|
||||||
{
|
{
|
||||||
if (playerGUID)
|
case ACTION_SUMMON_DRAKURU_LAST_WISH:
|
||||||
if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID))
|
if (!me->FindNearestGameObject(GO_DRAKURUS_LAST_WISH, 80.0f))
|
||||||
if (player->IsWithinDistInMap(me, 80))
|
me->SummonGameObject(GO_DRAKURUS_LAST_WISH, 6185.989, -2029.6979, 590.87787, 0, 0, 0, 0, 0, 0, true, GO_SUMMON_TIMED_DESPAWN);
|
||||||
return;
|
break;
|
||||||
me->SetFaction(FACTION_UNDEAD_SCOURGE);
|
case ACTION_DESTROY_DRAKURU_LAST_WISH:
|
||||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
if (GameObject* go = me->FindNearestGameObject(GO_DRAKURUS_LAST_WISH, 80.0f))
|
||||||
ScriptedAI::EnterEvadeMode(why);
|
go->Delete();
|
||||||
}
|
break;
|
||||||
|
case ACTION_REMOVE_SPOTLIGHTS:
|
||||||
void Reset() override
|
|
||||||
{
|
|
||||||
events.Reset();
|
|
||||||
summons.DespawnAll();
|
|
||||||
playerGUID.Clear();
|
|
||||||
lichGUID.Clear();
|
|
||||||
me->SetFaction(FACTION_UNDEAD_SCOURGE);
|
|
||||||
me->SetVisible(false);
|
|
||||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveInLineOfSight(Unit* who) override
|
|
||||||
{
|
|
||||||
if (who->IsPlayer())
|
|
||||||
{
|
{
|
||||||
if (playerGUID)
|
std::list<Creature*> creatures;
|
||||||
|
me->GetCreatureListWithEntryInGrid(creatures, NPC_TOTALLY_GENERIC_BUNNY, 55.0f);
|
||||||
|
for (Creature* creature : creatures)
|
||||||
|
creature->RemoveAurasDueToSpell(SPELL_SCOURGE_SPOTLIGHT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsPlayerOnQuest(Player* player)
|
||||||
|
{
|
||||||
|
return player->GetQuestStatus(QUEST_BETRAYAL) == QUEST_STATUS_INCOMPLETE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoveInLineOfSight(Unit* who) override
|
||||||
|
{
|
||||||
|
if (Player* player = who->ToPlayer())
|
||||||
|
{
|
||||||
|
bool shouldStartEvent = (_state == BETRAYAL_NOT_STARTED) && IsPlayerOnQuest(player) && player->HasAura(SPELL_SCOURGE_DISGUISE) && player->IsWithinDistInMap(me, 80.0f);
|
||||||
|
if (shouldStartEvent)
|
||||||
|
{
|
||||||
|
me->SetVisible(true);
|
||||||
|
_state = BETRAYAL_IN_PROGRESS;
|
||||||
|
DoAction(ACTION_DESTROY_DRAKURU_LAST_WISH);
|
||||||
|
_playerGUID = who->GetGUID();
|
||||||
|
events.ScheduleEvent(EVENT_BETRAYAL_INTRO_1, 6s);
|
||||||
|
events.ScheduleEvent(EVENT_BETRAYAL_EVADE_CHECK, 10s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ScriptedAI::MoveInLineOfSight(who);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustSummoned(Creature* summon) override
|
||||||
|
{
|
||||||
|
_summons.Summon(summon);
|
||||||
|
switch (summon->GetEntry())
|
||||||
|
{
|
||||||
|
case NPC_BLIGHTBLOOD_TROLL:
|
||||||
|
if (Creature* target = summon->FindNearestCreature(NPC_TOTALLY_GENERIC_BUNNY, 10.0f, true))
|
||||||
|
target->CastSpell(target, SPELL_TELEPORT_EFFECT, true);
|
||||||
|
break;
|
||||||
|
case NPC_LICH_KING:
|
||||||
|
me->SetFacingToObject(summon);
|
||||||
|
_lichGUID = summon->GetGUID();
|
||||||
|
summon->GetMotionMaster()->MovePoint(0, 6164.2695, -2016.8978, 590.8636);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustEngagedWith(Unit* /*who*/) override
|
||||||
|
{
|
||||||
|
scheduler.Schedule(0s, [this](TaskContext context)
|
||||||
|
{
|
||||||
|
if (!me->IsWithinMeleeRange(me->GetVictim()))
|
||||||
|
DoCastVictim(SPELL_SHADOW_BOLT);
|
||||||
|
context.Repeat(2s);
|
||||||
|
}).Schedule(5s, [this](TaskContext context)
|
||||||
|
{
|
||||||
|
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
|
||||||
|
DoCast(target, SPELL_THROW_BRIGHT_CRYSTAL);
|
||||||
|
context.Repeat(6s, 15s);
|
||||||
|
}).Schedule(20s, [this](TaskContext context)
|
||||||
|
{
|
||||||
|
Talk(SAY_DRAKURU_4);
|
||||||
|
context.Repeat(10s, 20s);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*dmgType*/, SpellSchoolMask /*school*/) override
|
||||||
|
{
|
||||||
|
if (damage >= me->GetHealth() && !me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
|
||||||
|
{
|
||||||
|
damage = 0;
|
||||||
|
me->RemoveAllAuras();
|
||||||
|
me->CombatStop();
|
||||||
|
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||||
|
me->SetFaction(2082);
|
||||||
|
me->SetImmuneToPC(true);
|
||||||
|
events.Reset();
|
||||||
|
scheduler.CancelAll();
|
||||||
|
events.ScheduleEvent(EVENT_BETRAYAL_EPILOGUE_1, 4200ms);
|
||||||
|
_state = BETRAYAL_EPILOGUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override
|
||||||
|
{
|
||||||
|
switch (spellInfo->Id)
|
||||||
|
{
|
||||||
|
case SPELL_THROW_PORTAL_CRYSTAL:
|
||||||
|
if (Aura* aura = target->AddAura(SPELL_ARTHAS_PORTAL, target))
|
||||||
|
aura->SetDuration(77'000);
|
||||||
|
break;
|
||||||
|
case SPELL_DRAKURUS_SKULL_MISSILE:
|
||||||
|
target->CastSpell(target, SPELL_SUMMON_SKULL, true);
|
||||||
|
break;
|
||||||
|
case SPELL_DROP_DISGUISE:
|
||||||
|
target->CastSpell(target, SPELL_SCOURGE_DISGUISE_EXPIRING, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override
|
||||||
|
{
|
||||||
|
if (spellInfo->Id == SPELL_TOUCH_OF_DEATH)
|
||||||
|
{
|
||||||
|
DoCastAOE(SPELL_DRAKURUS_SKULL_MISSILE, true);
|
||||||
|
DoCastSelf(SPELL_BLOATED_ABOMINATION_FEIGN_DEATH, true);
|
||||||
|
DoCastSelf(SPELL_BURST_AT_THE_SEAMS_BONE, true);
|
||||||
|
DoCastSelf(SPELL_BURST_AT_THE_SEAMS_BONE, true);
|
||||||
|
DoCastSelf(SPELL_BURST_AT_THE_SEAMS_BONE, true);
|
||||||
|
DoCastSelf(SPELL_EXPLODE_ABOMINATION_MEAT, true);
|
||||||
|
DoCastSelf(SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT, true);
|
||||||
|
DoCastSelf(SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT, true);
|
||||||
|
DoCastSelf(SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT, true);
|
||||||
|
DoCastSelf(SPELL_DRAKURU_DEATH, true);
|
||||||
|
DoAction(ACTION_SUMMON_DRAKURU_LAST_WISH);
|
||||||
|
me->SetImmuneToPC(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(uint32 diff) override
|
||||||
|
{
|
||||||
|
events.Update(diff);
|
||||||
|
switch (events.ExecuteEvent())
|
||||||
|
{
|
||||||
|
case EVENT_BETRAYAL_EVADE_CHECK:
|
||||||
|
{
|
||||||
|
if (_state == BETRAYAL_IN_PROGRESS)
|
||||||
{
|
{
|
||||||
if (who->GetGUID() != playerGUID)
|
float radius = 80.0f;
|
||||||
|
std::list<Player*> players;
|
||||||
|
Acore::AnyPlayerInObjectRangeCheck checker(me, radius, true, true);
|
||||||
|
Acore::PlayerListSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(me, players, checker);
|
||||||
|
Cell::VisitObjects(me, searcher, radius);
|
||||||
|
if (std::ranges::any_of(players, [this](Player* player)
|
||||||
{
|
{
|
||||||
Player* player = ObjectAccessor::GetPlayer(*me, playerGUID);
|
return IsPlayerOnQuest(player);
|
||||||
if (player && player->IsWithinDistInMap(me, 80))
|
}))
|
||||||
who->ToPlayer()->NearTeleportTo(6143.76f, -1969.7f, 417.57f, 2.08f);
|
{
|
||||||
else
|
events.Repeat(10s);
|
||||||
{
|
|
||||||
EnterEvadeMode(EVADE_REASON_OTHER);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ScriptedAI::MoveInLineOfSight(who);
|
{
|
||||||
|
_state = BETRAYAL_EVADE;
|
||||||
|
EnterEvadeMode(EVADE_REASON_OTHER);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (who->ToPlayer()->GetQuestStatus(QUEST_BETRAYAL) == QUEST_STATUS_INCOMPLETE && who->HasAura(SPELL_SCOURGE_DISGUISE))
|
break;
|
||||||
|
}
|
||||||
|
case EVENT_BETRAYAL_INTRO_1:
|
||||||
|
Talk(SAY_DRAKURU_0);
|
||||||
|
events.ScheduleEvent(EVENT_BETRAYAL_INTRO_2, 4s);
|
||||||
|
events.ScheduleEvent(EVENT_BETRAYAL_INTRO_3, 6600ms);
|
||||||
|
break;
|
||||||
|
case EVENT_BETRAYAL_INTRO_2:
|
||||||
|
me->SummonCreatureGroup(SUMMON_GROUP_BLIGHTBLOOD_TROLL);
|
||||||
|
break;
|
||||||
|
case EVENT_BETRAYAL_INTRO_3:
|
||||||
|
Talk(SAY_DRAKURU_1);
|
||||||
|
DoCastAOE(SPELL_DROP_DISGUISE);
|
||||||
|
events.ScheduleEvent(EVENT_BETRAYAL_INTRO_4, 9600ms);
|
||||||
|
break;
|
||||||
|
case EVENT_BETRAYAL_INTRO_4:
|
||||||
|
{
|
||||||
|
Talk(SAY_DRAKURU_2);
|
||||||
|
Talk(SAY_DRAKURU_3);
|
||||||
|
me->SetImmuneToPC(false);
|
||||||
|
std::list<Creature*> creatures;
|
||||||
|
me->GetCreatureListWithEntryInGrid(creatures, NPC_TOTALLY_GENERIC_BUNNY, 55.0f);
|
||||||
|
for (Creature* creature : creatures)
|
||||||
|
creature->CastSpell(creature, SPELL_SCOURGE_SPOTLIGHT, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EVENT_BETRAYAL_EPILOGUE_1:
|
||||||
|
{
|
||||||
|
Talk(SAY_DRAKURU_5);
|
||||||
|
events.ScheduleEvent(EVENT_BETRAYAL_EPILOGUE_2, 4800ms);
|
||||||
|
DoAction(ACTION_REMOVE_SPOTLIGHTS);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EVENT_BETRAYAL_EPILOGUE_2:
|
||||||
|
Talk(SAY_DRAKURU_6);
|
||||||
|
events.ScheduleEvent(EVENT_BETRAYAL_EPILOGUE_3, 1800ms);
|
||||||
|
break;
|
||||||
|
case EVENT_BETRAYAL_EPILOGUE_3:
|
||||||
|
DoCastSelf(SPELL_THROW_PORTAL_CRYSTAL, true);
|
||||||
|
events.ScheduleEvent(EVENT_BETRAYAL_EPILOGUE_4, 3600ms);
|
||||||
|
break;
|
||||||
|
case EVENT_BETRAYAL_EPILOGUE_4:
|
||||||
|
me->SummonCreature(NPC_LICH_KING, 6140.4233, -2010.9938, 589.1911, 6.126106, TEMPSUMMON_TIMED_DESPAWN, 77'000);
|
||||||
|
events.ScheduleEvent(EVENT_BETRAYAL_EPILOGUE_5, 8400ms);
|
||||||
|
break;
|
||||||
|
case EVENT_BETRAYAL_EPILOGUE_5:
|
||||||
|
Talk(SAY_DRAKURU_7);
|
||||||
|
events.ScheduleEvent(EVENT_BETRAYAL_EPILOGUE_6, 9600ms);
|
||||||
|
break;
|
||||||
|
case EVENT_BETRAYAL_EPILOGUE_6:
|
||||||
|
if (Creature* lich = ObjectAccessor::GetCreature(*me, _lichGUID))
|
||||||
{
|
{
|
||||||
me->SetVisible(true);
|
lich->AI()->Talk(SAY_LICH_7);
|
||||||
playerGUID = who->GetGUID();
|
lich->AI()->Talk(SAY_LICH_8, 5400ms);
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_1, 5s);
|
|
||||||
}
|
}
|
||||||
}
|
events.ScheduleEvent(EVENT_BETRAYAL_EPILOGUE_7, 7800ms);
|
||||||
else
|
break;
|
||||||
ScriptedAI::MoveInLineOfSight(who);
|
case EVENT_BETRAYAL_EPILOGUE_7:
|
||||||
|
if (Creature* lich = ObjectAccessor::GetCreature(*me, _lichGUID))
|
||||||
|
lich->CastSpell(me, SPELL_TOUCH_OF_DEATH, false);
|
||||||
|
events.ScheduleEvent(EVENT_BETRAYAL_EPILOGUE_8, 4200ms);
|
||||||
|
break;
|
||||||
|
case EVENT_BETRAYAL_EPILOGUE_8:
|
||||||
|
me->SetVisible(false);
|
||||||
|
if (Creature* lich = ObjectAccessor::GetCreature(*me, _lichGUID))
|
||||||
|
{
|
||||||
|
lich->AI()->Talk(SAY_LICH_9, 3600ms);
|
||||||
|
lich->AI()->Talk(SAY_LICH_10, 8400ms);
|
||||||
|
lich->AI()->Talk(SAY_LICH_11, 22800ms);
|
||||||
|
lich->AI()->Talk(SAY_LICH_12, 27600ms);
|
||||||
|
}
|
||||||
|
events.ScheduleEvent(EVENT_BETRAYAL_EPILOGUE_9, 32600ms);
|
||||||
|
events.ScheduleEvent(EVENT_BETRAYAL_EPILOGUE_10, 37200ms);
|
||||||
|
break;
|
||||||
|
case EVENT_BETRAYAL_EPILOGUE_9:
|
||||||
|
if (Creature* lich = ObjectAccessor::GetCreature(*me, _lichGUID))
|
||||||
|
lich->GetMotionMaster()->MovePoint(0, 6141.2393, -2011.2728, 589.8653);
|
||||||
|
break;
|
||||||
|
case EVENT_BETRAYAL_EPILOGUE_10:
|
||||||
|
EnterEvadeMode(EVADE_REASON_OTHER);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustSummoned(Creature* cr) override
|
if (me->GetFaction() == 2082 || me->HasUnitState(UNIT_STATE_CASTING | UNIT_STATE_STUNNED))
|
||||||
{
|
return;
|
||||||
summons.Summon(cr);
|
|
||||||
if (cr->GetEntry() == NPC_BLIGHTBLOOD_TROLL)
|
|
||||||
cr->CastSpell(cr, SPELL_TELEPORT_EFFECT, true);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
me->SetFacingToObject(cr);
|
|
||||||
lichGUID = cr->GetGUID();
|
|
||||||
float o = me->GetAngle(cr);
|
|
||||||
cr->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(o) * 6.0f, me->GetPositionY() + std::sin(o) * 6.0f, me->GetPositionZ());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void JustEngagedWith(Unit*) override
|
if (!UpdateVictim())
|
||||||
{
|
return;
|
||||||
Talk(SAY_DRAKURU_3);
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_SHADOW_BOLT, 2s);
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_CRYSTAL, 5s);
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_COMBAT_TALK, 20s);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
|
scheduler.Update(diff);
|
||||||
{
|
DoMeleeAttackIfReady();
|
||||||
if (damage >= me->GetHealth() && !me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
|
}
|
||||||
{
|
|
||||||
damage = 0;
|
|
||||||
me->RemoveAllAuras();
|
|
||||||
me->CombatStop();
|
|
||||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
|
||||||
me->SetFaction(FACTION_FRIENDLY);
|
|
||||||
events.Reset();
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_4, 1s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override
|
private:
|
||||||
{
|
SummonList _summons;
|
||||||
if (spellInfo->Id == SPELL_THROW_PORTAL_CRYSTAL)
|
ObjectGuid _playerGUID;
|
||||||
if (Aura* aura = target->AddAura(SPELL_ARTHAS_PORTAL, target))
|
ObjectGuid _lichGUID;
|
||||||
aura->SetDuration(48000);
|
BetrayalState _state;
|
||||||
}
|
|
||||||
|
|
||||||
void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override
|
|
||||||
{
|
|
||||||
if (spellInfo->Id == SPELL_TOUCH_OF_DEATH)
|
|
||||||
{
|
|
||||||
me->CastSpell(me, SPELL_DRAKURU_DEATH, true);
|
|
||||||
me->CastSpell(me, SPELL_SUMMON_SKULL, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateAI(uint32 diff) override
|
|
||||||
{
|
|
||||||
events.Update(diff);
|
|
||||||
switch (events.ExecuteEvent())
|
|
||||||
{
|
|
||||||
case EVENT_BETRAYAL_1:
|
|
||||||
Talk(SAY_DRAKURU_0);
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_2, 5s);
|
|
||||||
break;
|
|
||||||
case EVENT_BETRAYAL_2:
|
|
||||||
me->SummonCreature(NPC_BLIGHTBLOOD_TROLL, 6184.1f, -1969.9f, 586.76f, 4.5f);
|
|
||||||
me->SummonCreature(NPC_BLIGHTBLOOD_TROLL, 6222.9f, -2026.5f, 586.76f, 2.9f);
|
|
||||||
me->SummonCreature(NPC_BLIGHTBLOOD_TROLL, 6166.2f, -2065.4f, 586.76f, 1.4f);
|
|
||||||
me->SummonCreature(NPC_BLIGHTBLOOD_TROLL, 6127.5f, -2008.7f, 586.76f, 0.0f);
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_3, 5s);
|
|
||||||
break;
|
|
||||||
case EVENT_BETRAYAL_3:
|
|
||||||
Talk(SAY_DRAKURU_1);
|
|
||||||
Talk(SAY_DRAKURU_2);
|
|
||||||
if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID))
|
|
||||||
player->CastSpell(player, SPELL_SCOURGE_DISGUISE_EXPIRING, true);
|
|
||||||
if (Aura* aur = me->AddAura(SPELL_BLIGHT_FOG, me))
|
|
||||||
aur->SetDuration(22000);
|
|
||||||
break;
|
|
||||||
case EVENT_BETRAYAL_4:
|
|
||||||
Talk(SAY_DRAKURU_5);
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_5, 6s);
|
|
||||||
break;
|
|
||||||
case EVENT_BETRAYAL_5:
|
|
||||||
Talk(SAY_DRAKURU_6);
|
|
||||||
me->CastSpell(me, SPELL_THROW_PORTAL_CRYSTAL, true);
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_6, 8s);
|
|
||||||
break;
|
|
||||||
case EVENT_BETRAYAL_6:
|
|
||||||
me->SummonCreature(NPC_LICH_KING, 6142.9f, -2011.6f, 590.86f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 41000);
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_7, 8s);
|
|
||||||
break;
|
|
||||||
case EVENT_BETRAYAL_7:
|
|
||||||
Talk(SAY_DRAKURU_7);
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_8, 5s);
|
|
||||||
break;
|
|
||||||
case EVENT_BETRAYAL_8:
|
|
||||||
if (Creature* lich = ObjectAccessor::GetCreature(*me, lichGUID))
|
|
||||||
lich->AI()->Talk(SAY_LICH_7);
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_9, 6s);
|
|
||||||
break;
|
|
||||||
case EVENT_BETRAYAL_9:
|
|
||||||
if (Creature* lich = ObjectAccessor::GetCreature(*me, lichGUID))
|
|
||||||
{
|
|
||||||
lich->AI()->Talk(SAY_LICH_8);
|
|
||||||
lich->CastSpell(me, SPELL_TOUCH_OF_DEATH, false);
|
|
||||||
}
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_10, 4s);
|
|
||||||
break;
|
|
||||||
case EVENT_BETRAYAL_10:
|
|
||||||
me->SetVisible(false);
|
|
||||||
if (Creature* lich = ObjectAccessor::GetCreature(*me, lichGUID))
|
|
||||||
lich->AI()->Talk(SAY_LICH_9);
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_11, 4s);
|
|
||||||
break;
|
|
||||||
case EVENT_BETRAYAL_11:
|
|
||||||
if (Creature* lich = ObjectAccessor::GetCreature(*me, lichGUID))
|
|
||||||
lich->AI()->Talk(SAY_LICH_10);
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_12, 6s);
|
|
||||||
break;
|
|
||||||
case EVENT_BETRAYAL_12:
|
|
||||||
if (Creature* lich = ObjectAccessor::GetCreature(*me, lichGUID))
|
|
||||||
lich->AI()->Talk(SAY_LICH_11);
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_13, 3s);
|
|
||||||
break;
|
|
||||||
case EVENT_BETRAYAL_13:
|
|
||||||
if (Creature* lich = ObjectAccessor::GetCreature(*me, lichGUID))
|
|
||||||
{
|
|
||||||
lich->AI()->Talk(SAY_LICH_12);
|
|
||||||
lich->GetMotionMaster()->MovePoint(0, 6143.8f, -2011.5f, 590.9f);
|
|
||||||
}
|
|
||||||
events.ScheduleEvent(EVENT_BETRAYAL_14, 7s);
|
|
||||||
break;
|
|
||||||
case EVENT_BETRAYAL_14:
|
|
||||||
playerGUID.Clear();
|
|
||||||
EnterEvadeMode(EVADE_REASON_OTHER);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (me->GetFaction() == FACTION_FRIENDLY || me->HasUnitState(UNIT_STATE_CASTING | UNIT_STATE_STUNNED))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!UpdateVictim())
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch (events.ExecuteEvent())
|
|
||||||
{
|
|
||||||
case EVENT_BETRAYAL_SHADOW_BOLT:
|
|
||||||
if (!me->IsWithinMeleeRange(me->GetVictim()))
|
|
||||||
me->CastSpell(me->GetVictim(), SPELL_SHADOW_BOLT, false);
|
|
||||||
events.Repeat(2s);
|
|
||||||
break;
|
|
||||||
case EVENT_BETRAYAL_CRYSTAL:
|
|
||||||
if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID))
|
|
||||||
me->CastSpell(player, SPELL_THROW_BRIGHT_CRYSTAL, true);
|
|
||||||
events.Repeat(6s, 15s);
|
|
||||||
break;
|
|
||||||
case EVENT_BETRAYAL_COMBAT_TALK:
|
|
||||||
Talk(SAY_DRAKURU_4);
|
|
||||||
events.Repeat(20s);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*####
|
/*####
|
||||||
@ -864,11 +945,32 @@ class spell_scourge_disguise_instability : public AuraScript
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 54105 - Blight Fog
|
||||||
|
class spell_blight_fog : public SpellScript
|
||||||
|
{
|
||||||
|
PrepareSpellScript(spell_blight_fog);
|
||||||
|
|
||||||
|
void FilterTargets(std::list<WorldObject*>& targets)
|
||||||
|
{
|
||||||
|
targets.remove_if([](WorldObject* target) -> bool
|
||||||
|
{
|
||||||
|
float z = target->GetPositionZ();
|
||||||
|
bool isInBlightFog = (582.0f <= z && z <= 583.0f) || (586.0f <= z && z <= 587.0f);
|
||||||
|
return !isInBlightFog;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register() override
|
||||||
|
{
|
||||||
|
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_blight_fog::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void AddSC_zuldrak()
|
void AddSC_zuldrak()
|
||||||
{
|
{
|
||||||
new npc_finklestein();
|
new npc_finklestein();
|
||||||
new go_finklestein_cauldron();
|
new go_finklestein_cauldron();
|
||||||
new npc_overlord_drakuru_betrayal();
|
RegisterCreatureAI(npc_overlord_drakuru_betrayal);
|
||||||
new npc_drakuru_shackles();
|
new npc_drakuru_shackles();
|
||||||
new npc_captured_rageclaw();
|
new npc_captured_rageclaw();
|
||||||
new npc_released_offspring_harkoa();
|
new npc_released_offspring_harkoa();
|
||||||
@ -876,4 +978,5 @@ void AddSC_zuldrak()
|
|||||||
new go_scourge_enclosure();
|
new go_scourge_enclosure();
|
||||||
|
|
||||||
RegisterSpellScript(spell_scourge_disguise_instability);
|
RegisterSpellScript(spell_scourge_disguise_instability);
|
||||||
|
RegisterSpellScript(spell_blight_fog);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user