diff --git a/data/sql/updates/db_world/2025_10_29_00.sql b/data/sql/updates/db_world/2025_10_29_00.sql new file mode 100644 index 000000000..68a2ff5dd --- /dev/null +++ b/data/sql/updates/db_world/2025_10_29_00.sql @@ -0,0 +1,8 @@ +-- DB update 2025_10_28_05 -> 2025_10_29_00 +-- +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 27969; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 27969); +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 +(27969, 0, 0, 0, 0, 0, 100, 2, 3000, 6000, 16000, 21000, 0, 0, 11, 51493, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Rune Giant - In Combat - Cast \'Stomp\' (No Repeat) (Dungeon)'), +(27969, 0, 1, 0, 0, 0, 100, 4, 3000, 6000, 16000, 21000, 0, 0, 11, 59026, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Rune Giant - In Combat - Cast \'Stomp\' (No Repeat) (Dungeon)'), +(27969, 0, 2, 0, 0, 0, 100, 6, 14000, 24000, 28000, 35000, 0, 0, 11, 51494, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Rune Giant - In Combat - Cast \'Iron Fist\' (Dungeon)'); diff --git a/data/sql/updates/db_world/2025_10_29_01.sql b/data/sql/updates/db_world/2025_10_29_01.sql new file mode 100644 index 000000000..aad6d0124 --- /dev/null +++ b/data/sql/updates/db_world/2025_10_29_01.sql @@ -0,0 +1,12 @@ +-- DB update 2025_10_29_00 -> 2025_10_29_01 +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=7866 AND `SourceEntry`=2; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 7866, 2, 0, 0, 9, 0, 10098, 0, 0, 0, 0, 0, '', 'Show gossip option 2 if player has quest 10098'), +(15, 7866, 2, 0, 0, 2, 0, 32888, 1, 0, 1, 0, 0, '', 'Show gossip option 2 if player does NOT have item 32888'); + +UPDATE `creature_template` SET `AIName`='SmartAI', `ScriptName`='' WHERE `entry`=18933; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=18933 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18933, 0, 0, 1, 62, 0, 100, 0, 7866, 2, 0, 0, 56, 32888, 1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Isfar - On Gossip Option 2 Selected - Add Item The Relics of Terokk'), +(18933, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Isfar - Link - Close Gossip'); diff --git a/data/sql/updates/db_world/2025_10_29_02.sql b/data/sql/updates/db_world/2025_10_29_02.sql new file mode 100644 index 000000000..df4773dfb --- /dev/null +++ b/data/sql/updates/db_world/2025_10_29_02.sql @@ -0,0 +1,14 @@ +-- DB update 2025_10_29_01 -> 2025_10_29_02 +-- +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 28580; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 28580); +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 +(28580, 0, 0, 0, 0, 0, 100, 2, 0, 0, 2300, 5000, 0, 0, 11, 16100, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hardened Steel Skycaller - In Combat - Cast \'Shoot\' (Normal Dungeon)'), +(28580, 0, 1, 0, 0, 0, 100, 4, 0, 0, 2300, 5000, 0, 0, 11, 61515, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hardened Steel Skycaller - In Combat - Cast \'Shoot\' (Heroic Dungeon)'), +(28580, 0, 2, 0, 0, 0, 100, 2, 9000, 12000, 15000, 20000, 0, 0, 11, 52754, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Hardened Steel Skycaller - In Combat - Cast \'Impact Shot\' (Normal Dungeon)'), +(28580, 0, 3, 0, 0, 0, 100, 2, 7000, 12000, 12000, 18000, 0, 0, 11, 52755, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Hardened Steel Skycaller - In Combat - Cast \'Impact Multi-Shot\' (Normal Dungeon)'), +(28580, 0, 4, 0, 0, 0, 100, 4, 9000, 12000, 15000, 20000, 0, 0, 11, 59148, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Hardened Steel Skycaller - In Combat - Cast \'Impact Shot\' (Heroic Dungeon)'), +(28580, 0, 5, 0, 0, 0, 100, 4, 7000, 12000, 12000, 18000, 0, 0, 11, 59147, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Hardened Steel Skycaller - In Combat - Cast \'Impact Multi-Shot\' (Heroic Dungeon)'), +(28580, 0, 6, 0, 9, 0, 100, 4, 0, 0, 6000, 9000, 0, 5, 11, 61507, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hardened Steel Skycaller - Within 0-5 Range - Cast \'Disengage\' (Heroic Dungeon)'), +(28580, 0, 7, 8, 9, 0, 100, 2, 5000, 8000, 5000, 8000, 0, 5, 122, 1000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Hardened Steel Skycaller - Within 0-5 Range - Flee (Normal Dungeon)'), +(28580, 0, 8, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Hardened Steel Skycaller - Within 0-0 Range - Disable Combat Movement (Normal Dungeon)'); diff --git a/data/sql/updates/db_world/2025_10_30_00.sql b/data/sql/updates/db_world/2025_10_30_00.sql new file mode 100644 index 000000000..8e05e424b --- /dev/null +++ b/data/sql/updates/db_world/2025_10_30_00.sql @@ -0,0 +1,4 @@ +-- DB update 2025_10_29_02 -> 2025_10_30_00 + +-- Adjusts events previously ordered from 0 wrongly +UPDATE `smart_scripts` SET `event_param2` = `event_param2` +1 WHERE `event_type` =34 AND `event_param1` = 2 AND `entryorguid` IN (-158029, -158021, -158000, -148360, -148268, -139547 ,-139546, -139539, -139538, -139533, -139532); diff --git a/data/sql/updates/db_world/2025_10_30_01.sql b/data/sql/updates/db_world/2025_10_30_01.sql new file mode 100644 index 000000000..7d821c961 --- /dev/null +++ b/data/sql/updates/db_world/2025_10_30_01.sql @@ -0,0 +1,152 @@ +-- DB update 2025_10_30_00 -> 2025_10_30_01 +DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (50044,50774,50804,51153,51121,51110,51054,50785,61407,52774,52960,52961,52387,52237,52433,52429,51012,50988,51136,12167,15654,12734,50843,50810,50868,50761,50760,50752,50830,50831,50834,50840,50838,50895,50900,48261,48256,48136,48133,48130,48105,48140,48137,50234,50255,47579,15667,48294,48291,48529,48423,48380,42708,42669,42705,42729,42730,43667,43649,52445,52737,52771,52720,52722,52721,52696,52666,57725,52480,56855,56891,56926,55959,36176,34941,67774,68783,57058,56272,61693,57407,58459,58462,58463,58456,58455,58458,58457,60181,60182,31956,72395,72396,72397); +INSERT INTO `spelldifficulty_dbc` (`ID`,`DifficultySpellID_1`,`DifficultySpellID_2`,`DifficultySpellID_3`,`DifficultySpellID_4`) VALUES +-- Oculus +(50044,50044,59213,0,0), +-- Drakos +(50774,50774,59370,0,0), +-- Eregos +(50804,50804,59381,0,0), +(51153,51153,59382,0,0), +-- Urom +(51121,51121,59376,0,0), +(51110,51110,59377,0,0), +-- Varos +(51054,51054,59371,0,0), +(50785,50785,59372,0,0), +(61407,61407,62136,0,0), + +-- Halls of Lightning +-- Bjarngrimm +(52774,52774,59160,0,0), +-- Loken +(52960,52960,59835,0,0), +(52961,52961,59836,0,0), +-- Volkhan +(52387,52387,59528,0,0), +(52237,52237,59529,0,0), +(52433,52433,59530,0,0), +(52429,52429,59527,0,0), + +-- Halls of Stone +-- Brann +(51012,51012,59868,0,0), +(50988,50988,59870,0,0), +(51136,51136,59867,0,0), +(12167,12167,59863,0,0), +(15654,15654,59864,0,0), +(12734,12734,59865,0,0), +-- Krystallus +(50843,50843,59742,0,0), +(50810,50810,61546,0,0), +(50868,50868,58744,0,0), +-- Maiden of Grief +(50761,50761,59727,0,0), +(50760,50760,59726,0,0), +(50752,50752,59772,0,0), +-- Sjonnir +(50830,50830,59844,0,0), +(50831,50831,59845,0,0), +(50834,50834,59846,0,0), +(50840,50840,59848,0,0), +(50838,50838,59853,0,0), +(50895,50895,59851,0,0), +(50900,50900,59852,0,0), + +-- Utgarde Keep +-- Palehoof +(48261,48261,59268,0,0), +(48256,48256,59267,0,0), +(48136,48136,59272,0,0), +(48133,48133,59271,0,0), +(48130,48130,59264,0,0), +(48105,48105,59263,0,0), +(48140,48140,59273,0,0), +(48137,48137,59265,0,0), +-- Skadi +(50234,50234,59330,0,0), +(50255,50255,59331,0,0), +(47579,47579,60020,0,0), +-- Svala +(15667,15667,59409,0,0), +-- Ymiron +(48294,48294,59301,0,0), +(48291,48291,59300,0,0), +(48529,48529,59305,0,0), +(48423,48423,59304,0,0), +(48380,48380,59320,0,0), +-- Ingvar +(42708,42708,59708,0,0), +(42669,42669,59706,0,0), +(42705,42705,59707,0,0), +(42729,42729,59734,0,0), +(42730,42730,59735,0,0), +-- Keleseth +(43667,43667,59389,0,0), +-- Skarvald +(43649,43649,59575,0,0), + +-- Culling of Stratholm +(52445,52445,58822,0,0), +-- Epoch Hunter +(52737,52737,58829,0,0), +(52771,52771,58830,0,0), +-- Malganis +(52720,52720,58852,0,0), +(52722,52722,58850,0,0), +(52721,52721,58849,0,0), +-- Meathook +(52696,52696,58823,0,0), +(52666,52666,58824,0,0), +-- Salramm +(57725,57725,58827,0,0), +(52480,52480,58825,0,0), + +-- Ahnkahet +-- Jedoga +(56855,56855,60030,0,0), +(56891,56891,60032,0,0), +(56926,56926,60029,0,0), +-- Taldaram +(55959,55959,59513,0,0), + +-- Trial of the Champio +-- Argent Challenge +(36176,36176,67289,0,0), +(34941,34941,34942,0,0), +-- Grand Champions +(68783,68783,68784,0,0), + +-- Eye of Eternity +(57058,57058,60073,0,0), +-- Malygos +(56272,56272,60072,0,0), +(61693,61693,61694,0,0), +(57407,57407,60936,0,0), + +-- Violet Hold +(58459,58459,59256,0,0), +(58462,58462,59257,0,0), +(58463,58463,59258,0,0), +(58456,58456,59248,0,0), +(58455,58455,59245,0,0), +(58458,58458,59253,0,0), +(58457,58457,59251,0,0), +(60181,60181,60204,0,0), +(60182,60182,60205,0,0), + +-- Halls Of Reflection +-- Falric +(72395,72395,72390,0,0), +(72396,72396,72391,0,0), +(72397,72397,72393,0,0), + +-- Slave Pens +-- Rokmar +(31956,31956,38801,0,0); + +DELETE FROM `spell_script_names` WHERE `spell_id` IN (67774,67879,67886); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(67774, "spell_black_knight_ghoul_claw"), +(67879, "spell_black_knight_ghoul_claw"), +(67886, "spell_black_knight_ghoul_explode"); diff --git a/data/sql/updates/db_world/2025_10_31_00.sql b/data/sql/updates/db_world/2025_10_31_00.sql new file mode 100644 index 000000000..059af8383 --- /dev/null +++ b/data/sql/updates/db_world/2025_10_31_00.sql @@ -0,0 +1,8 @@ +-- DB update 2025_10_30_01 -> 2025_10_31_00 +-- +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 27966; +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 27966) AND (`source_type` = 0) AND (`id` IN (0, 1, 2)); +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 +(27966, 0, 0, 0, 0, 0, 100, 7, 6000, 14000, 20000, 23000, 0, 0, 11, 51507, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Rune Controller - In Combat - Cast \'Summon Shardling\' (No Repeat) (Dungeon)'), +(27966, 0, 1, 0, 0, 0, 100, 6, 5000, 10000, 17000, 25000, 0, 0, 11, 51503, 128, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Rune Controller - In Combat - Cast \'Domination\' (Dungeon)'), +(27966, 0, 2, 0, 16, 0, 100, 6, 51805, 15, 14000, 17000, 0, 0, 11, 51805, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Rune Controller - On Friendly Unit Missing Buff \'Crystalline Growth\' - Cast \'Crystalline Growth\' (Dungeon)'); diff --git a/data/sql/updates/db_world/2025_10_31_01.sql b/data/sql/updates/db_world/2025_10_31_01.sql new file mode 100644 index 000000000..653911439 --- /dev/null +++ b/data/sql/updates/db_world/2025_10_31_01.sql @@ -0,0 +1,4 @@ +-- DB update 2025_10_31_00 -> 2025_10_31_01 + +-- Set Rooted +UPDATE `creature_template_movement` SET `Rooted` = 1 WHERE (`CreatureId` = 16129); diff --git a/data/sql/updates/db_world/2025_10_31_02.sql b/data/sql/updates/db_world/2025_10_31_02.sql new file mode 100644 index 000000000..bf10c217c --- /dev/null +++ b/data/sql/updates/db_world/2025_10_31_02.sql @@ -0,0 +1,208 @@ +-- DB update 2025_10_31_01 -> 2025_10_31_02 +-- | present in spelldifficulty.dbc | new -> +DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (66809,70867,70877,70879,70994,71623,68186,69037,72224,70873,28783,28785,28732,28884,57374,28863,28883,57376,28882,28371,28374,29317,28157,28158,29998,28478,28479,29865,29204,29484,28741,54121,54123,29213,29212,41926,55543,28531,55697,28542,54529,28135,28167,64717,64776,61916,61890,61903,61911,64637,62274,62269,62054,61879,61869,61915,61887,64389,64422,64666,64375,64478,64496,64458,62584,62528,62623,64587,62437,62862,62861,62451,62240,62217,62310,62275,62283,62285,62325,62337,62664,62653,62654,62648,62649,62589,62598,62478,65123,63711,62680,62546,62717,62548,65722,62836,63356,63573,62030,63716,63347,63629,63821,63766,62166,62056,63818,63666,62997,66351,63387,64019,63689,64352,64348,64626,64016,63317,46763,63809,64758,62131,62577,62334,62335,62333,62315,62316,62331,62332,62327,62328,62321,62613,62411,63024,63018,65737,64203,64227,63795,64125,64159,58695,58960,58663,58666,64213,64216); +INSERT INTO `spelldifficulty_dbc` (`ID`,`DifficultySpellID_1`,`DifficultySpellID_2`,`DifficultySpellID_3`,`DifficultySpellID_4`) VALUES +-- Trial of the Crusader +-- Anubarak +(68186,68186,68515,68186,68515), + +-- ICC +-- Lich King +(69037,69037,74361,69037,74361), +-- Valithria +(72224,72224,72224,72480,72480), +(70873,70873,70873,71941,71941), + +-- Naxxramas +-- Anubrekhan +(28783,28783,56090,0,0), +(28785,28785,54021,0,0), +-- Faerlina +(28732,28732,54097,0,0), +-- Horsemen +(28884,28884,57467,0,0), +(57374,57374,57464,0,0), +(28863,28863,57463,0,0), +(28883,28883,57466,0,0), +(57376,57376,57465,0,0), +(28882,28882,57369,0,0), +-- Gluth +(28371,28371,54427,0,0), +(28374,28374,54426,0,0), +-- Gothik +(29317,29317,56405,0,0), +-- Grobbulus +(28157,28157,54364,0,0), +(28158,28158,54362,0,0), +-- Heigan +(29998,29998,55011,0,0), +-- Kelthuzad +(28478,28478,55802,0,0), +(28479,28479,55807,0,0), +-- Loatheb +(29865,29865,55053,0,0), +(29204,29204,55052,0,0), +-- Maexxna +(29484,29484,54125,0,0), +(28741,28741,54122,0,0), +(54121,54121,28776,0,0), +(54123,54123,54124,0,0), +-- Noth +(29213,29213,54835,0,0), +(29212,29212,54814,0,0), +-- Patchwerk +(41926,41926,59192,0,0), +-- Razuvious +(55543,55543,29107,0,0), +-- Sapphiron +(28531,28531,55799,0,0), +(55697,55697,55696,0,0), +(28542,28542,55665,0,0), +-- Thaddius +(54529,54529,28134,0,0), +(28135,28135,54528,0,0), +(28167,28167,54531,0,0), + +-- Ulduar +(64717,64717,65241,0,0), +(64776,64776,65240,0,0), +-- Assembly of Iron +(61916,61916,63482,0,0), +(61890,61890,63498,0,0), +(61903,61903,63493,0,0), +(61911,61911,63495,0,0), +(64637,64637,61888,0,0), +(62274,62274,63489,0,0), +(62269,62269,63490,0,0), +(62054,62054,63491,0,0), +(61879,61879,63479,0,0), +(61869,61869,63481,0,0), +(61915,61915,63483,0,0), +(61887,61887,63486,0,0), +-- Auriaya +(64389,64389,64678,0,0), +(64422,64422,64688,0,0), +(64666,64666,64374,0,0), +(64375,64375,64667,0,0), +(64478,64478,64669,0,0), +(64496,64496,64674,0,0), +(64458,64458,64676,0,0), +-- Freya +(62584,62584,64185,0,0), +(62528,62528,62892,0,0), +(62623,62623,62872,0,0), +(64587,64587,64650,0,0), +(62437,62437,62859,0,0), +(62862,62862,62439,0,0), +(62861,62861,62438,0,0), +(62451,62451,62865,0,0), +(62240,62240,64087,0,0), +(62217,62217,62922,0,0), +(62310,62310,62928,0,0), +(62275,62275,62929,0,0), +(62283,62283,62930,0,0), +(62285,62285,62931,0,0), +(62325,62325,62932,0,0), +(62337,62337,62933,0,0), +(62664,62664,64191,0,0), +(62653,62653,62935,0,0), +(62654,62654,62936,0,0), +(62648,62648,62939,0,0), +(62649,62649,62938,0,0), +(62589,62589,63571,0,0), +(62598,62598,62937,0,0), +-- Hodir +(62478,62478,63512,0,0), +(65123,65123,65133,0,0), +(63711,63711,65134,0,0), +-- Ignis +(62680,62680,63472,0,0), +(62546,62546,63474,0,0), +(62717,62717,63477,0,0), +(62548,62548,63476,0,0), +(65722,65722,65723,0,0), +(62836,62836,63536,0,0), +-- Kologarn +(63356,63356,64003,0,0), +(63573,63573,64006,0,0), +(62030,62030,63980,0,0), +(63716,63716,64005,0,0), +(63347,63347,63977,0,0), +(63629,63629,63979,0,0), +(63821,63821,64001,0,0), +(63766,63766,63983,0,0), +(62166,62166,63981,0,0), +(62056,62056,63985,0,0), +(63818,63818,63978,0,0), +-- Mimiron +(63666,63666,65026,0,0), +(62997,62997,64529,0,0), +(66351,66351,63009,0,0), +(63387,63387,64531,0,0), +(64019,64019,64532,0,0), +(63689,63689,64535,0,0), +(64352,64352,64537,0,0), +(64348,64348,64536,0,0), +(64626,64626,65333,0,0), +-- Razorscale +(64016,64016,64023,0,0), +(63317,63317,64021,0,0), +(46763,46763,64062,0,0), +(63809,63809,64696,0,0), +(64758,64758,64759,0,0), +-- Thorim +(62131,62131,64390,0,0), +(62577,62577,62603,0,0), +(62334,62334,62442,0,0), +(62335,62335,62443,0,0), +(62333,62333,62441,0,0), +(62315,62315,62415,0,0), +(62316,62316,62417,0,0), +(62331,62331,62418,0,0), +(62332,62332,62420,0,0), +(62327,62327,62445,0,0), +(62328,62328,62446,0,0), +(62321,62321,62529,0,0), +(62613,62613,62614,0,0), +(62411,62411,62413,0,0), +-- XT +(63024,63024,64234,0,0), +(63018,63018,65121,0,0), +(65737,65737,64193,0,0), +(64203,64203,64235,0,0), +(64227,64227,64236,0,0), +-- Yoggsaron +(63795,63795,65301,0,0), +(64125,64125,64126,0,0), +(64159,64159,64160,0,0), + +-- Vault of Archavon +-- Archavon +(58695,58695,60883,0,0), +(58960,58960,60894,0,0), +(58663,58663,60880,0,0), +(58666,58666,60882,0,0), +-- Emalon +(64213,64213,64215,0,0), +(64216,64216,65279,0,0); + +DELETE FROM `spell_script_names` WHERE `spell_id` IN (63716,64005,69159,70136,69161,70139,69163,70469,70135,70138,70468,70137,70140,70470,28157,54364,66351,63009); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(63716,"spell_kologarn_stone_shout_aura"), +(64005,"spell_kologarn_stone_shout_aura"), +(69159,"spell_festergut_gaseous_blight"), +(70136,"spell_festergut_gaseous_blight"), +(69161,"spell_festergut_gaseous_blight"), +(70139,"spell_festergut_gaseous_blight"), +(69163,"spell_festergut_gaseous_blight"), +(70469,"spell_festergut_gaseous_blight"), +(70135,"spell_festergut_gaseous_blight"), +(70138,"spell_festergut_gaseous_blight"), +(70468,"spell_festergut_gaseous_blight"), +(70137,"spell_festergut_gaseous_blight"), +(70140,"spell_festergut_gaseous_blight"), +(70470,"spell_festergut_gaseous_blight"), +(28157,"spell_grobbulus_slime_spray"), +(54364,"spell_grobbulus_slime_spray"), +(66351,"spell_ulduar_mimiron_mine_explosion"), +(63009,"spell_ulduar_mimiron_mine_explosion"); diff --git a/data/sql/updates/db_world/2025_11_01_00.sql b/data/sql/updates/db_world/2025_11_01_00.sql new file mode 100644 index 000000000..127e69a40 --- /dev/null +++ b/data/sql/updates/db_world/2025_11_01_00.sql @@ -0,0 +1,3 @@ +-- DB update 2025_10_31_02 -> 2025_11_01_00 +-- +UPDATE `creature` SET `position_x` = 1262.0, `position_y` = -26.9, `position_z` = 33.5 WHERE `guid` = 126981; diff --git a/data/sql/updates/db_world/2025_11_01_01.sql b/data/sql/updates/db_world/2025_11_01_01.sql new file mode 100644 index 000000000..338710358 --- /dev/null +++ b/data/sql/updates/db_world/2025_11_01_01.sql @@ -0,0 +1,3 @@ +-- DB update 2025_11_01_00 -> 2025_11_01_01 +-- GO_TRIBUNAL_ACCESS_DOOR +UPDATE `gameobject` SET `state` = 0 WHERE `id` = 191295 AND `map` = 599; diff --git a/data/sql/updates/db_world/2025_11_01_02.sql b/data/sql/updates/db_world/2025_11_01_02.sql new file mode 100644 index 000000000..957fd7519 --- /dev/null +++ b/data/sql/updates/db_world/2025_11_01_02.sql @@ -0,0 +1,15 @@ +-- DB update 2025_11_01_01 -> 2025_11_01_02 + +-- Spelldifficulty +DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (50378); +INSERT INTO `spelldifficulty_dbc` (`ID`,`DifficultySpellID_1`,`DifficultySpellID_2`,`DifficultySpellID_3`,`DifficultySpellID_4`) VALUES +(50378, 50378, 59017, 0, 0); + +-- Scourge Reanimator (unholy frenzy on self / update client) +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 26626; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 26626); +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 +(26626, 0, 0, 0, 0, 0, 100, 0, 2000, 5000, 6000, 8000, 0, 0, 11, 50378, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Scourge Reanimator - In Combat - Cast \'Frostbolt\''), +(26626, 0, 1, 0, 0, 0, 100, 0, 7000, 10000, 15000, 15000, 0, 0, 11, 50379, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Scourge Reanimator - In Combat - Cast \'Cripple\''), +(26626, 0, 2, 0, 0, 0, 100, 0, 2000, 10000, 18000, 24000, 0, 0, 11, 49805, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scourge Reanimator - In Combat - Cast \'Unholy Frenzy\''); diff --git a/data/sql/updates/db_world/2025_11_01_03.sql b/data/sql/updates/db_world/2025_11_01_03.sql new file mode 100644 index 000000000..3925544c9 --- /dev/null +++ b/data/sql/updates/db_world/2025_11_01_03.sql @@ -0,0 +1,7 @@ +-- DB update 2025_11_01_02 -> 2025_11_01_03 +-- Stomp +DELETE FROM `spelldifficulty_dbc` WHERE `ID` = 50868; +INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`, `DifficultySpellID_3`, `DifficultySpellID_4`) VALUES (50868, 50868, 59744, 0, 0); +-- Ground Spike : Heroic only +DELETE FROM `spelldifficulty_dbc` WHERE `ID` = 59750; +INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`, `DifficultySpellID_3`, `DifficultySpellID_4`) VALUES (59750, 59750, 59750, 0, 0); diff --git a/data/sql/updates/db_world/2025_11_03_00.sql b/data/sql/updates/db_world/2025_11_03_00.sql new file mode 100644 index 000000000..76ea5c36a --- /dev/null +++ b/data/sql/updates/db_world/2025_11_03_00.sql @@ -0,0 +1,54 @@ +-- DB update 2025_11_01_03 -> 2025_11_03_00 +-- +DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (53618, 53616, 53617, 53602); +INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`, `DifficultySpellID_3`, `DifficultySpellID_4`) VALUES +(53618, 53618, 59350, 0, 0), +(53616, 53616, 59360, 0, 0), +(53617, 53617, 59359, 0, 0), +(53602, 53602, 59349, 0, 0); + +DELETE FROM `creature_summon_groups` WHERE `summonerId` = 29120 AND `entry` = 22515; +INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`, `Comment`) VALUES +(29120, 0, 1, 22515, 549.622, 352.047, 240.8899, 3.45575, 8, 0, 'Anub''arak - Group 1 - World Trigger'), +(29120, 0, 2, 22515, 478.739, 252.85, 250.544, 0.0523599, 8, 0, 'Anub''arak - Group 2 - World Trigger'), +(29120, 0, 2, 22515, 621.319, 268.482, 250.544, 3.33358, 8, 0, 'Anub''arak - Group 2 - World Trigger'), +(29120, 0, 2, 22515, 622.904, 252.945, 250.544, 3.12414, 8, 0, 'Anub''arak - Group 2 - World Trigger'), +(29120, 0, 2, 22515, 478.149, 269.009, 250.544, 6.12611, 8, 0, 'Anub''arak - Group 2 - World Trigger'), +(29120, 0, 2, 22515, 478.547, 297.045, 250.544, 5.79449, 8, 0, 'Anub''arak - Group 2 - World Trigger'), +(29120, 0, 2, 22515, 478.291, 224.827, 250.235, 0.401426, 8, 0, 'Anub''arak - Group 2 - World Trigger'), +(29120, 0, 2, 22515, 620.622, 298.263, 250.544, 3.7001, 8, 0, 'Anub''arak - Group 2 - World Trigger'), +(29120, 0, 2, 22515, 620.704, 224.562, 250.232, 2.53073, 8, 0, 'Anub''arak - Group 2 - World Trigger'); + +-- Position where Anub'ar Guardian and Anub'ar Venomancer run to after spawning +SET @POS_X := 551.0095; +SET @POS_Y := 274.026; +SET @POS_Z := 223.89513; + +-- Update comments, spelldifficulty_dbc +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 29216); +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 +(29216, 0, 0, 0, 0, 0, 100, 0, 5000, 8000, 6000, 6000, 0, 0, 11, 53618, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Anub\'ar Guardian - In Combat - Cast \'Sunder Armor\''), +(29216, 0, 1, 0, 0, 0, 100, 0, 2000, 3000, 8000, 8000, 0, 0, 11, 52532, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Anub\'ar Guardian - In Combat - Cast \'Strike\''), +(29216, 0, 2, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 0, @POS_X, @POS_Y, @POS_Z, 0, 'Anub\'ar Guardian - On Just Summoned - Move To Position'); + +-- Update comments, spelldifficulty_dbc +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 29217); +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 +(29217, 0, 0, 0, 0, 0, 100, 0, 5000, 8000, 18000, 22000, 0, 0, 11, 53616, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Anub\'ar Venomancer - In Combat - Cast \'Poison Bolt Volley\''), +(29217, 0, 1, 0, 0, 0, 100, 0, 2000, 3000, 7000, 7000, 0, 0, 11, 53617, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Anub\'ar Venomancer - In Combat - Cast \'Poison Bolt\''), +(29217, 0, 2, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 0, @POS_X, @POS_Y, @POS_Z, 0, 'Anub\'ar Venomancer - On Just Summoned - Move To Position'); + +-- Update comments, bump jump range from 50 to 100 yards, spelldifficulty_dbc +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 29213); +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 +(29213, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 97, 20, 10, 1, 0, 0, 0, 21, 100, 0, 0, 0, 0, 0, 0, 0, 'Anub\'ar Darter - On Respawn - Jump To Pos'), +(29213, 0, 1, 0, 0, 0, 100, 0, 4000, 5000, 7000, 7000, 0, 0, 11, 53602, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Anub\'ar Darter - In Combat - Cast \'Dart\''); + +-- Update comments, remove visual, bump jump range from 50 to 100 yards, spelldifficulty_dbc +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 29214) AND (`source_type` = 0); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `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 +(29214, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 97, 20, 10, 1, 0, 0, 0, 21, 100, 0, 0, 0, 0, 0, 0, 0, 'Anub\'ar Assassin - On Respawn - Jump To Pos'), +(29214, 0, 1, 0, 67, 0, 100, 0, 5000, 5000, 5000, 5000, 0, 5, 11, 52540, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Anub\'ar Assassin - On Behind Target - Cast \'Backstab\''), +(29214, 0, 2, 0, 0, 0, 100, 1, 3000, 3000, 0, 0, 0, 0, 28, 53611, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Anub\'ar Assassin - In Combat - Remove Aura \'Anub`ar Assasssin Visual Passive\' (No Repeat)'); + +UPDATE `spell_script_names` SET `ScriptName`='spell_azjol_nerub_carrion_beetles' WHERE `spell_id`=53520 AND `ScriptName`='spell_azjol_nerub_carrion_beetels'; diff --git a/data/sql/updates/db_world/2025_11_03_01.sql b/data/sql/updates/db_world/2025_11_03_01.sql new file mode 100644 index 000000000..4b83f2b5f --- /dev/null +++ b/data/sql/updates/db_world/2025_11_03_01.sql @@ -0,0 +1,7 @@ +-- DB update 2025_11_03_00 -> 2025_11_03_01 + +DELETE FROM `areatrigger_scripts` WHERE `entry` = 5338; + +DELETE FROM `areatrigger_teleport` WHERE `ID` = 5338; +INSERT INTO `areatrigger_teleport` (`ID`, `Name`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`) VALUES +(5338, 'Naxxanar Top -> Down', 571, 3733.68, 3563.25, 290.812, 3.66519); diff --git a/data/sql/updates/db_world/2025_11_04_00.sql b/data/sql/updates/db_world/2025_11_04_00.sql new file mode 100644 index 000000000..1d10d9d6d --- /dev/null +++ b/data/sql/updates/db_world/2025_11_04_00.sql @@ -0,0 +1,106 @@ +-- DB update 2025_11_03_01 -> 2025_11_04_00 +-- fix appearances of newly added 'Winter Reveler's +-- assign correct model to creature 15792 `Troll Male Winter Reveler` used by spell 26252 `Winter Reveler - Troll Male` +UPDATE `creature_template_model` SET `CreatureDisplayID` = 18809, `VerifiedBuild` = 0 WHERE (`CreatureID` = 15792) AND (`Idx` = 0); + +-- assign costume auras +DELETE FROM `creature_addon` WHERE (`guid` BETWEEN 66801 AND 66898); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(66801, 0, 0, 0, 1, 0, 0, '26247'), -- Orc Female +(66802, 0, 0, 0, 1, 0, 0, '26248'), -- Orc Male +(66803, 0, 0, 0, 1, 0, 0, '26247'), -- Orc Female +(66804, 0, 0, 0, 1, 0, 0, '26248'), -- Orc Male +(66805, 0, 0, 0, 1, 0, 0, '26239'), -- Human Male +(66806, 0, 0, 0, 1, 0, 0, '26240'), -- Human Female +(66807, 0, 0, 0, 1, 0, 0, '26239'), -- Human Male +(66808, 0, 0, 0, 1, 0, 0, '26240'), -- Human Female +(66809, 0, 0, 0, 1, 0, 0, '26251'), -- Troll Female +(66810, 0, 0, 0, 1, 0, 0, '26252'), -- Troll Male +(66811, 0, 0, 0, 1, 0, 0, '26249'), -- Tauren Female +(66812, 0, 0, 0, 1, 0, 0, '26250'), -- Tauren Male +(66813, 0, 0, 0, 1, 0, 0, '26241'), -- Dwarf Male +(66814, 0, 0, 0, 1, 0, 0, '26242'), -- Dwarf Female +(66815, 0, 0, 0, 1, 0, 0, '26253'), -- Undead Female +(66816, 0, 0, 0, 1, 0, 0, '26254'), -- Undead Male +(66817, 0, 0, 0, 1, 0, 0, '26243'), -- Goblin Female +(66818, 0, 0, 0, 1, 0, 0, '26244'), -- Goblin Male +(66819, 0, 0, 0, 1, 0, 0, '26249'), -- Tauren Female +(66820, 0, 0, 0, 1, 0, 0, '26250'), -- Tauren Male +(66821, 0, 0, 0, 1, 0, 0, '26249'), -- Tauren Female +(66822, 0, 0, 0, 1, 0, 0, '26250'), -- Tauren Male +(66823, 0, 0, 0, 1, 0, 0, '26239'), -- Human Male +(66824, 0, 0, 0, 1, 0, 0, '26240'), -- Human Female +(66825, 0, 0, 0, 1, 0, 0, '26245'), -- Night Elf Female +(66826, 0, 0, 0, 1, 0, 0, '26246'), -- Night Elf Male +(66827, 0, 0, 0, 1, 0, 0, '26249'), -- Tauren Female +(66828, 0, 0, 0, 1, 0, 0, '26250'), -- Tauren Male +(66829, 0, 0, 0, 1, 0, 0, '26249'), -- Tauren Female +(66830, 0, 0, 0, 1, 0, 0, '26250'), -- Tauren Male +(66831, 0, 0, 0, 1, 0, 0, '39860'), -- Blood Elf Female +(66832, 0, 0, 0, 1, 0, 0, '39861'), -- Blood Elf Male +(66833, 0, 0, 0, 1, 0, 0, '26243'), -- Goblin Female +(66834, 0, 0, 0, 1, 0, 0, '26244'), -- Goblin Male +(66835, 0, 0, 0, 1, 0, 0, '26245'), -- Night Elf Female +(66836, 0, 0, 0, 1, 0, 0, '26246'), -- Night Elf Male +(66837, 0, 0, 0, 1, 0, 0, '26247'), -- Orc Female +(66838, 0, 0, 0, 1, 0, 0, '26248'), -- Orc Male +(66839, 0, 0, 0, 1, 0, 0, '26245'), -- Night Elf Female +(66840, 0, 0, 0, 1, 0, 0, '26246'), -- Night Elf Male +(66841, 0, 0, 0, 1, 0, 0, '26245'), -- Night Elf Female +(66842, 0, 0, 0, 1, 0, 0, '26246'), -- Night Elf Male +(66843, 0, 0, 0, 1, 0, 0, '26245'), -- Night Elf Female +(66844, 0, 0, 0, 1, 0, 0, '26246'), -- Night Elf Male +(66845, 0, 0, 0, 1, 0, 0, '26243'), -- Goblin Female +(66846, 0, 0, 0, 1, 0, 0, '26244'), -- Goblin Male +(66847, 0, 0, 0, 1, 0, 0, '26247'), -- Orc Female +(66848, 0, 0, 0, 1, 0, 0, '26248'), -- Orc Male +(66849, 0, 0, 0, 1, 0, 0, '39858'), -- Draenei Female +(66850, 0, 0, 0, 1, 0, 0, '39859'), -- Draenei Male +(66851, 0, 0, 0, 1, 0, 0, '39860'), -- Blood Elf Female +(66852, 0, 0, 0, 1, 0, 0, '39861'), -- Blood Elf Male +(66853, 0, 0, 0, 1, 0, 0, '26247'), -- Orc Female +(66854, 0, 0, 0, 1, 0, 0, '26248'), -- Orc Male +(66855, 0, 0, 0, 1, 0, 0, '39860'), -- Blood Elf Female +(66856, 0, 0, 0, 1, 0, 0, '39861'), -- Blood Elf Male +(66857, 0, 0, 0, 1, 0, 0, '26247'), -- Orc Female +(66858, 0, 0, 0, 1, 0, 0, '26248'), -- Orc Male +(66859, 0, 0, 0, 1, 0, 0, '39858'), -- Draenei Female +(66860, 0, 0, 0, 1, 0, 0, '39859'), -- Draenei Male +(66861, 0, 0, 0, 1, 0, 0, '39858'), -- Draenei Female +(66862, 0, 0, 0, 1, 0, 0, '39859'), -- Draenei Male +(66863, 0, 0, 0, 1, 0, 0, '26241'), -- Dwarf Male +(66864, 0, 0, 0, 1, 0, 0, '26242'), -- Dwarf Female +(66865, 0, 0, 0, 1, 0, 0, '39860'), -- Blood Elf Female +(66866, 0, 0, 0, 1, 0, 0, '39861'), -- Blood Elf Male +(66867, 0, 0, 0, 1, 0, 0, '39860'), -- Blood Elf Female +(66868, 0, 0, 0, 1, 0, 0, '39861'), -- Blood Elf Male +(66869, 0, 0, 0, 1, 0, 0, '26239'), -- Human Male +(66870, 0, 0, 0, 1, 0, 0, '26240'), -- Human Female +(66871, 0, 0, 0, 1, 0, 0, '39858'), -- Draenei Female +(66872, 0, 0, 0, 1, 0, 0, '39859'), -- Draenei Male +(66873, 0, 0, 0, 1, 0, 0, '26253'), -- Undead Female +(66874, 0, 0, 0, 1, 0, 0, '26254'), -- Undead Male +(66875, 0, 0, 0, 1, 0, 0, '39876'), -- Gnome Female +(66876, 0, 0, 0, 1, 0, 0, '39877'), -- Gnome Male +(66877, 0, 0, 0, 1, 0, 0, '26245'), -- Night Elf Female +(66878, 0, 0, 0, 1, 0, 0, '26246'), -- Night Elf Male +(66879, 0, 0, 0, 1, 0, 0, '26251'), -- Troll Female +(66880, 0, 0, 0, 1, 0, 0, '26252'), -- Troll Male +(66881, 0, 0, 0, 1, 0, 0, '39858'), -- Draenei Female +(66882, 0, 0, 0, 1, 0, 0, '39859'), -- Draenei Male +(66883, 0, 0, 0, 1, 0, 0, '26247'), -- Orc Female +(66884, 0, 0, 0, 1, 0, 0, '26248'), -- Orc Male +(66885, 0, 0, 0, 1, 0, 0, '39858'), -- Draenei Female +(66886, 0, 0, 0, 1, 0, 0, '39859'), -- Draenei Male +(66887, 0, 0, 0, 1, 0, 0, '39860'), -- Blood Elf Female +(66888, 0, 0, 0, 1, 0, 0, '39861'), -- Blood Elf Male +(66889, 0, 0, 0, 1, 0, 0, '26243'), -- Goblin Female +(66890, 0, 0, 0, 1, 0, 0, '26244'), -- Goblin Male +(66891, 0, 0, 0, 1, 0, 0, '39860'), -- Blood Elf Female +(66892, 0, 0, 0, 1, 0, 0, '39861'), -- Blood Elf Male +(66893, 0, 0, 0, 1, 0, 0, '39860'), -- Blood Elf Female +(66894, 0, 0, 0, 1, 0, 0, '39861'), -- Blood Elf Male +(66895, 0, 0, 0, 1, 0, 0, '26239'), -- Human Male +(66896, 0, 0, 0, 1, 0, 0, '26240'), -- Human Female +(66897, 0, 0, 0, 1, 0, 0, '39860'), -- Blood Elf Female +(66898, 0, 0, 0, 1, 0, 0, '39861'); -- Blood Elf Male diff --git a/data/sql/updates/db_world/2025_11_04_01.sql b/data/sql/updates/db_world/2025_11_04_01.sql new file mode 100644 index 000000000..8780751f3 --- /dev/null +++ b/data/sql/updates/db_world/2025_11_04_01.sql @@ -0,0 +1,3 @@ +-- DB update 2025_11_04_00 -> 2025_11_04_01 +-- fix z position of some 195164 'Pumpkin' spawns +UPDATE `gameobject` SET `position_z` = (`position_z` + 0.7), `VerifiedBuild` = 0 WHERE (`id` = 195164) AND (`guid` IN (18978, 18979, 18980, 18981, 18982, 18983, 18984, 18985, 18986, 18987, 19018, 19019, 19020, 19021, 19022, 19023, 19024, 19025, 19026, 19027, 19115, 19116, 19117, 19118, 19119, 19120, 19121, 19122, 19123, 19124, 19151, 19152, 19153, 19154, 19155, 19156, 19157, 19158, 19159, 19160, 19304, 19305, 19306, 19307, 19308, 19309, 19310, 19311, 19312, 19313)); diff --git a/src/server/game/AI/CoreAI/TotemAI.cpp b/src/server/game/AI/CoreAI/TotemAI.cpp index 79b904593..054758764 100644 --- a/src/server/game/AI/CoreAI/TotemAI.cpp +++ b/src/server/game/AI/CoreAI/TotemAI.cpp @@ -135,6 +135,6 @@ void TotemAI::AttackStart(Unit* /*victim*/) data << me->GetGUID(); data << me->GetPositionX(); data << me->GetPositionY(); - me->GetOwner()->ToPlayer()->GetSession()->SendPacket(&data); + me->GetOwner()->ToPlayer()->SendDirectMessage(&data); } } diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index f338e7789..dce728c14 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -182,7 +182,7 @@ void CreatureAI::MoveInLineOfSight(Unit* who) if (me->IsMoveInLineOfSightDisabled()) if (me->GetCreatureType() == CREATURE_TYPE_NON_COMBAT_PET || // nothing more to do, return !who->IsInCombat() || // if not in combat, nothing more to do - !me->IsWithinDist(who, ATTACK_DISTANCE, true, false)) // if in combat and in dist - neutral to all can actually assist other creatures + !me->IsWithinDist(who, ATTACK_DISTANCE, true, false, false)) // if in combat and in dist - neutral to all can actually assist other creatures return; if (me->HasReactState(REACT_AGGRESSIVE) && me->CanStartAttack(who)) diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 7a009d0ae..ca354f093 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -566,7 +566,7 @@ Player* ScriptedAI::SelectTargetFromPlayerList(float maxdist, uint32 excludeAura std::vector tList; for(Map::PlayerList::const_iterator itr = pList.begin(); itr != pList.end(); ++itr) { - if (!me->IsWithinDistInMap(itr->GetSource(), maxdist, true, false) || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster()) + if (!me->IsWithinDistInMap(itr->GetSource(), maxdist, true, false, false) || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster()) continue; if (excludeAura && itr->GetSource()->HasAura(excludeAura)) continue; diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp index 7fe07cf1e..85fbf8a90 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp @@ -218,10 +218,10 @@ bool npc_escortAI::IsPlayerOrGroupInRange() { for (GroupReference* groupRef = group->GetFirstMember(); groupRef != nullptr; groupRef = groupRef->next()) if (Player* member = groupRef->GetSource()) - if (me->IsWithinDistInMap(member, GetMaxPlayerDistance(), true, false)) + if (me->IsWithinDistInMap(member, GetMaxPlayerDistance(), true, false, false)) return true; } - else if (me->IsWithinDistInMap(player, GetMaxPlayerDistance(), true, false)) + else if (me->IsWithinDistInMap(player, GetMaxPlayerDistance(), true, false, false)) return true; } diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp index 019bb58b5..c43f81ff4 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp @@ -202,7 +202,7 @@ void FollowerAI::UpdateAI(uint32 uiDiff) { Player* member = groupRef->GetSource(); - if (member && me->IsWithinDistInMap(member, MAX_PLAYER_DISTANCE, true, false)) + if (member && me->IsWithinDistInMap(member, MAX_PLAYER_DISTANCE, true, false, false)) { bIsMaxRangeExceeded = false; break; @@ -211,7 +211,7 @@ void FollowerAI::UpdateAI(uint32 uiDiff) } else { - if (me->IsWithinDistInMap(player, MAX_PLAYER_DISTANCE, true, false)) + if (me->IsWithinDistInMap(player, MAX_PLAYER_DISTANCE, true, false, false)) bIsMaxRangeExceeded = false; } } diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index f96775eb4..9c26fd6e9 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -2378,7 +2378,7 @@ void AchievementMgr::SendAllAchievementData() const { WorldPacket data(SMSG_ALL_ACHIEVEMENT_DATA, _completedAchievements.size() * 8 + 4 + _criteriaProgress.size() * 38 + 4); BuildAllDataPacket(&data); - GetPlayer()->GetSession()->SendPacket(&data); + GetPlayer()->SendDirectMessage(&data); } void AchievementMgr::SendRespondInspectAchievements(Player* player) const @@ -2386,7 +2386,7 @@ void AchievementMgr::SendRespondInspectAchievements(Player* player) const WorldPacket data(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, 9 + _completedAchievements.size() * 8 + 4 + _criteriaProgress.size() * 38 + 4); data << GetPlayer()->GetPackGUID(); BuildAllDataPacket(&data); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } /** diff --git a/src/server/game/ArenaSpectator/ArenaSpectator.cpp b/src/server/game/ArenaSpectator/ArenaSpectator.cpp index e1f0c7602..7c0f4a7b0 100644 --- a/src/server/game/ArenaSpectator/ArenaSpectator.cpp +++ b/src/server/game/ArenaSpectator/ArenaSpectator.cpp @@ -306,7 +306,7 @@ AC_GAME_API void ArenaSpectator::SendPacketTo(Player const* player, std::string& { WorldPacket data; CreatePacket(data, message); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } template<> diff --git a/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp b/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp index 0d50d7eaf..9b8a9a1dc 100644 --- a/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp @@ -354,7 +354,7 @@ void AuctionHouseSearcher::Update() { Player* player = ObjectAccessor::FindConnectedPlayer(response->playerGuid); if (player) - player->GetSession()->SendPacket(&response->packet); + player->SendDirectMessage(&response->packet); delete response; } diff --git a/src/server/game/Autobroadcast/AutobroadcastMgr.cpp b/src/server/game/Autobroadcast/AutobroadcastMgr.cpp index f41e27bb0..9d323c165 100644 --- a/src/server/game/Autobroadcast/AutobroadcastMgr.cpp +++ b/src/server/game/Autobroadcast/AutobroadcastMgr.cpp @@ -203,6 +203,6 @@ void AutobroadcastMgr::SendNotificationAnnouncement(uint8 textId) data << localizedMessage; // Send packet to the player - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); }); } diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index 2adb61047..360fe9f69 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -458,7 +458,7 @@ void Battlefield::BroadcastPacketToZone(WorldPacket const* data) const for (uint8 team = 0; team < PVP_TEAMS_COUNT; ++team) for (GuidUnorderedSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) - player->GetSession()->SendPacket(data); + player->SendDirectMessage(data); } void Battlefield::BroadcastPacketToQueue(WorldPacket const* data) const @@ -466,7 +466,7 @@ void Battlefield::BroadcastPacketToQueue(WorldPacket const* data) const for (uint8 team = 0; team < PVP_TEAMS_COUNT; ++team) for (GuidUnorderedSet::const_iterator itr = m_PlayersInQueue[team].begin(); itr != m_PlayersInQueue[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) - player->GetSession()->SendPacket(data); + player->SendDirectMessage(data); } void Battlefield::BroadcastPacketToWar(WorldPacket const* data) const @@ -474,7 +474,7 @@ void Battlefield::BroadcastPacketToWar(WorldPacket const* data) const for (uint8 team = 0; team < PVP_TEAMS_COUNT; ++team) for (GuidUnorderedSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) - player->GetSession()->SendPacket(data); + player->SendDirectMessage(data); } void Battlefield::SendWarning(uint8 id, WorldObject const* target /*= nullptr*/) @@ -663,7 +663,7 @@ void Battlefield::SendAreaSpiritHealerQueryOpcode(Player* player, const ObjectGu data << guid << time; ASSERT(player); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } // ---------------------- diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp index c1991631d..7e7efc755 100644 --- a/src/server/game/Battlegrounds/ArenaTeam.cpp +++ b/src/server/game/Battlegrounds/ArenaTeam.cpp @@ -349,7 +349,7 @@ void ArenaTeam::DelMember(ObjectGuid guid, bool cleanDb) playerMember->RemoveBattlegroundQueueId(bgQueue); sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, nullptr, playerMember->GetBattlegroundQueueIndex(bgQueue), STATUS_NONE, 0, 0, 0, TEAM_NEUTRAL); queue.RemovePlayer(playerMember->GetGUID(), true); - playerMember->GetSession()->SendPacket(&data); + playerMember->SendDirectMessage(&data); } } } @@ -567,7 +567,7 @@ void ArenaTeam::BroadcastPacket(WorldPacket* packet) { for (MemberList::const_iterator itr = Members.begin(); itr != Members.end(); ++itr) if (Player* player = ObjectAccessor::FindConnectedPlayer(itr->Guid)) - player->GetSession()->SendPacket(packet); + player->SendDirectMessage(packet); } void ArenaTeam::BroadcastEvent(ArenaTeamEvents event, ObjectGuid guid, uint8 strCount, std::string const& str1, std::string const& str2, std::string const& str3) diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 7b4b13613..b004f1168 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -608,7 +608,7 @@ inline void Battleground::_ProcessJoin(uint32 diff) { WorldPacket status; sBattlegroundMgr->BuildBattlegroundStatusPacket(&status, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_IN_PROGRESS, 0, GetStartTime(), GetArenaType(), player->GetBgTeamId()); - player->GetSession()->SendPacket(&status); + player->SendDirectMessage(&status); player->RemoveAurasDueToSpell(SPELL_ARENA_PREPARATION); player->ResetAllPowers(); @@ -652,7 +652,7 @@ inline void Battleground::_ProcessJoin(uint32 diff) data << t->GetGUID(); data << uint32(t->GetZoneId()); data << uint32(15 * IN_MILLISECONDS); - p->GetSession()->SendPacket(&data); + p->SendDirectMessage(&data); } m_ToBeTeleported.clear(); } @@ -713,14 +713,14 @@ Position const* Battleground::GetTeamStartPosition(TeamId teamId) const void Battleground::SendPacketToAll(WorldPacket const* packet) { for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) - itr->second->GetSession()->SendPacket(packet); + itr->second->SendDirectMessage(packet); } void Battleground::SendPacketToTeam(TeamId teamId, WorldPacket const* packet, Player* sender, bool self) { for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) if (itr->second->GetBgTeamId() == teamId && (self || sender != itr->second)) - itr->second->GetSession()->SendPacket(packet); + itr->second->SendDirectMessage(packet); } void Battleground::SendChatMessage(Creature* source, uint8 textId, WorldObject* target /*= nullptr*/) @@ -937,7 +937,7 @@ void Battleground::EndBattleground(PvPTeamId winnerTeamId) BlockMovement(player); - player->GetSession()->SendPacket(&pvpLogData); + player->SendDirectMessage(&pvpLogData); if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE)) { @@ -964,7 +964,7 @@ void Battleground::EndBattleground(PvPTeamId winnerTeamId) WorldPacket data; sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_IN_PROGRESS, TIME_TO_AUTOREMOVE, GetStartTime(), GetArenaType(), player->GetBgTeamId()); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND, player->GetMapId()); } @@ -1062,7 +1062,7 @@ void Battleground::RemovePlayerAtLeave(Player* player) WorldPacket data; sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_NONE, 0, 0, 0, TEAM_NEUTRAL); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(GetBgTypeID(), GetArenaType()); @@ -1341,7 +1341,7 @@ bool Battleground::HasFreeSlots() const void Battleground::SpectatorsSendPacket(WorldPacket& data) { for (SpectatorList::const_iterator itr = m_Spectators.begin(); itr != m_Spectators.end(); ++itr) - (*itr)->GetSession()->SendPacket(&data); + (*itr)->SendDirectMessage(&data); } void Battleground::ReadyMarkerClicked(Player* p) @@ -1813,10 +1813,10 @@ void Battleground::PlayerAddedToBGCheckIfBGIsRunning(Player* player) BlockMovement(player); BuildPvPLogDataPacket(data); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_IN_PROGRESS, GetEndTime(), GetStartTime(), GetArenaType(), player->GetBgTeamId()); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } uint32 Battleground::GetAlivePlayersCountByTeam(TeamId teamId) const diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index f447a47d4..c40ec2c9e 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -670,7 +670,7 @@ void BattlegroundMgr::SendAreaSpiritHealerQueryOpcode(Player* player, Battlegrou if (time_ == uint32(-1)) time_ = 0; data << guid << time_; - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } bool BattlegroundMgr::IsArenaType(BattlegroundTypeId bgTypeId) diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp index f34d833c4..a70a21b59 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp +++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp @@ -1274,7 +1274,7 @@ void BattlegroundQueue::InviteGroupToBG(GroupQueueInfo* ginfo, Battleground* bg, // send status packet WorldPacket data; sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME, 0, ginfo->ArenaType, TEAM_NEUTRAL, bg->isRated()); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); // pussywizard: if (bg->isArena() && bg->isRated()) @@ -1312,7 +1312,7 @@ bool BGQueueInviteEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) // send remaining time in queue WorldPacket data; sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME - INVITATION_REMIND_TIME, 0, m_ArenaType, TEAM_NEUTRAL, bg->isRated(), m_BgTypeId); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } } diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp index d02e6c03b..f3dcaf397 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp @@ -307,7 +307,7 @@ void BattlegroundSA::StartShips() WorldPacket pkt; GetBGObject(i)->BuildValuesUpdateBlockForPlayer(&data, itr->second); data.BuildPacket(pkt); - itr->second->GetSession()->SendPacket(&pkt); + itr->second->SendDirectMessage(&pkt); } } ShipsStarted = true; @@ -1141,7 +1141,7 @@ void BattlegroundSA::SendTransportInit(Player* player) GetBGObject(BG_SA_BOAT_TWO)->BuildCreateUpdateBlockForPlayer(&transData, player); WorldPacket packet; transData.BuildPacket(packet); - player->GetSession()->SendPacket(&packet); + player->SendDirectMessage(&packet); } } @@ -1156,7 +1156,7 @@ void BattlegroundSA::SendTransportsRemove(Player* player) GetBGObject(BG_SA_BOAT_TWO)->BuildOutOfRangeUpdateBlock(&transData); WorldPacket packet; transData.BuildPacket(packet); - player->GetSession()->SendPacket(&packet); + player->SendDirectMessage(&packet); } } diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp index b07223030..e17b43589 100644 --- a/src/server/game/Chat/Channels/Channel.cpp +++ b/src/server/game/Chat/Channels/Channel.cpp @@ -908,26 +908,26 @@ void Channel::SendToAll(WorldPacket* data, ObjectGuid guid) { for (PlayerContainer::const_iterator i = playersStore.begin(); i != playersStore.end(); ++i) if (!guid || !i->second.plrPtr->GetSocial()->HasIgnore(guid)) - i->second.plrPtr->GetSession()->SendPacket(data); + i->second.plrPtr->SendDirectMessage(data); } void Channel::SendToAllButOne(WorldPacket* data, ObjectGuid who) { for (PlayerContainer::const_iterator i = playersStore.begin(); i != playersStore.end(); ++i) if (i->first != who) - i->second.plrPtr->GetSession()->SendPacket(data); + i->second.plrPtr->SendDirectMessage(data); } void Channel::SendToOne(WorldPacket* data, ObjectGuid who) { if (Player* player = ObjectAccessor::FindConnectedPlayer(who)) - player->GetSession()->SendPacket(data); + player->SendDirectMessage(data); } void Channel::SendToAllWatching(WorldPacket* data) { for (PlayersWatchingContainer::const_iterator i = playersWatchingStore.begin(); i != playersWatchingStore.end(); ++i) - (*i)->GetSession()->SendPacket(data); + (*i)->SendDirectMessage(data); } bool Channel::ShouldAnnouncePlayer(Player const* player) const diff --git a/src/server/game/Chat/Channels/ChannelMgr.cpp b/src/server/game/Chat/Channels/ChannelMgr.cpp index 99f613b89..7b38d43c5 100644 --- a/src/server/game/Chat/Channels/ChannelMgr.cpp +++ b/src/server/game/Chat/Channels/ChannelMgr.cpp @@ -150,7 +150,7 @@ Channel* ChannelMgr::GetChannel(std::string const& name, Player* player, bool pk { WorldPacket data; MakeNotOnPacket(&data, name); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } return nullptr; diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 0d4e6a27b..2d116909a 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -961,7 +961,7 @@ namespace lfg RBCacheMap::iterator itr = RBCacheStore[player->GetTeamId()].find(dungeonId); if (itr != RBCacheStore[player->GetTeamId()].end()) { - player->GetSession()->SendPacket(&(itr->second)); + player->SendDirectMessage(&(itr->second)); return; } // send empty packet if cache not found @@ -973,7 +973,7 @@ namespace lfg data << (uint32)0; data << (uint32)0; data << (uint32)0; - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } void LFGMgr::UpdateRaidBrowser(uint32 diff) @@ -1220,7 +1220,7 @@ namespace lfg for (RBSearchersMap::const_iterator sitr = RBSearchersStore[team].begin(); sitr != RBSearchersStore[team].end(); ++sitr) if (sitr->second == dungeonId) if (Player* p = ObjectAccessor::FindConnectedPlayer(sitr->first)) - p->GetSession()->SendPacket(&differencePacket); + p->SendDirectMessage(&differencePacket); break; // one dungeon updated in one LFGMgr::UpdateRaidBrowser } diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 0c6695fb4..8c1324e62 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -771,7 +771,7 @@ void Creature::Update(uint32 diff) } Unit* owner = GetCharmerOrOwner(); - if (IsCharmed() && !IsWithinDistInMap(owner, GetMap()->GetVisibilityRange(), true, false)) + if (IsCharmed() && !IsWithinDistInMap(owner, GetMap()->GetVisibilityRange(), true, false, false)) { RemoveCharmAuras(); } @@ -1945,7 +1945,7 @@ bool Creature::CanStartAttack(Unit const* who) const if (!_IsTargetAcceptable(who)) return false; - if (IsNeutralToAll() || !IsWithinDistInMap(who, GetAggroRange(who) + m_CombatDistance, true, false)) // pussywizard: +m_combatDistance for turrets and similar + if (IsNeutralToAll() || !IsWithinDistInMap(who, GetAggroRange(who) + m_CombatDistance, true, false, false)) // pussywizard: +m_combatDistance for turrets and similar return false; if (!CanCreatureAttack(who)) diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 4df7d36f4..50a6c0e61 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -517,7 +517,7 @@ void GameObject::Update(uint32 diff) WorldPacket packet; BuildValuesUpdateBlockForPlayer(&udata, caster->ToPlayer()); udata.BuildPacket(packet); - caster->ToPlayer()->GetSession()->SendPacket(&packet); + caster->ToPlayer()->SendDirectMessage(&packet); SendCustomAnim(GetGoAnimProgress()); } @@ -637,7 +637,7 @@ void GameObject::Update(uint32 diff) caster->ToPlayer()->RemoveGameObject(this, false); WorldPacket data(SMSG_FISH_ESCAPED, 0); - caster->ToPlayer()->GetSession()->SendPacket(&data); + caster->ToPlayer()->SendDirectMessage(&data); } // can be delete m_lootState = GO_JUST_DEACTIVATED; @@ -1628,7 +1628,7 @@ void GameObject::Use(Unit* user) { WorldPacket data(SMSG_GAMEOBJECT_PAGETEXT, 8); data << GetGUID(); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } else if (info->goober.gossipID) { @@ -1798,7 +1798,7 @@ void GameObject::Use(Unit* user) SetLootState(GO_JUST_DEACTIVATED); WorldPacket data(SMSG_FISH_NOT_HOOKED, 0); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); break; } } @@ -2034,7 +2034,7 @@ void GameObject::Use(Unit* user) player->TeleportTo(GetMapId(), GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation(), TELE_TO_NOT_LEAVE_TRANSPORT | TELE_TO_NOT_LEAVE_COMBAT | TELE_TO_NOT_UNSUMMON_PET); WorldPacket data(SMSG_ENABLE_BARBER_SHOP, 0); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); player->SetStandState(UNIT_STAND_STATE_SIT_LOW_CHAIR + info->barberChair.chairheight); return; @@ -2311,7 +2311,7 @@ void GameObject::ModifyHealth(int32 change, Unit* attackerOrHealer /*= nullptr*/ data << uint32(-change); // change < 0 triggers SPELL_BUILDING_HEAL combat log event // change >= 0 triggers SPELL_BUILDING_DAMAGE event data << uint32(spellId); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } GameObjectDestructibleState newState = GetDestructibleState(); diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 5ca9ad61e..13be19952 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -414,7 +414,7 @@ private: void UpdatePackedRotation(); //! Object distance/size - overridden from Object::_IsWithinDist. Needs to take in account proper GO size. - bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool /*is3D*/, bool /*useBoundingRadius = true*/) const override + bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool /*is3D*/, bool /*incOwnRadius = true*/, bool /*incTargetRadius = true*/) const override { //! Following check does check 3d distance dist2compare += obj->GetObjectSize(); diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index e57c0a270..64c436a80 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -1066,7 +1066,7 @@ void Item::SendUpdateSockets() for (uint32 i = SOCK_ENCHANTMENT_SLOT; i <= BONUS_ENCHANTMENT_SLOT; ++i) data << uint32(GetEnchantmentId(EnchantmentSlot(i))); - GetOwner()->GetSession()->SendPacket(&data); + GetOwner()->SendDirectMessage(&data); } // Though the client has the information in the item's data field, @@ -1081,7 +1081,7 @@ void Item::SendTimeUpdate(Player* owner) WorldPacket data(SMSG_ITEM_TIME_UPDATE, (8 + 4)); data << GetGUID(); data << uint32(duration); - owner->GetSession()->SendPacket(&data); + owner->SendDirectMessage(&data); } Item* Item::CreateItem(uint32 item, uint32 count, Player const* player, bool clone, uint32 randomPropertyId, bool temp) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 173030d49..142ff909b 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -240,7 +240,7 @@ void Object::SendUpdateToPlayer(Player* player) BuildCreateUpdateBlockForPlayer(&upd, player); upd.BuildPacket(packet); - player->GetSession()->SendPacket(&packet); + player->SendDirectMessage(&packet); } void Object::BuildValuesUpdateBlockForPlayer(UpdateData* data, Player* target) @@ -272,7 +272,7 @@ void Object::DestroyForPlayer(Player* target, bool onDeath) const { WorldPacket data(SMSG_ARENA_UNIT_DESTROYED, 8); data << GetGUID(); - target->GetSession()->SendPacket(&data); + target->SendDirectMessage(&data); } } } @@ -282,7 +282,7 @@ void Object::DestroyForPlayer(Player* target, bool onDeath) const //! If the following bool is true, the client will call "void CGUnit_C::OnDeath()" for this object. //! OnDeath() does for eg trigger death animation and interrupts certain spells/missiles/auras/sounds... data << uint8(onDeath ? 1 : 0); - target->GetSession()->SendPacket(&data); + target->SendDirectMessage(&data); } [[nodiscard]] int32 Object::GetInt32Value(uint16 index) const @@ -1232,10 +1232,14 @@ float WorldObject::GetDistanceZ(WorldObject const* obj) const return (dist > 0 ? dist : 0); } -bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool useBoundingRadius) const +bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius, bool incTargetRadius) const { - float sizefactor = useBoundingRadius ? GetObjectSize() + obj->GetObjectSize() : 0.0f; - float maxdist = dist2compare + sizefactor; + float maxdist = dist2compare; + if (incOwnRadius) + maxdist += GetObjectSize(); + + if (incTargetRadius) + maxdist += obj->GetObjectSize(); if (m_transport && obj->GetTransport() && obj->GetTransport()->GetGUID() == m_transport->GetGUID()) { @@ -1342,14 +1346,14 @@ bool WorldObject::IsWithinDist2d(const Position* pos, float dist) const } // use only if you will sure about placing both object at same map -bool WorldObject::IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool useBoundingRadius) const +bool WorldObject::IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius, bool incTargetRadius) const { - return obj && _IsWithinDist(obj, dist2compare, is3D, useBoundingRadius); + return obj && _IsWithinDist(obj, dist2compare, is3D, incOwnRadius, incTargetRadius); } -bool WorldObject::IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D, bool useBoundingRadius) const +bool WorldObject::IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius, bool incTargetRadius) const { - return obj && IsInMap(obj) && InSamePhase(obj) && _IsWithinDist(obj, dist2compare, is3D, useBoundingRadius); + return obj && IsInMap(obj) && InSamePhase(obj) && _IsWithinDist(obj, dist2compare, is3D, incOwnRadius, incTargetRadius); } bool WorldObject::IsWithinLOS(float ox, float oy, float oz, VMAP::ModelIgnoreFlags ignoreFlags, LineOfSightChecks checks) const @@ -2065,7 +2069,7 @@ void WorldObject::SendPlayMusic(uint32 Music, bool OnlySelf) WorldPacket data(SMSG_PLAY_MUSIC, 4); data << Music; if (OnlySelf && IsPlayer()) - this->ToPlayer()->GetSession()->SendPacket(&data); + ToPlayer()->SendDirectMessage(&data); else SendMessageToSet(&data, true); // ToSelf ignored in this case } diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 0fd248d8a..ae1ddbc17 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -541,8 +541,8 @@ public: [[nodiscard]] bool IsWithinDist2d(float x, float y, float dist) const; bool IsWithinDist2d(const Position* pos, float dist) const; // use only if you will sure about placing both object at same map - bool IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true, bool useBoundingRadius = true) const; - bool IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D = true, bool useBoundingRadius = true) const; + bool IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true, bool incOwnRadius = true, bool incTargetRadius = true) const; + bool IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D = true, bool incOwnRadius = true, bool incTargetRadius = true) const; [[nodiscard]] bool IsWithinLOS(float x, float y, float z, VMAP::ModelIgnoreFlags ignoreFlags = VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks = LINEOFSIGHT_ALL_CHECKS) const; [[nodiscard]] bool IsWithinLOSInMap(WorldObject const* obj, VMAP::ModelIgnoreFlags ignoreFlags = VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks = LINEOFSIGHT_ALL_CHECKS, Optional collisionHeight = { }, Optional combatReach = { }) const; [[nodiscard]] Position GetHitSpherePointFor(Position const& dest, Optional collisionHeight = { }, Optional combatReach = { }) const; @@ -770,7 +770,7 @@ private: uint16 m_notifyflags; uint16 m_executed_notifies; - virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool useBoundingRadius = true) const; + virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius = true, bool incTargetRadius = true) const; bool CanNeverSee(WorldObject const* obj) const; virtual bool CanAlwaysSee(WorldObject const* /*obj*/) const { return false; } diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index f730f99e2..45c23fe94 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -1512,7 +1512,7 @@ void Pet::_LoadSpellCooldowns(PreparedQueryResult result) if (!cooldowns.empty() && GetOwner()) { BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, cooldowns); - GetOwner()->GetSession()->SendPacket(&data); + GetOwner()->SendDirectMessage(&data); } } } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 5077c6b20..242d2325b 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -78,6 +78,7 @@ #include "TicketMgr.h" #include "Tokenize.h" #include "Transport.h" +#include "Unit.h" #include "UpdateData.h" #include "Util.h" #include "Vehicle.h" @@ -418,7 +419,7 @@ Player::Player(WorldSession* session): Unit(), m_mover(this) sScriptMgr->OnConstructPlayer(this); - m_expectingChangeTransport = false; + _expectingChangeTransport = false; } Player::~Player() @@ -1342,7 +1343,7 @@ void Player::SendTeleportAckPacket() data << GetPackGUID(); data << GetSession()->GetOrderCounter(); // movement counter BuildMovementPacket(&data); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); GetSession()->IncrementOrderCounter(); } @@ -1549,6 +1550,8 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati //remove auras before removing from map... RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_CHANGE_MAP | AURA_INTERRUPT_FLAG_MOVE | AURA_INTERRUPT_FLAG_TURNING); + SetMapChangeOrderCounter(); + if (!GetSession()->PlayerLogout()) { // send transfer packets @@ -1557,7 +1560,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati if (m_transport) data << m_transport->GetEntry() << GetMapId(); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } // remove from old map now @@ -1579,7 +1582,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati else data << teleportStore_dest.PositionXYZOStream(); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); SendSavedInstances(); } @@ -2361,7 +2364,7 @@ void Player::SendLogXPGain(uint32 GivenXP, Unit* victim, uint32 BonusXP, bool re } data << uint8(recruitAFriend ? 1 : 0); // does the GivenXP include a RaF bonus? - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::GiveXP(uint32 xp, Unit* victim, float group_rate, bool isLFGReward) @@ -2838,7 +2841,7 @@ void Player::SendInitialSpells() data << uint32(itr->second.category ? cooldown : 0); // category cooldown } - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::RemoveMail(uint32 id) @@ -2867,7 +2870,7 @@ void Player::SendMailResult(uint32 mailId, MailResponseType mailAction, MailResp data << (uint32) item_guid; // item guid low? data << (uint32) item_count; // item count? } - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendNewMail() @@ -2875,7 +2878,7 @@ void Player::SendNewMail() // deliver undelivered mail WorldPacket data(SMSG_RECEIVED_MAIL, 4); data << (uint32) 0; - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::AddNewMailDeliverTime(time_t deliver_time) @@ -3033,13 +3036,13 @@ void Player::SendLearnPacket(uint32 spellId, bool learn) WorldPacket data(SMSG_LEARNED_SPELL, 6); data << uint32(spellId); data << uint16(0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } else { WorldPacket data(SMSG_REMOVED_SPELL, 4); data << uint32(spellId); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } } @@ -3071,7 +3074,7 @@ bool Player::addSpell(uint32 spellId, uint8 addSpecMask, bool updateActive, bool WorldPacket data(SMSG_SUPERCEDED_SPELL, 4 + 4); data << uint32(nextSpellInfo->Id); data << uint32(spellInfo->Id); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } return false; } @@ -4426,7 +4429,7 @@ void Player::SetMovement(PlayerMovementType pType) } data << guid; data << GetSession()->GetOrderCounter(); // movement counter - GetSession()->SendPacket(&data); + SendDirectMessage(&data); GetSession()->IncrementOrderCounter(); } @@ -4438,7 +4441,7 @@ void Player::BuildPlayerRepop() { WorldPacket data(SMSG_PRE_RESURRECT, GetPackGUID().size()); data << GetPackGUID(); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); if (getRace(true) == RACE_NIGHTELF) { CastSpell(this, 20584, true); @@ -4493,7 +4496,7 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness) data << float(0); data << float(0); data << float(0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); // speed change, land walk @@ -4980,7 +4983,7 @@ void Player::RepopAtGraveyard() data << ClosestGrave->x; data << ClosestGrave->y; data << ClosestGrave->z; - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } } else if (GetPositionZ() < GetMap()->GetMinHeight(GetPositionX(), GetPositionY())) @@ -5599,7 +5602,7 @@ void Player::SendActionButtons(uint32 state) const } } - GetSession()->SendPacket(&data); + SendDirectMessage(&data); LOG_DEBUG("entities.player", "Action Buttons for {} spec {} Sent", GetGUID().ToString(), m_activeSpec); } @@ -6226,7 +6229,7 @@ bool Player::RewardHonor(Unit* uVictim, uint32 groupsize, int32 honor, bool awar // Xinef: non quest case, quest honor obtain is send in quest reward packet if (uVictim || groupsize > 0) - GetSession()->SendPacket(&data); + SendDirectMessage(&data); // add honor points ModifyHonorPoints(honor); @@ -6419,7 +6422,7 @@ void Player::CheckDuelDistance(time_t currTime) duel->OutOfBoundsTime = currTime + 10; WorldPacket data(SMSG_DUEL_OUTOFBOUNDS, 0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } } else @@ -6429,7 +6432,7 @@ void Player::CheckDuelDistance(time_t currTime) duel->OutOfBoundsTime = 0; WorldPacket data(SMSG_DUEL_INBOUNDS, 0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } else if (currTime >= duel->OutOfBoundsTime) DuelComplete(DUEL_FLED); @@ -6604,13 +6607,13 @@ void Player::_ApplyItemMods(Item* item, uint8 slot, bool apply) LOG_DEBUG("entities.player", "applying mods for item {} ", item->GetGUID().ToString()); - uint8 attacktype = Player::GetAttackBySlot(slot); + WeaponAttackType attacktype = Player::GetAttackBySlot(slot); if (item->HasSocket()) //only (un)equipping of items with sockets can influence metagems, so no need to waste time with normal items CorrectMetaGemEnchants(slot, apply); if (attacktype < MAX_ATTACK) - _ApplyWeaponDependentAuraMods(item, WeaponAttackType(attacktype), apply); + _ApplyWeaponDependentAuraMods(item, attacktype, apply); _ApplyItemBonuses(proto, slot, apply); @@ -6897,7 +6900,7 @@ void Player::_ApplyItemBonuses(ItemTemplate const* proto, uint8 slot, bool apply if (proto->ArcaneRes) HandleStatModifier(UNIT_MOD_RESISTANCE_ARCANE, BASE_VALUE, float(proto->ArcaneRes), apply); - uint8 attType = Player::GetAttackBySlot(slot); + WeaponAttackType attType = Player::GetAttackBySlot(slot); if (attType != MAX_ATTACK) { _ApplyWeaponDamage(slot, proto, ssv, apply); @@ -6944,7 +6947,7 @@ void Player::_ApplyWeaponDamage(uint8 slot, ItemTemplate const* proto, ScalingSt ssv = ScalingStatValue ? sScalingStatValuesStore.LookupEntry(ssd_level) : nullptr; } - uint8 attType = Player::GetAttackBySlot(slot); + WeaponAttackType attType = Player::GetAttackBySlot(slot); if (!IsInFeralForm() && apply && !CanUseAttackType(attType)) { return; @@ -6975,12 +6978,12 @@ void Player::_ApplyWeaponDamage(uint8 slot, ItemTemplate const* proto, ScalingSt if (minDamage > 0.f) { - SetBaseWeaponDamage(WeaponAttackType(attType), MINDAMAGE, minDamage, i); + SetBaseWeaponDamage(attType, MINDAMAGE, minDamage, i); } if (maxDamage > 0.f) { - SetBaseWeaponDamage(WeaponAttackType(attType), MAXDAMAGE, maxDamage, i); + SetBaseWeaponDamage(attType, MAXDAMAGE, maxDamage, i); } } } @@ -6989,8 +6992,8 @@ void Player::_ApplyWeaponDamage(uint8 slot, ItemTemplate const* proto, ScalingSt { for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i) { - SetBaseWeaponDamage(WeaponAttackType(attType), MINDAMAGE, 0.f, i); - SetBaseWeaponDamage(WeaponAttackType(attType), MAXDAMAGE, 0.f, i); + SetBaseWeaponDamage(attType, MINDAMAGE, 0.f, i); + SetBaseWeaponDamage(attType, MAXDAMAGE, 0.f, i); } if (attType == BASE_ATTACK) @@ -7014,8 +7017,8 @@ void Player::_ApplyWeaponDamage(uint8 slot, ItemTemplate const* proto, ScalingSt if (IsInFeralForm()) return; - if (CanModifyStats() && (GetWeaponDamageRange(WeaponAttackType(attType), MAXDAMAGE) || proto->Delay)) - UpdateDamagePhysical(WeaponAttackType(attType)); + if (CanModifyStats() && (GetWeaponDamageRange(attType, MAXDAMAGE) || proto->Delay)) + UpdateDamagePhysical(attType); } void Player::CastAllObtainSpells() @@ -7608,9 +7611,9 @@ void Player::_RemoveAllItemMods() if (!proto) continue; - uint32 attacktype = Player::GetAttackBySlot(i); + WeaponAttackType attacktype = Player::GetAttackBySlot(i); if (attacktype < MAX_ATTACK) - _ApplyWeaponDependentAuraMods(m_items[i], WeaponAttackType(attacktype), false); + _ApplyWeaponDependentAuraMods(m_items[i], attacktype, false); _ApplyItemBonuses(proto, i, false); @@ -7637,9 +7640,9 @@ void Player::_ApplyAllItemMods() if (!proto) continue; - uint32 attacktype = Player::GetAttackBySlot(i); + WeaponAttackType attacktype = Player::GetAttackBySlot(i); if (attacktype < MAX_ATTACK) - _ApplyWeaponDependentAuraMods(m_items[i], WeaponAttackType(attacktype), true); + _ApplyWeaponDependentAuraMods(m_items[i], attacktype, true); _ApplyItemBonuses(proto, i, true); @@ -7792,7 +7795,7 @@ void Player::SendQuestGiverStatusMultiple() }); data.put(0, count); // write real count - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } /* If in a battleground a player dies, and an enemy removes the insignia, the player's bones is lootable @@ -8239,14 +8242,14 @@ void Player::SendLootError(ObjectGuid guid, LootError error) void Player::SendNotifyLootMoneyRemoved() { WorldPacket data(SMSG_LOOT_CLEAR_MONEY, 0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendNotifyLootItemRemoved(uint8 lootSlot) { WorldPacket data(SMSG_LOOT_REMOVED, 1); data << uint8(lootSlot); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } // TODO - InitWorldStates should NOT always send the same states @@ -8951,7 +8954,7 @@ void Player::SetBindPoint(ObjectGuid guid) { WorldPacket data(SMSG_BINDER_CONFIRM, 8); data << guid; - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendTalentWipeConfirm(ObjectGuid guid) @@ -8960,7 +8963,7 @@ void Player::SendTalentWipeConfirm(ObjectGuid guid) data << guid; uint32 cost = sWorld->getBoolConfig(CONFIG_NO_RESET_TALENT_COST) ? 0 : resetTalentsCost(); data << cost; - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::ResetPetTalents() @@ -9223,7 +9226,7 @@ void Player::RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent) { WorldPacket data(SMSG_PET_SPELLS, 8); data << uint64(0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); if (GetGroup()) SetGroupUpdateFlag(GROUP_UPDATE_PET); @@ -9510,14 +9513,14 @@ void Player::Whisper(std::string_view text, Language language, Player* target, b WorldPacket data; ChatHandler::BuildChatPacket(data, CHAT_MSG_WHISPER, language, this, this, _text); - target->GetSession()->SendPacket(&data); + target->SendDirectMessage(&data); // rest stuff shouldn't happen in case of addon message if (isAddonMessage) return; ChatHandler::BuildChatPacket(data, CHAT_MSG_WHISPER_INFORM, Language(language), target, target, _text); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); if (!isAcceptWhispers() && !IsGameMaster() && !target->IsGameMaster()) { @@ -9626,7 +9629,7 @@ void Player::PetSpellInitialize() data << uint32(category ? cooldown : 0); // category cooldown } - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::PossessSpellInitialize() @@ -9654,7 +9657,7 @@ void Player::PossessSpellInitialize() data << uint8(0); // spells count data << uint8(0); // cooldowns count - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::VehicleSpellInitialize() @@ -9729,7 +9732,7 @@ void Player::VehicleSpellInitialize() data << uint32(category ? cooldown : 0); // category cooldown } - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::CharmSpellInitialize() @@ -9783,14 +9786,14 @@ void Player::CharmSpellInitialize() data << uint8(0); // cooldowns count - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendRemoveControlBar() { WorldPacket data(SMSG_PET_SPELLS, 8); data << uint64(0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } bool Player::HasSpellMod(SpellModifier* mod, Spell* spell) @@ -10140,7 +10143,7 @@ void Player::SendProficiency(ItemClass itemClass, uint32 itemSubclassMask) { WorldPacket data(SMSG_SET_PROFICIENCY, 1 + 4); data << uint8(itemClass) << uint32(itemSubclassMask); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::RemovePetitionsAndSigns(ObjectGuid guid, uint32 type) @@ -10592,7 +10595,7 @@ void Player::ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) if (!cooldowns.empty()) { BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, cooldowns); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } } @@ -10712,7 +10715,7 @@ inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 c data << uint32(vendorslot + 1); // numbered from 1 at client data << int32(crItem->maxcount > 0 ? new_count : 0xFFFFFFFF); data << uint32(count); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); SendNewItem(it, pProto->BuyCount * count, true, false, false); if (!bStore) @@ -11129,7 +11132,7 @@ void Player::ModifySpellCooldown(uint32 spellId, int32 cooldown) data << uint32(spellId); // Spell ID data << GetGUID(); // Player GUID data << int32(cooldown); // Cooldown mod in milliseconds - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId /*= 0*/, Spell* spell /*= nullptr*/, bool setCooldown /*= true*/) @@ -11605,7 +11608,7 @@ void Player::SendInitialPacketsBeforeAddToMap() data << m_homebindX << m_homebindY << m_homebindZ; data << (uint32) m_homebindMapId; data << (uint32) m_homebindAreaId; - GetSession()->SendPacket(&data); + SendDirectMessage(&data); // SMSG_SET_PROFICIENCY // SMSG_SET_PCT_SPELL_MODIFIER @@ -11618,13 +11621,13 @@ void Player::SendInitialPacketsBeforeAddToMap() data.Initialize(SMSG_INSTANCE_DIFFICULTY, 4 + 4); data << uint32(GetMap()->GetDifficulty()); data << uint32(GetMap()->GetEntry()->IsDynamicDifficultyMap() && GetMap()->IsHeroic()); // Raid dynamic difficulty - GetSession()->SendPacket(&data); + SendDirectMessage(&data); SendInitialSpells(); data.Initialize(SMSG_SEND_UNLEARN_SPELLS, 4); data << uint32(0); // count, for (count) uint32; - GetSession()->SendPacket(&data); + SendDirectMessage(&data); SendInitialActionButtons(); m_reputationMgr->SendInitialReputations(); @@ -11636,7 +11639,7 @@ void Player::SendInitialPacketsBeforeAddToMap() data.AppendPackedTime(GameTime::GetGameTime().count()); data << float(0.01666667f); // game speed data << uint32(0); // added in 3.1.2 - GetSession()->SendPacket(&data); + SendDirectMessage(&data); GetReputationMgr().SendForceReactions(); // SMSG_SET_FORCED_REACTIONS @@ -11788,7 +11791,7 @@ void Player::SendTransferAborted(uint32 mapid, TransferAbortReason reason, uint8 default: break; } - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendInstanceResetWarning(uint32 mapid, Difficulty difficulty, uint32 time, bool onEnterMap) @@ -11823,7 +11826,7 @@ void Player::SendInstanceResetWarning(uint32 mapid, Difficulty difficulty, uint3 data << uint8(bind && bind->perm); // is locked data << uint8(bind && bind->extended); // is extended, ignored if prev field is 0 } - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::ApplyEquipCooldown(Item* pItem) @@ -11870,7 +11873,7 @@ void Player::ApplyEquipCooldown(Item* pItem) WorldPacket data(SMSG_ITEM_COOLDOWN, 12); data << pItem->GetGUID(); data << uint32(spellData.SpellId); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } } @@ -12142,7 +12145,7 @@ void Player::GetAurasForTarget(Unit* target, bool force /*= false*/) auraApp->BuildUpdatePacket(data, false); } - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SetDailyQuestStatus(uint32 quest_id) @@ -12912,7 +12915,7 @@ void Player::SetClientControl(Unit* target, bool allowMove, bool packetOnly /*= WorldPacket data(SMSG_CLIENT_CONTROL_UPDATE, target->GetPackGUID().size() + 1); data << target->GetPackGUID(); data << uint8((allowMove && !target->HasUnitState(UNIT_STATE_FLEEING | UNIT_STATE_CONFUSED)) ? 1 : 0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); // We want to set the packet only if (packetOnly) @@ -13033,7 +13036,7 @@ void Player::SendCorpseReclaimDelay(uint32 delay) { WorldPacket data(SMSG_CORPSE_RECLAIM_DELAY, 4); data << uint32(delay); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } Player* Player::GetNextRandomRaidMember(float radius) @@ -13260,7 +13263,7 @@ void Player::SetViewpoint(WorldObject* target, bool apply) SetSeer(this); //WorldPacket data(SMSG_CLEAR_FAR_SIGHT_IMMEDIATE, 0); - //GetSession()->SendPacket(&data); + //SendDirectMessage(&data); } } @@ -13416,7 +13419,7 @@ void Player::SetTitle(CharTitlesEntry const* title, bool lost) WorldPacket data(SMSG_TITLE_EARNED, 4 + 4); data << uint32(title->bit_index); data << uint32(lost ? 0 : 1); // 1 - earned, 0 - lost - GetSession()->SendPacket(&data); + SendDirectMessage(&data); UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_OWN_RANK); } @@ -13476,7 +13479,7 @@ void Player::ConvertRune(uint8 index, RuneType newType) WorldPacket data(SMSG_CONVERT_RUNE, 2); data << uint8(index); data << uint8(newType); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::ResyncRunes(uint8 count) @@ -13488,14 +13491,14 @@ void Player::ResyncRunes(uint8 count) data << uint8(GetCurrentRune(i)); // rune type data << uint8(255 - (GetRuneCooldown(i) * 51)); // passed cooldown time (0-255) } - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::AddRunePower(uint8 index) { WorldPacket data(SMSG_ADD_RUNE_POWER, 4); data << uint32(1 << index); // mask (0x00-0x3F probably) - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } static RuneType runeSlotTypes[MAX_RUNES] = @@ -14553,7 +14556,7 @@ void Player::SendTalentsInfoData(bool pet) BuildPetTalentsInfoData(&data); else BuildPlayerTalentsInfoData(&data); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::BuildEnchantmentsInfoData(WorldPacket* data) @@ -14626,7 +14629,7 @@ void Player::SendEquipmentSetList() ++count; // client have limit but it checked at loading and set } data.put(count_pos, count); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SetEquipmentSet(uint32 index, EquipmentSet eqset) @@ -14664,7 +14667,7 @@ void Player::SetEquipmentSet(uint32 index, EquipmentSet eqset) WorldPacket data(SMSG_EQUIPMENT_SET_SAVED, 4 + 1); data << uint32(index); data.appendPackGUID(eqslot.Guid); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } eqslot.state = old_state == EQUIPMENT_SET_NEW ? EQUIPMENT_SET_NEW : EQUIPMENT_SET_CHANGED; @@ -15475,7 +15478,7 @@ void Player::SendDuelCountdown(uint32 counter) { WorldPacket data(SMSG_DUEL_COUNTDOWN, 4); data << uint32(counter); // seconds - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SetIsSpectator(bool on) @@ -15679,7 +15682,7 @@ void Player::SendRefundInfo(Item* item) } data << uint32(0); data << uint32(GetTotalPlayedTime() - item->GetPlayedTime()); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } bool Player::AddItem(uint32 itemId, uint32 count) @@ -15727,7 +15730,7 @@ void Player::RefundItem(Item* item) WorldPacket data(SMSG_ITEM_REFUND_RESULT, 8 + 4); data << item->GetGUID(); // Guid data << uint32(10); // Error! - GetSession()->SendPacket(&data); + SendDirectMessage(&data); return; } @@ -15768,7 +15771,7 @@ void Player::RefundItem(Item* item) WorldPacket data(SMSG_ITEM_REFUND_RESULT, 8 + 4); data << item->GetGUID(); // Guid data << uint32(10); // Error! - GetSession()->SendPacket(&data); + SendDirectMessage(&data); return; } @@ -15783,7 +15786,7 @@ void Player::RefundItem(Item* item) data << uint32(iece->reqitem[i]); data << uint32(iece->reqitemcount[i]); } - GetSession()->SendPacket(&data); + SendDirectMessage(&data); uint32 moneyRefund = item->GetPaidMoney(); // item-> will be invalidated in DestroyItem diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 6b9f56582..05cc5251f 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1247,7 +1247,7 @@ public: bool HasWeapon(WeaponAttackType type) const override { return GetWeaponForAttack(type, false); } bool HasWeaponForAttack(WeaponAttackType type) const override { return (Unit::HasWeaponForAttack(type) && GetWeaponForAttack(type, true)); } [[nodiscard]] Item* GetShield(bool useable = false) const; - static uint8 GetAttackBySlot(uint8 slot); // MAX_ATTACK if not weapon slot + static WeaponAttackType GetAttackBySlot(uint8 slot); // MAX_ATTACK if not weapon slot std::vector& GetItemUpdateQueue() { return m_itemUpdateQueue; } static bool IsInventoryPos(uint16 pos) { return IsInventoryPos(pos >> 8, pos & 255); } static bool IsInventoryPos(uint8 bag, uint8 slot); @@ -2627,8 +2627,14 @@ public: std::string GetDebugInfo() const override; - bool IsExpectingChangeTransport() const { return m_expectingChangeTransport; } - void SetExpectingChangeTransport(bool state) { m_expectingChangeTransport = state; } + bool IsExpectingChangeTransport() const { return _expectingChangeTransport; } + void SetExpectingChangeTransport(bool state) { _expectingChangeTransport = state; } + + uint32 GetPendingFlightChange() const { return _pendingFlightChangeCounter; } + void SetPendingFlightChange(uint32 counter) { _pendingFlightChangeCounter = counter; } + + void SetMapChangeOrderCounter() { _mapChangeOrderCounter = GetSession()->GetOrderCounter(); } + uint32 GetMapChangeOrderCounter() { return _mapChangeOrderCounter; } /*********************************************************/ /*** SPELL QUEUE SYSTEM ***/ @@ -3011,7 +3017,9 @@ private: Seconds m_creationTime; - bool m_expectingChangeTransport; + bool _expectingChangeTransport; + uint32 _pendingFlightChangeCounter; + uint32 _mapChangeOrderCounter; }; void AddItemsSetItem(Player* player, Item* item); diff --git a/src/server/game/Entities/Player/PlayerMisc.cpp b/src/server/game/Entities/Player/PlayerMisc.cpp index 715e20fec..9c0bf5618 100644 --- a/src/server/game/Entities/Player/PlayerMisc.cpp +++ b/src/server/game/Entities/Player/PlayerMisc.cpp @@ -78,7 +78,7 @@ bool Player::CanSpeak() const void Player::SendAttackSwingNotInRange() { WorldPacket data(SMSG_ATTACKSWING_NOTINRANGE, 0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SavePositionInDB(uint32 mapid, float x, float y, float z, float o, uint32 zone, ObjectGuid guid) @@ -128,25 +128,25 @@ void Player::Customize(CharacterCustomizeInfo const* customizeInfo, CharacterDat void Player::SendAttackSwingDeadTarget() { WorldPacket data(SMSG_ATTACKSWING_DEADTARGET, 0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendAttackSwingCantAttack() { WorldPacket data(SMSG_ATTACKSWING_CANT_ATTACK, 0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendAttackSwingCancelAttack() { WorldPacket data(SMSG_CANCEL_COMBAT, 0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendAttackSwingBadFacingAttack() { WorldPacket data(SMSG_ATTACKSWING_BADFACING, 0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendAutoRepeatCancel(Unit* target) @@ -161,7 +161,7 @@ void Player::SendExplorationExperience(uint32 Area, uint32 Experience) WorldPacket data(SMSG_EXPLORATION_EXPERIENCE, 8); data << uint32(Area); data << uint32(Experience); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendDungeonDifficulty(bool IsInGroup) @@ -171,7 +171,7 @@ void Player::SendDungeonDifficulty(bool IsInGroup) data << (uint32)GetDungeonDifficulty(); data << uint32(val); data << uint32(IsInGroup); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendRaidDifficulty(bool IsInGroup, int32 forcedDifficulty) @@ -181,14 +181,14 @@ void Player::SendRaidDifficulty(bool IsInGroup, int32 forcedDifficulty) data << uint32(forcedDifficulty == -1 ? GetRaidDifficulty() : forcedDifficulty); data << uint32(val); data << uint32(IsInGroup); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendResetFailedNotify(uint32 mapid) { WorldPacket data(SMSG_RESET_FAILED_NOTIFY, 4); data << uint32(mapid); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } /// Reset all solo instances and optionally send a message on success for each @@ -327,7 +327,7 @@ void Player::SendResetInstanceSuccess(uint32 MapId) { WorldPacket data(SMSG_INSTANCE_RESET, 4); data << uint32(MapId); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendResetInstanceFailed(uint32 reason, uint32 MapId) @@ -340,7 +340,7 @@ void Player::SendResetInstanceFailed(uint32 reason, uint32 MapId) WorldPacket data(SMSG_INSTANCE_RESET_FAILED, 4); data << uint32(reason); data << uint32(MapId); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } /*********************************************************/ diff --git a/src/server/game/Entities/Player/PlayerQuest.cpp b/src/server/game/Entities/Player/PlayerQuest.cpp index a8307c788..0b016d03f 100644 --- a/src/server/game/Entities/Player/PlayerQuest.cpp +++ b/src/server/game/Entities/Player/PlayerQuest.cpp @@ -990,7 +990,7 @@ bool Player::SatisfyQuestLog(bool msg) if (msg) { WorldPacket data(SMSG_QUESTLOG_FULL, 0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTLOG_FULL"); } return false; @@ -2349,7 +2349,7 @@ void Player::SendQuestComplete(uint32 quest_id) { WorldPacket data(SMSG_QUESTUPDATE_COMPLETE, 4); data << uint32(quest_id); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTUPDATE_COMPLETE quest = {}", quest_id); } } @@ -2376,7 +2376,7 @@ void Player::SendQuestReward(Quest const* quest, uint32 XP) data << uint32(10 * quest->CalculateHonorGain(GetQuestLevel(quest))); data << uint32(quest->GetBonusTalents()); // bonus talents data << uint32(quest->GetRewArenaPoints()); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendQuestFailed(uint32 questId, InventoryResult reason) @@ -2386,7 +2386,7 @@ void Player::SendQuestFailed(uint32 questId, InventoryResult reason) WorldPacket data(SMSG_QUESTGIVER_QUEST_FAILED, 4 + 4); data << uint32(questId); data << uint32(reason); // failed reason (valid reasons: 4, 16, 50, 17, 74, other values show default message) - GetSession()->SendPacket(&data); + SendDirectMessage(&data); LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_QUEST_FAILED"); } } @@ -2397,7 +2397,7 @@ void Player::SendQuestTimerFailed(uint32 quest_id) { WorldPacket data(SMSG_QUESTUPDATE_FAILEDTIMER, 4); data << uint32(quest_id); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTUPDATE_FAILEDTIMER"); } } @@ -2406,7 +2406,7 @@ void Player::SendCanTakeQuestResponse(uint32 msg) const { WorldPacket data(SMSG_QUESTGIVER_QUEST_INVALID, 4); data << uint32(msg); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_QUEST_INVALID"); } @@ -2426,7 +2426,7 @@ void Player::SendQuestConfirmAccept(const Quest* quest, Player* pReceiver) data << uint32(quest->GetQuestId()); data << quest->GetTitle(); data << GetGUID(); - pReceiver->GetSession()->SendPacket(&data); + pReceiver->SendDirectMessage(&data); LOG_DEBUG("network", "WORLD: Sent SMSG_QUEST_CONFIRM_ACCEPT"); } @@ -2439,7 +2439,7 @@ void Player::SendPushToPartyResponse(Player const* player, uint8 msg) const WorldPacket data(MSG_QUEST_PUSH_RESULT, (8 + 1)); data << player->GetGUID(); data << uint8(msg); // valid values: 0-8 - GetSession()->SendPacket(&data); + SendDirectMessage(&data); LOG_DEBUG("network", "WORLD: Sent MSG_QUEST_PUSH_RESULT"); } } @@ -2450,7 +2450,7 @@ void Player::SendQuestUpdateAddItem(Quest const* /*quest*/, uint32 /*item_idx*/, LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTUPDATE_ADD_ITEM"); //data << quest->RequiredItemId[item_idx]; //data << count; - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendQuestUpdateAddCreatureOrGo(Quest const* quest, ObjectGuid guid, uint32 creatureOrGO_idx, uint16 old_count, uint16 add_count) @@ -2469,7 +2469,7 @@ void Player::SendQuestUpdateAddCreatureOrGo(Quest const* quest, ObjectGuid guid, data << uint32(old_count + add_count); data << uint32(quest->RequiredNpcOrGoCount[ creatureOrGO_idx ]); data << guid; - GetSession()->SendPacket(&data); + SendDirectMessage(&data); uint16 log_slot = FindQuestSlot(quest->GetQuestId()); if (log_slot < MAX_QUEST_LOG_SIZE) @@ -2485,7 +2485,7 @@ void Player::SendQuestUpdateAddPlayer(Quest const* quest, uint16 old_count, uint data << uint32(quest->GetQuestId()); data << uint32(old_count + add_count); data << uint32(quest->GetPlayersSlain()); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); uint16 log_slot = FindQuestSlot(quest->GetQuestId()); if (log_slot < MAX_QUEST_LOG_SIZE) diff --git a/src/server/game/Entities/Player/PlayerStorage.cpp b/src/server/game/Entities/Player/PlayerStorage.cpp index f3ad7994e..8099a5278 100644 --- a/src/server/game/Entities/Player/PlayerStorage.cpp +++ b/src/server/game/Entities/Player/PlayerStorage.cpp @@ -51,6 +51,7 @@ #include "QuestDef.h" #include "ReputationMgr.h" #include "ScriptMgr.h" +#include "ScriptObjectFwd.h" #include "SocialMgr.h" #include "Spell.h" #include "SpellAuraEffects.h" @@ -539,7 +540,7 @@ Item* Player::GetShield(bool useable) const return item; } -uint8 Player::GetAttackBySlot(uint8 slot) +WeaponAttackType Player::GetAttackBySlot(uint8 slot) { switch (slot) { @@ -2782,7 +2783,7 @@ Item* Player::EquipItem(uint16 pos, Item* pItem, bool update) WorldPacket data; BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_INCLUDE_GCD, cooldownSpell, 0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } } } @@ -4076,7 +4077,7 @@ void Player::SendEquipError(InventoryResult msg, Item* pItem, Item* pItem2, uint break; } } - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendBuyError(BuyResult msg, Creature* creature, uint32 item, uint32 param) @@ -4088,7 +4089,7 @@ void Player::SendBuyError(BuyResult msg, Creature* creature, uint32 item, uint32 if (param > 0) data << uint32(param); data << uint8(msg); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::SendSellError(SellResult msg, Creature* creature, ObjectGuid guid, uint32 param) @@ -4100,7 +4101,7 @@ void Player::SendSellError(SellResult msg, Creature* creature, ObjectGuid guid, if (param > 0) data << uint32(param); data << uint8(msg); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } void Player::TradeCancel(bool sendback, TradeStatus status /*= TRADE_STATUS_TRADE_CANCELED*/) @@ -4795,7 +4796,7 @@ void Player::SendNewItem(Item* item, uint32 count, bool received, bool created, if (broadcast && GetGroup()) GetGroup()->BroadcastPacket(&data, true); else - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } /*********************************************************/ @@ -6545,7 +6546,7 @@ void Player::BindToInstance() WorldPacket data(SMSG_INSTANCE_SAVE_CREATED, 4); data << uint32(0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); sInstanceSaveMgr->PlayerBindToInstance(this->GetGUID(), mapSave, true, this); } @@ -6580,7 +6581,7 @@ void Player::SendRaidInfo() } } data.put(p_counter, counter); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } /* @@ -6607,7 +6608,7 @@ void Player::SendSavedInstances() //Send opcode 811. true or false means, whether you have current raid/heroic instances data.Initialize(SMSG_UPDATE_INSTANCE_OWNERSHIP); data << uint32(hasBeenSaved); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); if (!hasBeenSaved) return; @@ -6621,7 +6622,7 @@ void Player::SendSavedInstances() { data.Initialize(SMSG_UPDATE_LAST_INSTANCE); data << uint32(itr->second.save->GetMapId()); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } } } diff --git a/src/server/game/Entities/Player/PlayerUpdates.cpp b/src/server/game/Entities/Player/PlayerUpdates.cpp index 56442649d..68dd59adf 100644 --- a/src/server/game/Entities/Player/PlayerUpdates.cpp +++ b/src/server/game/Entities/Player/PlayerUpdates.cpp @@ -1402,7 +1402,7 @@ void Player::UpdateHomebindTime(uint32 time) WorldPacket data(SMSG_RAID_GROUP_ONLY, 4 + 4); data << uint32(0); data << uint32(0); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); } // instance is valid, reset homebind timer m_HomebindTimer = 0; @@ -1425,7 +1425,7 @@ void Player::UpdateHomebindTime(uint32 time) WorldPacket data(SMSG_RAID_GROUP_ONLY, 4 + 4); data << uint32(m_HomebindTimer); data << uint32(1); - GetSession()->SendPacket(&data); + SendDirectMessage(&data); LOG_DEBUG( "maps", "PLAYER: Player '{}' ({}) will be teleported to homebind in 60 " @@ -1772,7 +1772,7 @@ void Player::UpdateTriggerVisibility() WorldPacket packet; udata.BuildPacket(packet); - GetSession()->SendPacket(&packet); + SendDirectMessage(&packet); } void Player::UpdateForQuestWorldObjects() @@ -1825,7 +1825,7 @@ void Player::UpdateForQuestWorldObjects() WorldPacket packet; udata.BuildPacket(packet); - GetSession()->SendPacket(&packet); + SendDirectMessage(&packet); } void Player::UpdateTitansGrip() @@ -1969,10 +1969,7 @@ void Player::UpdateCharmedAI() Unit* target = GetVictim(); if (target) - { SetInFront(target); - SendMovementFlagUpdate(true); - } if (HasUnitState(UNIT_STATE_CASTING)) return; diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp index 8ace05873..77830c8e5 100644 --- a/src/server/game/Entities/Player/SocialMgr.cpp +++ b/src/server/game/Entities/Player/SocialMgr.cpp @@ -172,7 +172,7 @@ void PlayerSocial::SendSocialList(Player* player, uint32 flags) } data.put(countPos, totalCount); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); LOG_DEBUG("network", "WORLD: Sent SMSG_CONTACT_LIST"); } @@ -288,7 +288,7 @@ void SocialMgr::SendFriendStatus(Player* player, FriendsResult result, ObjectGui if (broadcast) BroadcastToFriendListers(player, &data); else - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } void SocialMgr::BroadcastToFriendListers(Player* player, WorldPacket* packet) @@ -311,7 +311,7 @@ void SocialMgr::BroadcastToFriendListers(Player* player, WorldPacket* packet) // PLAYER see his team only and PLAYER can't see MODERATOR, GAME MASTER, ADMINISTRATOR characters // MODERATOR, GAME MASTER, ADMINISTRATOR can see all if (pFriend && (!AccountMgr::IsPlayerAccount(pFriend->GetSession()->GetSecurity()) || ((pFriend->GetTeamId() == teamId || allowTwoSideWhoList) && security <= gmLevelInWhoList)) && player->IsVisibleGloballyFor(pFriend)) - pFriend->GetSession()->SendPacket(packet); + pFriend->SendDirectMessage(packet); } } } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index ae20397e7..cab8a2112 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -8179,7 +8179,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere if (triggeredByAura->GetBase() && castItem->GetGUID() != triggeredByAura->GetBase()->GetCastItemGUID()) return false; - WeaponAttackType attType = WeaponAttackType(player->GetAttackBySlot(castItem->GetSlot())); + WeaponAttackType attType = player->GetAttackBySlot(castItem->GetSlot()); if ((attType != BASE_ATTACK && attType != OFF_ATTACK) || (attType == BASE_ATTACK && procFlag & PROC_FLAG_DONE_OFFHAND_ATTACK) || (attType == OFF_ATTACK && procFlag & PROC_FLAG_DONE_MAINHAND_ATTACK)) @@ -8370,7 +8370,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere if (!IsPlayer() || !victim || !victim->IsAlive() || !castItem || !castItem->IsEquipped()) return false; - WeaponAttackType attType = WeaponAttackType(Player::GetAttackBySlot(castItem->GetSlot())); + WeaponAttackType attType = Player::GetAttackBySlot(castItem->GetSlot()); if ((attType != BASE_ATTACK && attType != OFF_ATTACK) || (attType == BASE_ATTACK && procFlag & PROC_FLAG_DONE_OFFHAND_ATTACK) || (attType == OFF_ATTACK && procFlag & PROC_FLAG_DONE_MAINHAND_ATTACK)) @@ -10969,7 +10969,11 @@ void Unit::SetCharm(Unit* charm, bool apply) charm->SetUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED); } else + { charm->m_ControlledByPlayer = false; + if (!HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED)) + charm->RemoveUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED); + } // PvP, FFAPvP charm->SetByteValue(UNIT_FIELD_BYTES_2, 1, GetByteValue(UNIT_FIELD_BYTES_2, 1)); @@ -13568,7 +13572,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry) SendMessageToSet(&data, true); data.Initialize(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, 0); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); // mounts can also have accessories GetVehicleKit()->InstallAllAccessories(false); @@ -13596,7 +13600,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry) data << GetPackGUID(); data << player->GetSession()->GetOrderCounter(); // movement counter data << player->GetCollisionHeight(); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); player->GetSession()->IncrementOrderCounter(); } @@ -13617,7 +13621,7 @@ void Unit::Dismount() data << GetPackGUID(); data << player->GetSession()->GetOrderCounter(); // movement counter data << player->GetCollisionHeight(); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); player->GetSession()->IncrementOrderCounter(); } @@ -16626,7 +16630,7 @@ void Unit::SendPetActionFeedback(uint8 msg) const WorldPacket data(SMSG_PET_ACTION_FEEDBACK, 1); data << uint8(msg); - owner->ToPlayer()->GetSession()->SendPacket(&data); + owner->ToPlayer()->SendDirectMessage(&data); } void Unit::SendPetActionSound(PetAction action) const @@ -16649,7 +16653,7 @@ void Unit::SendPetAIReaction(ObjectGuid guid) const WorldPacket data(SMSG_AI_REACTION, 8 + 4); data << guid; data << uint32(AI_REACTION_HOSTILE); - owner->ToPlayer()->GetSession()->SendPacket(&data); + owner->ToPlayer()->SendDirectMessage(&data); } ///----------End of Pet responses methods---------- @@ -16715,6 +16719,13 @@ void Unit::StopMovingOnCurrentPos() void Unit::SendMovementFlagUpdate(bool self /* = false */) { + if (IsRooted()) + { + // each case where this occurs has to be examined and reported and dealt with. + LOG_ERROR("Unit", "Attempted sending heartbeat with root flag for guid {}", GetGUID().ToString()); + return; + } + WorldPacket data; BuildHeartBeatMsg(&data); SendMessageToSet(&data, self); @@ -16755,7 +16766,7 @@ void Unit::SetStandState(uint8 state) { WorldPacket data(SMSG_STANDSTATE_UPDATE, 1); data << (uint8)state; - ToPlayer()->GetSession()->SendPacket(&data); + ToPlayer()->SendDirectMessage(&data); } } @@ -19210,7 +19221,7 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ) data << float(speedXY); // Horizontal speed data << float(-speedZ); // Z Movement speed (vertical) - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); player->GetSession()->IncrementOrderCounter(); player->SetCanKnockback(true); @@ -19310,7 +19321,7 @@ void Unit::JumpTo(float speedXY, float speedZ, bool forward) data << float(speedXY); // Horizontal speed data << float(-speedZ); // Z Movement speed (vertical) - ToPlayer()->GetSession()->SendPacket(&data); + ToPlayer()->SendDirectMessage(&data); } } @@ -19468,7 +19479,7 @@ void Unit::_EnterVehicle(Vehicle* vehicle, int8 seatId, AuraApplication const* a bg->EventPlayerDroppedFlag(player); WorldPacket data(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, 0); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } ASSERT(!m_vehicle); @@ -20423,11 +20434,12 @@ void Unit::SetCanFly(bool enable) if (Player const* player = GetClientControlling()) { uint32 const counter = player->GetSession()->GetOrderCounter(); + const_cast(player)->SetPendingFlightChange(counter); WorldPacket data(enable ? SMSG_MOVE_SET_CAN_FLY : SMSG_MOVE_UNSET_CAN_FLY, GetPackGUID().size() + 4); data << GetPackGUID(); data << counter; - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); player->GetSession()->IncrementOrderCounter(); return; } @@ -20463,7 +20475,7 @@ void Unit::SetFeatherFall(bool enable) data << GetPackGUID(); data << counter; - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); player->GetSession()->IncrementOrderCounter(); // start fall from current height @@ -20521,7 +20533,7 @@ void Unit::SetHover(bool enable) data << GetPackGUID(); data << counter; - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); player->GetSession()->IncrementOrderCounter(); return; } @@ -20556,7 +20568,7 @@ void Unit::SetWaterWalking(bool enable) WorldPacket data(enable ? SMSG_MOVE_WATER_WALK : SMSG_MOVE_LAND_WALK, GetPackGUID().size() + 4); data << GetPackGUID(); data << counter; - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); player->GetSession()->IncrementOrderCounter(); return; } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 518262470..b254d8635 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -967,7 +967,7 @@ public: inline bool HasMainhandWeaponForAttack() const { return HasWeaponForAttack(BASE_ATTACK); } inline bool HasOffhandWeaponForAttack() const { return HasWeaponForAttack(OFF_ATTACK); } inline bool HasRangedWeaponForAttack() const { return HasWeaponForAttack(RANGED_ATTACK); } - [[nodiscard]] bool CanUseAttackType(uint8 attacktype) const + [[nodiscard]] bool CanUseAttackType(WeaponAttackType attacktype) const { switch (attacktype) { diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.cpp b/src/server/game/Grids/Notifiers/GridNotifiers.cpp index 5dd717f32..890c6de2b 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp +++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp @@ -83,7 +83,7 @@ void VisibleNotifier::SendToSelf() WorldPacket packet; i_data.BuildPacket(packet); - i_player.GetSession()->SendPacket(&packet); + i_player.SendDirectMessage(&packet); for (std::vector::const_iterator it = i_visibleNow.begin(); it != i_visibleNow.end(); ++it) i_player.GetInitialVisiblePackets(*it); diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index d35e8600c..d08645acd 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -126,7 +126,7 @@ namespace Acore if (!player->HaveAtClient(i_source)) return; - player->GetSession()->SendPacket(i_message); + player->SendDirectMessage(i_message); } }; @@ -151,7 +151,7 @@ namespace Acore if (player == i_source || !player->HaveAtClient(i_source) || player->IsFriendlyTo(i_source)) return; - player->GetSession()->SendPacket(i_message); + player->SendDirectMessage(i_message); } }; @@ -1092,10 +1092,9 @@ namespace Acore { return false; } - } - if (i_funit->_IsValidAttackTarget(u, _spellInfo, i_obj->IsDynamicObject() ? i_obj : nullptr) && i_obj->IsWithinDistInMap(u, i_range,true,false)) + if (i_funit->_IsValidAttackTarget(u, _spellInfo, i_obj->IsDynamicObject() ? i_obj : nullptr) && i_obj->IsWithinDistInMap(u, i_range,true,false, true)) return true; @@ -1192,7 +1191,7 @@ namespace Acore } bool operator()(Unit* u) { - if (!me->IsWithinDistInMap(u, m_range, true, false)) + if (!me->IsWithinDistInMap(u, m_range, true, false, false)) return false; if (!me->IsValidAttackTarget(u)) @@ -1218,7 +1217,7 @@ namespace Acore explicit NearestHostileUnitInAttackDistanceCheck(Creature const* creature, float dist) : me(creature), m_range(dist) {} bool operator()(Unit* u) { - if (!me->IsWithinDistInMap(u, m_range, true, false)) + if (!me->IsWithinDistInMap(u, m_range, true, false, false)) return false; if (!me->CanStartAttack(u)) diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index b4b2331e1..de21a537f 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -580,14 +580,14 @@ bool Group::RemoveMember(ObjectGuid guid, const RemoveMethod& method /*= GROUP_R if (method == GROUP_REMOVEMETHOD_KICK || method == GROUP_REMOVEMETHOD_KICK_LFG) { data.Initialize(SMSG_GROUP_UNINVITE, 0); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } // Do we really need to send this opcode? data.Initialize(SMSG_GROUP_LIST, 1 + 1 + 1 + 1 + 8 + 4 + 4 + 8); data << uint8(0x10) << uint8(0) << uint8(0) << uint8(0); data << m_guid << uint32(m_counter) << uint32(0) << uint64(0); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } // Remove player from group in DB @@ -799,7 +799,7 @@ void Group::Disband(bool hideDestroy /* = false */) if (!hideDestroy) { data.Initialize(SMSG_GROUP_DESTROYED, 0); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } //we already removed player from group and in player->GetGroup() is his original group, send update @@ -812,7 +812,7 @@ void Group::Disband(bool hideDestroy /* = false */) data.Initialize(SMSG_GROUP_LIST, 1 + 1 + 1 + 1 + 8 + 4 + 4 + 8); data << uint8(0x10) << uint8(0) << uint8(0) << uint8(0); data << m_guid << uint32(m_counter) << uint32(0) << uint64(0); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } } RollId.clear(); @@ -870,7 +870,7 @@ void Group::SendLootStartRoll(uint32 CountDown, uint32 mapid, const Roll& r) continue; if (itr->second == NOT_EMITED_YET) - p->GetSession()->SendPacket(&data); + p->SendDirectMessage(&data); } } @@ -893,7 +893,7 @@ void Group::SendLootStartRollToPlayer(uint32 countDown, uint32 mapId, Player* p, voteMask &= ~ROLL_FLAG_TYPE_NEED; data << uint8(voteMask); // roll type mask - p->GetSession()->SendPacket(&data); + p->SendDirectMessage(&data); } void Group::SendLootRoll(ObjectGuid sourceGuid, ObjectGuid targetGuid, uint8 rollNumber, uint8 rollType, Roll const& roll, bool autoPass) @@ -916,7 +916,7 @@ void Group::SendLootRoll(ObjectGuid sourceGuid, ObjectGuid targetGuid, uint8 rol continue; if (itr->second != NOT_VALID) - p->GetSession()->SendPacket(&data); + p->SendDirectMessage(&data); } } @@ -939,7 +939,7 @@ void Group::SendLootRollWon(ObjectGuid sourceGuid, ObjectGuid targetGuid, uint8 continue; if (itr->second != NOT_VALID) - p->GetSession()->SendPacket(&data); + p->SendDirectMessage(&data); } } @@ -959,7 +959,7 @@ void Group::SendLootAllPassed(Roll const& roll) continue; if (itr->second != NOT_VALID) - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } } @@ -1353,7 +1353,7 @@ void Group::MasterLoot(Loot* loot, WorldObject* pLootedObject) for (Player* looter : looters) { - looter->GetSession()->SendPacket(&data); + looter->SendDirectMessage(&data); } } @@ -1735,7 +1735,7 @@ void Group::SendUpdateToPlayer(ObjectGuid playerGUID, MemberSlot* slot) data << uint8(m_raidDifficulty >= RAID_DIFFICULTY_10MAN_HEROIC); // 3.3 Dynamic Raid Difficulty - 0 normal/1 heroic } - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } void Group::UpdatePlayerOutOfRange(Player* player) @@ -1750,7 +1750,7 @@ void Group::UpdatePlayerOutOfRange(Player* player) { Player* member = itr->GetSource(); if (member && (!member->IsInMap(player) || !member->IsWithinDist(player, member->GetSightRange(player), false))) - member->GetSession()->SendPacket(&data); + member->SendDirectMessage(&data); } } @@ -1763,7 +1763,7 @@ void Group::BroadcastPacket(WorldPacket const* packet, bool ignorePlayersInBGRai continue; if (group == -1 || itr->getSubGroup() == group) - player->GetSession()->SendPacket(packet); + player->SendDirectMessage(packet); } } @@ -1774,7 +1774,7 @@ void Group::BroadcastReadyCheck(WorldPacket const* packet) Player* player = itr->GetSource(); if (player) if (IsLeader(player->GetGUID()) || IsAssistant(player->GetGUID())) - player->GetSession()->SendPacket(packet); + player->SendDirectMessage(packet); } } diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index cf859760f..684da9ac5 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -2152,7 +2152,7 @@ void Guild::BroadcastToGuild(WorldSession* session, bool officerOnly, std::strin for (auto const& [guid, member] : m_members) if (Player* player = member.FindPlayer()) if (HasRankRight(player, officerOnly ? GR_RIGHT_OFFCHATLISTEN : GR_RIGHT_GCHATLISTEN) && !player->GetSocial()->HasIgnore(session->GetPlayer()->GetGUID())) - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } } @@ -2161,14 +2161,14 @@ void Guild::BroadcastPacketToRank(WorldPacket const* packet, uint8 rankId) const for (auto const& [guid, member] : m_members) if (member.IsRank(rankId)) if (Player* player = member.FindPlayer()) - player->GetSession()->SendPacket(packet); + player->SendDirectMessage(packet); } void Guild::BroadcastPacket(WorldPacket const* packet) const { for (auto const& [guid, member] : m_members) if (Player* player = member.FindPlayer()) - player->GetSession()->SendPacket(packet); + player->SendDirectMessage(packet); } void Guild::MassInviteToEvent(WorldSession* session, uint32 minLevel, uint32 maxLevel, uint32 minRank) @@ -2206,14 +2206,14 @@ void Guild::MassInviteToEvent(WorldSession* session, uint32 minLevel, uint32 max // Members handling bool Guild::AddMember(ObjectGuid guid, uint8 rankId) { - Player* player = ObjectAccessor::FindConnectedPlayer(guid); - Player* leader = nullptr; if (this->GetLeaderGUID()) { leader = ObjectAccessor::FindConnectedPlayer(this->GetLeaderGUID()); } + Player* player = ObjectAccessor::FindConnectedPlayer(guid); + // Player cannot be in guild if (player) { diff --git a/src/server/game/Handlers/ArenaTeamHandler.cpp b/src/server/game/Handlers/ArenaTeamHandler.cpp index e982f61fc..4f293487c 100644 --- a/src/server/game/Handlers/ArenaTeamHandler.cpp +++ b/src/server/game/Handlers/ArenaTeamHandler.cpp @@ -160,7 +160,7 @@ void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket& recvData) WorldPacket data(SMSG_ARENA_TEAM_INVITE, (8 + 10)); data << GetPlayer()->GetName(); data << arenaTeam->GetName(); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); LOG_DEBUG("network", "WORLD: Sent SMSG_ARENA_TEAM_INVITE"); } diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index c66ea7361..51e532343 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -265,7 +265,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) { WorldPacket data; sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err); - member->GetSession()->SendPacket(&data); + member->SendDirectMessage(&data); }); return; @@ -283,10 +283,10 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) // send status packet sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, member->AddBattlegroundQueueId(bgQueueTypeId), STATUS_WAIT_QUEUE, avgWaitTime, 0, 0, TEAM_NEUTRAL); - member->GetSession()->SendPacket(&data); + member->SendDirectMessage(&data); sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err); - member->GetSession()->SendPacket(&data); + member->SendDirectMessage(&data); sScriptMgr->OnPlayerJoinBG(member); }); @@ -879,7 +879,7 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) if (err <= 0) { sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err); - member->GetSession()->SendPacket(&data); + member->SendDirectMessage(&data); continue; } @@ -887,10 +887,10 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) // send status packet sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bgt, queueSlot, STATUS_WAIT_QUEUE, avgWaitTime, 0, arenatype, TEAM_NEUTRAL, isRated); - member->GetSession()->SendPacket(&data); + member->SendDirectMessage(&data); sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err); - member->GetSession()->SendPacket(&data); + member->SendDirectMessage(&data); LOG_DEBUG("bg.battleground", "Battleground: player joined queue for arena as group bg queue type {} bg type {}: {}, NAME {}", bgQueueTypeId, bgTypeId, member->GetGUID().ToString(), member->GetName()); diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index 8ef1577da..5d357b0b9 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -812,7 +812,7 @@ void WorldSession::HandleChatIgnoredOpcode(WorldPacket& recvData) WorldPacket data; ChatHandler::BuildChatPacket(data, CHAT_MSG_IGNORED, LANG_UNIVERSAL, _player, _player, GetPlayer()->GetName()); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } void WorldSession::HandleChannelDeclineInvite(WorldPacket& recvPacket) diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index c8f14779b..5fc1bdffd 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -149,7 +149,7 @@ void WorldSession::HandleGroupInviteOpcode(WorldPacket& recvData) data << uint32(0); // unk data << uint8(0); // count data << uint32(0); // unk - invitedPlayer->GetSession()->SendPacket(&data); + invitedPlayer->SendDirectMessage(&data); } return; @@ -209,7 +209,7 @@ void WorldSession::HandleGroupInviteOpcode(WorldPacket& recvData) data << uint32(0); // unk data << uint8(0); // count data << uint32(0); // unk - invitedPlayer->GetSession()->SendPacket(&data); + invitedPlayer->SendDirectMessage(&data); SendPartyResult(PARTY_OP_INVITE, membername, ERR_PARTY_RESULT_OK); } @@ -292,7 +292,7 @@ void WorldSession::HandleGroupDeclineOpcode(WorldPacket& /*recvData*/) // report WorldPacket data(SMSG_GROUP_DECLINE, GetPlayer()->GetName().length()); data << GetPlayer()->GetName(); - leader->GetSession()->SendPacket(&data); + leader->SendDirectMessage(&data); } void WorldSession::HandleGroupUninviteGuidOpcode(WorldPacket& recvData) diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index f1b00066b..0dca019cf 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -206,7 +206,7 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/) WorldPacket data(SMSG_LOOT_MONEY_NOTIFY, 4 + 1); data << uint32(goldPerPlayer); data << uint8(playersNear.size() > 1 ? 0 : 1); // Controls the text displayed in chat. 0 is "Your share is..." and 1 is "You loot..." - (*i)->GetSession()->SendPacket(&data); + (*i)->SendDirectMessage(&data); } } else diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 13ef9ec66..a1c09fb47 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -1519,12 +1519,19 @@ void WorldSession::HandleMoveFlagChangeOpcode(WorldPacket& recv_data) mover->m_movementInfo.flags = movementInfo.GetMovementFlags(); + // old map - async processing, ignore + if (counter <= _player->GetMapChangeOrderCounter()) + return; + if (!ProcessMovementInfo(movementInfo, mover, plrMover, recv_data)) { recv_data.rfinish(); // prevent warnings spam return; } + if (_player->GetPendingFlightChange() == counter && opcode == CMSG_MOVE_SET_CAN_FLY_ACK) + _player->SetPendingFlightChange(false); + Opcodes response; switch (recv_data.GetOpcode()) diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 66aa1b590..1be5903bf 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -105,6 +105,13 @@ void WorldSession::HandleMoveWorldportAck() GetPlayer()->UpdatePositionData(); GetPlayer()->SendInitialPacketsBeforeAddToMap(); + + if (GetPlayer()->GetPendingFlightChange() <= GetPlayer()->GetMapChangeOrderCounter()) + { + if (!GetPlayer()->HasIncreaseMountedFlightSpeedAura() && !GetPlayer()->HasFlyAura()) + GetPlayer()->m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_CAN_FLY); + } + if (!GetPlayer()->GetMap()->AddPlayerToMap(GetPlayer())) { LOG_ERROR("network.opcode", "WORLD: failed to teleport player {} ({}) to map {} because of unknown reason!", @@ -679,6 +686,10 @@ void WorldSession::HandleForceSpeedChangeAck(WorldPacket& recvData) return; } + // old map - async processing, ignore + if (counter <= _player->GetMapChangeOrderCounter()) + return; + if (!ProcessMovementInfo(movementInfo, mover, _player, recvData)) { recvData.rfinish(); // prevent warnings spam @@ -991,6 +1002,10 @@ void WorldSession::HandleMoveRootAck(WorldPacket& recvData) return; } + // old map - async processing, ignore + if (counter <= _player->GetMapChangeOrderCounter()) + return; + if (!ProcessMovementInfo(movementInfo, mover, _player, recvData)) return; diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp index 5a7e31ca1..0ab032196 100644 --- a/src/server/game/Handlers/PetitionsHandler.cpp +++ b/src/server/game/Handlers/PetitionsHandler.cpp @@ -496,7 +496,7 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData) // update for owner if online if (Player* owner = ObjectAccessor::FindConnectedPlayer(petition->ownerGuid)) - owner->GetSession()->SendPacket(&data); + owner->SendDirectMessage(&data); return; } @@ -529,7 +529,7 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData) // update for owner if online if (Player* owner = ObjectAccessor::FindConnectedPlayer(petition->ownerGuid)) - owner->GetSession()->SendPacket(&data); + owner->SendDirectMessage(&data); } void WorldSession::HandlePetitionDeclineOpcode(WorldPacket& recvData) @@ -549,7 +549,7 @@ void WorldSession::HandlePetitionDeclineOpcode(WorldPacket& recvData) { WorldPacket data(MSG_PETITION_DECLINE, 8); data << _player->GetGUID(); - owner->GetSession()->SendPacket(&data); + owner->SendDirectMessage(&data); } } @@ -641,7 +641,7 @@ void WorldSession::HandleOfferPetitionOpcode(WorldPacket& recvData) data << uint32(0); // there 0 ... } - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 80063d638..f8d6d57d6 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -625,7 +625,7 @@ void WorldSession::HandleQuestPushResult(WorldPacket& recvPacket) WorldPacket data(MSG_QUEST_PUSH_RESULT, 8 + 4 + 1); data << _player->GetGUID(); data << uint8(msg); // valid values: 0-8 - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); _player->SetDivider(); } } diff --git a/src/server/game/Handlers/ReferAFriendHandler.cpp b/src/server/game/Handlers/ReferAFriendHandler.cpp index e616d7b47..1b2f07cb3 100644 --- a/src/server/game/Handlers/ReferAFriendHandler.cpp +++ b/src/server/game/Handlers/ReferAFriendHandler.cpp @@ -60,7 +60,7 @@ void WorldSession::HandleGrantLevel(WorldPacket& recvData) WorldPacket data2(SMSG_PROPOSE_LEVEL_GRANT, 8); data2 << _player->GetPackGUID(); - target->GetSession()->SendPacket(&data2); + target->SendDirectMessage(&data2); } void WorldSession::HandleAcceptGrantLevel(WorldPacket& recvData) diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp index ce316965e..08a4f6cac 100644 --- a/src/server/game/Handlers/TradeHandler.cpp +++ b/src/server/game/Handlers/TradeHandler.cpp @@ -646,7 +646,7 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket) WorldPacket data(SMSG_TRADE_STATUS, 12); data << uint32(TRADE_STATUS_BEGIN_TRADE); data << _player->GetGUID(); - pOther->GetSession()->SendPacket(&data); + pOther->SendDirectMessage(&data); } void WorldSession::HandleSetTradeGoldOpcode(WorldPacket& recvPacket) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index a9bb0d057..ec72d814b 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -1691,7 +1691,7 @@ void Map::SendInitTransports(Player* player) WorldPacket packet; transData.BuildPacket(packet); - player->GetSession()->SendPacket(&packet); + player->SendDirectMessage(&packet); } void Map::SendRemoveTransports(Player* player) @@ -1710,7 +1710,7 @@ void Map::SendRemoveTransports(Player* player) WorldPacket packet; transData.BuildPacket(packet); - player->GetSession()->SendPacket(&packet); + player->SendDirectMessage(&packet); } void Map::SendObjectUpdates() @@ -1736,7 +1736,7 @@ void Map::SendObjectUpdates() } iter->second.BuildPacket(packet); - iter->first->GetSession()->SendPacket(&packet); + iter->first->SendDirectMessage(&packet); packet.clear(); // clean the string } } @@ -1856,7 +1856,7 @@ uint32 Map::GetPlayersCountExceptGMs() const void Map::SendToPlayers(WorldPacket const* data) const { for (MapRefMgr::const_iterator itr = m_mapRefMgr.begin(); itr != m_mapRefMgr.end(); ++itr) - itr->GetSource()->GetSession()->SendPacket(data); + itr->GetSource()->SendDirectMessage(data); } template bool Map::AddToMap(Corpse*, bool); @@ -2061,7 +2061,7 @@ bool InstanceMap::AddPlayerToMap(Player* player) data << uint32(60000); data << uint32(instance_data ? instance_data->GetCompletedEncounterMask() : 0); data << uint8(0); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); player->SetPendingBind(mapSave->GetInstanceId(), 60000); } } @@ -2233,7 +2233,7 @@ void InstanceMap::PermBindAllPlayers() { WorldPacket data(SMSG_INSTANCE_SAVE_CREATED, 4); data << uint32(0); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); sInstanceSaveMgr->PlayerBindToInstance(player->GetGUID(), save, true, player); } diff --git a/src/server/game/Maps/MapMgr.cpp b/src/server/game/Maps/MapMgr.cpp index e113c93d2..dd8614a65 100644 --- a/src/server/game/Maps/MapMgr.cpp +++ b/src/server/game/Maps/MapMgr.cpp @@ -205,7 +205,7 @@ Map::EnterState MapMgr::PlayerCannotEnter(uint32 mapid, Player* player, bool log if (!corpseMap) { WorldPacket data(SMSG_CORPSE_NOT_IN_INSTANCE, 0); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); LOG_DEBUG("maps", "MAP: Player '{}' does not have a corpse in instance '{}' and cannot enter.", player->GetName(), mapName); return Map::CANNOT_ENTER_CORPSE_IN_DIFFERENT_INSTANCE; } diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index b8ee76d29..b6adb3010 100644 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -113,7 +113,7 @@ bool ChaseMovementGenerator::DispatchSplineToPosition(T* owner, float x, floa } owner->StopMoving(); - return true; + return false; } if (cutPath) @@ -134,7 +134,7 @@ bool ChaseMovementGenerator::DispatchSplineToPosition(T* owner, float x, floa init.SetWalk(walk); init.Launch(); - return false; + return true; } template @@ -219,18 +219,21 @@ bool ChaseMovementGenerator::DoUpdate(T* owner, uint32 time_diff) { i_recheckDistance.Reset(400); // Sniffed value - if (i_recalculateTravel && PositionOkay(owner, target, _movingTowards ? maxTarget : Optional(), angle)) + if (m_currentMode != CHASE_MODE_DISTANCING) { - if ((owner->HasUnitState(UNIT_STATE_CHASE_MOVE) && !target->isMoving() && !mutualChase) || _range) + if (i_recalculateTravel && PositionOkay(owner, target, _movingTowards ? maxTarget : Optional(), angle)) { - i_recalculateTravel = false; - i_path = nullptr; - if (cOwner) - cOwner->SetCannotReachTarget(); - owner->StopMoving(); - owner->SetInFront(target); - MovementInform(owner); - return true; + if ((owner->HasUnitState(UNIT_STATE_CHASE_MOVE) && !target->isMoving() && !mutualChase) || _range) + { + i_recalculateTravel = false; + i_path = nullptr; + if (cOwner) + cOwner->SetCannotReachTarget(); + owner->StopMoving(); + owner->SetInFront(target); + MovementInform(owner); + return true; + } } } } @@ -262,6 +265,9 @@ bool ChaseMovementGenerator::DoUpdate(T* owner, uint32 time_diff) i_leashExtensionTimer.Reset(cOwner->GetAttackTime(BASE_ATTACK)); } + if (m_currentMode == CHASE_MODE_DISTANCING) + return true; + // if the target moved, we have to consider whether to adjust if (!_lastTargetPosition || target->GetPosition() != _lastTargetPosition.value() || mutualChase != _mutualChase || !owner->IsWithinLOSInMap(target)) { diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp index 330d99c3f..ae7e476bb 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp @@ -635,7 +635,7 @@ void OutdoorPvP::BroadcastPacket(WorldPacket& data) const for (auto const& playerSet : _players) for (auto itr : playerSet) if (Player* const player = ObjectAccessor::FindPlayer(itr)) - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } void OutdoorPvP::RegisterZone(uint32 zoneId) diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index d14eee29c..84cbe96ed 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -374,7 +374,7 @@ void OpcodeTable::Initialize() /*0x0F3*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_NORMAL_FALL, STATUS_NEVER); /*0x0F4*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_HOVER, STATUS_NEVER); /*0x0F5*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_HOVER, STATUS_NEVER); - /*0x0F6*/ DEFINE_HANDLER(CMSG_MOVE_HOVER_ACK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveFlagChangeOpcode ); + /*0x0F6*/ DEFINE_HANDLER(CMSG_MOVE_HOVER_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveFlagChangeOpcode ); /*0x0F7*/ DEFINE_SERVER_OPCODE_HANDLER(MSG_MOVE_HOVER, STATUS_NEVER); /*0x0F8*/ DEFINE_HANDLER(CMSG_TRIGGER_CINEMATIC_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); /*0x0F9*/ DEFINE_HANDLER(CMSG_OPENING_CINEMATIC, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); @@ -1245,7 +1245,7 @@ void OpcodeTable::Initialize() /*0x45A*/ DEFINE_HANDLER(MSG_MOVE_SET_PITCH_RATE_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); /*0x45B*/ DEFINE_HANDLER(MSG_MOVE_SET_PITCH_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); /*0x45C*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_PITCH_RATE_CHANGE, STATUS_NEVER); - /*0x45D*/ DEFINE_HANDLER(CMSG_FORCE_PITCH_RATE_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleForceSpeedChangeAck ); + /*0x45D*/ DEFINE_HANDLER(CMSG_FORCE_PITCH_RATE_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); /*0x45E*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLINE_SET_PITCH_RATE, STATUS_NEVER); /*0x45F*/ DEFINE_HANDLER(CMSG_CALENDAR_EVENT_INVITE_NOTES, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); /*0x460*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CALENDAR_EVENT_INVITE_NOTES, STATUS_NEVER); @@ -1359,9 +1359,9 @@ void OpcodeTable::Initialize() /*0x4CC*/ DEFINE_HANDLER(CMSG_END_BATTLEFIELD_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); /*0x4CD*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MULTIPLE_PACKETS, STATUS_NEVER); /*0x4CE*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_GRAVITY_DISABLE, STATUS_NEVER); - /*0x4CF*/ DEFINE_HANDLER(CMSG_MOVE_GRAVITY_DISABLE_ACK, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleMoveFlagChangeOpcode ); + /*0x4CF*/ DEFINE_HANDLER(CMSG_MOVE_GRAVITY_DISABLE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveFlagChangeOpcode ); /*0x4D0*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_GRAVITY_ENABLE, STATUS_NEVER); - /*0x4D1*/ DEFINE_HANDLER(CMSG_MOVE_GRAVITY_ENABLE_ACK, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleMoveFlagChangeOpcode ); + /*0x4D1*/ DEFINE_HANDLER(CMSG_MOVE_GRAVITY_ENABLE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveFlagChangeOpcode ); /*0x4D2*/ DEFINE_SERVER_OPCODE_HANDLER(MSG_MOVE_GRAVITY_CHNG, STATUS_NEVER); /*0x4D3*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLINE_MOVE_GRAVITY_DISABLE, STATUS_NEVER); /*0x4D4*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLINE_MOVE_GRAVITY_ENABLE, STATUS_NEVER); @@ -1431,7 +1431,7 @@ void OpcodeTable::Initialize() /*0x514*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_ALL_COMBAT_LOG, STATUS_NEVER); /*0x515*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_LFG_DUNGEON_FINDER, STATUS_NEVER); /*0x516*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_COLLISION_HGT, STATUS_NEVER); - /*0x517*/ DEFINE_HANDLER(CMSG_MOVE_SET_COLLISION_HGT_ACK, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleForceSpeedChangeAck ); + /*0x517*/ DEFINE_HANDLER(CMSG_MOVE_SET_COLLISION_HGT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); /*0x518*/ DEFINE_HANDLER(MSG_MOVE_SET_COLLISION_HGT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); /*0x519*/ DEFINE_HANDLER(CMSG_CLEAR_RANDOM_BG_WIN_TIME, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); /*0x51A*/ DEFINE_HANDLER(CMSG_CLEAR_HOLIDAY_BG_WIN_TIME, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index eb470bd9e..91d1f9283 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -3002,12 +3002,12 @@ void AuraEffect::HandleAuraModDisarm(AuraApplication const* aurApp, uint8 mode, { if (Item* pItem = target->ToPlayer()->GetItemByPos(INVENTORY_SLOT_BAG_0, slot)) { - uint8 attacktype = Player::GetAttackBySlot(slot); + WeaponAttackType attacktype = Player::GetAttackBySlot(slot); if (attacktype < MAX_ATTACK) { target->ToPlayer()->_ApplyWeaponDamage(slot, pItem->GetTemplate(), nullptr, !apply); - target->ToPlayer()->_ApplyWeaponDependentAuraMods(pItem, WeaponAttackType(attacktype), !apply); + target->ToPlayer()->_ApplyWeaponDependentAuraMods(pItem, attacktype, !apply); } } } @@ -6177,7 +6177,7 @@ void AuraEffect::HandleAuraSetVehicle(AuraApplication const* aurApp, uint8 mode, if (apply) { data.Initialize(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, 0); - target->ToPlayer()->GetSession()->SendPacket(&data); + target->ToPlayer()->SendDirectMessage(&data); } } diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 644cce3b6..5c7407633 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -4612,7 +4612,7 @@ void Spell::SendCastResult(Player* caster, SpellInfo const* spellInfo, uint8 cas WorldPacket data(SMSG_CAST_FAILED, 1 + 4 + 1); WriteCastResultInfo(data, caster, spellInfo, castCount, result, customError); - caster->GetSession()->SendPacket(&data); + caster->SendDirectMessage(&data); } void Spell::SendCastResult(SpellCastResult result) @@ -4649,7 +4649,7 @@ void Spell::SendPetCastResult(SpellCastResult result) WorldPacket data(SMSG_PET_CAST_FAILED, 1 + 4 + 1); WriteCastResultInfo(data, player, m_spellInfo, m_cast_count, result, m_customError); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } void Spell::SendSpellStart() @@ -5184,7 +5184,7 @@ void Spell::SendResurrectRequest(Player* target) // override delay sent with SMSG_CORPSE_RECLAIM_DELAY, set instant resurrection for spells with this attribute if (m_spellInfo->HasAttribute(SPELL_ATTR3_NO_RES_TIMER)) data << uint32(0); - target->GetSession()->SendPacket(&data); + target->SendDirectMessage(&data); } void Spell::TakeCastItem() diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 7c0cd6c45..7e4405490 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -4162,8 +4162,8 @@ void Spell::EffectDuel(SpellEffIndex effIndex) WorldPacket data(SMSG_DUEL_REQUESTED, 8 + 8); data << pGameObj->GetGUID(); data << caster->GetGUID(); - caster->GetSession()->SendPacket(&data); - target->GetSession()->SendPacket(&data); + caster->SendDirectMessage(&data); + target->SendDirectMessage(&data); // create duel-info bool isMounted = (GetSpellInfo()->Id == 62875); @@ -4245,7 +4245,7 @@ void Spell::EffectSummonPlayer(SpellEffIndex /*effIndex*/) data << m_caster->GetGUID(); // summoner guid data << uint32(m_caster->GetZoneId()); // summoner zone data << uint32(MAX_PLAYER_SUMMON_DELAY * IN_MILLISECONDS); // auto decline after msecs - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } void Spell::EffectActivateObject(SpellEffIndex effIndex) @@ -6345,5 +6345,5 @@ void Spell::EffectSummonRaFFriend(SpellEffIndex /*effIndex*/) data << m_caster->GetGUID(); data << uint32(m_caster->GetZoneId()); data << uint32(MAX_PLAYER_SUMMON_DELAY * IN_MILLISECONDS); // auto decline after msecs - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 64a25a2b4..9c16e15d2 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1824,7 +1824,7 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta { if (Player const* player = unitTarget->ToPlayer()) { - if (player->GetWeaponForAttack(WeaponAttackType(BASE_ATTACK + i), true)) + if (player->GetWeaponForAttack(WeaponAttackType(i), true)) { valid = true; break; diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp index 0a69981cd..4dea787d8 100644 --- a/src/server/game/Texts/CreatureTextMgr.cpp +++ b/src/server/game/Texts/CreatureTextMgr.cpp @@ -309,7 +309,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket const* if (!target || !target->IsPlayer()) return; - target->ToPlayer()->GetSession()->SendPacket(data); + target->ToPlayer()->SendDirectMessage(data); return; } break; @@ -326,7 +326,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket const* Map::PlayerList const& players = source->GetMap()->GetPlayers(); for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) if (itr->GetSource()->GetAreaId() == areaId && (teamId == TEAM_NEUTRAL || itr->GetSource()->GetTeamId() == teamId) && (!gmOnly || itr->GetSource()->IsGameMaster())) - itr->GetSource()->GetSession()->SendPacket(data); + itr->GetSource()->SendDirectMessage(data); return; } case TEXT_RANGE_ZONE: @@ -335,7 +335,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket const* Map::PlayerList const& players = source->GetMap()->GetPlayers(); for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) if (itr->GetSource()->GetZoneId() == zoneId && (teamId == TEAM_NEUTRAL || itr->GetSource()->GetTeamId() == teamId) && (!gmOnly || itr->GetSource()->IsGameMaster())) - itr->GetSource()->GetSession()->SendPacket(data); + itr->GetSource()->SendDirectMessage(data); return; } case TEXT_RANGE_MAP: @@ -343,7 +343,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket const* Map::PlayerList const& players = source->GetMap()->GetPlayers(); for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) if ((teamId == TEAM_NEUTRAL || itr->GetSource()->GetTeamId() == teamId) && (!gmOnly || itr->GetSource()->IsGameMaster())) - itr->GetSource()->GetSession()->SendPacket(data); + itr->GetSource()->SendDirectMessage(data); return; } case TEXT_RANGE_WORLD: @@ -352,7 +352,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket const* for (WorldSessionMgr::SessionMap::const_iterator itr = sessionMap.begin(); itr != sessionMap.end(); ++itr) if (Player* player = itr->second->GetPlayer()) if ((teamId == TEAM_NEUTRAL || player->GetTeamId() == teamId) && (!gmOnly || player->IsGameMaster())) - player->GetSession()->SendPacket(data); + player->SendDirectMessage(data); return; } case TEXT_RANGE_NORMAL: diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 1113d73a5..c2891c0d0 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -433,7 +433,7 @@ public: } data.hexlike(); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); handler->PSendSysMessage(LANG_COMMAND_OPCODESENT, data.GetOpcode(), unit->GetName()); return true; } diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index dcf7a5a8a..d6ed24c23 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -487,7 +487,7 @@ public: uint32 queueSlot = 0; WorldPacket data; sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_IN_PROGRESS, 0, bg->GetStartTime(), bg->GetArenaType(), teamId); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); // Remove from LFG queues sLFGMgr->LeaveAllLfgQueues(player->GetGUID(), false); diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index 12dd15f11..20ffbe0e5 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -328,7 +328,7 @@ public: data << uint8(op); data << uint16(val); data << uint16(mark ? *mark : 65535); - target->GetSession()->SendPacket(&data); + target->SendDirectMessage(&data); return true; } diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp index 951e09ad0..5e2a6b871 100644 --- a/src/server/scripts/Commands/cs_ticket.cpp +++ b/src/server/scripts/Commands/cs_ticket.cpp @@ -146,7 +146,7 @@ public: { WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4); data << uint32(GMTICKET_RESPONSE_TICKET_DELETED); - submitter->GetSession()->SendPacket(&data); + submitter->SendDirectMessage(&data); ChatHandler(submitter->GetSession()).SendSysMessage(LANG_TICKET_CLOSED); } return true; @@ -259,7 +259,7 @@ public: // Force abandon ticket WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4); data << uint32(GMTICKET_RESPONSE_TICKET_DELETED); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } return true; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mor_grayhoof.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mor_grayhoof.cpp index c416371cd..72ce75744 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mor_grayhoof.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mor_grayhoof.cpp @@ -53,7 +53,7 @@ enum Spells SPELL_FAERIE_DRAGON_FORM = 27546, SPELL_ARCANE_EXPLOSION = 22271, SPELL_REFLECTION = 27564, - SPELL_CHAIN_LIGHTING = 27567, + SPELL_CHAIN_LIGHTNING = 27567, SPELL_SLEEP = 20663 // Guessed }; @@ -68,7 +68,7 @@ enum Phases std::vector catSpells = { SPELL_SHRED, SPELL_RAKE, SPELL_FEROCIOUS_BITE }; std::vector humanSpells = { SPELL_HURRICANE, SPELL_MOONFIRE, SPELL_SHOCK, SPELL_HEALING_TOUCH, SPELL_REJUVENATION }; std::vector bearSpells = { SPELL_DEMORALIZING_ROAR, SPELL_MAUL, SPELL_SWIPE }; -std::vector faerieSpells = { SPELL_ARCANE_EXPLOSION, SPELL_REFLECTION, SPELL_CHAIN_LIGHTING, SPELL_SLEEP }; +std::vector faerieSpells = { SPELL_ARCANE_EXPLOSION, SPELL_REFLECTION, SPELL_CHAIN_LIGHTNING, SPELL_SLEEP }; struct boss_mor_grayhoof : public BossAI { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp index 366622029..d1dbc4ff9 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp @@ -234,7 +234,7 @@ public: { switch (id) { - case 5: + case 6: events.ScheduleEvent(EVENT_TELEPORT_1, 2s); break; } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp index 12fab34d1..9252546f0 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp @@ -44,7 +44,7 @@ public: void MovementInform(uint32 type, uint32 id) override { - if (type != WAYPOINT_MOTION_TYPE || id != 12) + if (type != WAYPOINT_MOTION_TYPE || id != 13) { return; } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp index 96a97a1ec..c1760cc5c 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp @@ -592,12 +592,12 @@ struct boss_nefarian : public BossAI return; } - if (id == 3) + if (id == 4) { Talk(SAY_INTRO); } - if (id == 5) + if (id == 6) { DoCastAOE(SPELL_SHADOWFLAME_INITIAL); Talk(SAY_SHADOWFLAME); diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp index 7b3dd97e5..45cbf8d9a 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp @@ -64,12 +64,12 @@ enum Koltira //NPC_DEATH_KNIGHT_MOUNT = 29201, MODEL_DEATH_KNIGHT_MOUNT = 25278, - POINT_STAND_UP = 0, - POINT_BOX = 1, - POINT_ANTI_MAGIC_ZONE = 2, + POINT_STAND_UP = 1, + POINT_BOX = 2, + POINT_ANTI_MAGIC_ZONE = 3, - POINT_MOUNT = 0, - POINT_DESPAWN = 1 + POINT_MOUNT = 1, + POINT_DESPAWN = 2 }; class npc_koltira_deathweaver : public CreatureScript diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp index cc38dd488..3169ee1bb 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp @@ -56,7 +56,7 @@ enum Events enum Misc { WEAPON_KIRTONOS_STAFF = 11365, - POINT_KIRTONOS_LAND = 13, + POINT_KIRTONOS_LAND = 14, KIRTONOS_PATH = 105061, EMOTE_SUMMONED = 0 diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index 3034bb96e..1df2bc395 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -382,7 +382,7 @@ class spell_madrigosa_activate_barrier : public SpellScript WorldPacket pkt; go->BuildValuesUpdateBlockForPlayer(&data, player); data.BuildPacket(pkt); - player->GetSession()->SendPacket(&pkt); + player->SendDirectMessage(&pkt); }); } } @@ -409,7 +409,7 @@ class spell_madrigosa_deactivate_barrier : public SpellScript WorldPacket pkt; go->BuildValuesUpdateBlockForPlayer(&data, player); data.BuildPacket(pkt); - player->GetSession()->SendPacket(&pkt); + player->SendDirectMessage(&pkt); }); } } diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index 942761c4c..efff4f78b 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -486,7 +486,7 @@ struct npc_harrison_jones : public ScriptedAI void MovementInform(uint32 type, uint32 id) override { // at gong - if (type == WAYPOINT_MOTION_TYPE && id == 2 && _phase == PHASE_GONG) + if (type == WAYPOINT_MOTION_TYPE && id == 3 && _phase == PHASE_GONG) { if (GameObject* gong = _instance->GetGameObject(DATA_STRANGE_GONG)) me->SetFacingToObject(gong); @@ -503,13 +503,13 @@ struct npc_harrison_jones : public ScriptedAI }); } // to the massive gate - else if (type == WAYPOINT_MOTION_TYPE && id == 1 && _phase == PHASE_GATE_CLOSED) + else if (type == WAYPOINT_MOTION_TYPE && id == 2 && _phase == PHASE_GATE_CLOSED) { me->SetEntry(NPC_HARRISON_JONES_1); Talk(SAY_HARRISON_2); } // at massive gate - else if (type == WAYPOINT_MOTION_TYPE && id == 2 && _phase == PHASE_GATE_CLOSED) + else if (type == WAYPOINT_MOTION_TYPE && id == 3 && _phase == PHASE_GATE_CLOSED) { me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING); Talk(SAY_HARRISON_3); @@ -599,7 +599,7 @@ struct npc_amanishi_lookout : public NullCreatureAI void MovementInform(uint32 type, uint32 id) override { // at boss - if (type == WAYPOINT_MOTION_TYPE && id == 8) // should despawn with waypoint script + if (type == WAYPOINT_MOTION_TYPE && id == 9) // should despawn with waypoint script me->DespawnOrUnsummon(0s, 0s); } private: diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp index 7ba24407f..251e76ad5 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp @@ -80,7 +80,7 @@ enum Misc MODEL_OHGAN_MOUNT = 15271, PATH_MANDOKIR = 492861, - POINT_MANDOKIR_END = 24, + POINT_MANDOKIR_END = 25, CHAINED_SPIRIT_COUNT = 20, ACTION_CHARGE = 1 }; diff --git a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp index 1ed0f1f03..b570c1d18 100644 --- a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp @@ -149,13 +149,13 @@ struct npc_sentinel_leader : public ScriptedAI { switch (id) { - case 1: - case 4: - case 7: + case 2: + case 5: case 8: - case 13: + case 9: case 14: - case 17: + case 15: + case 18: Creature* SentinelSpy = me->FindNearestCreature(NPC_SENTINEL_SPY, 2.0f, true); if (SentinelSpy) { @@ -282,10 +282,10 @@ struct npc_sentinel_infiltrator : public ScriptedAI case PATH_ONE: switch (id) { - case 5: - case 8: - case 14: - case 18: + case 6: + case 9: + case 15: + case 19: Creature* SentinelInfiltrator = me->FindNearestCreature(NPC_SENTINEL_INFILTRATOR, 3.5f, true); if (SentinelInfiltrator) { @@ -299,10 +299,10 @@ struct npc_sentinel_infiltrator : public ScriptedAI case PATH_TWO: switch (id) { - case 5: - case 7: - case 14: - case 17: + case 6: + case 8: + case 15: + case 18: Creature* SentinelInfiltrator = me->FindNearestCreature(NPC_SENTINEL_INFILTRATOR, 3.5f, true); if (SentinelInfiltrator) { diff --git a/src/server/scripts/Events/hallows_end.cpp b/src/server/scripts/Events/hallows_end.cpp index 273e5d38f..f9bf2a2c0 100644 --- a/src/server/scripts/Events/hallows_end.cpp +++ b/src/server/scripts/Events/hallows_end.cpp @@ -1085,9 +1085,9 @@ struct boss_headless_horseman : public ScriptedAI { if (type == WAYPOINT_MOTION_TYPE) { - if (point == 0) + if (point == 1) me->CastSpell(me, SPELL_HEAD_VISUAL, true); - else if (point == 11) + else if (point == 12) { me->ReplaceAllUnitFlags(UNIT_FLAG_NONE); me->StopMoving(); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp index db6e61927..439817bc4 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp @@ -18,17 +18,16 @@ #include "CreatureScript.h" #include "ScriptedCreature.h" #include "SpellInfo.h" +#include "SpellMgr.h" #include "culling_of_stratholme.h" enum Spells { SPELL_CURSE_OF_EXERTION = 52772, - SPELL_WOUNDING_STRIKE_N = 52771, - SPELL_WOUNDING_STRIKE_H = 58830, + SPELL_WOUNDING_STRIKE = 52771, SPELL_TIME_STOP = 58848, SPELL_TIME_WARP = 52766, - SPELL_TIME_STEP_N = 52737, - SPELL_TIME_STEP_H = 58829, + SPELL_TIME_STEP = 52737, }; enum Events @@ -87,7 +86,7 @@ public: void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override { - if (spellInfo->Id == SPELL_TIME_STEP_H || spellInfo->Id == SPELL_TIME_STEP_N) + if (spellInfo->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_TIME_STEP, me)) { if (target == me) return; @@ -98,7 +97,7 @@ public: return; } warps++; - me->CastSpell(target, DUNGEON_MODE(SPELL_TIME_STEP_N, SPELL_TIME_STEP_H), true); + me->CastSpell(target, SPELL_TIME_STEP, true); } } @@ -119,7 +118,7 @@ public: events.Repeat(9s); break; case EVENT_SPELL_WOUNDING_STRIKE: - me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_WOUNDING_STRIKE_N, SPELL_WOUNDING_STRIKE_H), false); + me->CastSpell(me->GetVictim(), SPELL_WOUNDING_STRIKE, false); events.Repeat(6s); break; case EVENT_SPELL_TIME_STOP: @@ -130,7 +129,7 @@ public: Talk(SAY_TIME_WARP); me->CastSpell(me, SPELL_TIME_WARP, false); if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) - me->CastSpell(target, DUNGEON_MODE(SPELL_TIME_STEP_N, SPELL_TIME_STEP_H), true); + me->CastSpell(target, SPELL_TIME_STEP, true); events.Repeat(25s); break; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp index bc066fd1f..eefb3f71b 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp @@ -22,12 +22,9 @@ enum Spells { - SPELL_CARRION_SWARM_N = 52720, - SPELL_CARRION_SWARM_H = 58852, - SPELL_MIND_BLAST_N = 52722, - SPELL_MIND_BLAST_H = 58850, - SPELL_SLEEP_N = 52721, - SPELL_SLEEP_H = 58849, + SPELL_CARRION_SWARM = 52720, + SPELL_MIND_BLAST = 52722, + SPELL_SLEEP = 52721, SPELL_VAMPIRIC_TOUCH = 52723, }; @@ -145,18 +142,18 @@ public: switch (events.ExecuteEvent()) { case EVENT_SPELL_CARRION_SWARM: - me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_CARRION_SWARM_N, SPELL_CARRION_SWARM_H), false); + me->CastSpell(me->GetVictim(), SPELL_CARRION_SWARM, false); events.Repeat(7s); break; case EVENT_SPELL_MIND_BLAST: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) - me->CastSpell(target, DUNGEON_MODE(SPELL_MIND_BLAST_N, SPELL_MIND_BLAST_H), false); + me->CastSpell(target, SPELL_MIND_BLAST, false); events.Repeat(6s); break; case EVENT_SPELL_SLEEP: Talk(SAY_SLEEP); if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) - me->CastSpell(target, DUNGEON_MODE(SPELL_SLEEP_N, SPELL_SLEEP_H), false); + me->CastSpell(target, SPELL_SLEEP, false); events.Repeat(17s); break; case EVENT_SPELL_VAMPIRIC_TOUCH: diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp index e97fab363..e1ec2ec43 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp @@ -21,10 +21,8 @@ enum Spells { - SPELL_CONSTRICTING_CHAINS_N = 52696, - SPELL_CONSTRICTING_CHAINS_H = 58823, - SPELL_DISEASE_EXPULSION_N = 52666, - SPELL_DISEASE_EXPULSION_H = 58824, + SPELL_CONSTRICTING_CHAINS = 52696, + SPELL_DISEASE_EXPULSION = 52666, SPELL_FRENZY = 58841, }; @@ -97,7 +95,7 @@ public: switch (events.ExecuteEvent()) { case EVENT_SPELL_DISEASE_EXPULSION: - me->CastSpell(me, DUNGEON_MODE(SPELL_DISEASE_EXPULSION_N, SPELL_DISEASE_EXPULSION_H), false); + me->CastSpell(me, SPELL_DISEASE_EXPULSION, false); events.Repeat(6s); break; case EVENT_SPELL_FRENZY: @@ -106,7 +104,7 @@ public: break; case EVENT_SPELL_CONSTRICTING_CHAINS: if (Unit* pTarget = SelectTarget(SelectTargetMethod::MinThreat, 0, 50.0f, true)) - me->CastSpell(pTarget, DUNGEON_MODE(SPELL_CONSTRICTING_CHAINS_N, SPELL_CONSTRICTING_CHAINS_H), false); + me->CastSpell(pTarget, SPELL_CONSTRICTING_CHAINS, false); events.Repeat(14s); break; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp index 9ea60c7b0..545645d8c 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp @@ -23,14 +23,12 @@ enum Spells { - SPELL_SHADOW_BOLT_N = 57725, - SPELL_SHADOW_BOLT_H = 58827, + SPELL_SHADOW_BOLT = 57725, SPELL_STEAL_FLESH_CHANNEL = 52708, SPELL_STEAL_FLESH_TARGET = 52711, SPELL_STEAL_FLESH_CASTER = 52712, SPELL_SUMMON_GHOULS = 52451, - SPELL_EXPLODE_GHOUL_N = 52480, - SPELL_EXPLODE_GHOUL_H = 58825, + SPELL_EXPLODE_GHOUL = 52480, SPELL_CURSE_OF_TWISTED_FAITH = 58845, }; @@ -112,7 +110,7 @@ public: if (Creature* cr = ObjectAccessor::GetCreature(*me, (*itr))) if (cr->IsAlive()) { - me->CastSpell(cr, DUNGEON_MODE(SPELL_EXPLODE_GHOUL_N, SPELL_EXPLODE_GHOUL_H), false); + me->CastSpell(cr, SPELL_EXPLODE_GHOUL, false); return; } } @@ -129,7 +127,7 @@ public: switch (events.ExecuteEvent()) { case EVENT_SPELL_SHADOW_BOLT: - me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_SHADOW_BOLT_N, SPELL_SHADOW_BOLT_H), false); + me->CastSpell(me->GetVictim(), SPELL_SHADOW_BOLT, false); events.Repeat(10s); break; case EVENT_SPELL_STEAL_FLESH: diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index cdc65fce3..0403df2f5 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -141,8 +141,7 @@ enum Spells { // Combat spells SPELL_ARTHAS_AURA = 52442, - SPELL_ARTHAS_EXORCISM_N = 52445, - SPELL_ARTHAS_EXORCISM_H = 58822, + SPELL_ARTHAS_EXORCISM = 52445, SPELL_ARTHAS_HOLY_LIGHT = 52444, // Visuals @@ -1178,7 +1177,7 @@ public: { case EVENT_COMBAT_EXORCISM: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(target, DUNGEON_MODE(SPELL_ARTHAS_EXORCISM_N, SPELL_ARTHAS_EXORCISM_H), false); + me->CastSpell(target, SPELL_ARTHAS_EXORCISM, false); combatEvents.Repeat(7300ms); break; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp index fb4185d8f..98b15dd76 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp @@ -114,10 +114,10 @@ struct boss_lieutenant_drake : public BossAI { switch (point) { - case 7: + case 8: Talk(SAY_ENTER); break; - case 10: + case 11: pathId = (me->GetEntry() * 10) + 1; runSecondPath = true; break; diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp index 1e64e45bd..5506a4595 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp @@ -51,7 +51,7 @@ enum Belnistrasz EVENT_FROST_NOVA = 6, PATH_ESCORT = 871710, - POINT_REACH_IDOL = 17, + POINT_REACH_IDOL = 18, QUEST_EXTINGUISHING_THE_IDOL = 3525, diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp index c279f925d..6d9e71f56 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp @@ -70,7 +70,7 @@ enum Emotes enum Points { POINT_AIR = 0, - POINT_GROUND = 2, + POINT_GROUND = 3, POINT_PARALYZE = 2 }; diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h index 39f15f6ab..90222743e 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h @@ -28,7 +28,7 @@ enum ANData { DATA_KRIKTHIR = 0, DATA_HADRONOX = 1, - DATA_ANUBARAK_EVENT = 2, + DATA_ANUBARAK = 2, MAX_ENCOUNTERS = 3 }; @@ -41,6 +41,8 @@ enum ANIds NPC_SKITTERING_INFECTIOR = 28736, NPC_KRIKTHIR_THE_GATEWATCHER = 28684, NPC_HADRONOX = 28921, + NPC_ANUBARAK = 29120, + NPC_ANUB_AR_CHAMPION = 29062, NPC_ANUB_AR_NECROMANCER = 29063, NPC_ANUB_AR_CRYPTFIEND = 29064, @@ -59,4 +61,6 @@ inline AI* GetAzjolNerubAI(T* obj) return GetInstanceAI(obj, AzjolNerubScriptName); } +#define RegisterAzjolNerubCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetAzjolNerubAI) + #endif diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp index ef3bebdfa..ec4dd204c 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp @@ -55,223 +55,347 @@ enum Yells enum Misc { ACHIEV_TIMED_START_EVENT = 20381, +}; - EVENT_CARRION_BEETELS = 1, +enum Events +{ + EVENT_CARRION_BEETLES = 1, EVENT_LEECHING_SWARM = 2, EVENT_IMPALE = 3, EVENT_POUND = 4, - EVENT_CLOSE_DOORS = 5, - EVENT_EMERGE = 6, - EVENT_SUMMON_VENOMANCER = 7, - EVENT_SUMMON_DARTER = 8, - EVENT_SUMMON_GUARDIAN = 9, - EVENT_SUMMON_ASSASSINS = 10, - EVENT_ENABLE_ROTATE = 11, + EVENT_ENABLE_ROTATE = 5, + EVENT_CLOSE_DOORS = 6, + EVENT_EMERGE = 7, + EVENT_SUMMON_GUARDIAN = 8, + EVENT_SUMMON_VENOMANCER = 9, + EVENT_SUMMON_DARTER = 10, + EVENT_SUMMON_ASSASSINS = 11, EVENT_KILL_TALK = 12 }; -enum ANAnubarakNpcs +enum CreatureIds { + NPC_WORLD_TRIGGER = 22515, NPC_ANUBAR_GUARDIAN = 29216, - NPC_ANUBAR_VENOMANCER = 29217 + NPC_ANUBAR_VENOMANCER = 29217, }; -class boss_anub_arak : public CreatureScript +enum Phases : uint8 { - public: - boss_anub_arak() : CreatureScript("boss_anub_arak") { } + PHASE_EMERGED = 1, + PHASE_SUBMERGED +}; - struct boss_anub_arakAI : public BossAI +enum SubPhase : uint8 +{ + SUBMERGE_NONE = 0, + SUBMERGE_75 = 1, + SUBMERGE_50 = 2, + SUBMERGE_25 = 3, +}; + +enum SummonGroups +{ + SUMMON_GROUP_WORLD_TRIGGER_GUARDIAN = 1, + SUMMON_GROUP_WORLD_TRIGGER_BALCONY = 2 +}; + +struct boss_anub_arak : public BossAI +{ + explicit boss_anub_arak(Creature* creature) : BossAI(creature, DATA_ANUBARAK), _intro(false), + _submergePhase(SUBMERGE_NONE), _remainingLargeSummonsBeforeEmerge(0), _balconySummons(me) + { + me->m_SightDistance = 120.0f; + } + + void Reset() override + { + BossAI::Reset(); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); + _remainingLargeSummonsBeforeEmerge = 0; + _submergePhase = SUBMERGE_NONE; + + ScheduleHealthCheckEvent({ 75, 50, 25 }, [&]{ + events.Reset(); + Talk(SAY_SUBMERGE); + DoCastSelf(SPELL_CLEAR_ALL_DEBUFFS, true); + DoCastSelf(SPELL_SUBMERGE, false); + }, false); + } + + void SpellHitTarget(Unit* /*caster*/, SpellInfo const* spellInfo) override + { + if (spellInfo->Id == SPELL_SUBMERGE) { - boss_anub_arakAI(Creature* creature) : BossAI(creature, DATA_ANUBARAK_EVENT) - { - me->m_SightDistance = 120.0f; - _intro = false; - _summonedMinions = false; - } + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveAurasDueToSpell(SPELL_LEECHING_SWARM); + DoCastSelf(SPELL_IMPALE_PERIODIC, true); - void EnterEvadeMode(EvadeReason why) override - { - me->DisableRotate(false); - BossAI::EnterEvadeMode(why); - } - - void MoveInLineOfSight(Unit* who) override - { - if (!_intro && who->IsPlayer()) - { - _intro = true; - Talk(SAY_INTRO); - } - BossAI::MoveInLineOfSight(who); - } - - void JustDied(Unit* killer) override - { - Talk(SAY_DEATH); - BossAI::JustDied(killer); - } - - void KilledUnit(Unit* /*victim*/) override - { - if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) - { - Talk(SAY_SLAY); - events.ScheduleEvent(EVENT_KILL_TALK, 6s); - } - } - - void JustSummoned(Creature* summon) override - { - summons.Summon(summon); - if (!summon->IsTrigger()) - summon->SetInCombatWithZone(); - } - - void Reset() override - { - BossAI::Reset(); - _summonedMinions = false; - me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); - instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); - - ScheduleHealthCheckEvent({ 75, 50, 25 }, [&]{ - Talk(SAY_SUBMERGE); - _summonedMinions = false; - DoCastSelf(SPELL_CLEAR_ALL_DEBUFFS, true); - DoCastSelf(SPELL_SUBMERGE, false); - - me->m_Events.AddEventAtOffset([this] { - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); - DoCastSelf(SPELL_IMPALE_PERIODIC, true); - }, 2s); - - events.Reset(); - events.ScheduleEvent(EVENT_EMERGE, 60s); - events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 2s); - events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 4s); - events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 15s); - events.ScheduleEvent(EVENT_SUMMON_VENOMANCER, 20s); - events.ScheduleEvent(EVENT_SUMMON_DARTER, 30s); - events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 35s); - }, false); - } - - void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override - { - if (!me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) - return; - - if (_summonedMinions && !summons.IsAnyCreatureWithEntryAlive(NPC_ANUBAR_GUARDIAN) && !summons.IsAnyCreatureWithEntryAlive(NPC_ANUBAR_VENOMANCER)) - { - events.Reset(); - events.ScheduleEvent(EVENT_EMERGE, 5s); - } - } - - void JustEngagedWith(Unit* ) override - { - Talk(SAY_AGGRO); - instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); - - events.ScheduleEvent(EVENT_CARRION_BEETELS, 6500ms); - events.ScheduleEvent(EVENT_LEECHING_SWARM, 20s); - events.ScheduleEvent(EVENT_POUND, 15s); - events.ScheduleEvent(EVENT_CLOSE_DOORS, 5s); - } - - void SummonHelpers(float x, float y, float z, uint32 spellId) - { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); - me->SummonCreature(spellInfo->Effects[EFFECT_0].MiscValue, x, y, z, 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - scheduler.Update(diff); - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_CLOSE_DOORS: - _JustEngagedWith(); - break; - case EVENT_CARRION_BEETELS: - me->CastSpell(me, SPELL_CARRION_BEETLES, false); - events.ScheduleEvent(EVENT_CARRION_BEETELS, 25s); - break; - case EVENT_LEECHING_SWARM: - Talk(SAY_LOCUST); - me->CastSpell(me, SPELL_LEECHING_SWARM, false); - events.ScheduleEvent(EVENT_LEECHING_SWARM, 20s); - break; - case EVENT_POUND: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 10.0f)) - { - me->CastSpell(me, SPELL_SELF_ROOT, true); - me->DisableRotate(true); - me->SendMovementFlagUpdate(); - events.ScheduleEvent(EVENT_ENABLE_ROTATE, 3300ms); - me->CastSpell(target, SPELL_POUND, false); - } - events.ScheduleEvent(EVENT_POUND, 18s); - break; - case EVENT_ENABLE_ROTATE: - me->RemoveAurasDueToSpell(SPELL_SELF_ROOT); - me->DisableRotate(false); - break; - case EVENT_EMERGE: - me->CastSpell(me, SPELL_EMERGE, true); - me->RemoveAura(SPELL_SUBMERGE); - me->RemoveAura(SPELL_IMPALE_PERIODIC); - me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); - events.ScheduleEvent(EVENT_CARRION_BEETELS, 6500ms); - events.ScheduleEvent(EVENT_LEECHING_SWARM, 20s); - events.ScheduleEvent(EVENT_POUND, 15s); - break; - case EVENT_SUMMON_ASSASSINS: - SummonHelpers(509.32f, 247.42f, 239.48f, SPELL_SUMMON_ASSASSIN); - SummonHelpers(589.51f, 240.19f, 236.0f, SPELL_SUMMON_ASSASSIN); - break; - case EVENT_SUMMON_DARTER: - SummonHelpers(509.32f, 247.42f, 239.48f, SPELL_SUMMON_DARTER); - SummonHelpers(589.51f, 240.19f, 236.0f, SPELL_SUMMON_DARTER); - break; - case EVENT_SUMMON_GUARDIAN: - SummonHelpers(550.34f, 316.00f, 234.30f, SPELL_SUMMON_GUARDIAN); - break; - case EVENT_SUMMON_VENOMANCER: - _summonedMinions = true; - SummonHelpers(550.34f, 316.00f, 234.30f, SPELL_SUMMON_VENOMANCER); - break; - } - - if (!me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) - DoMeleeAttackIfReady(); - } - - private: - bool _intro; - bool _summonedMinions; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetAzjolNerubAI(creature); + ++_submergePhase; + ScheduleSubmerged(); } + } + + void ScheduleEmerged() + { + events.Reset(); + events.SetPhase(PHASE_EMERGED); + events.ScheduleEvent(EVENT_CARRION_BEETLES, 6500ms, 0, PHASE_EMERGED); + events.ScheduleEvent(EVENT_LEECHING_SWARM, 20s, 0, PHASE_EMERGED); + events.ScheduleEvent(EVENT_POUND, 15s, 0, PHASE_EMERGED); + }; + + void ScheduleSubmerged() + { + events.Reset(); + events.SetPhase(PHASE_SUBMERGED); + events.ScheduleEvent(EVENT_EMERGE, 60s, 0, PHASE_SUBMERGED); + + switch (_submergePhase) + { + case SUBMERGE_75: + events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 4s, 0, PHASE_SUBMERGED); + if (IsHeroic()) + events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 7s, 0, PHASE_SUBMERGED); + + _remainingLargeSummonsBeforeEmerge = IsHeroic() ? 2 : 1; + + events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 4s, 0, PHASE_SUBMERGED); + events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 24s, 0, PHASE_SUBMERGED); + events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 44s, 0, PHASE_SUBMERGED); + break; + case SUBMERGE_50: + events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 4s, 0, PHASE_SUBMERGED); + if (IsHeroic()) + events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 7s, 0, PHASE_SUBMERGED); + + events.ScheduleEvent(EVENT_SUMMON_VENOMANCER, 24s, 0, PHASE_SUBMERGED); + if (IsHeroic()) + events.ScheduleEvent(EVENT_SUMMON_VENOMANCER, 29s, 0, PHASE_SUBMERGED); + + _remainingLargeSummonsBeforeEmerge = IsHeroic() ? 4 : 2; + + events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 4s, 0, PHASE_SUBMERGED); + events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 24s, 0, PHASE_SUBMERGED); + events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 44s, 0, PHASE_SUBMERGED); + break; + case SUBMERGE_25: + events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 4s, 0, PHASE_SUBMERGED); + if (IsHeroic()) + events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 7s, 0, PHASE_SUBMERGED); + + events.ScheduleEvent(EVENT_SUMMON_VENOMANCER, 24s, 0, PHASE_SUBMERGED); + if (IsHeroic()) + events.ScheduleEvent(EVENT_SUMMON_VENOMANCER, 29s, 0, PHASE_SUBMERGED); + + _remainingLargeSummonsBeforeEmerge = IsHeroic() ? 4 : 2; + + events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 4s, 0, PHASE_SUBMERGED); + events.ScheduleEvent(EVENT_SUMMON_DARTER, 4s, 0, PHASE_SUBMERGED); + + events.ScheduleEvent(EVENT_SUMMON_DARTER, 12s, 0, PHASE_SUBMERGED); + + events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 24s, 0, PHASE_SUBMERGED); + events.ScheduleEvent(EVENT_SUMMON_DARTER, 26s, 0, PHASE_SUBMERGED); + + events.ScheduleEvent(EVENT_SUMMON_DARTER, 32s, 0, PHASE_SUBMERGED); + + events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 44s, 0, PHASE_SUBMERGED); + events.ScheduleEvent(EVENT_SUMMON_DARTER, 45s, 0, PHASE_SUBMERGED); + break; + default: + break; + } + } + + void JustEngagedWith(Unit* who) override + { + BossAI::JustEngagedWith(who); + Talk(SAY_AGGRO); + instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); + + events.SetPhase(PHASE_EMERGED); + events.ScheduleEvent(EVENT_CLOSE_DOORS, 5s); + ScheduleEmerged(); + + // set up world triggers + std::list summoned; + me->SummonCreatureGroup(SUMMON_GROUP_WORLD_TRIGGER_GUARDIAN, &summoned); + if (summoned.empty()) + { + EnterEvadeMode(EVADE_REASON_OTHER); + return; + } + TempSummon* guardianTrigger = summoned.front(); + _guardianTriggerGUID = guardianTrigger->GetGUID(); + + summoned.clear(); + _balconySummons.clear(); + me->SummonCreatureGroup(SUMMON_GROUP_WORLD_TRIGGER_BALCONY, &summoned); + if (summoned.empty()) + { + EnterEvadeMode(EVADE_REASON_OTHER); + return; + } + for (auto const& summon : summoned) + _balconySummons.Summon(summon); + } + + void EnterEvadeMode(EvadeReason why) override + { + me->DisableRotate(false); + BossAI::EnterEvadeMode(why); + summons.DespawnAll(); + } + + void MoveInLineOfSight(Unit* who) override + { + if (!_intro && who->IsPlayer()) + { + _intro = true; + Talk(SAY_INTRO); + } + BossAI::MoveInLineOfSight(who); + } + + void JustDied(Unit* killer) override + { + Talk(SAY_DEATH); + BossAI::JustDied(killer); + } + + void KilledUnit(Unit* /*victim*/) override + { + if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) + { + Talk(SAY_SLAY); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); + } + } + + void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override + { + if (!me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) + return; + + switch (summon->GetEntry()) + { + case NPC_ANUBAR_GUARDIAN: + case NPC_ANUBAR_VENOMANCER: + { + --_remainingLargeSummonsBeforeEmerge; + if (_remainingLargeSummonsBeforeEmerge == 0) + { + events.Reset(); + events.ScheduleEvent(EVENT_EMERGE, 5s); + } + break; + } + default: + break; + } + } + + void SummonedCreatureEvade(Creature* /*summon*/) override + { + EnterEvadeMode(EVADE_REASON_OTHER); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + events.Update(diff); + scheduler.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (events.ExecuteEvent()) + { + case EVENT_CLOSE_DOORS: + BossAI::_JustEngagedWith(); + break; + case EVENT_CARRION_BEETLES: + DoCastSelf(SPELL_CARRION_BEETLES); + events.ScheduleEvent(EVENT_CARRION_BEETLES, 25s, 0, PHASE_EMERGED); + break; + case EVENT_LEECHING_SWARM: + Talk(SAY_LOCUST); + DoCastSelf(SPELL_LEECHING_SWARM); + events.ScheduleEvent(EVENT_LEECHING_SWARM, 20s, 0, PHASE_EMERGED); + break; + case EVENT_POUND: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 10.0f)) + { + DoCastSelf(SPELL_SELF_ROOT, true); + me->DisableRotate(true); + me->SendMovementFlagUpdate(); + events.ScheduleEvent(EVENT_ENABLE_ROTATE, 3300ms); + DoCast(target, SPELL_POUND); + } + events.ScheduleEvent(EVENT_POUND, 18s); + break; + case EVENT_ENABLE_ROTATE: + me->RemoveAurasDueToSpell(SPELL_SELF_ROOT); + me->DisableRotate(false); + break; + case EVENT_EMERGE: + me->RemoveAurasDueToSpell(SPELL_SUBMERGE); + me->RemoveAurasDueToSpell(SPELL_IMPALE_PERIODIC); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + DoCastSelf(SPELL_EMERGE); + ScheduleEmerged(); + break; + case EVENT_SUMMON_GUARDIAN: + if (Creature* trigger = ObjectAccessor::GetCreature(*me, _guardianTriggerGUID)) + trigger->CastSpell(trigger, SPELL_SUMMON_GUARDIAN, true, nullptr, nullptr, me->GetGUID()); + break; + case EVENT_SUMMON_VENOMANCER: + if (Creature* trigger = ObjectAccessor::GetCreature(*me, _guardianTriggerGUID)) + trigger->CastSpell(trigger, SPELL_SUMMON_VENOMANCER, true, nullptr, nullptr, me->GetGUID()); + break; + case EVENT_SUMMON_DARTER: + if (Creature* trigger = ObjectAccessor::GetCreature(*me, Acore::Containers::SelectRandomContainerElement(_balconySummons))) + trigger->CastSpell(trigger, SPELL_SUMMON_DARTER, true, nullptr, nullptr, me->GetGUID()); + break; + case EVENT_SUMMON_ASSASSINS: + if (Creature* trigger = ObjectAccessor::GetCreature(*me, Acore::Containers::SelectRandomContainerElement(_balconySummons))) + trigger->CastSpell(trigger, SPELL_SUMMON_ASSASSIN, true, nullptr, nullptr, me->GetGUID()); + if (Creature* trigger = ObjectAccessor::GetCreature(*me, Acore::Containers::SelectRandomContainerElement(_balconySummons))) + trigger->CastSpell(trigger, SPELL_SUMMON_ASSASSIN, true, nullptr, nullptr, me->GetGUID()); + break; + default: + break; + } + + if (!me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) + DoMeleeAttackIfReady(); + } + + void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask) override + { + if (me->HasAura(SPELL_SUBMERGE) && damage >= me->GetHealth()) + damage = me->GetHealth() - 1; + + BossAI::DamageTaken(attacker, damage, damagetype, damageSchoolMask); + } + + private: + bool _intro; + uint8 _submergePhase; + uint8 _remainingLargeSummonsBeforeEmerge; + ObjectGuid _guardianTriggerGUID; + SummonList _balconySummons; }; -class spell_azjol_nerub_carrion_beetels : public AuraScript +class spell_azjol_nerub_carrion_beetles : public AuraScript { - PrepareAuraScript(spell_azjol_nerub_carrion_beetels) + PrepareAuraScript(spell_azjol_nerub_carrion_beetles) - void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) + void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) { // Xinef: 2 each second GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_CARRION_BEETLES, true); @@ -280,7 +404,7 @@ class spell_azjol_nerub_carrion_beetels : public AuraScript void Register() override { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_azjol_nerub_carrion_beetels::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_azjol_nerub_carrion_beetles::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; @@ -288,7 +412,7 @@ class spell_azjol_nerub_pound : public SpellScript { PrepareSpellScript(spell_azjol_nerub_pound); - void HandleApplyAura(SpellEffIndex /*effIndex*/) + void HandleApplyAura(SpellEffIndex /*effIndex*/) { if (Unit* unitTarget = GetHitUnit()) GetCaster()->CastSpell(unitTarget, SPELL_POUND_DAMAGE, true); @@ -320,8 +444,8 @@ class spell_azjol_nerub_impale_summon : public SpellScript void AddSC_boss_anub_arak() { - new boss_anub_arak(); - RegisterSpellScript(spell_azjol_nerub_carrion_beetels); + RegisterAzjolNerubCreatureAI(boss_anub_arak); + RegisterSpellScript(spell_azjol_nerub_carrion_beetles); RegisterSpellScript(spell_azjol_nerub_pound); RegisterSpellScript(spell_azjol_nerub_impale_summon); } diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp index 9d6616db9..ef6372c78 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp @@ -25,17 +25,18 @@ DoorData const doorData[] = { - { GO_KRIKTHIR_DOORS, DATA_KRIKTHIR, DOOR_TYPE_PASSAGE }, - { GO_ANUBARAK_DOORS1, DATA_ANUBARAK_EVENT, DOOR_TYPE_ROOM }, - { GO_ANUBARAK_DOORS2, DATA_ANUBARAK_EVENT, DOOR_TYPE_ROOM }, - { GO_ANUBARAK_DOORS3, DATA_ANUBARAK_EVENT, DOOR_TYPE_ROOM }, - { 0, 0, DOOR_TYPE_ROOM } + { GO_KRIKTHIR_DOORS, DATA_KRIKTHIR, DOOR_TYPE_PASSAGE }, + { GO_ANUBARAK_DOORS1, DATA_ANUBARAK, DOOR_TYPE_ROOM }, + { GO_ANUBARAK_DOORS2, DATA_ANUBARAK, DOOR_TYPE_ROOM }, + { GO_ANUBARAK_DOORS3, DATA_ANUBARAK, DOOR_TYPE_ROOM }, + { 0, 0, DOOR_TYPE_ROOM } }; ObjectData const creatureData[] = { { NPC_KRIKTHIR_THE_GATEWATCHER, DATA_KRIKTHIR }, { NPC_HADRONOX, DATA_HADRONOX }, + { NPC_ANUBARAK, DATA_ANUBARAK }, { 0, 0 } }; @@ -53,7 +54,7 @@ BossBoundaryData const boundaries = { { DATA_KRIKTHIR, new RectangleBoundary(400.0f, 580.0f, 623.5f, 810.0f) }, { DATA_HADRONOX, new ZRangeBoundary(666.0f, 776.0f) }, - { DATA_ANUBARAK_EVENT, new CircleBoundary(Position(550.6178f, 253.5917f), 26.0f) } + { DATA_ANUBARAK, new CircleBoundary(Position(550.6178f, 253.5917f), 32.0f) } }; class instance_azjol_nerub : public InstanceMapScript diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp index d342ea786..e5444781d 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp @@ -54,12 +54,9 @@ enum Spells // FIGHT SPELL_GIFT_OF_THE_HERALD = 56219, - SPELL_CYCLONE_STRIKE = 56855, // Self - SPELL_CYCLONE_STRIKE_H = 60030, - SPELL_LIGHTNING_BOLT = 56891, // 40Y - SPELL_LIGHTNING_BOLT_H = 60032, // 40Y - SPELL_THUNDERSHOCK = 56926, // 30Y - SPELL_THUNDERSHOCK_H = 60029 // 30Y + SPELL_CYCLONE_STRIKE = 56855, + SPELL_LIGHTNING_BOLT = 56891, + SPELL_THUNDERSHOCK = 56926, }; enum Events @@ -461,7 +458,7 @@ struct boss_jedoga_shadowseeker : public BossAI // Normal phase case EVENT_JEDOGA_CYCLONE: { - DoCastSelf(DUNGEON_MODE(SPELL_CYCLONE_STRIKE, SPELL_CYCLONE_STRIKE_H), false); + DoCastSelf(SPELL_CYCLONE_STRIKE, false); events.Repeat(10s, 14s); break; } @@ -469,7 +466,7 @@ struct boss_jedoga_shadowseeker : public BossAI { if (Unit* pTarget = SelectTarget(SelectTargetMethod::Random, 0, 100, true)) { - DoCast(pTarget, DUNGEON_MODE(SPELL_LIGHTNING_BOLT, SPELL_LIGHTNING_BOLT_H), false); + DoCast(pTarget, SPELL_LIGHTNING_BOLT, false); } events.Repeat(11s, 15s); break; @@ -478,7 +475,7 @@ struct boss_jedoga_shadowseeker : public BossAI { if (Unit* pTarget = SelectTarget(SelectTargetMethod::Random, 0, 100, true)) { - DoCast(pTarget, DUNGEON_MODE(SPELL_THUNDERSHOCK, SPELL_THUNDERSHOCK_H), false); + DoCast(pTarget, SPELL_THUNDERSHOCK, false); } events.Repeat(16s, 22s); diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp index de9d3e176..46a330a74 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp @@ -20,6 +20,7 @@ #include "Player.h" #include "ScriptedCreature.h" #include "SpellInfo.h" +#include "SpellMgr.h" #include "SpellScript.h" #include "SpellScriptLoader.h" #include "ahnkahet.h" @@ -38,11 +39,10 @@ enum Spells SPELL_BEAM_VISUAL = 60342, SPELL_VANISH = 55964, SPELL_SHADOWSTEP = 55966, - SPELL_HOVER_FALL = 60425 + SPELL_HOVER_FALL = 60425, + SPELL_EMBRACE_OF_THE_VAMPYR = 55959, }; -#define SPELL_EMBRACE_OF_THE_VAMPYR DUNGEON_MODE(55959, 59513) - enum Spheres { NPC_FLAME_SPHERE_1 = 30106, @@ -291,7 +291,7 @@ struct boss_taldaram : public BossAI { BossAI::DamageTaken(attacker, damage, damageType, school); - if (me->FindCurrentSpellBySpellId(SPELL_EMBRACE_OF_THE_VAMPYR)) + if (me->FindCurrentSpellBySpellId(sSpellMgr->GetSpellIdForDifficulty(SPELL_EMBRACE_OF_THE_VAMPYR, me))) { vanishDamage += damage; if (vanishDamage >= DUNGEON_MODE(MAX_EMBRACE_DMG, MAX_EMBRACE_DMG_H)) diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index 57515bfe2..8199369ad 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -130,9 +130,9 @@ enum Misc ACTION_DRAKE_DIED = 3, // Movement points - POINT_FINAL_TENEBRON = 8, - POINT_FINAL_SHADRON = 4, - POINT_FINAL_VESPERON = 4, + POINT_FINAL_TENEBRON = 9, + POINT_FINAL_SHADRON = 5, + POINT_FINAL_VESPERON = 5, // Lava directions. Its used to identify to which side lava was moving by last time LAVA_LEFT_SIDE = 0, diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index b8c16d4bf..affbf1cb2 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -199,7 +199,7 @@ public: WorldPacket data(SMSG_UPDATE_INSTANCE_ENCOUNTER_UNIT, 4); data << uint32(ENCOUNTER_FRAME_REFRESH_FRAMES); - _owner->GetSession()->SendPacket(&data); + _owner->SendDirectMessage(&data); return true; } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index 3aea12fb0..f8fadd8fa 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -45,12 +45,9 @@ enum EadricEvents enum PaletressSpells { - SPELL_SMITE_N = 66536, - SPELL_SMITE_H = 67674, - SPELL_HOLY_FIRE_N = 66538, - SPELL_HOLY_FIRE_H = 67676, - SPELL_RENEW_N = 66537, - SPELL_RENEW_H = 67675, + SPELL_SMITE = 66536, + SPELL_HOLY_FIRE = 66538, + SPELL_RENEW = 66537, SPELL_HOLY_NOVA = 66546, SPELL_SHIELD = 66515, @@ -58,21 +55,11 @@ enum PaletressSpells SPELL_SUMMON_MEMORY = 66545, //Memory - SPELL_OLD_WOUNDS_N = 66620, - SPELL_OLD_WOUNDS_H = 67679, - SPELL_SHADOWS_PAST_N = 66619, - SPELL_SHADOWS_PAST_H = 67678, - SPELL_WAKING_NIGHTMARE_N = 66552, - SPELL_WAKING_NIGHTMARE_H = 67677, + SPELL_OLD_WOUNDS = 66620, + SPELL_SHADOWS_PAST = 66619, + SPELL_WAKING_NIGHTMARE = 66552, }; -#define SPELL_SMITE DUNGEON_MODE(SPELL_SMITE_N, SPELL_SMITE_H) -#define SPELL_HOLY_FIRE DUNGEON_MODE(SPELL_HOLY_FIRE_N, SPELL_HOLY_FIRE_H) -#define SPELL_RENEW DUNGEON_MODE(SPELL_RENEW_N, SPELL_RENEW_H) -#define SPELL_OLD_WOUNDS DUNGEON_MODE(SPELL_OLD_WOUNDS_N, SPELL_OLD_WOUNDS_H) -#define SPELL_SHADOWS_PAST DUNGEON_MODE(SPELL_SHADOWS_PAST_N, SPELL_SHADOWS_PAST_H) -#define SPELL_WAKING_NIGHTMARE DUNGEON_MODE(SPELL_WAKING_NIGHTMARE_N, SPELL_WAKING_NIGHTMARE_H) - enum PaletressEvents { EVENT_SPELL_SMITE = 1, @@ -477,29 +464,22 @@ enum ArgentSoldierSpells // monk SPELL_FLURRY_OF_BLOWS = 67233, SPELL_PUMMEL = 67235, - SPELL_DIVINE_SHIELD_H = 67251, - SPELL_FINAL_MEDITATION_H = 67255, + SPELL_DIVINE_SHIELD = 67251, + SPELL_FINAL_MEDITATION = 67255, // priestess - SPELL_HOLY_SMITE_N = 36176, - SPELL_HOLY_SMITE_H = 67289, + SPELL_HOLY_SMITE = 36176, SPELL_FOUNTAIN_OF_LIGHT = 67194, NPC_FOUNTAIN_OF_LIGHT = 35311, - SPELL_SHADOW_WORD_PAIN_N = 34941, - SPELL_SHADOW_WORD_PAIN_H = 34942, - SPELL_MIND_CONTROL_H = 67229, + SPELL_SHADOW_WORD_PAIN = 34941, + SPELL_MIND_CONTROL = 67229, // lightwielder - SPELL_BLAZING_LIGHT_N = 67247, - SPELL_BLAZING_LIGHT_H = 67290, + SPELL_BLAZING_LIGHT = 67247, SPELL_CLEAVE = 15284, - SPELL_UNBALANCING_STRIKE_H = 67237, + SPELL_UNBALANCING_STRIKE = 67237, }; -#define SPELL_HOLY_SMITE DUNGEON_MODE(SPELL_HOLY_SMITE_N, SPELL_HOLY_SMITE_H) -#define SPELL_SHADOW_WORD_PAIN DUNGEON_MODE(SPELL_SHADOW_WORD_PAIN_N, SPELL_SHADOW_WORD_PAIN_H) -#define SPELL_BLAZING_LIGHT DUNGEON_MODE(SPELL_BLAZING_LIGHT_N, SPELL_BLAZING_LIGHT_H) - enum ArgentSoldierEvents { EVENT_MONK_SPELL_FLURRY_OF_BLOWS = 1, @@ -507,10 +487,10 @@ enum ArgentSoldierEvents EVENT_PRIESTESS_SPELL_HOLY_SMITE, EVENT_PRIESTESS_SPELL_SHADOW_WORD_PAIN, EVENT_PRIESTESS_SPELL_FOUNTAIN_OF_LIGHT, - EVENT_PRIESTESS_SPELL_MIND_CONTROL_H, + EVENT_PRIESTESS_SPELL_MIND_CONTROL, EVENT_LIGHTWIELDER_SPELL_BLAZING_LIGHT, EVENT_LIGHTWIELDER_SPELL_CLEAVE, - EVENT_LIGHTWIELDER_SPELL_UNBALANCING_STRIKE_H, + EVENT_LIGHTWIELDER_SPELL_UNBALANCING_STRIKE, }; class npc_argent_soldier : public CreatureScript @@ -619,8 +599,8 @@ public: bCheck = false; damage = me->GetHealth() - 1; events.DelayEvents(10s); - me->CastSpell(me, SPELL_DIVINE_SHIELD_H, true); - me->CastSpell((Unit*)nullptr, SPELL_FINAL_MEDITATION_H, true); + me->CastSpell(me, SPELL_DIVINE_SHIELD, true); + me->CastSpell((Unit*)nullptr, SPELL_FINAL_MEDITATION, true); } } @@ -639,13 +619,13 @@ public: events.RescheduleEvent(EVENT_PRIESTESS_SPELL_SHADOW_WORD_PAIN, 3s, 6s); events.RescheduleEvent(EVENT_PRIESTESS_SPELL_FOUNTAIN_OF_LIGHT, 8s, 15s); if (IsHeroic()) - events.RescheduleEvent(EVENT_PRIESTESS_SPELL_MIND_CONTROL_H, 12s); + events.RescheduleEvent(EVENT_PRIESTESS_SPELL_MIND_CONTROL, 12s); break; case NPC_ARGENT_LIGHTWIELDER: events.RescheduleEvent(EVENT_LIGHTWIELDER_SPELL_BLAZING_LIGHT, 12s, 15s); events.RescheduleEvent(EVENT_LIGHTWIELDER_SPELL_CLEAVE, 3s, 5s); if (IsHeroic()) - events.RescheduleEvent(EVENT_LIGHTWIELDER_SPELL_UNBALANCING_STRIKE_H, 8s, 12s); + events.RescheduleEvent(EVENT_LIGHTWIELDER_SPELL_UNBALANCING_STRIKE, 8s, 12s); break; } } @@ -691,9 +671,9 @@ public: me->CastSpell((Unit*)nullptr, SPELL_FOUNTAIN_OF_LIGHT, false); events.Repeat(35s, 45s); break; - case EVENT_PRIESTESS_SPELL_MIND_CONTROL_H: + case EVENT_PRIESTESS_SPELL_MIND_CONTROL: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true)) - me->CastSpell(target, SPELL_MIND_CONTROL_H, false); + me->CastSpell(target, SPELL_MIND_CONTROL, false); events.Repeat(22s, 30s); break; @@ -711,9 +691,9 @@ public: me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); events.Repeat(6s, 8s); break; - case EVENT_LIGHTWIELDER_SPELL_UNBALANCING_STRIKE_H: + case EVENT_LIGHTWIELDER_SPELL_UNBALANCING_STRIKE: if (me->GetVictim()) - me->CastSpell(me->GetVictim(), SPELL_UNBALANCING_STRIKE_H, false); + me->CastSpell(me->GetVictim(), SPELL_UNBALANCING_STRIKE, false); events.Repeat(12s, 15s); break; } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp index de6fa8cf4..e1178e676 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -18,7 +18,11 @@ #include "CreatureScript.h" #include "ScriptedCreature.h" #include "ScriptedEscortAI.h" +#include "SharedDefines.h" +#include "Spell.h" #include "SpellInfo.h" +#include "SpellScript.h" +#include "SpellScriptLoader.h" #include "trial_of_the_champion.h" enum Spells @@ -30,49 +34,29 @@ enum Spells SPELL_BK_KILL_CREDIT = 68663, // phase 1 - SPELL_PLAGUE_STRIKE_N = 67724, - SPELL_PLAGUE_STRIKE_H = 67884, - SPELL_ICY_TOUCH_N = 67718, - SPELL_ICY_TOUCH_H = 67881, - SPELL_DEATH_RESPITE_N = 67745, - SPELL_DEATH_RESPITE_H = 68306, + SPELL_PLAGUE_STRIKE = 67724, + SPELL_ICY_TOUCH = 67718, + SPELL_DEATH_RESPITE = 67745, SPELL_DEATH_RESPITE_DUMMY = 66798, - SPELL_OBLITERATE_N = 67725, - SPELL_OBLITERATE_H = 67883, + SPELL_OBLITERATE = 67725, // phase 2 (+ abilities from phase 1 without death respite) - SPELL_ARMY_DEAD_N = 67761, - SPELL_ARMY_DEAD_H = 67874, - SPELL_DESECRATION_N = 67778, - SPELL_DESECRATION_H = 67877, + SPELL_ARMY_DEAD = 67761, + SPELL_DESECRATION = 67778, SPELL_DESECRATION_SUMMON = 67779, SPELL_BK_GHOUL_EXPLODE = 67751, // phase 3 - SPELL_DEATH_BITE_N = 67808, - SPELL_DEATH_BITE_H = 67875, - SPELL_MARKED_DEATH_N = 67823, - SPELL_MARKED_DEATH_H = 67882, + SPELL_DEATH_BITE = 67808, + SPELL_MARKED_DEATH = 67823, // ghouls - SPELL_CLAW_N = 67774, + SPELL_CLAW = 67774, SPELL_CLAW_H = 67879, - SPELL_EXPLODE_N = 67729, - SPELL_EXPLODE_H = 67886, - SPELL_LEAP_N = 67749, - SPELL_LEAP_H = 67880, + SPELL_EXPLODE = 67729, + SPELL_EXPLODE_H = 67886, + SPELL_LEAP = 67749, }; -#define SPELL_LEAP DUNGEON_MODE(SPELL_LEAP_N, SPELL_LEAP_H) -#define SPELL_EXPLODE DUNGEON_MODE(SPELL_EXPLODE_N, SPELL_EXPLODE_H) - -#define SPELL_PLAGUE_STRIKE DUNGEON_MODE(SPELL_PLAGUE_STRIKE_N, SPELL_PLAGUE_STRIKE_H) -#define SPELL_ICY_TOUCH DUNGEON_MODE(SPELL_ICY_TOUCH_N, SPELL_ICY_TOUCH_H) -#define SPELL_DEATH_RESPITE DUNGEON_MODE(SPELL_DEATH_RESPITE_N, SPELL_DEATH_RESPITE_H) -#define SPELL_OBLITERATE DUNGEON_MODE(SPELL_OBLITERATE_N, SPELL_OBLITERATE_H) -#define SPELL_ARMY_DEAD DUNGEON_MODE(SPELL_ARMY_DEAD_N, SPELL_ARMY_DEAD_H) -#define SPELL_DESECRATION DUNGEON_MODE(SPELL_DESECRATION_N, SPELL_DESECRATION_H) -#define SPELL_DEATH_BITE DUNGEON_MODE(SPELL_DEATH_BITE_N, SPELL_DEATH_BITE_H) -#define SPELL_MARKED_DEATH DUNGEON_MODE(SPELL_MARKED_DEATH_N, SPELL_MARKED_DEATH_H) enum Events { @@ -420,27 +404,6 @@ public: } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override - { - switch (spell->Id) - { - case SPELL_CLAW_N: - case SPELL_CLAW_H: - DoResetThreatList(); - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f)) - { - me->AddThreat(target, 100.0f); - AttackStart(target); - } - break; - case SPELL_EXPLODE_H: - if (target && target->IsPlayer()) - if (pInstance) - pInstance->SetData(DATA_ACHIEV_IVE_HAD_WORSE, 0); - break; - } - } - void UpdateAI(uint32 diff) override { if (!UpdateVictim()) @@ -467,7 +430,7 @@ public: break; case 2: // claw if (Unit* target = me->GetVictim()) - me->CastSpell(target, SPELL_CLAW_N, false); + me->CastSpell(target, SPELL_CLAW, false); events.Repeat(6s, 8s); break; } @@ -482,9 +445,51 @@ public: } }; +//67774,67879 +class spell_black_knight_ghoul_claw : public SpellScript +{ + PrepareSpellScript(spell_black_knight_ghoul_claw); + + void HandleSpellHit(SpellEffIndex /*effIndex*/) + { + if (Unit* caster = GetCaster()) + { + GetCaster()->GetThreatMgr().ResetAllThreat(); + if (Unit* target = caster->GetAI()->SelectTarget(SelectTargetMethod::Random, 0, 30.0f)) + { + caster->AddThreat(target, 100.0f); + caster->GetAI()->AttackStart(target); + } + } + } + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_black_knight_ghoul_claw::HandleSpellHit, EFFECT_0, SPELL_EFFECT_WEAPON_PERCENT_DAMAGE); + } +}; + +//67886 +class spell_black_knight_ghoul_explode : public SpellScript +{ + PrepareSpellScript(spell_black_knight_ghoul_explode); + + void HandleSpellHit(SpellEffIndex /*effIndex*/) + { + if (GetHitUnit()->IsPlayer()) + if (InstanceScript* instance = GetCaster()->GetInstanceScript()) + instance->SetData(DATA_ACHIEV_IVE_HAD_WORSE, 0); + } + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_black_knight_ghoul_explode::HandleSpellHit, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } +}; + void AddSC_boss_black_knight() { new boss_black_knight(); new npc_black_knight_skeletal_gryphon(); new npc_black_knight_ghoul(); + RegisterSpellScript(spell_black_knight_ghoul_claw); + RegisterSpellScript(spell_black_knight_ghoul_explode); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index a4d0d00d8..93d599a7b 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -56,38 +56,30 @@ enum MountSpells enum ChampionSpells { // Mage (Ambrose Boltspark, Eressea Dawnsinger) - SPELL_FIREBALL_N = 66042, - SPELL_FIREBALL_H = 68310, - SPELL_BLAST_WAVE_N = 66044, - SPELL_BLAST_WAVE_H = 68312, + SPELL_FIREBALL = 66042, + SPELL_BLAST_WAVE = 66044, SPELL_HASTE = 66045, - SPELL_POLYMORPH_N = 66043, - SPELL_POLYMORPH_H = 68311, + SPELL_POLYMORPH = 66043, // Shaman (Colosos, Runok Wildmane) - SPELL_CHAIN_LIGHTNING_N = 67529, - SPELL_CHAIN_LIGHTNING_H = 68319, + SPELL_CHAIN_LIGHTNING = 67529, SPELL_EARTH_SHIELD = 67530, - SPELL_HEALING_WAVE_N = 67528, - SPELL_HEALING_WAVE_H = 68318, + SPELL_HEALING_WAVE = 67528, SPELL_HEX_OF_MENDING = 67534, // Hunter (Jaelyne Evensong, Zul'tore) SPELL_DISENGAGE = 68339, SPELL_LIGHTNING_ARROWS = 66083, SPELL_MULTI_SHOT = 66081, - SPELL_SHOOT_N = 65868, - SPELL_SHOOT_H = 67988, + SPELL_SHOOT = 65868, // Rogue (Lana Stouthammer Evensong, Deathstalker Visceri) - SPELL_EVISCERATE_N = 67709, - SPELL_EVISCERATE_H = 68317, + SPELL_EVISCERATE = 67709, SPELL_FAN_OF_KNIVES = 67706, SPELL_POISON_BOTTLE = 67701, // Warrior (Marshal Jacob Alerius, Mokra the Skullcrusher) - SPELL_MORTAL_STRIKE_N = 68783, - SPELL_MORTAL_STRIKE_H = 68784, + SPELL_MORTAL_STRIKE = 68783, SPELL_BLADESTORM = 63784, SPELL_INTERCEPT = 67540, SPELL_ROLLING_THROW = 67546, // not implemented yet! @@ -98,15 +90,6 @@ enum Texts SAY_TRAMPLED = 0, }; -#define SPELL_FIREBALL DUNGEON_MODE(SPELL_FIREBALL_N, SPELL_FIREBALL_H) -#define SPELL_BLAST_WAVE DUNGEON_MODE(SPELL_BLAST_WAVE_N, SPELL_BLAST_WAVE_H) -#define SPELL_POLYMORPH DUNGEON_MODE(SPELL_POLYMORPH_N, SPELL_POLYMORPH_H) -#define SPELL_CHAIN_LIGHTNING DUNGEON_MODE(SPELL_CHAIN_LIGHTNING_N, SPELL_CHAIN_LIGHTNING_H) -#define SPELL_HEALING_WAVE DUNGEON_MODE(SPELL_HEALING_WAVE_N, SPELL_HEALING_WAVE_H) -#define SPELL_SHOOT DUNGEON_MODE(SPELL_SHOOT_N, SPELL_SHOOT_H) -#define SPELL_EVISCERATE DUNGEON_MODE(SPELL_EVISCERATE_N, SPELL_EVISCERATE_H) -#define SPELL_MORTAL_STRIKE DUNGEON_MODE(SPELL_MORTAL_STRIKE_N, SPELL_MORTAL_STRIKE_H) - enum MountEvents { EVENT_NONE = 0, @@ -213,7 +196,7 @@ public: data << uint32(VEHICLE_SPELL_RIDE_HARDCODED); data << uint8(SPELL_FAILED_CUSTOM_ERROR); data << uint32(SPELL_CUSTOM_ERROR_MUST_HAVE_LANCE_EQUIPPED); - clicker->ToPlayer()->GetSession()->SendPacket(&data); + clicker->ToPlayer()->SendDirectMessage(&data); return false; } }; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp index 0e116a428..87c8b3ae8 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp @@ -19,6 +19,7 @@ #include "PassiveAI.h" #include "Player.h" #include "ScriptedCreature.h" +#include "SharedDefines.h" #include "SpellAuraEffects.h" #include "SpellScript.h" #include "SpellScriptLoader.h" @@ -161,7 +162,7 @@ public: events.Reset(); bIntro = false; bPhase3 = false; - me->ApplySpellImmune(0, IMMUNITY_ID, RAID_MODE(66193, 67855, 67856, 67857), true); + me->ApplySpellImmune(0, IMMUNITY_ID, sSpellMgr->GetSpellIdForDifficulty(SPELL_PERMAFROST, me), true); me->m_SightDistance = 90.0f; // for MoveInLineOfSight distance } @@ -501,7 +502,7 @@ public: void JustDied(Unit* /*killer*/) override { - me->CastSpell(me, RAID_MODE(SPELL_TRAITOR_KING_10, SPELL_TRAITOR_KING_25, SPELL_TRAITOR_KING_10, SPELL_TRAITOR_KING_25), true); + me->CastSpell(me, SPELL_TRAITOR_KING, true); me->m_Events.AddEventAtOffset(new HideNpcEvent(*me), 5s); } @@ -679,7 +680,7 @@ public: events.Repeat(30s, 45s); break; case EVENT_SUBMERGE: - if (HealthBelowPct(80) && !me->HasAura(RAID_MODE(66193, 67855, 67856, 67857))) // not having permafrost - allow submerge + if (HealthBelowPct(80) && !me->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_PERMAFROST, me))) // not having permafrost - allow submerge { me->GetMotionMaster()->MoveIdle(); me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h index edc742da4..8b107342b 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h @@ -351,8 +351,7 @@ enum EventSpells SPELL_JORMUNGAR_ACHIEV = 68523, SPELL_FACTION_CHAMPIONS_KILL_CREDIT = 68184, SPELL_RESILIENCE_WILL_FIX_IT_CREDIT = 68620, - SPELL_TRAITOR_KING_10 = 68186, - SPELL_TRAITOR_KING_25 = 68515, + SPELL_TRAITOR_KING = 68186, SPELL_PORTAL_TO_DALARAN = 53142, }; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp index 33c5167f2..ba89cbbeb 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp @@ -18,6 +18,7 @@ #include "CreatureScript.h" #include "halls_of_reflection.h" #include "ScriptedCreature.h" +#include "SpellMgr.h" enum Yells { @@ -44,7 +45,7 @@ enum Events EVENT_UNROOT, }; -const uint32 hopelessnessId[3][2] = { {72395, 72390}, {72396, 72391}, {72397, 72393} }; +const uint32 hopelessnessId[3] = { 72395, 72396, 72397 }; class boss_falric : public CreatureScript { @@ -143,8 +144,9 @@ public: if ((uiHopelessnessCount == 0 && HealthBelowPct(67)) || (uiHopelessnessCount == 1 && HealthBelowPct(34)) || (uiHopelessnessCount == 2 && HealthBelowPct(11))) { if (uiHopelessnessCount) - me->RemoveOwnedAura(hopelessnessId[uiHopelessnessCount - 1][DUNGEON_MODE(0, 1)]); - me->CastSpell((Unit*)nullptr, hopelessnessId[uiHopelessnessCount][DUNGEON_MODE(0, 1)], true); + me->RemoveOwnedAura(sSpellMgr->GetSpellIdForDifficulty(hopelessnessId[uiHopelessnessCount - 1], me)); + + me->CastSpell((Unit*)nullptr, hopelessnessId[uiHopelessnessCount], true); ++uiHopelessnessCount; } diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp index 081190882..3b145dc89 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp @@ -19,7 +19,9 @@ #include "CreatureScript.h" #include "Player.h" #include "ScriptedCreature.h" +#include "SharedDefines.h" #include "SpellAuras.h" +#include "SpellMgr.h" #include "SpellScript.h" #include "SpellScriptLoader.h" #include "pit_of_saron.h" @@ -54,11 +56,11 @@ enum Spells SPELL_CHILLING_WAVE = 68778, SPELL_DEEP_FREEZE = 70381, -}; -#define SPELL_FORGE_BLADE RAID_MODE(68774, 70334) -#define SPELL_FORGE_MACE RAID_MODE(68785, 70335) -#define SPELL_SARONITE_TRIGGERED RAID_MODE(68789, 70851) + SPELL_FORGE_BLADE = 68774, + SPELL_FORGE_MACE = 68785, + SPELL_SARONITE_TRIGGERED = 68789, +}; enum Events { @@ -154,21 +156,45 @@ public: if (phase == 1) { me->SetControlled(true, UNIT_STATE_ROOT); - me->CastSpell(me, SPELL_FORGE_BLADE, false); + if (me->CastSpell(me, SPELL_FORGE_BLADE, false) == SPELL_CAST_OK) + { + events.RescheduleEvent(EVENT_SPELL_CHILLING_WAVE, 10s); + SetEquipmentSlots(false, EQUIP_ID_SWORD); + me->SetReactState(REACT_AGGRESSIVE); + me->SetControlled(false, UNIT_STATE_ROOT); + me->DisableRotate(false); + if (me->GetVictim()) + { + AttackStart(me->GetVictim()); + me->SetTarget(me->GetVictim()->GetGUID()); + } + } Talk(SAY_HP_66); } else if (phase == 2) { me->SetControlled(true, UNIT_STATE_ROOT); - me->RemoveAurasDueToSpell(SPELL_FORGE_BLADE); - me->CastSpell(me, SPELL_FORGE_MACE, false); + me->RemoveAurasDueToSpell(sSpellMgr->GetSpellIdForDifficulty(SPELL_FORGE_BLADE, me)); + if (me->CastSpell(me, SPELL_FORGE_MACE, false) == SPELL_CAST_OK) + { + events.RescheduleEvent(EVENT_SPELL_DEEP_FREEZE, 10s); + SetEquipmentSlots(false, EQUIP_ID_MACE); + me->SetReactState(REACT_AGGRESSIVE); + me->SetControlled(false, UNIT_STATE_ROOT); + me->DisableRotate(false); + if (me->GetVictim()) + { + AttackStart(me->GetVictim()); + me->SetTarget(me->GetVictim()->GetGUID()); + } + } Talk(SAY_HP_33); } } void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override { - if (spell->Id == uint32(SPELL_SARONITE_TRIGGERED)) + if (spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_SARONITE_TRIGGERED, me)) { if (bCanSayBoulderHit) { @@ -176,32 +202,6 @@ public: Talk(SAY_BOULDER_HIT); } } - if (spell->Id == uint32(SPELL_FORGE_BLADE)) - { - events.RescheduleEvent(EVENT_SPELL_CHILLING_WAVE, 10s); - SetEquipmentSlots(false, EQUIP_ID_SWORD); - me->SetReactState(REACT_AGGRESSIVE); - me->SetControlled(false, UNIT_STATE_ROOT); - me->DisableRotate(false); - if (me->GetVictim()) - { - AttackStart(me->GetVictim()); - me->SetTarget(me->GetVictim()->GetGUID()); - } - } - else if (spell->Id == uint32(SPELL_FORGE_MACE)) - { - events.RescheduleEvent(EVENT_SPELL_DEEP_FREEZE, 10s); - SetEquipmentSlots(false, EQUIP_ID_MACE); - me->SetReactState(REACT_AGGRESSIVE); - me->SetControlled(false, UNIT_STATE_ROOT); - me->DisableRotate(false); - if (me->GetVictim()) - { - AttackStart(me->GetVictim()); - me->SetTarget(me->GetVictim()->GetGUID()); - } - } } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp index 5cc7c00a2..e8a2d9253 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp @@ -1200,16 +1200,16 @@ public: switch (id) { - case 0: + case 1: Talk(me->GetEntry() == NPC_JAINA_PART2 ? SAY_JAINA_OUTRO_2 : SAY_SYLVANAS_OUTRO_2); break; - case 1: + case 2: if (me->GetEntry() == NPC_JAINA_PART2) { Talk(SAY_JAINA_OUTRO_3); } break; - case 6: + case 7: me->SetNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); if (GameObject* g = me->FindNearestGameObject(GO_HOR_PORTCULLIS, 50.0f)) g->SetGoState(GO_STATE_ACTIVE); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index fdf316579..4ae1a2e36 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -118,9 +118,6 @@ enum Spells SPELL_ACHIEVEMENT = 72928, }; -// Helper to get id of the aura on different modes (HasAura(baseId) wont work) -#define BOILING_BLOOD_HELPER RAID_MODE(72385, 72441, 72442, 72443) - enum EventTypes { EVENT_INTRO_ALLIANCE_1 = 1, diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp index 11d0142ce..ff86ed409 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp @@ -19,7 +19,10 @@ #include "CreatureScript.h" #include "ObjectMgr.h" #include "ScriptedCreature.h" +#include "SharedDefines.h" #include "SpellAuras.h" +#include "SpellInfo.h" +#include "SpellScript.h" #include "SpellScriptLoader.h" #include "icecrown_citadel.h" #include "SpellAuraEffects.h" @@ -57,10 +60,6 @@ enum Spells SPELL_PLAGUE_STENCH = 71805, }; -// Used for HasAura checks -#define PUNGENT_BLIGHT_HELPER RAID_MODE(69195, 71219, 73031, 73032) -#define INOCULATED_HELPER RAID_MODE(69291, 72101, 72102, 72103) - uint32 const gaseousBlight[3] = {69157, 69162, 69164}; uint32 const gaseousBlightVisual[3] = {69126, 69152, 69154}; @@ -168,19 +167,6 @@ public: Talk(SAY_KILL); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override - { - if (spell->Id == PUNGENT_BLIGHT_HELPER) - target->RemoveAurasDueToSpell(INOCULATED_HELPER); - else if (Player* p = target->ToPlayer()) - { - // Gaseous Blight damage - if (((spell->Id == 69159 || spell->Id == 70136 || spell->Id == 69161 || spell->Id == 70139 || spell->Id == 69163 || spell->Id == 70469) && p->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_10) == QUEST_STATUS_INCOMPLETE) || - ((spell->Id == 70135 || spell->Id == 70138 || spell->Id == 70468 || spell->Id == 70137 || spell->Id == 70140 || spell->Id == 70470) && p->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_25) == QUEST_STATUS_INCOMPLETE)) - p->CastSpell(p, SPELL_ORANGE_BLIGHT_RESIDUE, true); - } - } - void RemoveBlight() { if (Creature* gasDummy = ObjectAccessor::GetCreature(*me, _gasDummyGUID)) @@ -313,8 +299,15 @@ class spell_festergut_pungent_blight : public SpellScript professor->AI()->DoAction(ACTION_FESTERGUT_GAS); } + void HandleHit(SpellEffIndex /*effIndex*/) + { + if (Unit* target = GetHitUnit()) + target->RemoveAurasDueToSpell(sSpellMgr->GetSpellIdForDifficulty(SPELL_INOCULATED, GetCaster())); + } + void Register() override { + OnEffectHitTarget += SpellEffectFn(spell_festergut_pungent_blight::HandleHit, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); OnEffectHitTarget += SpellEffectFn(spell_festergut_pungent_blight::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; @@ -378,6 +371,34 @@ class spell_festergut_gastric_bloat : public SpellScript } }; +class spell_festergut_gaseous_blight : public SpellScript +{ + PrepareSpellScript(spell_festergut_gaseous_blight); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_ORANGE_BLIGHT_RESIDUE }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Player* p = GetHitUnit()->ToPlayer()) + { + if (Map* map = GetCaster()->GetMap()) + { + uint32 questId = map->Is25ManRaid() ? QUEST_RESIDUE_RENDEZVOUS_25 : QUEST_RESIDUE_RENDEZVOUS_10; + if (p->GetQuestStatus(questId) == QUEST_STATUS_INCOMPLETE) + p->CastSpell(p, SPELL_ORANGE_BLIGHT_RESIDUE, true); + } + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_festergut_gaseous_blight::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } +}; + class achievement_flu_shot_shortage : public AchievementCriteriaScript { public: @@ -468,6 +489,7 @@ void AddSC_boss_festergut() RegisterSpellScript(spell_festergut_pungent_blight); RegisterSpellScript(spell_festergut_blighted_spores_aura); RegisterSpellScript(spell_festergut_gastric_bloat); + RegisterSpellScript(spell_festergut_gaseous_blight); new achievement_flu_shot_shortage(); new npc_stinky_icc(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index b1239521b..b61bdc317 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -2272,7 +2272,7 @@ class spell_igb_overheat_aura : public AuraScript WorldPacket data(SMSG_CLIENT_CONTROL_UPDATE, GetUnitOwner()->GetPackGUID().size() + 1); data << GetUnitOwner()->GetPackGUID(); data << uint8(value); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index ef366c707..58509fe5d 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -72,8 +72,6 @@ enum Spells SPELL_AWAKEN_PLAGUED_ZOMBIES = 71159, }; -#define MUTATED_INFECTION RAID_MODE(69674, 71224, 73022, 73023) - enum Events { EVENT_NONE, @@ -193,7 +191,7 @@ public: void JustDied(Unit* /*killer*/) override { - instance->DoRemoveAurasDueToSpellOnPlayers(MUTATED_INFECTION); + instance->DoRemoveAurasDueToSpellOnPlayers(sSpellMgr->GetSpellIdForDifficulty(SPELL_MUTATED_INFECTION, me)); _JustDied(); Talk(SAY_DEATH); if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PROFESSOR_PUTRICIDE))) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index a1f9d3e6d..3d7225cd3 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -141,7 +141,6 @@ enum Spells SPELL_SOUL_REAPER = 69409, // instant SPELL_SOUL_REAPER_BUFF = 69410, SPELL_SUMMON_VALKYR = 69037, // instant - SPELL_SUMMON_VALKYR_PERIODIC = 74361, SPELL_WINGS_OF_THE_DAMNED = 74352, SPELL_VALKYR_TARGET_SEARCH = 69030, SPELL_HARVEST_SOUL_VALKYR = 68985, // vehicle aura used by Val'kyr Shadowguard and Strangulate Vehicle @@ -188,14 +187,6 @@ enum Spells SPELL_FRENZY = 28747, }; -#define NECROTIC_PLAGUE_LK RAID_MODE(70337, 73912, 73913, 73914) -#define NECROTIC_PLAGUE_PLR RAID_MODE(70338, 73785, 73786, 73787) -#define REMORSELESS_WINTER_1 RAID_MODE(68981, 74270, 74271, 74272) -#define REMORSELESS_WINTER_2 RAID_MODE(72259, 74273, 74274, 74275) -#define SUMMON_VALKYR RAID_MODE(69037, 74361, 69037, 74361) -//#define HARVEST_SOUL RAID_MODE(68980, 74325, 74296, 74297) -#define HARVESTED_SOUL_BUFF RAID_MODE(72679, 74318, 74319, 74320) - enum Events { EVENT_NONE, @@ -375,7 +366,7 @@ void SendPacketToPlayers(WorldPacket const* data, Unit* source) for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) if (Player* player = itr->GetSource()) if (player->GetAreaId() == AREA_THE_FROZEN_THRONE) - player->GetSession()->SendPacket(data); + player->SendDirectMessage(data); } struct ShadowTrapLKTargetSelector @@ -915,7 +906,7 @@ public: void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { - if (spell->Id == HARVESTED_SOUL_BUFF && me->IsInCombat() && !IsHeroic() && _phase != PHASE_OUTRO && _lastTalkTimeBuff + 5 <= GameTime::GetGameTime().count()) + if (spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_HARVESTED_SOUL_LK_BUFF, me) && me->IsInCombat() && !IsHeroic() && _phase != PHASE_OUTRO && _lastTalkTimeBuff + 5 <= GameTime::GetGameTime().count()) { _lastTalkTimeBuff = GameTime::GetGameTime().count(); Talk(SAY_LK_FROSTMOURNE_KILL); @@ -924,7 +915,7 @@ public: void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override { - if (spell->Id == REMORSELESS_WINTER_1 || spell->Id == REMORSELESS_WINTER_2) + if (spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_REMORSELESS_WINTER_1, me) || spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_REMORSELESS_WINTER_2, me)) { me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, LIGHT_SNOWSTORM, 5s); me->GetMap()->SetZoneWeather(AREA_THE_FROZEN_THRONE, WEATHER_STATE_LIGHT_SNOW, 0.5f); @@ -1064,7 +1055,7 @@ public: events.ScheduleEvent(EVENT_INFEST, 22s + 500ms, EVENT_GROUP_ABILITIES); break; case EVENT_NECROTIC_PLAGUE: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, NecroticPlagueTargetCheck(me, NECROTIC_PLAGUE_LK, NECROTIC_PLAGUE_PLR))) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, NecroticPlagueTargetCheck(me, sSpellMgr->GetSpellIdForDifficulty(SPELL_NECROTIC_PLAGUE, me), sSpellMgr->GetSpellIdForDifficulty(SPELL_NECROTIC_PLAGUE_JUMP, me)))) { Talk(EMOTE_NECROTIC_PLAGUE_WARNING, target); me->CastSpell(target, SPELL_NECROTIC_PLAGUE, false); @@ -1145,7 +1136,7 @@ public: { me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); Talk(SAY_LK_SUMMON_VALKYR); - me->CastSpell((Unit*)nullptr, SUMMON_VALKYR, false); + me->CastSpell((Unit*)nullptr, SPELL_SUMMON_VALKYR, false); events.ScheduleEvent(EVENT_SUMMON_VALKYR, 45s, EVENT_GROUP_ABILITIES); // schedule a defile (or reschedule it) if next defile event @@ -2352,8 +2343,7 @@ class spell_the_lich_king_defile : public SpellScript { targets.remove_if(VehicleCheck()); targets.remove_if(Acore::AllWorldObjectsInExactRange(GetCaster(), 10.0f * GetCaster()->GetFloatValue(OBJECT_FIELD_SCALE_X), true)); - uint32 strangulatedAura[4] = {68980, 74325, 74296, 74297}; - targets.remove_if(Acore::UnitAuraCheck(true, strangulatedAura[GetCaster()->GetMap()->GetDifficulty()])); + targets.remove_if(Acore::UnitAuraCheck(true, sSpellMgr->GetSpellIdForDifficulty(SPELL_HARVEST_SOUL, GetCaster()))); } void ChangeDamageAndGrow() diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index d04cfdafe..fce8465d4 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -52,8 +52,8 @@ enum Spells SPELL_NIGHTMARE_PORTAL_VISUAL_PRE = 71986, SPELL_NIGHTMARE_CLOUD = 71970, SPELL_NIGHTMARE_CLOUD_VISUAL = 71939, - SPELL_PRE_SUMMON_DREAM_PORTAL = 72224, - SPELL_PRE_SUMMON_NIGHTMARE_PORTAL = 72480, + SPELL_PRE_SUMMON_DREAM_PORTAL = 72224, // normal + SPELL_PRE_SUMMON_NIGHTMARE_PORTAL = 72480, // heroic SPELL_SUMMON_DREAM_PORTAL = 71305, SPELL_SUMMON_NIGHTMARE_PORTAL = 71987, SPELL_DREAMWALKERS_RAGE = 71189, @@ -94,16 +94,13 @@ enum Spells SPELL_GUT_SPRAY = 70633, SPELL_ROT_WORM_SPAWNER = 70675, - // Dream Cloud + // Dream Cloud (normal) SPELL_EMERALD_VIGOR = 70873, - // Nightmare Cloud + // Nightmare Cloud (heroic) SPELL_TWISTED_NIGHTMARE = 71941, }; -#define SUMMON_PORTAL RAID_MODE(SPELL_PRE_SUMMON_DREAM_PORTAL, SPELL_PRE_SUMMON_DREAM_PORTAL, SPELL_PRE_SUMMON_NIGHTMARE_PORTAL, SPELL_PRE_SUMMON_NIGHTMARE_PORTAL) -#define EMERALD_VIGOR RAID_MODE(SPELL_EMERALD_VIGOR, SPELL_EMERALD_VIGOR, SPELL_TWISTED_NIGHTMARE, SPELL_TWISTED_NIGHTMARE) - enum Events { // Valithria Dreamwalker @@ -462,7 +459,7 @@ public: if (!IsHeroic()) Talk(SAY_VALITHRIA_DREAM_PORTAL); for (uint32 i = 0; i < _portalCount; ++i) - me->CastSpell(me, SUMMON_PORTAL, false); + me->CastSpell(me, SPELL_PRE_SUMMON_DREAM_PORTAL, false); _events.ScheduleEvent(EVENT_DREAM_PORTAL, 45s, 48s); break; case EVENT_DREAM_SLIP: @@ -885,7 +882,7 @@ public: me->GetMotionMaster()->Clear(false); me->GetMotionMaster()->MoveIdle(); // must use originalCaster the same for all clouds to allow stacking - me->CastSpell(me, EMERALD_VIGOR, false, nullptr, nullptr, _instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER)); + me->CastSpell(me, SPELL_EMERALD_VIGOR, false, nullptr, nullptr, _instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER)); me->DespawnOrUnsummon(1s); break; default: diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index 8b6c5f25d..e06d19cf3 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -57,10 +57,8 @@ enum MovementInformPoints enum MalygosSpells { SPELL_BERSERK = 64238, - SPELL_ARCANE_BREATH_N = 56272, - SPELL_ARCANE_BREATH_H = 60072, - SPELL_ARCANE_STORM_N = 61693, - SPELL_ARCANE_STORM_H = 61694, + SPELL_ARCANE_BREATH = 56272, + SPELL_ARCANE_STORM = 61693, SPELL_VORTEX_VISUAL = 55873, SPELL_VORTEX_CONTROL_VEHICLE = 56263, @@ -80,8 +78,7 @@ enum MalygosSpells SPELL_DESTROY_PLATFORM_VISUAL = 59084, SPELL_ARCANE_PULSE = 57432, - SPELL_PH3_SURGE_OF_POWER_N = 57407, - SPELL_PH3_SURGE_OF_POWER_H = 60936, + SPELL_PH3_SURGE_OF_POWER = 57407, SPELL_STATIC_FIELD_MAIN = 57430, SPELL_STATIC_FIELD_SUMMON = 57431, @@ -89,10 +86,6 @@ enum MalygosSpells SPELL_STATIC_FIELD_DAMAGE = 57429, }; -#define SPELL_ARCANE_BREATH DUNGEON_MODE(SPELL_ARCANE_BREATH_N, SPELL_ARCANE_BREATH_H) -#define SPELL_ARCANE_STORM DUNGEON_MODE(SPELL_ARCANE_STORM_N, SPELL_ARCANE_STORM_H) -#define SPELL_PH3_SURGE_OF_POWER DUNGEON_MODE(SPELL_PH3_SURGE_OF_POWER_N, SPELL_PH3_SURGE_OF_POWER_H) - enum MalygosEvents { EVENT_INTRO_MOVE_CENTER = 1, diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h index b61b1d7cb..83e1a845c 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h @@ -71,15 +71,12 @@ enum eSpells SPELL_TELEPORT_VISUAL = 52096, SPELL_SCION_ARCANE_BARRAGE = 56397, - SPELL_ARCANE_SHOCK_N = 57058, - SPELL_ARCANE_SHOCK_H = 60073, + SPELL_ARCANE_SHOCK = 57058, SPELL_HASTE = 57060, SPELL_ALEXSTRASZA_GIFT = 61028, }; -#define SPELL_ARCANE_SHOCK DUNGEON_MODE(SPELL_ARCANE_SHOCK_N, SPELL_ARCANE_SHOCK_H) - enum eAchiev { ACHIEV_CRITERIA_DENYIN_THE_SCION_10 = 7573, diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp index 3781b4799..a05ca6dc1 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp @@ -22,8 +22,7 @@ enum Spells { SPELL_MAGIC_PULL = 51336, - SPELL_THUNDERING_STOMP_N = 50774, - SPELL_THUNDERING_STOMP_H = 59370, + SPELL_THUNDERING_STOMP = 50774, SPELL_UNSTABLE_SPHERE_PASSIVE = 50756, SPELL_UNSTABLE_SPHERE_PULSE = 50757, @@ -44,8 +43,6 @@ enum Events EVENT_SUMMON_x4 = 4, }; -#define SPELL_THUNDERING_STOMP DUNGEON_MODE(SPELL_THUNDERING_STOMP_N, SPELL_THUNDERING_STOMP_H) - enum Yells { SAY_AGGRO = 0, diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp index db9d41b63..5f9f71dc8 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp @@ -22,10 +22,8 @@ enum Spells { - SPELL_ARCANE_BARRAGE_N = 50804, - SPELL_ARCANE_BARRAGE_H = 59381, - SPELL_ARCANE_VOLLEY_N = 51153, - SPELL_ARCANE_VOLLEY_H = 59382, + SPELL_ARCANE_BARRAGE = 50804, + SPELL_ARCANE_VOLLEY = 51153, SPELL_ENRAGED_ASSAULT = 51170, SPELL_PLANAR_ANOMALIES = 57959, SPELL_PLANAR_SHIFT = 51162, @@ -38,9 +36,6 @@ enum Spells SPELL_DRAKE_STOP_TIME = 49838, }; -#define SPELL_ARCANE_BARRAGE DUNGEON_MODE(SPELL_ARCANE_BARRAGE_N, SPELL_ARCANE_BARRAGE_H) -#define SPELL_ARCANE_VOLLEY DUNGEON_MODE(SPELL_ARCANE_VOLLEY_N, SPELL_ARCANE_VOLLEY_H) - enum VarosNPCs { NPC_LEY_GUARDIAN_WHELP = 28276, diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp index 129df1e67..2ead69d97 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp @@ -29,15 +29,10 @@ enum Spells SPELL_TELEPORT = 51112, SPELL_FROSTBOMB = 51103, - SPELL_TIME_BOMB_N = 51121, - SPELL_TIME_BOMB_H = 59376, - SPELL_EMPOWERED_ARCANE_EXPLOSION_N = 51110, - SPELL_EMPOWERED_ARCANE_EXPLOSION_H = 59377, + SPELL_TIME_BOMB = 51121, + SPELL_EMPOWERED_ARCANE_EXPLOSION = 51110, }; -#define SPELL_EMPOWERED_ARCANE_EXPLOSION DUNGEON_MODE(SPELL_EMPOWERED_ARCANE_EXPLOSION_N, SPELL_EMPOWERED_ARCANE_EXPLOSION_H) -//#define SPELL_TIME_BOMB DUNGEON_MODE(SPELL_TIME_BOMB_N, SPELL_TIME_BOMB_H) - enum UromNPCs { NPC_PHANTASMAL_CLOUDSCRAPER = 27645, @@ -298,7 +293,7 @@ public: //At this point we are still in casting state so we need to clear it for DoCastAOE not to fail me->ClearUnitState(UNIT_STATE_CASTING); - DoCastAOE(DUNGEON_MODE(SPELL_EMPOWERED_ARCANE_EXPLOSION_N, SPELL_EMPOWERED_ARCANE_EXPLOSION_H)); + DoCastAOE(SPELL_EMPOWERED_ARCANE_EXPLOSION); me->AddUnitState(UNIT_STATE_CASTING); events.RescheduleEvent(EVENT_TELE_BACK, DUNGEON_MODE(9s, 7s)); default: @@ -347,7 +342,7 @@ public: break; case EVENT_TIME_BOMB: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true)) - DoCast(target, DUNGEON_MODE(SPELL_TIME_BOMB_N, SPELL_TIME_BOMB_H)); + DoCast(target, SPELL_TIME_BOMB); events.Repeat(20s, 25s); break; case EVENT_TELEPORT_TO_CENTER: diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp index be7191ca0..71d445086 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp @@ -23,13 +23,10 @@ enum Spells { SPELL_CORE_AURA_PASSIVE = 50798, - SPELL_AMPLIFY_MAGIC_N = 51054, - SPELL_AMPLIFY_MAGIC_H = 59371, + SPELL_AMPLIFY_MAGIC = 51054, - SPELL_ENERGIZE_CORES_N = 50785, - SPELL_ENERGIZE_CORES_H = 59372, - SPELL_ENERGIZE_CORES_THIN_N = 61407, - SPELL_ENERGIZE_CORES_THIN_H = 62136, + SPELL_ENERGIZE_CORES = 50785, + SPELL_ENERGIZE_CORES_THIN = 61407, SPELL_ENERGIZE_CORES_TRIGGER_1 = 54069, SPELL_ENERGIZE_CORES_TRIGGER_2 = 56251, @@ -63,10 +60,6 @@ enum Events EVENT_ENERGIZE_CORES_DAMAGE = 7, }; -#define SPELL_AMPLIFY_MAGIC DUNGEON_MODE(SPELL_AMPLIFY_MAGIC_N, SPELL_AMPLIFY_MAGIC_H) -#define SPELL_ENERGIZE_CORES DUNGEON_MODE(SPELL_ENERGIZE_CORES_N, SPELL_ENERGIZE_CORES_H) -#define SPELL_ENERGIZE_CORES_THIN DUNGEON_MODE(SPELL_ENERGIZE_CORES_THIN_N, SPELL_ENERGIZE_CORES_THIN_H) - enum Says { SAY_AGGRO = 0, diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp index 87d4b4b80..4fd9d715d 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp @@ -38,7 +38,6 @@ enum Drakes // Centrifuge Constructs SPELL_EMPOWERING_BLOWS = 50044, - H_SPELL_EMPOWERING_BLOWS = 59213, SPELL_AMBER_SHOCK_CHARGE = 49836, SPELL_RUBY_EVASIVE_CHARGES = 50241, @@ -490,7 +489,7 @@ public: void JustEngagedWith(Unit* /*who*/) override { - DoCast(IsHeroic() ? H_SPELL_EMPOWERING_BLOWS : SPELL_EMPOWERING_BLOWS); + DoCast(SPELL_EMPOWERING_BLOWS); } void UpdateAI(uint32 /*diff*/) override diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp index b78a8f93a..10cbd2cd5 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp @@ -49,8 +49,7 @@ enum BjarngrimSpells // STORMFORGED LIEUTENANT SPELL_ARC_WELD = 59085, - SPELL_RENEW_STEEL_N = 52774, - SPELL_RENEW_STEEL_H = 59160, + SPELL_RENEW_STEEL = 52774, }; enum BjarngrimOther @@ -91,6 +90,9 @@ enum BjarngrimEvents // STORMFORGED LIEUTENANT EVENT_ARC_WELD = 41, EVENT_RENEW_STEEL = 42, + + // CHARGE UP + EVENT_CHARGE_UP = 51, }; enum Yells @@ -111,27 +113,22 @@ struct boss_bjarngrim : public npc_escortAI boss_bjarngrim(Creature* creature) : npc_escortAI(creature), summons(creature) { m_pInstance = creature->GetInstanceScript(); - - // Init waypoints - AddWaypoint(1, 1262.18f, 99.3f, 33.5f, 0); - AddWaypoint(2, 1281.6f, 99.5f, 33.5f, 0); - AddWaypoint(3, 1311.7f, 99.4f, 40.1f, 0); - AddWaypoint(4, 1332.5f, 99.7f, 40.18f, 0); - AddWaypoint(5, 1311.7f, 99.4f, 40.1f, 0); - AddWaypoint(6, 1281.6f, 99.5f, 33.5f, 0); - AddWaypoint(7, 1262.18f, 99.3f, 33.5f, 0); - AddWaypoint(8, 1262, -26.9f, 33.5f, 0); - AddWaypoint(9, 1281.2f, -26.8f, 33.5f, 0); - AddWaypoint(10, 1311.3f, -26.9f, 40.03f, 0); - AddWaypoint(11, 1332, -26.6f, 40.18f, 0); - AddWaypoint(12, 1311.3f, -26.9f, 40.03f, 0); - AddWaypoint(13, 1281.2f, -26.8f, 33.5f, 0); - AddWaypoint(14, 1262, -26.9f, 33.5f, 0); - + InitializeWaypoints(); me->SetWalk(true); Start(true, ObjectGuid::Empty, nullptr, false, true); } + void InitializeWaypoints() + { + AddWaypoint(1, 1262.0f, -26.9f, 33.5f, 10000); + AddWaypoint(2, 1262.18f, 99.3f, 33.5f, 10000); + AddWaypoint(3, 1262.0f, -26.9f, 33.5f, 0); + AddWaypoint(4, 1332.0f, -26.6f, 40.18f, 10000); + AddWaypoint(5, 1395.092f, 36.6425f, 50.038f, 10000); + AddWaypoint(6, 1332.0f, -26.6f, 40.18f, 0); + AddWaypoint(7, 1262.0f, -26.9f, 33.5f, 0); + } + void Reset() override { events.Reset(); @@ -140,12 +137,12 @@ struct boss_bjarngrim : public npc_escortAI for (uint8 i = 0; i < 2; ++i) if (Creature* dwarf = me->SummonCreature(NPC_STORMFORGED_LIEUTENANT, me->GetPositionX() + urand(4, 12), me->GetPositionY() + urand(4, 12), me->GetPositionZ())) { - dwarf->GetMotionMaster()->MoveFollow(me, 3, rand_norm() * 2 * 3.14f); + float angle = i == 0 ? 2.5f : 3.78f; + dwarf->GetMotionMaster()->MoveFollow(me, 3, angle); summons.Summon(dwarf); } me->RemoveAllAuras(); - me->CastSpell(me, SPELL_TEMPORARY_ELECTRICAL_CHARGE, true); if (m_pInstance) m_pInstance->SetBossState(DATA_BJARNGRIM, NOT_STARTED); @@ -272,14 +269,48 @@ struct boss_bjarngrim : public npc_escortAI void WaypointReached(uint32 Point) override { - if (Point == 1 || Point == 8) - DoCastSelf(SPELL_TEMPORARY_ELECTRICAL_CHARGE, true); - else if (Point == 7 || Point == 14) + if (Point == 1) + { + events.CancelEvent(EVENT_CHARGE_UP); + events.ScheduleEvent(EVENT_CHARGE_UP, 2500ms, 0); + } + else if (Point == 2) + { + events.CancelEvent(EVENT_CHARGE_UP); + } + else if (Point == 3) + { me->RemoveAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE); + } + else if (Point == 4) + { + events.CancelEvent(EVENT_CHARGE_UP); + events.ScheduleEvent(EVENT_CHARGE_UP, 2500ms, 0); + } + else if (Point == 5) + { + events.CancelEvent(EVENT_CHARGE_UP); + } + else if (Point == 6) + { + me->RemoveAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE); + } } void UpdateEscortAI(uint32 diff) override { + events.Update(diff); + + if (uint32 eventId = events.ExecuteEvent()) + { + if (eventId == EVENT_CHARGE_UP) + { + me->CastSpell(me, SPELL_CHARGE_UP, true); + me->CastSpell(me, SPELL_TEMPORARY_ELECTRICAL_CHARGE, true); + return; + } + } + if (!me->IsInCombat()) return; @@ -290,8 +321,6 @@ struct boss_bjarngrim : public npc_escortAI return; } - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) return; @@ -304,6 +333,11 @@ struct boss_bjarngrim : public npc_escortAI events.Repeat(20s); break; + case EVENT_CHARGE_UP: + DoCastSelf(SPELL_CHARGE_UP, true); + DoCastSelf(SPELL_TEMPORARY_ELECTRICAL_CHARGE, true); + break; + // DEFENSIVE STANCE case EVENT_BJARNGRIM_REFLECTION: DoCastSelf(SPELL_BJARNGRIM_REFLETION, true); @@ -395,7 +429,7 @@ struct npc_stormforged_lieutenant : public ScriptedAI case EVENT_RENEW_STEEL: if (Creature* bjarngrim = ObjectAccessor::GetCreature(*me, BjarngrimGUID)) if (bjarngrim->IsAlive()) - me->CastSpell(bjarngrim, me->GetMap()->IsHeroic() ? SPELL_RENEW_STEEL_H : SPELL_RENEW_STEEL_N, true); + me->CastSpell(bjarngrim, SPELL_RENEW_STEEL, true); events.Repeat(10s, 14s); break; diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp index 3c51b4fa0..6a72e570c 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp @@ -63,6 +63,7 @@ enum IonarEvents EVENT_CHECK_HEALTH = 3, EVENT_CALL_SPARKS = 4, EVENT_RESTORE = 5, + EVENT_CHANGE_TARGET = 6, }; struct boss_ionar : public BossAI @@ -85,8 +86,8 @@ struct boss_ionar : public BossAI if (!spark) events.RescheduleEvent(EVENT_CHECK_HEALTH, 1s, 0, 1); - events.RescheduleEvent(EVENT_BALL_LIGHTNING, 10s, 0, 1); - events.RescheduleEvent(EVENT_STATIC_OVERLOAD, 5s, 0, 1); + events.RescheduleEvent(EVENT_BALL_LIGHTNING, 7s, 11s, 0, 1); + events.RescheduleEvent(EVENT_STATIC_OVERLOAD, 6s, 12s, 0, 1); } void JustEngagedWith(Unit*) override @@ -138,7 +139,7 @@ struct boss_ionar : public BossAI me->SetControlled(true, UNIT_STATE_STUNNED); events.SetPhase(2); - events.ScheduleEvent(EVENT_CALL_SPARKS, 15s, 0, 2); + events.ScheduleEvent(EVENT_CALL_SPARKS, 20s, 0, 2); } void UpdateAI(uint32 diff) override @@ -155,17 +156,17 @@ struct boss_ionar : public BossAI { case EVENT_BALL_LIGHTNING: DoCastRandomTarget(SPELL_BALL_LIGHTNING, 1, 0.0f, false); - events.Repeat(10s, 11s); + events.Repeat(8s, 18s); break; case EVENT_STATIC_OVERLOAD: DoCastRandomTarget(SPELL_STATIC_OVERLOAD); - events.Repeat(5s, 6s); + events.Repeat(9s, 14s); break; case EVENT_CALL_SPARKS: { EntryCheckPredicate pred(NPC_SPARK_OF_IONAR); summons.DoAction(ACTION_CALLBACK, pred); - events.ScheduleEvent(EVENT_RESTORE, 2s, 0, 2); + events.ScheduleEvent(EVENT_RESTORE, 5s, 0, 2); return; } case EVENT_RESTORE: @@ -187,20 +188,47 @@ struct npc_spark_of_ionar : public ScriptedAI npc_spark_of_ionar(Creature* creature) : ScriptedAI(creature) { } void MoveInLineOfSight(Unit*) override { } - void UpdateAI(uint32) override { } void AttackStart(Unit* /*who*/) override { } - void Reset() override { returning = false; } + void Reset() override + { + returning = false; + _events.ScheduleEvent(EVENT_CHANGE_TARGET, 3s); + } void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override { damage = 0; } + void UpdateAI(uint32 diff) override + { + if (returning) + return; + + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_CHANGE_TARGET: + if (Player* tgt = SelectTargetFromPlayerList(100)) + { + me->GetMotionMaster()->Clear(); + me->GetMotionMaster()->MoveFollow(tgt, 0.0f, 0.0f, MOTION_SLOT_CONTROLLED); + } + _events.Repeat(3s); + break; + } + } + } + void DoAction(int32 param) override { if (param == ACTION_CALLBACK) { + _events.Reset(); me->SetSpeed(MOVE_RUN, 2.5f); me->GetThreatMgr().ClearAllThreat(); me->CombatStop(true); @@ -218,6 +246,7 @@ struct npc_spark_of_ionar : public ScriptedAI } private: + EventMap _events; bool returning; }; diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp index 043f9087d..361c23286 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp @@ -25,13 +25,11 @@ enum LokenSpells { SPELL_ARC_LIGHTNING = 52921, - SPELL_LIGHTNING_NOVA_N = 52960, - SPELL_LIGHTNING_NOVA_H = 59835, + SPELL_LIGHTNING_NOVA = 52960, SPELL_LIGHTNING_NOVA_VISUAL = 56502, SPELL_LIGHTNING_NOVA_THUNDERS = 52663, - SPELL_PULSING_SHOCKWAVE_N = 52961, - SPELL_PULSING_SHOCKWAVE_H = 59836, + SPELL_PULSING_SHOCKWAVE = 52961, // Achievement ACHIEVEMENT_TIMELY_DEATH = 20384 @@ -146,10 +144,10 @@ struct boss_loken : public BossAI events.DelayEvents(5s); events.ScheduleEvent(EVENT_AURA_REMOVE, me->GetMap()->IsHeroic() ? 4s : 5s); - me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_LIGHTNING_NOVA_H : SPELL_LIGHTNING_NOVA_N, false); + me->CastSpell(me, SPELL_LIGHTNING_NOVA, false); break; case EVENT_SHOCKWAVE: - me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_PULSING_SHOCKWAVE_H : SPELL_PULSING_SHOCKWAVE_N, false); + me->CastSpell(me, SPELL_PULSING_SHOCKWAVE, false); break; case EVENT_ARC_LIGHTNING: if (Unit* target = SelectTargetFromPlayerList(100, SPELL_ARC_LIGHTNING)) diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp index 30e110231..7e7e800b9 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp @@ -23,19 +23,16 @@ enum VolkahnSpells { // Volkhan - SPELL_HEAT_N = 52387, - SPELL_HEAT_H = 59528, - SPELL_SHATTERING_STOMP_N = 52237, - SPELL_SHATTERING_STOMP_H = 59529, + SPELL_HEAT = 52387, + SPELL_SHATTERING_STOMP = 52237, SPELL_TEMPER = 52238, SPELL_SUMMON_MOLTEN_GOLEM = 52405, //Molten Golem SPELL_BLAST_WAVE = 23113, - SPELL_IMMOLATION_STRIKE_N = 52433, - SPELL_IMMOLATION_STRIKE_H = 59530, - SPELL_SHATTER_N = 52429, - SPELL_SHATTER_H = 59527, + SPELL_COOL_DOWN = 52443, + SPELL_IMMOLATION_STRIKE = 52433, + SPELL_SHATTER = 52429, }; enum VolkhanOther @@ -63,8 +60,8 @@ enum VolkhanEvents EVENT_MOVE_TO_ANVIL = 5, // Molten Golem - EVENT_BLAST = 11, - EVENT_IMMOLATION = 12, + EVENT_IMMOLATION_STRIKE = 12, + EVENT_CHANGE_TARGET = 13, }; enum Yells @@ -86,7 +83,7 @@ struct boss_volkhan : public BossAI { _Reset(); x = y = z = PointID = ShatteredCount = 0; - HealthCheck = 100; + shatteredStompCast = false; me->SetSpeed(MOVE_RUN, 1.2f, true); me->SetReactState(REACT_AGGRESSIVE); instance->SetData(DATA_VOLKHAN_ACHIEVEMENT, true); @@ -97,7 +94,10 @@ struct boss_volkhan : public BossAI _JustEngagedWith(); me->SetInCombatWithZone(); Talk(SAY_AGGRO); - ScheduleEvents(false); + events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, randtime(9s, 14s)); + events.ScheduleEvent(EVENT_HEAT, randtime(18s, 38s)); + events.ScheduleEvent(EVENT_CHECK_HEALTH, 1s); + events.ScheduleEvent(EVENT_POSITION, 4s); } void JustDied(Unit*) override @@ -155,15 +155,6 @@ struct boss_volkhan : public BossAI Talk(SAY_SLAY); } - void ScheduleEvents(bool anvil) - { - events.SetPhase(1); - events.RescheduleEvent(EVENT_HEAT, 8s, 0, 1); - events.RescheduleEvent(EVENT_SHATTER, 10s, 0, 1); - events.RescheduleEvent(EVENT_CHECK_HEALTH, anvil ? 1s : 6s, 0, 1); - events.RescheduleEvent(EVENT_POSITION, 4s, 0, 1); - } - void JustSummoned(Creature* summon) override { summons.Summon(summon); @@ -186,6 +177,19 @@ struct boss_volkhan : public BossAI } } + bool HasActiveGolem() + { + for (ObjectGuid const& guid : summons) + { + if (Creature* golem = ObjectAccessor::GetCreature(*me, guid)) + { + if (golem->GetEntry() == NPC_MOLTEN_GOLEM && golem->IsAlive()) + return true; + } + } + return false; + } + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) @@ -194,39 +198,37 @@ struct boss_volkhan : public BossAI if (id == POINT_ANVIL) { me->SetSpeed(MOVE_RUN, 1.2f, true); - me->SetReactState(REACT_AGGRESSIVE); - me->CastSpell(me, SPELL_TEMPER, false); + DoCastSelf(SPELL_TEMPER); PointID = 0; - ScheduleEvents(true); // update orientation at server me->SetOrientation(2.19f); // and client - WorldPacket data; - me->BuildHeartBeatMsg(&data); - me->SendMessageToSet(&data, false); + me->SendMovementFlagUpdate(false); me->SetControlled(true, UNIT_STATE_ROOT); } else - events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0ms, 0, 2); + me->GetMotionMaster()->MovePoint(PointID, x, y, z); } void SpellHitTarget(Unit* /*who*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_TEMPER) { - me->CastSpell(me, SPELL_SUMMON_MOLTEN_GOLEM, true); - me->CastSpell(me, SPELL_SUMMON_MOLTEN_GOLEM, true); - me->GetMotionMaster()->MoveChase(me->GetVictim()); + DoCastSelf(SPELL_SUMMON_MOLTEN_GOLEM, true); + DoCastSelf(SPELL_SUMMON_MOLTEN_GOLEM, true); me->SetControlled(false, UNIT_STATE_ROOT); + me->SetReactState(REACT_AGGRESSIVE); + if (me->GetVictim()) + me->GetMotionMaster()->MoveChase(me->GetVictim()); + + events.RescheduleEvent(EVENT_HEAT, randtime(9s, 24s)); } } void GoToAnvil() { - events.SetPhase(2); - HealthCheck -= 20; me->SetSpeed(MOVE_RUN, 4.0f, true); me->SetReactState(REACT_PASSIVE); @@ -235,12 +237,12 @@ struct boss_volkhan : public BossAI if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE) me->GetMotionMaster()->MovementExpired(); - events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0ms, 0, 2); + GetNextPos(); + me->GetMotionMaster()->MovePoint(PointID, x, y, z); } void UpdateAI(uint32 diff) override { - //Return since we have no target if (!UpdateVictim()) return; @@ -252,31 +254,31 @@ struct boss_volkhan : public BossAI switch (events.ExecuteEvent()) { case EVENT_HEAT: - me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_HEAT_H : SPELL_HEAT_N, true); - events.Repeat(8s); + if (HasActiveGolem()) + { + DoCastSelf(SPELL_HEAT); + events.Repeat(randtime(9s, 24s)); + } break; case EVENT_CHECK_HEALTH: - if (HealthBelowPct(HealthCheck)) - GoToAnvil(); - + if (!shatteredStompCast && HealthBelowPct(25)) + { + shatteredStompCast = true; + DoCastAOE(SPELL_SHATTERING_STOMP); + Talk(SAY_STOMP); + summons.DoAction(ACTION_SHATTER); + } events.Repeat(1s); return; - case EVENT_SHATTER: - { - events.Repeat(10s); - summons.DoAction(ACTION_SHATTER); - break; - } case EVENT_MOVE_TO_ANVIL: - GetNextPos(); - me->GetMotionMaster()->MovePoint(PointID, x, y, z); + GoToAnvil(); + events.Repeat(randtime(30s, 36s)); return; case EVENT_POSITION: if (me->GetDistance(1331.9f, -106, 56) > 95) EnterEvadeMode(); else events.Repeat(4s); - return; } @@ -286,10 +288,10 @@ struct boss_volkhan : public BossAI private: EventMap events; SummonList summons; - uint8 HealthCheck; float x, y, z; uint8 PointID; uint8 ShatteredCount; + bool shatteredStompCast; }; struct npc_molten_golem : public ScriptedAI @@ -302,8 +304,9 @@ struct npc_molten_golem : public ScriptedAI void Reset() override { events.Reset(); - events.ScheduleEvent(EVENT_BLAST, 7s); - events.ScheduleEvent(EVENT_IMMOLATION, 3s); + events.ScheduleEvent(EVENT_IMMOLATION_STRIKE, 3s); + events.ScheduleEvent(EVENT_CHANGE_TARGET, 5s); + DoCastSelf(SPELL_COOL_DOWN, true); } void DamageTaken(Unit*, uint32& uiDamage, DamageEffectType, SpellSchoolMask) override @@ -316,6 +319,9 @@ struct npc_molten_golem : public ScriptedAI if (uiDamage >= me->GetHealth()) { + if (me->GetMap()->IsHeroic()) + DoCastSelf(SPELL_BLAST_WAVE, true); + me->UpdateEntry(NPC_BRITTLE_GOLEM, 0, false); me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_DISABLE_MOVE); me->SetHealth(me->GetMaxHealth()); @@ -337,7 +343,7 @@ struct npc_molten_golem : public ScriptedAI if (Creature* volkhan = m_pInstance->GetCreature(DATA_VOLKHAN)) volkhan->AI()->DoAction(ACTION_DESTROYED); - me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_SHATTER_H : SPELL_SHATTER_N, true); + me->CastSpell(me, SPELL_SHATTER, true); me->DespawnOrUnsummon(500ms); } } @@ -355,14 +361,19 @@ struct npc_molten_golem : public ScriptedAI switch (events.ExecuteEvent()) { - case EVENT_BLAST: - me->CastSpell(me, SPELL_BLAST_WAVE, false); - events.Repeat(14s); - break; - case EVENT_IMMOLATION: - me->CastSpell(me->GetVictim(), me->GetMap()->IsHeroic() ? SPELL_IMMOLATION_STRIKE_H : SPELL_IMMOLATION_STRIKE_N, false); + case EVENT_IMMOLATION_STRIKE: + if (SelectTarget(SelectTargetMethod::MaxThreat, 0, 0.0f, true, true, -SPELL_IMMOLATION_STRIKE)) + DoCastVictim(SPELL_IMMOLATION_STRIKE); events.Repeat(5s); break; + case EVENT_CHANGE_TARGET: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true)) + { + me->GetThreatMgr().ResetAllThreat(); + me->AddThreat(target, 30000.0f); + AttackStart(target); + } + break; } DoMeleeAttackIfReady(); diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp index bc40837a7..f2a76412c 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp @@ -24,16 +24,13 @@ enum spells { - GROUND_SPIKE_H = 59750, - BOULDER_TOSS = 50843, - BOULDER_TOSS_H = 59742, - SHATTER = 50810, - SHATTER_H = 61546, - STOMP = 50868, - STOMP_H = 59744, - GROUND_SLAM = 50827, - GROUND_SLAM_STONED_EFFECT = 50812, - SPELL_SHATTER_EFFECT = 50811, + SPELL_GROUND_SPIKE = 59750, + SPELL_BOULDER_TOSS = 50843, + SPELL_SHATTER = 50810, + SPELL_STOMP = 50868, + SPELL_GROUND_SLAM = 50827, + SPELL_GROUND_SLAM_STONED_EFFECT = 50812, + SPELL_SHATTER_EFFECT = 50811, }; enum events @@ -105,7 +102,7 @@ public: Map::PlayerList const& players = map->GetPlayers(); for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) if (itr->GetSource()->IsAlive()) - itr->GetSource()->RemoveAura(GROUND_SLAM_STONED_EFFECT); + itr->GetSource()->RemoveAura(SPELL_GROUND_SLAM_STONED_EFFECT); } } @@ -123,37 +120,38 @@ public: { case EVENT_BOULDER: { - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0)) - me->CastSpell(target, DUNGEON_MODE(BOULDER_TOSS, BOULDER_TOSS_H), false); - + DoCastRandomTarget(SPELL_BOULDER_TOSS, 0, 50.0f); events.Repeat(5s, 7s); break; } case EVENT_GROUND_SPIKE: { - me->CastSpell(me->GetVictim(), GROUND_SPIKE_H, false); // current enemy target + DoCastRandomTarget(SPELL_GROUND_SPIKE, 0, 50.0f); events.Repeat(8s, 11s); break; } case EVENT_STOMP: { - me->CastSpell(me, DUNGEON_MODE(STOMP, STOMP_H), false); + me->CastSpell(me, SPELL_STOMP, false); events.Repeat(13s, 18s); break; } case EVENT_GROUND_SLAM: { events.Repeat(10s, 13s); - me->CastSpell(me->GetVictim(), GROUND_SLAM, true); + me->CastSpell(me->GetVictim(), SPELL_GROUND_SLAM, true); + me->SetReactState(REACT_PASSIVE); + me->AttackStop(); events.DelayEvents(10s); events.RescheduleEvent(EVENT_SHATTER, 8s); break; } case EVENT_SHATTER: { - me->CastSpell((Unit*)nullptr, DUNGEON_MODE(SHATTER, SHATTER_H), false); + me->CastSpell((Unit*)nullptr, SPELL_SHATTER, false); Talk(SAY_SHATTER); events.RescheduleEvent(EVENT_REMOVE_STONED, 1500ms); + me->SetReactState(REACT_AGGRESSIVE); break; } case EVENT_REMOVE_STONED: @@ -193,7 +191,7 @@ class spell_krystallus_shatter : public SpellScript { if (Unit* target = GetHitUnit()) { - target->RemoveAurasDueToSpell(GROUND_SLAM_STONED_EFFECT); + target->RemoveAurasDueToSpell(SPELL_GROUND_SLAM_STONED_EFFECT); target->CastSpell((Unit*)nullptr, SPELL_SHATTER_EFFECT, true); } } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp index 814daf759..40bf8449d 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp @@ -21,13 +21,10 @@ enum spells { - PARTING_SORROW = 59723, - PILLAR_OF_WOE = 50761, - PILLAR_OF_WOE_H = 59727, - SHOCK_OF_SORROW = 50760, - SHOCK_OF_SORROW_H = 59726, - STORM_OF_GRIEF = 50752, - STORM_OF_GRIEF_H = 59772, + SPELL_PARTING_SORROW = 59723, + SPELL_PILLAR_OF_WOE = 50761, + SPELL_SHOCK_OF_SORROW = 50760, + SPELL_STORM_OF_GRIEF = 50752, ACHIEVEMENT_GOOD_GRIEF = 20383, }; @@ -80,10 +77,11 @@ public: void JustEngagedWith(Unit* /*who*/) override { - events.ScheduleEvent(EVENT_STORM, 5s); - events.ScheduleEvent(EVENT_SHOCK, 26s, 32s); - events.ScheduleEvent(EVENT_PILLAR, 12s, 20s); - events.ScheduleEvent(EVENT_PARTING, 8s); + events.ScheduleEvent(EVENT_STORM, 6s, 10s); + events.ScheduleEvent(EVENT_SHOCK, 14s, 29s); + events.ScheduleEvent(EVENT_PILLAR, 7s, 15s); + if (IsHeroic()) + events.ScheduleEvent(EVENT_PARTING, 27s, 45s); Talk(SAY_AGGRO); if (pInstance) @@ -107,32 +105,45 @@ public: { case EVENT_STORM: { - me->CastSpell(me->GetVictim(), DUNGEON_MODE(STORM_OF_GRIEF, STORM_OF_GRIEF_H), true); - events.Repeat(10s); + me->CastSpell(me->GetVictim(), SPELL_STORM_OF_GRIEF, true); + events.Repeat(16s, 20s); break; } case EVENT_SHOCK: { - me->CastSpell(me->GetVictim(), DUNGEON_MODE(SHOCK_OF_SORROW, SHOCK_OF_SORROW_H), false); + me->CastSpell(me->GetVictim(), SPELL_SHOCK_OF_SORROW, false); Talk(SAY_STUN); - events.Repeat(16s, 22s); + events.Repeat(19s, 33s); break; } case EVENT_PILLAR: { if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0)) - me->CastSpell(target, DUNGEON_MODE(PILLAR_OF_WOE, PILLAR_OF_WOE_H), false); + me->CastSpell(target, SPELL_PILLAR_OF_WOE, false); - events.Repeat(12s, 20s); + events.Repeat(8s, 31s); break; } case EVENT_PARTING: { - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0)) - me->CastSpell(target, PARTING_SORROW, false); + Unit* target = nullptr; + std::list targetList; - events.Repeat(6s, 16s); + SelectTargetList(targetList, 10, SelectTargetMethod::Random, 0, 50.0f, true); + for (Unit* possibleTarget : targetList) + { + if (possibleTarget && possibleTarget->IsPlayer() && possibleTarget->getPowerType() == POWER_MANA) + { + target = possibleTarget; + break; + } + } + + if (target) + me->CastSpell(target, SPELL_PARTING_SORROW, false); + + events.Repeat(27s, 45s); break; } } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp index 5292e69e4..f5ceede61 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp @@ -25,25 +25,18 @@ enum Spells // SJONNIR SPELL_FRENZY = 28747, //at 20% hp SPELL_CHAIN_LIGHTNING = 50830, - SPELL_CHAIN_LIGHTNING_H = 59844, SPELL_LIGHTNING_SHIELD = 50831, - SPELL_LIGHTNING_SHIELD_H = 59845, SPELL_STATIC_CHARGE = 50834, - SPELL_STATIC_CHARGE_H = 59846, SPELL_LIGHTNING_RING = 50840, - SPELL_LIGHTNING_RING_H = 59848, // IRON SLUDGE SPELL_TOXIC_VOLLEY = 50838, - SPELL_TOXIC_VOLLEY_H = 59853, // FORGED IRON DWARF SPELL_LIGHTNING_TETHER = 50895, - SPELL_LIGHTNING_TETHER_H = 59851, // FORGED IRON TROGG SPELL_LIGHTNING_SHOCK = 50900, - SPELL_LIGHTNING_SHOCK_H = 59852, }; enum Npc @@ -241,14 +234,14 @@ public: } case EVENT_SHIELD: { - me->CastSpell(me, DUNGEON_MODE(SPELL_LIGHTNING_SHIELD, SPELL_LIGHTNING_SHIELD_H), false); + me->CastSpell(me, SPELL_LIGHTNING_SHIELD, false); events.Repeat(14s, 19s); break; } case EVENT_CHAIN_LIGHTNING: { if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0)) - me->CastSpell(target, DUNGEON_MODE(SPELL_CHAIN_LIGHTNING, SPELL_CHAIN_LIGHTNING_H), false); + me->CastSpell(target, SPELL_CHAIN_LIGHTNING, false); events.Repeat(6s, 12s); break; @@ -256,14 +249,14 @@ public: case EVENT_STATIC_CHARGE: { if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0)) - me->CastSpell(target, DUNGEON_MODE(SPELL_STATIC_CHARGE, SPELL_STATIC_CHARGE_H), false); + me->CastSpell(target, SPELL_STATIC_CHARGE, false); events.Repeat(20s); break; } case EVENT_LIGHTNING_RING: { - me->CastSpell(me, DUNGEON_MODE(SPELL_LIGHTNING_RING, SPELL_LIGHTNING_RING_H), false); + me->CastSpell(me, SPELL_LIGHTNING_RING, false); events.Repeat(25s, 31s); events.DelayEvents(10s); // Channel duration break; @@ -399,7 +392,7 @@ public: if (!UpdateVictim()) return; - DoSpellAttackIfReady((me->GetEntry() == NPC_FORGED_IRON_DWARF) ? DUNGEON_MODE(SPELL_LIGHTNING_TETHER, SPELL_LIGHTNING_TETHER_H) : DUNGEON_MODE(SPELL_LIGHTNING_SHOCK, SPELL_LIGHTNING_SHOCK_H)); + DoSpellAttackIfReady((me->GetEntry() == NPC_FORGED_IRON_DWARF) ? SPELL_LIGHTNING_TETHER : SPELL_LIGHTNING_SHOCK); } }; }; @@ -448,7 +441,7 @@ public: // Every 5 seconds case EVENT_TOXIC_VOLLEY: { - me->CastSpell(me, DUNGEON_MODE(SPELL_TOXIC_VOLLEY, SPELL_TOXIC_VOLLEY_H), false); + me->CastSpell(me, SPELL_TOXIC_VOLLEY, false); events.Repeat(5s); break; } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp index ebfe6f455..e4305328f 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp @@ -48,13 +48,10 @@ enum Misc { // BRANN EVENT SPELL_GLARE_OF_THE_TRIBUNAL = 50988, - SPELL_GLARE_OF_THE_TRIBUNAL_H = 59870, SPELL_DARK_MATTER_VISUAL = 51000, SPELL_DARK_MATTER_VISUAL_CHANNEL= 51001, SPELL_DARK_MATTER = 51012, - SPELL_DARK_MATTER_H = 59868, SPELL_SEARING_GAZE = 51136, - SPELL_SEARING_GAZE_H = 59867, // DARK RUNE PROTECTOR SPELL_DRP_CHARGE = 22120, @@ -62,14 +59,11 @@ enum Misc // DARK RUNE STORMCALLER SPELL_DRS_LIGHTING_BOLT = 12167, - SPELL_DRS_LIGHTING_BOLT_H = 59863, SPELL_DRS_SHADOW_WORD_PAIN = 15654, - SPELL_DRS_SHADOW_WORD_PAIN_H = 59864, // IRON GOLEM CUSTODIAN SPELL_IGC_CRUSH_ARMOR = 33661, SPELL_IGC_GROUND_SMASH = 12734, - SPELL_IGC_GROUND_SMASH_H = 59865, // QUESTS QUEST_HALLS_OF_STONE = 13207, @@ -395,7 +389,7 @@ public: Talk(SAY_BRANN_ESCORT_START); me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE); me->SetReactState(REACT_AGGRESSIVE); - me->SetRegeneratingHealth(false); + me->SetRegeneratingHealth(true); break; case ACTION_START_TRIBUNAL: { @@ -505,7 +499,7 @@ public: if (Creature* kaddrak = GetKaddrak()) { if (Player* plr = SelectTargetFromPlayerList(100.0f)) - kaddrak->CastSpell(plr, DUNGEON_MODE(SPELL_GLARE_OF_THE_TRIBUNAL, SPELL_GLARE_OF_THE_TRIBUNAL_H), true); + kaddrak->CastSpell(plr, SPELL_GLARE_OF_THE_TRIBUNAL, true); } events.RescheduleEvent(EVENT_KADDRAK_SWITCH_EYE, 1s); @@ -593,7 +587,7 @@ public: { if (Creature* darkMatterTarget = ObjectAccessor::GetCreature(*me, darkMatterTargetGUID)) { - darkMatterTarget->CastSpell(darkMatterTarget, darkMatterTarget->GetMap()->IsHeroic() ? SPELL_DARK_MATTER_H : SPELL_DARK_MATTER, true); + darkMatterTarget->CastSpell(darkMatterTarget, SPELL_DARK_MATTER, true); darkMatterTarget->DespawnOrUnsummon(500ms); } break; @@ -612,7 +606,7 @@ public: { // summon another abedneum to create double beam, despawn just after trigger despawn me->SummonCreature(NPC_ABEDNEUM, 897.0f, 326.9f, 223.5f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 12000); - cr->CastSpell(cr, DUNGEON_MODE(SPELL_SEARING_GAZE, SPELL_SEARING_GAZE_H), true); + cr->CastSpell(cr, SPELL_SEARING_GAZE, true); } } events.Repeat(15s); @@ -622,15 +616,8 @@ public: { if (!canExecuteEvents) return; - uint32 Time = 40000 - (2500 * WaveNum); SummonCreatures(NPC_DARK_RUNE_PROTECTOR, 3, 0); - if (WaveNum > 2) - events.ScheduleEvent(EVENT_SUMMON_STORMCALLER, Seconds(urand(10 - WaveNum, 15 - WaveNum))); - if (WaveNum > 5) - events.ScheduleEvent(EVENT_SUMMON_CUSTODIAN, Seconds(urand(10 - WaveNum, 15 - WaveNum))); - - WaveNum++; - events.Repeat(Milliseconds(Time)); + events.Repeat(IsHeroic() ? 23500ms : 32500ms); break; } case EVENT_SUMMON_STORMCALLER: @@ -639,7 +626,7 @@ public: return; SummonCreatures(NPC_DARK_RUNE_STORMCALLER, 2, 1); - + events.Repeat(IsHeroic() ? 32s : 41500ms); break; } case EVENT_SUMMON_CUSTODIAN: @@ -648,7 +635,7 @@ public: return; SummonCreatures(NPC_IRON_GOLEM_CUSTODIAN, 1, 1); - + events.Repeat(IsHeroic() ? 32s : 45s); break; } case EVENT_TRIBUNAL_END: @@ -842,17 +829,14 @@ void brann_bronzebeard::brann_bronzebeardAI::InitializeEvent() Creature* cr = nullptr; if ((cr = me->SummonCreature(NPC_KADDRAK, 923.7f, 326.9f, 219.5f, 2.1f, TEMPSUMMON_TIMED_DESPAWN, 580000))) { - cr->SetInCombatWithZone(); KaddrakGUID = cr->GetGUID(); } if ((cr = me->SummonCreature(NPC_MARNAK, 895.974f, 363.571f, 219.337f, 5.5f, TEMPSUMMON_TIMED_DESPAWN, 580000))) { - cr->SetInCombatWithZone(); MarnakGUID = cr->GetGUID(); } if ((cr = me->SummonCreature(NPC_ABEDNEUM, 892.25f, 331.25f, 223.86f, 0.6f, TEMPSUMMON_TIMED_DESPAWN, 580000))) { - cr->SetInCombatWithZone(); AbedneumGUID = cr->GetGUID(); } @@ -865,8 +849,9 @@ void brann_bronzebeard::brann_bronzebeardAI::InitializeEvent() events.ScheduleEvent(EVENT_MARNAK_VISUAL, 105s); events.ScheduleEvent(EVENT_ABEDNEUM_VISUAL, 207s); - // Fight - events.ScheduleEvent(EVENT_SUMMON_MONSTERS, 47s); + events.ScheduleEvent(EVENT_SUMMON_MONSTERS, 52s); + events.ScheduleEvent(EVENT_SUMMON_STORMCALLER, 122s); + events.ScheduleEvent(EVENT_SUMMON_CUSTODIAN, 228s); events.ScheduleEvent(EVENT_KADDRAK_HEAD, 47s); events.ScheduleEvent(EVENT_MARNAK_HEAD, 115s); events.ScheduleEvent(EVENT_ABEDNEUM_HEAD, 217s); @@ -987,7 +972,6 @@ public: void JustEngagedWith(Unit*) override { - events.ScheduleEvent(EVENT_DRP_CHARGE, 10s); events.ScheduleEvent(EVENT_DRP_CLEAVE, 7s); } @@ -1002,14 +986,6 @@ public: switch (events.ExecuteEvent()) { - case EVENT_DRP_CHARGE: - { - if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(tgt, SPELL_DRP_CHARGE, false); - - events.Repeat(10s); - break; - } case EVENT_DRP_CLEAVE: { me->CastSpell(me->GetVictim(), SPELL_DRP_CLEAVE, false); @@ -1018,6 +994,14 @@ public: } } + if (Unit* victim = me->GetVictim()) + { + if (!me->IsWithinMeleeRange(victim) && !me->HasUnitState(UNIT_STATE_CHARGING)) + { + me->CastSpell(victim, SPELL_DRP_CHARGE, false); + } + } + DoMeleeAttackIfReady(); } }; @@ -1062,13 +1046,13 @@ public: { case EVENT_DRS_LIGHTNING_BOLD: { - me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_DRS_LIGHTING_BOLT_H : SPELL_DRS_LIGHTING_BOLT, false); + me->CastSpell(me->GetVictim(), SPELL_DRS_LIGHTING_BOLT, false); events.Repeat(5s); break; } case EVENT_DRS_SHADOW_WORD_PAIN: { - me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_DRS_SHADOW_WORD_PAIN_H : SPELL_DRS_SHADOW_WORD_PAIN, false); + me->CastSpell(me->GetVictim(), SPELL_DRS_SHADOW_WORD_PAIN, false); events.Repeat(12s); break; } @@ -1101,7 +1085,7 @@ public: void JustEngagedWith(Unit*) override { events.ScheduleEvent(EVENT_IGC_CRUSH, 6s); - events.ScheduleEvent(EVENT_IGC_GROUND_SMASH, 4s); + events.ScheduleEvent(EVENT_IGC_GROUND_SMASH, 20s); } void UpdateAI(uint32 diff) override { @@ -1122,8 +1106,8 @@ public: } case EVENT_IGC_GROUND_SMASH: { - me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_IGC_GROUND_SMASH_H : SPELL_IGC_GROUND_SMASH, false); - events.Repeat(5s); + me->CastSpell(me->GetVictim(), SPELL_IGC_GROUND_SMASH, false); + events.Repeat(20s, 40s); break; } } @@ -1139,13 +1123,13 @@ class spell_hos_dark_matter : public AuraScript bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo({ SPELL_DARK_MATTER_H, SPELL_DARK_MATTER }); + return ValidateSpellInfo({ SPELL_DARK_MATTER }); } void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { if (Unit* caster = GetCaster()) - caster->CastSpell(caster, caster->GetMap()->IsHeroic() ? SPELL_DARK_MATTER_H : SPELL_DARK_MATTER, true); + caster->CastSpell(caster, SPELL_DARK_MATTER, true); } void Register() override diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp index 4a9e61ff3..dd6cd84b8 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp @@ -45,7 +45,6 @@ public: ObjectGuid goSjonnirDoorGUID; ObjectGuid goLeftPipeGUID; ObjectGuid goRightPipeGUID; - ObjectGuid goTribunalDoorGUID; ObjectGuid SjonnirGUID; ObjectGuid BrannGUID; @@ -96,10 +95,6 @@ public: case GO_TRIBUNAL_CONSOLE: goTribunalConsoleGUID = go->GetGUID(); break; - case GO_TRIBUNAL_ACCESS_DOOR: - goTribunalDoorGUID = go->GetGUID(); - go->SetGoState(GO_STATE_READY); - break; case GO_SKY_FLOOR: goSkyRoomFloorGUID = go->GetGUID(); if (Encounter[BOSS_TRIBUNAL_OF_AGES] == DONE) @@ -141,8 +136,6 @@ public: { case GO_TRIBUNAL_CONSOLE: return goTribunalConsoleGUID; - case GO_TRIBUNAL_ACCESS_DOOR: - return goTribunalDoorGUID; case GO_SJONNIR_CONSOLE: return goSjonnirConsoleGUID; case GO_SJONNIR_DOOR: @@ -208,10 +201,6 @@ public: isKrystalusDead = type == BOSS_KRYSTALLUS || isKrystalusDead; } - if (isMaidenOfGriefDead && isKrystalusDead) - if (GameObject* tribunalDoor = instance->GetGameObject(goTribunalDoorGUID)) - tribunalDoor->SetGoState(GO_STATE_ACTIVE); - if (type == BOSS_TRIBUNAL_OF_AGES && data == SPECIAL) { if (GameObject* pSkyRoomFloor = instance->GetGameObject(goSkyRoomFloorGUID)) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp index 1e6dec95f..0ef24cb14 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp @@ -31,55 +31,35 @@ enum AssemblySpells SPELL_BERSERK = 47008, // Steelbreaker - SPELL_HIGH_VOLTAGE_10 = 61890, - SPELL_HIGH_VOLTAGE_25 = 63498, - SPELL_FUSION_PUNCH_10 = 61903, - SPELL_FUSION_PUNCH_25 = 63493, - SPELL_STATIC_DISRUPTION_10 = 61911, - SPELL_STATIC_DISRUPTION_25 = 63495, - SPELL_OVERWHELMING_POWER_10 = 64637, - SPELL_OVERWHELMING_POWER_25 = 61888, + SPELL_HIGH_VOLTAGE = 61890, + SPELL_FUSION_PUNCH = 61903, + SPELL_STATIC_DISRUPTION = 61911, + SPELL_OVERWHELMING_POWER = 64637, SPELL_ELECTRICAL_CHARGE = 61902, // Runemaster Molgeim SPELL_SHIELD_OF_RUNES_BUFF = 62277, - SPELL_SHIELD_OF_RUNES_10 = 62274, - SPELL_SHIELD_OF_RUNES_25 = 63489, + SPELL_SHIELD_OF_RUNES = 62274, SPELL_RUNE_OF_POWER = 61973, - SPELL_RUNE_OF_DEATH_10 = 62269, - SPELL_RUNE_OF_DEATH_25 = 63490, + SPELL_RUNE_OF_DEATH = 62269, SPELL_RUNE_OF_SUMMONING = 62273, SPELL_RUNE_OF_SUMMONING_SUMMON = 62020, - SPELL_LIGHTNING_BLAST_10 = 62054, - SPELL_LIGHTNING_BLAST_25 = 63491, + SPELL_LIGHTNING_BLAST = 62054, CREATURE_LIGHTNING_ELEMENTAL = 32958, CREATURE_RUNE_OF_SUMMONING = 33051, SPELL_RUNE_OF_POWER_OOC_CHANNEL = 61975, // Stormcaller Brundir - SPELL_CHAIN_LIGHTNING_10 = 61879, - SPELL_CHAIN_LIGHTNING_25 = 63479, - SPELL_OVERLOAD_10 = 61869, - SPELL_OVERLOAD_25 = 63481, - SPELL_LIGHTNING_WHIRL_10 = 61915, - SPELL_LIGHTNING_WHIRL_25 = 63483, - SPELL_LIGHTNING_TENDRILS_10 = 61887, - SPELL_LIGHTNING_TENDRILS_25 = 63486, + SPELL_CHAIN_LIGHTNING = 61879, + SPELL_OVERLOAD = 61869, + SPELL_LIGHTNING_WHIRL = 61915, + SPELL_LIGHTNING_WHIRL_TRIGG = 61916, + SPELL_LIGHTNING_TENDRILS = 61887, + SPELL_LIGHTNING_TENDRILS_2 = 61883, SPELL_STORMSHIELD = 64187, SPELL_LIGHTNING_CHANNEL_PRE = 61942, -}; -#define SPELL_HIGH_VOLTAGE RAID_MODE(SPELL_HIGH_VOLTAGE_10, SPELL_HIGH_VOLTAGE_25) -#define SPELL_FUSION_PUNCH RAID_MODE(SPELL_FUSION_PUNCH_10, SPELL_FUSION_PUNCH_25) -#define SPELL_STATIC_DISRUPTION RAID_MODE(SPELL_STATIC_DISRUPTION_10, SPELL_STATIC_DISRUPTION_25) -#define SPELL_OVERWHELMING_POWER RAID_MODE(SPELL_OVERWHELMING_POWER_10, SPELL_OVERWHELMING_POWER_25) -#define SPELL_SHIELD_OF_RUNES RAID_MODE(SPELL_SHIELD_OF_RUNES_10, SPELL_SHIELD_OF_RUNES_25) -#define SPELL_RUNE_OF_DEATH RAID_MODE(SPELL_RUNE_OF_DEATH_10, SPELL_RUNE_OF_DEATH_25) -#define SPELL_LIGHTNING_BLAST RAID_MODE(SPELL_LIGHTNING_BLAST_10, SPELL_LIGHTNING_BLAST_25) -#define SPELL_CHAIN_LIGHTNING RAID_MODE(SPELL_CHAIN_LIGHTNING_10, SPELL_CHAIN_LIGHTNING_25) -#define SPELL_OVERLOAD RAID_MODE(SPELL_OVERLOAD_10, SPELL_OVERLOAD_25) -#define SPELL_LIGHTNING_WHIRL RAID_MODE(SPELL_LIGHTNING_WHIRL_10, SPELL_LIGHTNING_WHIRL_25) -#define SPELL_LIGHTNING_TENDRILS RAID_MODE(SPELL_LIGHTNING_TENDRILS_10, SPELL_LIGHTNING_TENDRILS_25) +}; enum eEnums { @@ -720,7 +700,7 @@ public: void SpellHitTarget(Unit* /*target*/, SpellInfo const* spellInfo) override { - if (spellInfo->Id == SPELL_CHAIN_LIGHTNING || spellInfo->Id == uint32(RAID_MODE(61916, 63482))) // Lightning Whirl triggered + if (spellInfo->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_CHAIN_LIGHTNING, me) || spellInfo->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_LIGHTNING_WHIRL_TRIGG, me)) _stunnedAchievement = false; } @@ -797,7 +777,7 @@ public: me->SetUnitFlag(UNIT_FLAG_STUNNED); me->CastSpell(me, SPELL_LIGHTNING_TENDRILS, true); - me->CastSpell(me, 61883, true); + me->CastSpell(me, SPELL_LIGHTNING_TENDRILS_2, true); events.ScheduleEvent(EVENT_LIGHTNING_LAND, 16s); events.ScheduleEvent(EVENT_LIGHTNING_FLIGHT, 1s); break; @@ -821,8 +801,8 @@ public: me->SetRegeneratingHealth(true); _flyTargetGUID.Clear(); - me->RemoveAura(SPELL_LIGHTNING_TENDRILS); - me->RemoveAura(61883); + me->RemoveAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_LIGHTNING_TENDRILS, me)); + me->RemoveAura(SPELL_LIGHTNING_TENDRILS_2); DoResetThreatList(); events.CancelEvent(EVENT_LIGHTNING_FLIGHT); break; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp index a4b1ef675..587e59125 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp @@ -28,40 +28,25 @@ enum AuriayaSpells { // BASIC SPELL_TERRIFYING_SCREECH = 64386, - SPELL_SENTINEL_BLAST_10 = 64389, - SPELL_SENTINEL_BLAST_25 = 64678, - SPELL_SONIC_SCREECH_10 = 64422, - SPELL_SONIC_SCREECH_25 = 64688, + SPELL_SENTINEL_BLAST = 64389, + SPELL_SONIC_SCREECH = 64422, SPELL_GUARDIAN_SWARM = 64396, SPELL_ENRAGE = 47008, SPELL_ACTIVATE_FERAL_DEFENDER = 64449, // Sanctum Sentry - SPELL_SAVAGE_POUNCE_10 = 64666, - SPELL_SAVAGE_POUNCE_25 = 64374, - SPELL_RIP_FLESH_10 = 64375, - SPELL_RIP_FLESH_25 = 64667, + SPELL_SAVAGE_POUNCE = 64666, + SPELL_RIP_FLESH = 64375, SPELL_STRENGTH_OF_THE_PACK = 64369, // Feral Defender SPELL_FERAL_ESSENCE = 64455, - SPELL_FERAL_POUNCE_10 = 64478, - SPELL_FERAL_POUNCE_25 = 64669, - SPELL_FERAL_RUSH_10 = 64496, - SPELL_FERAL_RUSH_25 = 64674, + SPELL_FERAL_POUNCE = 64478, + SPELL_FERAL_RUSH = 64496, //SPELL_SEEPING_FERAL_ESSENCE_SUMMON = 64457, - SPELL_SEEPING_FERAL_ESSENCE_10 = 64458, - SPELL_SEEPING_FERAL_ESSENCE_25 = 64676, + SPELL_SEEPING_FERAL_ESSENCE = 64458, }; -#define SPELL_SONIC_SCREECH RAID_MODE(SPELL_SONIC_SCREECH_10, SPELL_SONIC_SCREECH_25) -#define SPELL_SENTINEL_BLAST RAID_MODE(SPELL_SENTINEL_BLAST_10, SPELL_SENTINEL_BLAST_25) -#define SPELL_SAVAGE_POUNCE RAID_MODE(SPELL_SAVAGE_POUNCE_10, SPELL_SAVAGE_POUNCE_25) -#define SPELL_RIP_FLESH RAID_MODE(SPELL_RIP_FLESH_10, SPELL_RIP_FLESH_25) -#define SPELL_FERAL_POUNCE RAID_MODE(SPELL_FERAL_POUNCE_10, SPELL_FERAL_POUNCE_25) -#define SPELL_FERAL_RUSH RAID_MODE(SPELL_FERAL_RUSH_10, SPELL_FERAL_RUSH_25) -//#define SPELL_SEEPING_FERAL_ESSENCE RAID_MODE(SPELL_SEEPING_FERAL_ESSENCE_10, SPELL_SEEPING_FERAL_ESSENCE_25) - enum AuriayaNPC { NPC_FERAL_DEFENDER = 34035, diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index 9bb1d122a..4b2175291 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -29,31 +29,23 @@ enum FreyaSpells SPELL_AUTO_GROW = 62559, SPELL_LIFEBINDER_PHERONOMES = 62619, SPELL_LIFEBINDER_VISUAL = 62579, - SPELL_LIFEBINDER_HEAL_10 = 62584, - SPELL_LIFEBINDER_HEAL_25 = 64185, + SPELL_LIFEBINDER_HEAL = 62584, // FREYA - SPELL_TOUCH_OF_EONAR_10 = 62528, - SPELL_TOUCH_OF_EONAR_25 = 62892, + SPELL_TOUCH_OF_EONAR = 62528, SPELL_ATTUNED_TO_NATURE = 62519, SPELL_SUMMON_LIFEBINDER = 62870, - SPELL_SUNBEAM_10 = 62623, - SPELL_SUNBEAM_25 = 62872, + SPELL_SUNBEAM = 62623, SPELL_NATURE_BOMB_FLIGHT = 64648, - SPELL_NATURE_BOMB_DAMAGE_10 = 64587, - SPELL_NATURE_BOMB_DAMAGE_25 = 64650, + SPELL_NATURE_BOMB_DAMAGE = 64587, SPELL_GREEN_BANISH_STATE = 32567, SPELL_BERSERK = 47008, // HARD MODE - SPELL_GROUND_TREMOR_FREYA_10 = 62437, - SPELL_GROUND_TREMOR_FREYA_25 = 62859, - SPELL_IRON_ROOTS_FREYA_10 = 62862, - SPELL_IRON_ROOTS_FREYA_25 = 62439, - SPELL_IRON_ROOTS_FREYA_DAMAGE_10 = 62861, - SPELL_IRON_ROOTS_FREYA_DAMAGE_25 = 62438, - SPELL_UNSTABLE_SUN_FREYA_DAMAGE_10 = 62451, - SPELL_UNSTABLE_SUN_FREYA_DAMAGE_25 = 62865, + SPELL_GROUND_TREMOR_FREYA = 62437, + SPELL_IRON_ROOTS_FREYA = 62862, + SPELL_IRON_ROOTS_FREYA_DAMAGE = 62861, + SPELL_UNSTABLE_SUN_FREYA_DAMAGE = 62451, SPELL_UNSTABLE_SUN_VISUAL = 62216, // ELDERS @@ -64,86 +56,49 @@ enum FreyaSpells // BRIGHTLEAF SPELL_BRIGHTLEAF_FLUX = 62239, - SPELL_SOLAR_FLARE_10 = 62240, - SPELL_SOLAR_FLARE_25 = 64087, + SPELL_SOLAR_FLARE = 62240, SPELL_UNSTABLE_SUN_BEAM_AURA = 62211, SPELL_PHOTOSYNTHESIS = 62209, - SPELL_UNSTABLE_SUN_DAMAGE_10 = 62217, - SPELL_UNSTABLE_SUN_DAMAGE_25 = 62922, + SPELL_UNSTABLE_SUN_DAMAGE = 62217, // IRONBRANCH - SPELL_IMPALE_10 = 62310, - SPELL_IMPALE_25 = 62928, - SPELL_IRON_ROOTS_10 = 62275, - SPELL_IRON_ROOTS_25 = 62929, - SPELL_IRON_ROOTS_DAMAGE_10 = 62283, - SPELL_IRON_ROOTS_DAMAGE_25 = 62930, - SPELL_THORN_SWARM_10 = 62285, - SPELL_THORN_SWARM_25 = 62931, + SPELL_IMPALE = 62310, + SPELL_IRON_ROOTS = 62275, + SPELL_IRON_ROOTS_DAMAGE = 62283, + SPELL_THORN_SWARM = 62285, // STONEBARK SPELL_FISTS_OF_STONE = 62344, - SPELL_GROUND_TREMOR_10 = 62325, - SPELL_GROUND_TREMOR_25 = 62932, - SPELL_PETRIFIED_BARK_10 = 62337, - SPELL_PETRIFIED_BARK_25 = 62933, + SPELL_GROUND_TREMOR = 62325, + SPELL_PETRIFIED_BARK = 62337, // SNAPLASHER - SPELL_HARDENED_BARK_10 = 62664, - SPELL_HARDENED_BARK_25 = 64191, + SPELL_HARDENED_BARK = 62664, // ANCIENT WATER SPIRIT - SPELL_TIDAL_WAVE_10 = 62653, - SPELL_TIDAL_WAVE_25 = 62935, - SPELL_TIDAL_WAVE_DAMAGE_10 = 62654, - SPELL_TIDAL_WAVE_DAMAGE_25 = 62936, + SPELL_TIDAL_WAVE = 62653, + SPELL_TIDAL_WAVE_DAMAGE = 62654, SPELL_TIDAL_WAVE_AURA = 62655, // STORM LASHER - SPELL_LIGHTNING_LASH_10 = 62648, - SPELL_LIGHTNING_LASH_25 = 62939, - SPELL_STORMBOLT_10 = 62649, - SPELL_STORMBOLT_25 = 62938, + SPELL_LIGHTNING_LASH = 62648, + SPELL_STORMBOLT = 62649, // ANCIENT CONSERVATOR SPELL_CONSERVATOR_GRIP = 62532, - SPELL_NATURE_FURY_10 = 62589, - SPELL_NATURE_FURY_25 = 63571, + SPELL_NATURE_FURY = 62589, SPELL_POTENT_PHEROMONES = 62541, SPELL_HEALTHY_SPORE_VISUAL = 62538, SPELL_HEALTHY_SPORE_SUMMON = 62566, // DETONATING LASHER - SPELL_DETONATE_10 = 62598, - SPELL_DETONATE_25 = 62937, + SPELL_DETONATE = 62598, SPELL_FLAME_LASH = 62608, // ACHIEVEMENT SPELL_DEFORESTATION_CREDIT = 65015, }; -#define SPELL_GROUND_TREMOR RAID_MODE(SPELL_GROUND_TREMOR_10, SPELL_GROUND_TREMOR_25) -#define SPELL_PETRIFIED_BARK RAID_MODE(SPELL_PETRIFIED_BARK_10, SPELL_PETRIFIED_BARK_25) -#define SPELL_IRON_ROOTS RAID_MODE(SPELL_IRON_ROOTS_10, SPELL_IRON_ROOTS_25) -#define SPELL_IMPALE RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25) -#define SPELL_THORN_SWARM RAID_MODE(SPELL_THORN_SWARM_10, SPELL_THORN_SWARM_25) -#define SPELL_UNSTABLE_SUN_DAMAGE RAID_MODE(SPELL_UNSTABLE_SUN_DAMAGE_10, SPELL_UNSTABLE_SUN_DAMAGE_25) -#define SPELL_SOLAR_FLARE RAID_MODE(SPELL_SOLAR_FLARE_10, SPELL_SOLAR_FLARE_25) -#define SPELL_TOUCH_OF_EONAR RAID_MODE(SPELL_TOUCH_OF_EONAR_10, SPELL_TOUCH_OF_EONAR_25) -#define SPELL_LIFEBINDER_HEAL RAID_MODE(SPELL_LIFEBINDER_HEAL_10, SPELL_LIFEBINDER_HEAL_25) -#define SPELL_TIDAL_WAVE RAID_MODE(SPELL_TIDAL_WAVE_10, SPELL_TIDAL_WAVE_25) -#define SPELL_TIDAL_WAVE_DAMAGE RAID_MODE(SPELL_TIDAL_WAVE_DAMAGE_10, SPELL_TIDAL_WAVE_DAMAGE_25) -#define SPELL_NATURE_FURY RAID_MODE(SPELL_NATURE_FURY_10, SPELL_NATURE_FURY_25) -#define SPELL_HARDENED_BARK RAID_MODE(SPELL_HARDENED_BARK_10, SPELL_HARDENED_BARK_25) -#define SPELL_DETONATE RAID_MODE(SPELL_DETONATE_10, SPELL_DETONATE_25) -//#define SPELL_NATURE_BOMB_DAMAGE RAID_MODE(SPELL_NATURE_BOMB_DAMAGE_10, SPELL_NATURE_BOMB_DAMAGE_25) -#define SPELL_SUNBEAM RAID_MODE(SPELL_SUNBEAM_10, SPELL_SUNBEAM_25) -#define SPELL_GROUND_TREMOR_FREYA RAID_MODE(SPELL_GROUND_TREMOR_FREYA_10, SPELL_GROUND_TREMOR_FREYA_25) -#define SPELL_IRON_ROOTS_FREYA RAID_MODE(SPELL_IRON_ROOTS_FREYA_10, SPELL_IRON_ROOTS_FREYA_25) -#define SPELL_UNSTABLE_SUN_FREYA_DAMAGE RAID_MODE(SPELL_UNSTABLE_SUN_FREYA_DAMAGE_10, SPELL_UNSTABLE_SUN_FREYA_DAMAGE_25) -#define SPELL_LIGHTNING_LASH RAID_MODE(SPELL_LIGHTNING_LASH_10, SPELL_LIGHTNING_LASH_25) -#define SPELL_STORMBOLT RAID_MODE(SPELL_STORMBOLT_10, SPELL_STORMBOLT_25) - enum FreyaEvents { // FREYA @@ -983,9 +938,9 @@ public: if (Unit* target = ObjectAccessor::GetUnit(*me, me->ToTempSummon()->GetSummonerGUID())) { if (me->GetEntry() == NPC_IRON_ROOT_TRIGGER) // Iron Branch spell - target->RemoveAura(target->GetMap()->Is25ManRaid() ? SPELL_IRON_ROOTS_DAMAGE_25 : SPELL_IRON_ROOTS_DAMAGE_10); + target->RemoveAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_IRON_ROOTS_DAMAGE, me)); else - target->RemoveAura(target->GetMap()->Is25ManRaid() ? SPELL_IRON_ROOTS_FREYA_DAMAGE_25 : SPELL_IRON_ROOTS_FREYA_DAMAGE_10); + target->RemoveAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_IRON_ROOTS_FREYA_DAMAGE, me)); } } }; @@ -1023,7 +978,7 @@ public: if (_healTimer >= 12000) { me->RemoveAurasDueToSpell(SPELL_AUTO_GROW); - me->CastSpell(me, me->GetMap()->Is25ManRaid() ? SPELL_LIFEBINDER_HEAL_25 : SPELL_LIFEBINDER_HEAL_10, true); + me->CastSpell(me, SPELL_LIFEBINDER_HEAL, true); me->DespawnOrUnsummon(2s); _healTimer = 0; } @@ -1249,7 +1204,7 @@ public: _explodeTimer += diff; if (_explodeTimer >= 11000) { - me->CastSpell(me, me->GetMap()->Is25ManRaid() ? SPELL_NATURE_BOMB_DAMAGE_25 : SPELL_NATURE_BOMB_DAMAGE_10, false); + me->CastSpell(me, SPELL_NATURE_BOMB_DAMAGE, false); me->DespawnOrUnsummon(1s); _explodeTimer = 0; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index 013418f22..6f037c289 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -58,8 +58,7 @@ enum HodirSpellData SPELL_ICE_SHARDS_BIG = 65370, SPELL_SNOWDRIFT = 62463, - SPELL_FROZEN_BLOWS_10 = 62478, - SPELL_FROZEN_BLOWS_25 = 63512, + SPELL_FROZEN_BLOWS = 62478, // Helpers: SPELL_PRIEST_DISPELL_MAGIC = 63499, @@ -70,9 +69,8 @@ enum HodirSpellData SPELL_DRUID_STARLIGHT_AREA_AURA = 62807, SPELL_SHAMAN_LAVA_BURST = 61924, - SPELL_SHAMAN_STORM_CLOUD_10 = 65123, - SPELL_SHAMAN_STORM_CLOUD_25 = 65133, - SPELL_SHAMAN_STORM_POWER_10 = 63711, + SPELL_SHAMAN_STORM_CLOUD = 65123, + SPELL_SHAMAN_STORM_POWER = 63711, SPELL_SHAMAN_STORM_POWER_25 = 65134, SPELL_MAGE_FIREBALL = 61909, @@ -153,9 +151,6 @@ enum HodirText TEXT_EMOTE_BLOW = 8, }; -#define SPELL_FROZEN_BLOWS RAID_MODE(SPELL_FROZEN_BLOWS_10, SPELL_FROZEN_BLOWS_25) -#define SPELL_SHAMAN_STORM_CLOUD RAID_MODE(SPELL_SHAMAN_STORM_CLOUD_10, SPELL_SHAMAN_STORM_CLOUD_25) - enum HodirSounds { SOUND_HODIR_AGGRO = 15552, @@ -483,7 +478,7 @@ public: { Talk(TEXT_EMOTE_BLOW); Talk(TEXT_STALACTITE); - me->CastSpell(me, Is25ManRaid()? SPELL_FROZEN_BLOWS_25 : SPELL_FROZEN_BLOWS_10, true); + me->CastSpell(me, SPELL_FROZEN_BLOWS, true); } break; case EVENT_FREEZE: @@ -1008,8 +1003,9 @@ public: void SpellHitTarget(Unit* target, SpellInfo const* spell) override { - if (target && spell->Id == SPELL_SHAMAN_STORM_CLOUD) - if (Aura* a = target->GetAura(SPELL_SHAMAN_STORM_CLOUD, me->GetGUID())) + uint32 spellid = sSpellMgr->GetSpellIdForDifficulty(SPELL_SHAMAN_STORM_CLOUD, me); + if (target && spell->Id == spellid) + if (Aura* a = target->GetAura(spellid, me->GetGUID())) a->SetStackAmount(spell->StackAmount); } @@ -1044,10 +1040,13 @@ public: events.Repeat(2600ms); break; case EVENT_SHAMAN_STORM_CLOUD: - if (Player* target = ScriptedAI::SelectTargetFromPlayerList(35.0f, SPELL_SHAMAN_STORM_CLOUD)) - me->CastSpell(target, SPELL_SHAMAN_STORM_CLOUD, false); - events.Repeat(30s); - break; + { + uint32 spellid = sSpellMgr->GetSpellIdForDifficulty(SPELL_SHAMAN_STORM_CLOUD, me); + if (Player* target = ScriptedAI::SelectTargetFromPlayerList(35.0f, spellid)) + me->CastSpell(target, spellid, false); + events.Repeat(30s); + break; + } } } @@ -1403,7 +1402,7 @@ class spell_hodir_storm_power_aura : public AuraScript void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { if (Unit* caster = GetCaster()) - if (Aura* a = caster->GetAura(GetId() == SPELL_SHAMAN_STORM_POWER_10 ? SPELL_SHAMAN_STORM_CLOUD_10 : SPELL_SHAMAN_STORM_CLOUD_25)) + if (Aura* a = caster->GetAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_SHAMAN_STORM_CLOUD, caster))) a->ModStackAmount(-1); } @@ -1427,14 +1426,14 @@ class spell_hodir_storm_cloud_aura : public AuraScript bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo({ SPELL_SHAMAN_STORM_CLOUD_10, SPELL_SHAMAN_STORM_POWER_10, SPELL_SHAMAN_STORM_POWER_25 }); + return ValidateSpellInfo({ SPELL_SHAMAN_STORM_POWER }); } void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) { PreventDefaultAction(); if (Unit* target = GetTarget()) - target->CastSpell((Unit*)nullptr, (GetId() == SPELL_SHAMAN_STORM_CLOUD_10 ? SPELL_SHAMAN_STORM_POWER_10 : SPELL_SHAMAN_STORM_POWER_25), true); + target->CastSpell((Unit*)nullptr, (sSpellMgr->GetSpellIdForDifficulty(SPELL_SHAMAN_STORM_POWER, GetCaster())), true); } void Register() override @@ -1528,7 +1527,7 @@ public: bool OnCheck(Player* player, Unit* /*target*/, uint32 /*criteria_id*/) override { - return player && player->HasAllAuras(SPELL_MAGE_TOASTY_FIRE_AURA, SPELL_DRUID_STARLIGHT_AREA_AURA, SPELL_SHAMAN_STORM_POWER_10); + return player && player->HasAllAuras(SPELL_MAGE_TOASTY_FIRE_AURA, SPELL_DRUID_STARLIGHT_AREA_AURA, SPELL_SHAMAN_STORM_POWER); } }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp index 133868f33..9b6b35b11 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp @@ -26,37 +26,33 @@ #include "SpellScriptLoader.h" #include "ulduar.h" -#define SPELL_FLAME_JETS_10 62680 -#define SPELL_FLAME_JETS_25 63472 -#define S_FLAME_JETS RAID_MODE(SPELL_FLAME_JETS_10, SPELL_FLAME_JETS_25) -#define SPELL_SCORCH_10 62546 -#define SPELL_SCORCH_25 63474 -#define S_SCORCH RAID_MODE(SPELL_SCORCH_10, SPELL_SCORCH_25) -#define SPELL_ACTIVATE_CONSTRUCT 62488 -#define SPELL_STRENGTH_OF_THE_CREATOR 64473 -#define SPELL_SLAG_POT_10 62717 -#define SPELL_SLAG_POT_25 63477 -#define S_SLAG_POT RAID_MODE(SPELL_SLAG_POT_10, SPELL_SLAG_POT_25) -#define SPELL_BERSERK 64238 -#define SPELL_GRAB 62707 -#define SPELL_GRAB_TRIGGERED 62708 -#define SPELL_GRAB_CONTROL_2 62711 +enum IgnisSpellData +{ + SPELL_FLAME_JETS = 62680, + SPELL_SCORCH = 62546, + SPELL_ACTIVATE_CONSTRUCT = 62488, + SPELL_STRENGTH_OF_THE_CREATOR = 64473, + SPELL_SLAG_POT = 62717, + SPELL_BERSERK = 64238, + SPELL_GRAB = 62707, + SPELL_GRAB_TRIGGERED = 62708, + SPELL_GRAB_CONTROL_2 = 62711, -#define SPELL_SCORCHED_GROUND_10 62548 -#define SPELL_SCORCHED_GROUND_25 63476 -#define S_SCORCHED_GROUND RAID_MODE(SPELL_SCORCHED_GROUND_10, SPELL_SCORCHED_GROUND_25) -#define SPELL_HEAT_AREA 62343 -#define SPELL_HEAT_BUFF 65667 -#define SPELL_MOLTEN 62373 -#define SPELL_BRITTLE_10 62382 -#define SPELL_BRITTLE_25 67114 -#define S_BRITTLE RAID_MODE(SPELL_BRITTLE_10, SPELL_BRITTLE_25) -#define SPELL_SHATTER 62383 + SPELL_SCORCHED_GROUND = 62548, + SPELL_HEAT_AREA = 62343, + SPELL_HEAT_BUFF = 65667, + SPELL_MOLTEN = 62373, + SPELL_BRITTLE = 62382, + SPELL_SHATTER = 62383, +}; -#define BOSS_IGNIS 33118 -#define NPC_IRON_CONSTRUCT 33121 -#define NPC_SCORCHED_GROUND 33123 -#define NPC_WATER_TRIGGER 22515 +enum IgnisNPCs +{ + BOSS_IGNIS = 33118, + NPC_IRON_CONSTRUCT = 33121, + NPC_SCORCHED_GROUND = 33123, + NPC_WATER_TRIGGER = 22515, +}; enum Texts { @@ -147,7 +143,7 @@ public: void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType, SpellSchoolMask) override { - if (damage >= RAID_MODE(3000U, 5000U) && me->GetAura(S_BRITTLE)) + if (damage >= RAID_MODE(3000U, 5000U) && me->GetAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_BRITTLE, me))) { me->CastSpell(me, SPELL_SHATTER, true); Unit::Kill(attacker, me); @@ -177,7 +173,7 @@ public: if (me->FindNearestCreature(NPC_WATER_TRIGGER, 18.0f, true)) { me->RemoveAura(a); - me->CastSpell(me, S_BRITTLE, true); + me->CastSpell(me, SPELL_BRITTLE, true); } } else @@ -312,7 +308,7 @@ public: if (caster && spell->Id == SPELL_GRAB_CONTROL_2) { //caster->ClearUnitState(UNIT_STATE_ONVEHICLE); - me->CastSpell(caster, S_SLAG_POT, true); + me->CastSpell(caster, SPELL_SLAG_POT, true); } } @@ -354,7 +350,7 @@ public: me->SetControlled(true, UNIT_STATE_ROOT); me->DisableRotate(true); me->SendMovementFlagUpdate(); - me->CastSpell(me->GetVictim(), S_SCORCH, false); + me->CastSpell(me->GetVictim(), SPELL_SCORCH, false); events.Repeat(20s); events.RescheduleEvent(EVENT_ENABLE_ROTATE, 3s); break; @@ -364,7 +360,7 @@ public: break; case EVENT_SPELL_FLAME_JETS: Talk(EMOTE_JETS); - me->CastSpell(me->GetVictim(), S_FLAME_JETS, false); + me->CastSpell(me->GetVictim(), SPELL_FLAME_JETS, false); events.Repeat(25s); break; case EVENT_GRAB: @@ -431,7 +427,7 @@ class spell_ignis_scorch_aura : public AuraScript bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo({ SPELL_SCORCHED_GROUND_10, SPELL_SCORCHED_GROUND_25 }); + return ValidateSpellInfo({ SPELL_SCORCHED_GROUND }); } void HandleEffectPeriodic(AuraEffect const* aurEff) @@ -441,7 +437,7 @@ class spell_ignis_scorch_aura : public AuraScript if (Creature* summon = caster->SummonCreature(NPC_SCORCHED_GROUND, caster->GetPositionX() + 20.0f * cos(caster->GetOrientation()), caster->GetPositionY() + 20.0f * std::sin(caster->GetOrientation()), 361.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 30000)) { if (!summon->FindNearestCreature(NPC_WATER_TRIGGER, 25.0f, true)) // must be away from the water - summon->CastSpell(summon, (aurEff->GetId() == SPELL_SCORCH_10 ? SPELL_SCORCHED_GROUND_10 : SPELL_SCORCHED_GROUND_25), true); + summon->CastSpell(summon, SPELL_SCORCHED_GROUND, true); } } @@ -474,12 +470,10 @@ class spell_ignis_grab_initial : public SpellScript enum SlagPot { - SPELL_SLAG_POT_DAMAGE_1 = 65722, - SPELL_SLAG_POT_DAMAGE_2 = 65723, + SPELL_SLAG_POT_DAMAGE = 65722, SPELL_SCORCH_DAMAGE_1 = 62549, SPELL_SCORCH_DAMAGE_2 = 63475, - SPELL_SLAG_IMBUED_1 = 62836, - SPELL_SLAG_IMBUED_2 = 63536 + SPELL_SLAG_IMBUED = 62836, }; class spell_ignis_slag_pot_aura : public AuraScript @@ -490,12 +484,10 @@ class spell_ignis_slag_pot_aura : public AuraScript { return ValidateSpellInfo( { - SPELL_SLAG_POT_DAMAGE_1, - SPELL_SLAG_POT_DAMAGE_2, + SPELL_SLAG_POT_DAMAGE, SPELL_SCORCH_DAMAGE_1, SPELL_SCORCH_DAMAGE_2, - SPELL_SLAG_IMBUED_1, - SPELL_SLAG_IMBUED_2 + SPELL_SLAG_IMBUED }); } @@ -503,7 +495,7 @@ class spell_ignis_slag_pot_aura : public AuraScript { if (Unit* caster = GetCaster()) if (Unit* target = GetTarget()) - caster->CastSpell(target, (GetId() == SPELL_SLAG_POT_10 ? SPELL_SLAG_POT_DAMAGE_1 : SPELL_SLAG_POT_DAMAGE_2), true); + caster->CastSpell(target, SPELL_SLAG_POT_DAMAGE, true); } void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) @@ -522,7 +514,7 @@ class spell_ignis_slag_pot_aura : public AuraScript target->ApplySpellImmune(GetId(), IMMUNITY_ID, SPELL_SCORCH_DAMAGE_1, false); target->ApplySpellImmune(GetId(), IMMUNITY_ID, SPELL_SCORCH_DAMAGE_2, false); if (target->IsAlive()) - target->CastSpell(target, (GetId() == SPELL_SLAG_POT_10 ? SPELL_SLAG_IMBUED_1 : SPELL_SLAG_IMBUED_2), true); + target->CastSpell(target, SPELL_SLAG_IMBUED, true); } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp index b9a12638b..ba2d626ca 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp @@ -45,56 +45,33 @@ enum KologarnSpells SPELL_KOLOGARN_REDUCE_PARRY = 64651, // BASIC - SPELL_OVERHEAD_SMASH_10 = 63356, - SPELL_OVERHEAD_SMASH_25 = 64003, - SPELL_ONEARMED_OVERHEAD_SMASH_10 = 63573, - SPELL_ONEARMED_OVERHEAD_SMASH_25 = 64006, - SPELL_PETRIFYING_BREATH_10 = 62030, - SPELL_PETRIFYING_BREATH_25 = 63980, - SPELL_STONE_SHOUT_10 = 63716, - SPELL_STONE_SHOUT_25 = 64005, + SPELL_OVERHEAD_SMASH = 63356, + SPELL_ONEARMED_OVERHEAD_SMASH = 63573, + SPELL_PETRIFYING_BREATH = 62030, + SPELL_STONE_SHOUT = 63716, // EYEBEAM SPELL_FOCUSED_EYEBEAM_SUMMON = 63342, - SPELL_FOCUSED_EYEBEAM_10 = 63347, - SPELL_FOCUSED_EYEBEAM_25 = 63977, + SPELL_FOCUSED_EYEBEAM = 63347, SPELL_FOCUSED_EYEBEAM_RIGHT = 63702, SPELL_FOCUSED_EYEBEAM_LEFT = 63676, // ARMS - SPELL_ARM_DEAD_10 = 63629, - SPELL_ARM_DEAD_25 = 63979, - SPELL_RUBBLE_FALL_10 = 63821, - SPELL_RUBBLE_FALL_25 = 64001, + SPELL_ARM_DEAD = 63629, + SPELL_RUBBLE_FALL = 63821, SPELL_ARM_RESPAWN_VISUAL = 64753, // LEFT ARM - SPELL_ARM_SWEEP_10 = 63766, - SPELL_ARM_SWEEP_25 = 63983, + SPELL_ARM_SWEEP = 63766, // RIGHT ARM - SPELL_STONE_GRIP_10 = 62166, - SPELL_STONE_GRIP_25 = 63981, - SPELL_RIDE_RIGHT_ARM_10 = 62056, - SPELL_RIDE_RIGHT_ARM_25 = 63985, + SPELL_STONE_GRIP = 62166, + SPELL_RIDE_RIGHT_ARM = 62056, // RUBBLE TRASH - SPELL_RUBBLE_ATTACK_10 = 63818, - SPELL_RUBBLE_ATTACK_25 = 63978, + SPELL_RUBBLE_ATTACK = 63818, }; -#define SPELL_PETRIFYING_BREATH RAID_MODE(SPELL_PETRIFYING_BREATH_10, SPELL_PETRIFYING_BREATH_25) -#define SPELL_OVERHEAD_SMASH RAID_MODE(SPELL_OVERHEAD_SMASH_10, SPELL_OVERHEAD_SMASH_25) -#define SPELL_ONEARMED_OVERHEAD_SMASH RAID_MODE(SPELL_ONEARMED_OVERHEAD_SMASH_10, SPELL_ONEARMED_OVERHEAD_SMASH_25) -#define SPELL_ARM_DEAD RAID_MODE(SPELL_ARM_DEAD_10, SPELL_ARM_DEAD_25) -#define SPELL_ARM_SWEEP RAID_MODE(SPELL_ARM_SWEEP_10, SPELL_ARM_SWEEP_25) -#define SPELL_STONE_GRIP RAID_MODE(SPELL_STONE_GRIP_10, SPELL_STONE_GRIP_25) -#define SPELL_FOCUSED_EYEBEAM RAID_MODE(SPELL_FOCUSED_EYEBEAM_10, SPELL_FOCUSED_EYEBEAM_25) -#define SPELL_RUBBLE_FALL RAID_MODE(SPELL_RUBBLE_FALL_10, SPELL_RUBBLE_FALL_25) -#define SPELL_RUBBLE_ATTACK RAID_MODE(SPELL_RUBBLE_ATTACK_10, SPELL_RUBBLE_ATTACK_25) -#define SPELL_RIDE_RIGHT_ARM RAID_MODE(SPELL_RIDE_RIGHT_ARM_10, SPELL_RIDE_RIGHT_ARM_25) -#define SPELL_STONE_SHOUT RAID_MODE(SPELL_STONE_SHOUT_10, SPELL_STONE_SHOUT_25) - enum KologarnEvents { EVENT_SMASH = 1, @@ -796,9 +773,7 @@ class spell_ulduar_stone_grip_cast_target : public SpellScript // Remove "main tank" and non-player targets targets.remove_if(StoneGripTargetSelector(GetCaster()->ToCreature(), GetCaster()->GetVictim())); // Maximum affected targets per difficulty mode - uint32 maxTargets = 1; - if (GetSpellInfo()->Id == SPELL_STONE_GRIP_25) - maxTargets = 3; + uint32 maxTargets = GetSpellInfo()->Id == SPELL_STONE_GRIP ? 1 : 3; // Return a random amount of targets based on maxTargets while (maxTargets < targets.size()) @@ -850,6 +825,7 @@ class spell_ulduar_squeezed_lifeless : public SpellScript } }; +// 63720, 64004 class spell_kologarn_stone_shout : public SpellScript { PrepareSpellScript(spell_kologarn_stone_shout); @@ -861,7 +837,6 @@ class spell_kologarn_stone_shout : public SpellScript void Register() override { - if (m_scriptSpellId != SPELL_STONE_SHOUT_10 && m_scriptSpellId != SPELL_STONE_SHOUT_25) OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kologarn_stone_shout::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; @@ -879,7 +854,6 @@ class spell_kologarn_stone_shout_aura : public AuraScript void Register() override { - if (m_scriptSpellId == SPELL_STONE_SHOUT_10 || m_scriptSpellId == SPELL_STONE_SHOUT_25) OnEffectPeriodic += AuraEffectPeriodicFn(spell_kologarn_stone_shout_aura::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; @@ -945,7 +919,8 @@ void AddSC_boss_kologarn() RegisterSpellScript(spell_ulduar_stone_grip_aura); RegisterSpellScript(spell_ulduar_squeezed_lifeless); RegisterSpellScript(spell_kologarn_focused_eyebeam); - RegisterSpellAndAuraScriptPair(spell_kologarn_stone_shout, spell_kologarn_stone_shout_aura); + RegisterSpellScript(spell_kologarn_stone_shout); + RegisterSpellScript(spell_kologarn_stone_shout_aura); // Achievements new achievement_kologarn_looks_could_kill(); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index d7ba40cde..ef53103da 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -23,6 +23,7 @@ #include "PassiveAI.h" #include "Player.h" #include "ScriptedCreature.h" +#include "SharedDefines.h" #include "Spell.h" #include "SpellAuraEffects.h" #include "SpellScript.h" @@ -35,18 +36,15 @@ enum SpellData SPELL_BERSERK = 64238, // PHASE 1: - SPELL_NAPALM_SHELL_25 = 65026, - SPELL_NAPALM_SHELL_10 = 63666, + SPELL_NAPALM_SHELL = 63666, - SPELL_PLASMA_BLAST_25 = 64529, - SPELL_PLASMA_BLAST_10 = 62997, + SPELL_PLASMA_BLAST = 62997, SPELL_SHOCK_BLAST = 63631, SPELL_PROXIMITY_MINES = 63027, NPC_PROXIMITY_MINE = 34362, - SPELL_MINE_EXPLOSION_25 = 63009, - SPELL_MINE_EXPLOSION_10 = 66351, + SPELL_MINE_EXPLOSION = 66351, SPELL_SUMMON_PROXIMITY_MINE = 65347, // PHASE 2: @@ -57,17 +55,14 @@ enum SpellData NPC_ROCKET_STRIKE_N = 34047, SPELL_RAPID_BURST = 63382, - SPELL_RAPID_BURST_DAMAGE_25_1 = 64531, - SPELL_RAPID_BURST_DAMAGE_25_2 = 64532, - SPELL_RAPID_BURST_DAMAGE_10_1 = 63387, - SPELL_RAPID_BURST_DAMAGE_10_2 = 64019, + SPELL_RAPID_BURST_DAMAGE_1 = 63387, + SPELL_RAPID_BURST_DAMAGE_2 = 64019, SPELL_SUMMON_BURST_TARGET = 64840, SPELL_SPINNING_UP = 63414, // PHASE 3: - SPELL_PLASMA_BALL_25 = 64535, - SPELL_PLASMA_BALL_10 = 63689, + SPELL_PLASMA_BALL = 63689, SPELL_MAGNETIC_CORE = 64436, SPELL_SPINNING = 64438, @@ -80,10 +75,8 @@ enum SpellData SPELL_BEAM_BLUE = 63294, // PHASE 4: - SPELL_HAND_PULSE_10_R = 64352, - SPELL_HAND_PULSE_25_R = 64537, - SPELL_HAND_PULSE_10_L = 64348, - SPELL_HAND_PULSE_25_L = 64536, + SPELL_HAND_PULSE_R = 64352, + SPELL_HAND_PULSE_L = 64348, SPELL_SELF_REPAIR = 64383, SPELL_SLEEP_VISUAL_1 = 64393, @@ -219,14 +212,6 @@ enum EVENTS EVENT_EMERGENCY_BOT_ATTACK = 70, }; -#define SPELL_NAPALM_SHELL RAID_MODE(SPELL_NAPALM_SHELL_10, SPELL_NAPALM_SHELL_25) -#define SPELL_PLASMA_BLAST RAID_MODE(SPELL_PLASMA_BLAST_10, SPELL_PLASMA_BLAST_25) -#define SPELL_MINE_EXPLOSION RAID_MODE(SPELL_MINE_EXPLOSION_10, SPELL_MINE_EXPLOSION_25) -#define SPELL_PLASMA_BALL RAID_MODE(SPELL_PLASMA_BALL_10, SPELL_PLASMA_BALL_25) -#define SPELL_HAND_PULSE_R RAID_MODE(SPELL_HAND_PULSE_10_R, SPELL_HAND_PULSE_25_R) -#define SPELL_HAND_PULSE_L RAID_MODE(SPELL_HAND_PULSE_10_L, SPELL_HAND_PULSE_25_L) -#define SPELL_FROST_BOMB_EXPLOSION RAID_MODE(SPELL_FROST_BOMB_EXPLOSION_10, SPELL_FROST_BOMB_EXPLOSION_25) - enum Texts { // Mimiron @@ -1889,14 +1874,6 @@ public: void MoveInLineOfSight(Unit* /*who*/) override {} bool CanAIAttack(Unit const* /*target*/) const override { return false; } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override - { - if (target && spell && target->IsPlayer() && spell->Id == SPELL_MINE_EXPLOSION) - if (InstanceScript* pInstance = me->GetInstanceScript()) - if (Creature* c = GetMimiron()) - c->AI()->SetData(0, 11); - } - // MoveInLineOfSight is checked every few yards, can't use it void UpdateAI(uint32 diff) override { @@ -1927,6 +1904,24 @@ public: }; }; +class spell_ulduar_mimiron_mine_explosion : public SpellScript +{ + PrepareSpellScript(spell_ulduar_mimiron_mine_explosion); + + void HandleDamage(SpellEffIndex /*effIndex*/) + { + if (GetHitPlayer()) + if (InstanceScript* pInstance = GetCaster()->GetInstanceScript()) + if (Creature* mimi = pInstance->GetCreature(TYPE_MIMIRON)) + mimi->AI()->SetData(0, 11); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_ulduar_mimiron_mine_explosion::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } +}; + class npc_ulduar_mimiron_rocket : public CreatureScript { public: @@ -2094,10 +2089,8 @@ class spell_mimiron_rapid_burst_aura : public AuraScript { return ValidateSpellInfo( { - SPELL_RAPID_BURST_DAMAGE_10_1, - SPELL_RAPID_BURST_DAMAGE_10_2, - SPELL_RAPID_BURST_DAMAGE_25_1, - SPELL_RAPID_BURST_DAMAGE_25_2 + SPELL_RAPID_BURST_DAMAGE_1, + SPELL_RAPID_BURST_DAMAGE_2, }); } @@ -2105,7 +2098,7 @@ class spell_mimiron_rapid_burst_aura : public AuraScript { if (Unit* caster = GetCaster()) { - uint32 id = (caster->GetMap()->Is25ManRaid() ? ((aurEff->GetTickNumber() % 2) ? SPELL_RAPID_BURST_DAMAGE_25_2 : SPELL_RAPID_BURST_DAMAGE_25_1) : ((aurEff->GetTickNumber() % 2) ? SPELL_RAPID_BURST_DAMAGE_10_2 : SPELL_RAPID_BURST_DAMAGE_10_1)); + uint32 id = (aurEff->GetTickNumber() % 2) ? SPELL_RAPID_BURST_DAMAGE_2 : SPELL_RAPID_BURST_DAMAGE_1; caster->CastSpell((Unit*)nullptr, id, true); } } @@ -2498,6 +2491,7 @@ void AddSC_boss_mimiron() new npc_ulduar_bot_summon_trigger(); RegisterSpellScript(spell_mimiron_rapid_burst_aura); RegisterSpellScript(spell_mimiron_p3wx2_laser_barrage_aura); + RegisterSpellScript(spell_ulduar_mimiron_mine_explosion); new go_ulduar_do_not_push_this_button(); new npc_ulduar_flames_initial(); new npc_ulduar_flames_spread(); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index 7d1ad5251..2ece43eb7 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -30,12 +30,10 @@ enum Spells { // Razorscale - SPELL_FLAMEBUFFET_10 = 64016, - SPELL_FLAMEBUFFET_25 = 64023, + SPELL_FLAMEBUFFET = 64016, SPELL_FIREBALL = 63815, SPELL_WINGBUFFET = 62666, - SPELL_FLAMEBREATH_10 = 63317, - SPELL_FLAMEBREATH_25 = 64021, + SPELL_FLAMEBREATH = 63317, SPELL_FUSEARMOR = 64771, SPELL_FUSED_ARMOR = 64774, // Applied on 5th stack of SPELL_FUSEARMOR SPELL_DEVOURINGFLAME = 63236, @@ -50,25 +48,17 @@ enum Spells // Dark Rune Sentinel SPELL_WHIRLWIND = 63808, - SPELL_BATTLE_SHOUT_10 = 46763, - SPELL_BATTLE_SHOUT_25 = 64062, + SPELL_BATTLE_SHOUT = 46763, // Dark Rune Guardian SPELL_STORMSTRIKE_DMG = 65971, SPELL_STORMSTRIKE_DEBUFF = 64757, // Dark Rune Watcher - SPELL_LIGHTINGBOLT_10 = 63809, - SPELL_LIGHTINGBOLT_25 = 64696, - SPELL_CHAINLIGHTNING_10 = 64758, - SPELL_CHAINLIGHTNING_25 = 64759, + SPELL_LIGHTINGBOLT = 63809, + SPELL_CHAINLIGHTNING = 64758, }; -#define SPELL_FLAMEBUFFET RAID_MODE(SPELL_FLAMEBUFFET_10, SPELL_FLAMEBUFFET_25) -#define SPELL_FLAMEBREATH RAID_MODE(SPELL_FLAMEBREATH_10, SPELL_FLAMEBREATH_25) -#define SPELL_BATTLE_SHOUT RAID_MODE(SPELL_BATTLE_SHOUT_10, SPELL_BATTLE_SHOUT_25) -#define SPELL_LIGHTINGBOLT RAID_MODE(SPELL_LIGHTINGBOLT_10, SPELL_LIGHTINGBOLT_25) -#define SPELL_CHAINLIGHTNING RAID_MODE(SPELL_CHAINLIGHTNING_10, SPELL_CHAINLIGHTNING_25) #define REQ_CHAIN_COUNT RAID_MODE(2, 4) enum NPCs diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index 5d4c85aeb..160e8d3d5 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -23,6 +23,7 @@ #include "ScriptedCreature.h" #include "ScriptedEscortAI.h" #include "SpellAuraEffects.h" +#include "SpellMgr.h" #include "SpellScript.h" #include "SpellScriptLoader.h" #include "ulduar.h" @@ -34,8 +35,7 @@ enum ThorimSpells SPELL_SHEATH_OF_LIGHTNING = 62276, SPELL_STORMHAMMER = 62042, SPELL_BERSERK_FRIENDS = 62560, - SPELL_CHAIN_LIGHTNING_10 = 62131, - SPELL_CHAIN_LIGHTNING_25 = 64390, + SPELL_CHAIN_LIGHTNING = 62131, SPELL_UNBALANCING_STRIKE = 62130, SPELL_BERSERK = 26662, @@ -54,17 +54,13 @@ enum ThorimSpells SPELL_SIF_CHANNEL_HOLOGRAM = 64324, SPELL_FROSTBOLT = 62601, SPELL_FROSTBOLT_VALLEY = 62604, - SPELL_BLIZZARD_10 = 62577, - SPELL_BLIZZARD_25 = 62603, + SPELL_BLIZZARD = 62577, SPELL_FROST_NOVA = 62605, // DARK RUNE ACOLYTE - SPELL_GREATER_HEAL_10 = 62334, - SPELL_GREATER_HEAL_25 = 62442, - SPELL_HOLY_SMITE_10 = 62335, - SPELL_HOLY_SMITE_25 = 62443, - SPELL_RENEW_10 = 62333, - SPELL_RENEW_25 = 62441, + SPELL_GREATER_HEAL = 62334, + SPELL_HOLY_SMITE = 62335, + SPELL_RENEW = 62333, // CAPTURED MERCENARY SOLDIER SPELL_BARBED_SHOT = 62318, @@ -76,19 +72,15 @@ enum ThorimSpells SPELL_HEROIC_STRIKE = 62444, // JORMUNGAR BEHEMOTH - SPELL_ACID_BREATH_10 = 62315, - SPELL_ACID_BREATH_25 = 62415, - SPELL_SWEEP_10 = 62316, - SPELL_SWEEP_25 = 62417, + SPELL_ACID_BREATH = 62315, + SPELL_SWEEP = 62316, // IRON RING GUARD - SPELL_IMPALE_10 = 62331, - SPELL_IMPALE_25 = 62418, + SPELL_IMPALE = 62331, SPELL_WHIRLING_TRIP = 64151, // IRON HONOR GUARD - SPELL_SHIELD_SMASH_10 = 62332, - SPELL_SHIELD_SMASH_25 = 62420, + SPELL_SHIELD_SMASH = 62332, SPELL_CLEAVE = 42724, SPELL_HAMSTRING = 48639, @@ -97,12 +89,9 @@ enum ThorimSpells SPELL_RUNIC_STRIKE = 62322, // DARK RUNE EVOKER - SPELL_RUNIC_LIGHTNING_10 = 62327, - SPELL_RUNIC_LIGHTNING_25 = 62445, - SPELL_RUNIC_MENDING_10 = 62328, - SPELL_RUNIC_MENDING_25 = 62446, - SPELL_RUNIC_SHIELD_10 = 62321, - SPELL_RUNIC_SHIELD_25 = 62529, + SPELL_RUNIC_LIGHTNING = 62327, + SPELL_RUNIC_MENDING = 62328, + SPELL_RUNIC_SHIELD = 62321, // DARK RUNE CHAMPION SPELL_CHARGE = 32323, @@ -114,8 +103,7 @@ enum ThorimSpells SPELL_PUMMEL = 38313, // RUNIC COLOSSUS - SPELL_COLOSSUS_CHARGE_10 = 62613, - SPELL_COLOSSUS_CHARGE_25 = 62614, + SPELL_COLOSSUS_CHARGE = 62613, SPELL_RUNIC_BARRIER = 62338, SPELL_SMASH = 62339, SPELL_RUNIC_SMASH_LEFT = 62057, @@ -125,8 +113,7 @@ enum ThorimSpells // ANCIENT RUNE GIANT SPELL_RUNE_DETONATION = 62526, SPELL_RUNIC_FORTIFICATION = 62942, - SPELL_STOMP_10 = 62411, - SPELL_STOMP_25 = 62413, + SPELL_STOMP = 62411, // TRAPS SPELL_LIGHTNING_FIELD = 64972, @@ -134,20 +121,6 @@ enum ThorimSpells SPELL_PARALYTIC_FIELD_SECOND = 63540, }; -#define SPELL_GREATER_HEAL RAID_MODE(SPELL_GREATER_HEAL_10, SPELL_GREATER_HEAL_25) -#define SPELL_HOLY_SMITE RAID_MODE(SPELL_HOLY_SMITE_10, SPELL_HOLY_SMITE_25) -#define SPELL_RENEW RAID_MODE(SPELL_RENEW_10, SPELL_RENEW_25) -#define SPELL_ACID_BREATH RAID_MODE(SPELL_ACID_BREATH_10, SPELL_ACID_BREATH_25) -#define SPELL_SWEEP RAID_MODE(SPELL_SWEEP_10, SPELL_SWEEP_25) -#define SPELL_IMPALE RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25) -#define SPELL_COLOSSUS_CHARGE RAID_MODE(SPELL_COLOSSUS_CHARGE_10, SPELL_COLOSSUS_CHARGE_25) -#define SPELL_STOMP RAID_MODE(SPELL_STOMP_10, SPELL_STOMP_25) -#define SPELL_SHIELD_SMASH RAID_MODE(SPELL_SHIELD_SMASH_10, SPELL_SHIELD_SMASH_25) -#define SPELL_RUNIC_LIGHTNING RAID_MODE(SPELL_RUNIC_LIGHTNING_10, SPELL_RUNIC_LIGHTNING_25) -#define SPELL_RUNIC_MENDING RAID_MODE(SPELL_RUNIC_MENDING_10, SPELL_RUNIC_MENDING_25) -#define SPELL_RUNIC_SHIELD RAID_MODE(SPELL_RUNIC_SHIELD_10, SPELL_RUNIC_SHIELD_25) -#define SPELL_CHAIN_LIGHTNING RAID_MODE(SPELL_CHAIN_LIGHTNING_10, SPELL_CHAIN_LIGHTNING_25) - enum ThormNPCandGOs : uint32 { // ARENA INIT @@ -1044,7 +1017,7 @@ public: { me->SetSpeed(MOVE_RUN, 1); me->SetSpeed(MOVE_WALK, 1); - me->CastSpell(me, RAID_MODE(SPELL_BLIZZARD_10, SPELL_BLIZZARD_25), true); + me->CastSpell(me, SPELL_BLIZZARD, true); } void WaypointReached(uint32 /*point*/) override @@ -1206,7 +1179,7 @@ public: events.Repeat(1600ms); break; case EVENT_DR_ACOLYTE_R: - if (HealthBelowPct(75) && !me->HasAura(SPELL_RENEW)) + if (HealthBelowPct(75) && !me->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_RENEW, me))) me->CastSpell(me, SPELL_GREATER_HEAL, false); else if (Unit* target = DoSelectLowestHpFriendly(60.0f, 10)) me->CastSpell(target, SPELL_RENEW, false); @@ -1331,7 +1304,7 @@ public: events.Repeat(1600ms); break; case EVENT_DR_ACOLYTE_R: - if (HealthBelowPct(75) && !me->HasAura(SPELL_RENEW)) + if (HealthBelowPct(75) && !me->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_RENEW, me))) me->CastSpell(me, SPELL_GREATER_HEAL, false); else if (Unit* target = DoSelectLowestHpFriendly(60.0f, 10)) me->CastSpell(target, SPELL_RENEW, false); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp index 570e7a266..ab7e27673 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp @@ -30,10 +30,8 @@ enum XT002Spells { // BASIC - SPELL_GRAVITY_BOMB_10 = 63024, - SPELL_GRAVITY_BOMB_25 = 64234, - SPELL_SEARING_LIGHT_10 = 63018, - SPELL_SEARING_LIGHT_25 = 65121, + SPELL_GRAVITY_BOMB = 63024, + SPELL_SEARING_LIGHT = 63018, SPELL_TYMPANIC_TANTARUM = 62776, SPELL_XT002_ENRAGE = 26662, @@ -48,27 +46,18 @@ enum XT002Spells SPELL_EXPOSED_HEART = 63849, SPELL_ENERGY_ORB = 62790, SPELL_ENERGY_ORB_TRIGGER = 62826, - SPELL_HEARTBREAK_10 = 65737, - SPELL_HEARTBREAK_25 = 64193, + SPELL_HEARTBREAK = 65737, // VOID ZONE - SPELL_VOID_ZONE_SUMMON_10 = 64203, - SPELL_VOID_ZONE_SUMMON_25 = 64235, - //SPELL_VOID_ZONE_SUMMON = RAID_MODE(SPELL_VOID_ZONE_SUMMON_10, SPELL_VOID_ZONE_SUMMON_25, SPELL_VOID_ZONE_SUMMON_10, SPELL_VOID_ZONE_SUMMON_25), + SPELL_VOID_ZONE_SUMMON = 64203, SPELL_VOID_ZONE_DAMAGE = 46262, // SPARK SPELL_SPARK_SUMMON = 64210, - SPELL_SPARK_DAMAGE_10 = 64227, - SPELL_SPARK_DAMAGE_25 = 64236, + SPELL_SPARK_DAMAGE = 64227, SPELL_SPARK_MELEE = 64230, }; -#define SPELL_GRAVITY_BOMB RAID_MODE(SPELL_GRAVITY_BOMB_10, SPELL_GRAVITY_BOMB_25) -#define SPELL_SEARING_LIGHT RAID_MODE(SPELL_SEARING_LIGHT_10, SPELL_SEARING_LIGHT_25) -#define SPELL_HEARTBREAK RAID_MODE(SPELL_HEARTBREAK_10, SPELL_HEARTBREAK_25) -#define SPELL_SPARK_DAMAGE RAID_MODE(SPELL_SPARK_DAMAGE_10, SPELL_SPARK_DAMAGE_25) - enum XT002Events { EVENT_HEALTH_CHECK = 1, diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp index a00b6d120..b7dd602db 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp @@ -24,6 +24,7 @@ #include "ScriptedCreature.h" #include "ScriptedEscortAI.h" #include "SpellAuras.h" +#include "SpellMgr.h" #include "SpellScript.h" #include "SpellScriptLoader.h" #include "ulduar.h" @@ -102,8 +103,7 @@ enum YoggSpells // CONSTRICTOR TENTACLE SPELL_LUNGE = 64123, - SPELL_SQUEEZE_10 = 64125, - SPELL_SQUEEZE_25 = 64126, + SPELL_SQUEEZE = 64125, // CORRUPTOR TENTACLE SPELL_APATHY = 64156, @@ -142,15 +142,10 @@ enum YoggSpells SPELL_SIMPLE_TELEPORT = 64195, SPELL_EMPOWERED = 65294, SPELL_EMPOWERED_PASSIVE = 64161, - SPELL_DRAIN_LIFE_10 = 64159, - SPELL_DRAIN_LIFE_25 = 64160, + SPELL_DRAIN_LIFE = 64159, SPELL_RECENTLY_SPAWNED = 64497, }; -#define SPELL_PSYCHOSIS RAID_MODE(SPELL_SARA_PSYCHOSIS_10, SPELL_SARA_PSYCHOSIS_25) -#define SPELL_SQUEEZE RAID_MODE(SPELL_SQUEEZE_10, SPELL_SQUEEZE_25) -#define SPELL_DRAIN_LIFE RAID_MODE(SPELL_DRAIN_LIFE_10, SPELL_DRAIN_LIFE_25) - enum YoggEvents { EVENT_SARA_P1_DOORS_CLOSE = 1, @@ -846,7 +841,7 @@ public: { Talk(SAY_SARA_PSYCHOSIS_HIT); } - me->CastCustomSpell(SPELL_PSYCHOSIS, SPELLVALUE_MAX_TARGETS, 1, me, false); + me->CastCustomSpell(SPELL_SARA_PSYCHOSIS_10, SPELLVALUE_MAX_TARGETS, 1, me, false); events.Repeat(3500ms); break; case EVENT_SARA_P2_DEATH_RAY: @@ -1677,7 +1672,7 @@ public: { if (me->GetDistance(itr->GetSource()) > 10 || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster()) continue; - if (itr->GetSource()->HasAura(SPELL_SQUEEZE) || itr->GetSource()->HasAura(SPELL_INSANE1)) + if (itr->GetSource()->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_SQUEEZE, me)) || itr->GetSource()->HasAura(SPELL_INSANE1)) continue; if (count <= num || !target) @@ -1719,7 +1714,7 @@ public: void JustDied(Unit*) override { if (Unit* player = ObjectAccessor::GetUnit(*me, _playerGUID)) - player->RemoveAura(SPELL_SQUEEZE); + player->RemoveAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_SQUEEZE, me)); } }; }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp index be980bd55..ff9e90692 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp @@ -79,7 +79,11 @@ enum UldSpells SPELL_SIMPLE_TELEPORT = 12980, SPELL_KEEPER_TELEPORT = 62940, SPELL_SNOW_MOUND_PARTICLES = 64615, - SPELL_ENERGY_SAP_10 = 64740 + SPELL_ENERGY_SAP_10 = 64740, + + // Arachnopod Destroyer + SPELL_FLAME_SPRAY = 64717, + SPELL_MACHINE_GUN = 64776, }; class npc_ulduar_keeper : public CreatureScript @@ -473,11 +477,11 @@ public: case 0: break; case 1: - me->CastSpell(me->GetVictim(), RAID_MODE(64717, 65241), false); + me->CastSpell(me->GetVictim(), SPELL_FLAME_SPRAY, false); events.Repeat(15s, 25s); break; case 2: - me->CastSpell(me->GetVictim(), RAID_MODE(64776, 65240), false); + me->CastSpell(me->GetVictim(), SPELL_MACHINE_GUN, false); events.Repeat(10s, 15s); break; case 3: diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp index 868f8000f..50fd08dd3 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp @@ -56,28 +56,17 @@ enum eSpells SPELL_RESURRECTION_HEAL = 42704, SPELL_INGVAR_TRANSFORM = 42796, - SPELL_STAGGERING_ROAR_N = 42708, - SPELL_STAGGERING_ROAR_H = 59708, + SPELL_STAGGERING_ROAR = 42708, SPELL_CLEAVE = 42724, - SPELL_SMASH_N = 42669, - SPELL_SMASH_H = 59706, - SPELL_ENRAGE_N = 42705, - SPELL_ENRAGE_H = 59707, + SPELL_SMASH = 42669, + SPELL_ENRAGE = 42705, - SPELL_DREADFUL_ROAR_N = 42729, - SPELL_DREADFUL_ROAR_H = 59734, - SPELL_WOE_STRIKE_N = 42730, - SPELL_WOE_STRIKE_H = 59735, + SPELL_DREADFUL_ROAR = 42729, + SPELL_WOE_STRIKE = 42730, SPELL_DARK_SMASH = 42723, SPELL_SHADOW_AXE = 42749, }; -#define SPELL_STAGGERING_ROAR DUNGEON_MODE(SPELL_STAGGERING_ROAR_N, SPELL_STAGGERING_ROAR_H) -#define SPELL_DREADFUL_ROAR DUNGEON_MODE(SPELL_DREADFUL_ROAR_N, SPELL_DREADFUL_ROAR_H) -#define SPELL_WOE_STRIKE DUNGEON_MODE(SPELL_WOE_STRIKE_N, SPELL_WOE_STRIKE_H) -#define SPELL_SMASH DUNGEON_MODE(SPELL_SMASH_N, SPELL_SMASH_H) -#define SPELL_ENRAGE DUNGEON_MODE(SPELL_ENRAGE_N, SPELL_ENRAGE_H) - enum eEvents { EVENT_START_RESURRECTION = 1, @@ -307,9 +296,6 @@ struct boss_ingvar_the_plunderer : public ScriptedAI case EVENT_SPELL_ROAR: Talk(EMOTE_ROAR); - me->_AddCreatureSpellCooldown(SPELL_STAGGERING_ROAR, 0, 0); - me->_AddCreatureSpellCooldown(SPELL_DREADFUL_ROAR, 0, 0); - if (me->GetDisplayId() == DISPLAYID_DEFAULT) me->CastSpell((Unit*)nullptr, SPELL_STAGGERING_ROAR, false); else diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp index 41a35a583..b5910adc4 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp @@ -45,12 +45,9 @@ enum eSpells SPELL_FROST_TOMB_SUMMON = 42714, SPELL_FROST_TOMB_AURA = 48400, - SPELL_SHADOWBOLT_N = 43667, - SPELL_SHADOWBOLT_H = 59389, + SPELL_SHADOWBOLT = 43667, }; -#define SPELL_SHADOWBOLT DUNGEON_MODE(SPELL_SHADOWBOLT_N, SPELL_SHADOWBOLT_H) - struct npc_frost_tomb : public NullCreatureAI { npc_frost_tomb(Creature* c) : NullCreatureAI(c) diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp index 6e3ea7f52..4e8ca024d 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp @@ -44,8 +44,7 @@ enum eSpells SPELL_ENRAGE = 48193, SPELL_SUMMON_SKARVALD_GHOST = 48613, // Dalronn - SPELL_SHADOW_BOLT_N = 43649, - SPELL_SHADOW_BOLT_H = 59575, + SPELL_SHADOW_BOLT = 43649, SPELL_DEBILITATE = 43650, SPELL_SUMMON_SKELETONS = 52611, SPELL_SUMMON_DALRONN_GHOST = 48612 @@ -353,7 +352,7 @@ struct boss_dalronn_the_controller : public ScriptedAI case EVENT_SHADOW_BOLT: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true)) { - me->CastSpell(target, DUNGEON_MODE(SPELL_SHADOW_BOLT_N, SPELL_SHADOW_BOLT_H), false); + me->CastSpell(target, SPELL_SHADOW_BOLT, false); } events.Repeat(2s); break; diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp index c3e694d10..48094eb27 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp @@ -95,7 +95,7 @@ enum EnslavedProtoDrake SPELL_FLAME_BREATH = 50653, SPELL_KNOCK_AWAY = 49722, - POINT_LAST = 5, + POINT_LAST = 6, }; const Position protodrakeCheckPos = {206.24f, -190.28f, 200.11f, 0.f}; diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp index 3229d8c96..22e20f29a 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp @@ -34,36 +34,28 @@ enum Misc // PALEHOOF SPELL_ARCING_SMASH = 48260, - SPELL_IMPALE_N = 48261, - SPELL_IMPALE_H = 59268, - SPELL_WITHERING_ROAR_N = 48256, - SPELL_WITHERING_ROAR_H = 59267, + SPELL_IMPALE = 48261, + SPELL_WITHERING_ROAR = 48256, SPELL_FREEZE = 16245, // Massive Jormungar SPELL_ACID_SPIT = 48132, - SPELL_ACID_SPLATTER_N = 48136, - SPELL_ACID_SPLATTER_H = 59272, - SPELL_POISON_BREATH_N = 48133, - SPELL_POISON_BREATH_H = 59271, + SPELL_ACID_SPLATTER = 48136, + SPELL_POISON_BREATH = 48133, NPC_JORMUNGAR_WORM = 27228, // Ferocious Rhino - SPELL_GORE_N = 48130, - SPELL_GORE_H = 59264, - SPELL_GRIEVOUS_WOUND_N = 48105, - SPELL_GRIEVOUS_WOUND_H = 59263, + SPELL_GORE = 48130, + SPELL_GRIEVOUS_WOUND = 48105, SPELL_STOMP = 48131, // Ravenous Furbolg - SPELL_CHAIN_LIGHTING_N = 48140, - SPELL_CHAIN_LIGHTING_H = 59273, + SPELL_CHAIN_LIGHTNING = 48140, SPELL_CRAZED = 48139, SPELL_TERRIFYING_ROAR = 48144, // Frenzied Worgen - SPELL_MORTAL_WOUND_N = 48137, - SPELL_MORTAL_WOUND_H = 59265, + SPELL_MORTAL_WOUND = 48137, SPELL_ENRAGE_1 = 48138, SPELL_ENRAGE_2 = 48142, @@ -296,14 +288,14 @@ public: } case EVENT_PALEHOOF_WITHERING_ROAR: { - me->CastSpell(me, IsHeroic() ? SPELL_WITHERING_ROAR_H : SPELL_WITHERING_ROAR_N, false); + me->CastSpell(me, SPELL_WITHERING_ROAR, false); events.Repeat(8s, 12s); break; } case EVENT_PALEHOOF_IMPALE: { if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(tgt, IsHeroic() ? SPELL_IMPALE_H : SPELL_IMPALE_N, false); + me->CastSpell(tgt, SPELL_IMPALE, false); events.Repeat(8s, 12s); break; @@ -424,7 +416,7 @@ public: } case EVENT_JORMUNGAR_ACID_SPLATTER: { - me->CastSpell(me, IsHeroic() ? SPELL_ACID_SPLATTER_H : SPELL_ACID_SPLATTER_N, false); + me->CastSpell(me, SPELL_ACID_SPLATTER, false); // Aura summon wont work because of duration float x, y, z; @@ -443,7 +435,7 @@ public: case EVENT_JORMUNGAR_POISON_BREATH: { if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(tgt, IsHeroic() ? SPELL_POISON_BREATH_H : SPELL_POISON_BREATH_N, false); + me->CastSpell(tgt, SPELL_POISON_BREATH, false); events.Repeat(8s, 12s); break; @@ -546,14 +538,14 @@ public: } case EVENT_RHINO_GORE: { - me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_GORE_H : SPELL_GORE_N, false); + me->CastSpell(me->GetVictim(), SPELL_GORE, false); events.Repeat(13s, 17s); break; } case EVENT_RHINO_WOUND: { if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(tgt, IsHeroic() ? SPELL_GRIEVOUS_WOUND_H : SPELL_GRIEVOUS_WOUND_N, false); + me->CastSpell(tgt, SPELL_GRIEVOUS_WOUND, false); events.Repeat(18s, 22s); break; @@ -650,7 +642,7 @@ public: { case EVENT_FURBOLG_CHAIN: { - me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_CHAIN_LIGHTING_H : SPELL_CHAIN_LIGHTING_N, false); + me->CastSpell(me->GetVictim(), SPELL_CHAIN_LIGHTNING, false); events.Repeat(4s, 7s); break; } @@ -758,7 +750,7 @@ public: { case EVENT_WORGEN_MORTAL: { - me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_MORTAL_WOUND_H : SPELL_MORTAL_WOUND_N, false); + me->CastSpell(me->GetVictim(), SPELL_MORTAL_WOUND, false); events.Repeat(4s, 7s); break; } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp index 68417705e..1c4c577a3 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp @@ -38,16 +38,12 @@ enum Misc EMOTE_RANGE = 1, // SPELLS - SPELL_CRUSH_N = 50234, - SPELL_CRUSH_H = 59330, - SPELL_POISONED_SPEAR_N = 50255, - SPELL_POISONED_SPEAR_H = 59331, - SPELL_WHIRLWIND_N = 50228, - SPELL_WHIRLWIND_H = 50228, + SPELL_CRUSH = 50234, + SPELL_POISONED_SPEAR = 50255, + SPELL_WHIRLWIND = 50228, SPELL_FREEZING_CLOUD_VISUAL = 47592, - SPELL_FREEZING_CLOUD_N = 47579, - SPELL_FREEZING_CLOUD_H = 60020, + SPELL_FREEZING_CLOUD = 47579, SPELL_LAUNCH_HARPOON = 48642, @@ -219,21 +215,21 @@ public: } case EVENT_SKADI_CRUSH: { - me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_CRUSH_H : SPELL_CRUSH_N, false); + me->CastSpell(me->GetVictim(), SPELL_CRUSH, false); events.Repeat(8s); break; } case EVENT_SKADI_SPEAR: { if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(tgt, IsHeroic() ? SPELL_POISONED_SPEAR_H : SPELL_POISONED_SPEAR_N, false); + me->CastSpell(tgt, SPELL_POISONED_SPEAR, false); events.Repeat(10s); break; } case EVENT_SKADI_WHIRLWIND: { - me->CastSpell(me, IsHeroic() ? SPELL_WHIRLWIND_H : SPELL_WHIRLWIND_N, false); + me->CastSpell(me, SPELL_WHIRLWIND, false); events.Repeat(15s, 20s); events.DelayEvents(10s); break; @@ -323,7 +319,7 @@ public: void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override { if (spellInfo->Id == 47593) // SPELL_FREEZING_CLOUD_VISUAL trigger - target->CastSpell(target, me->GetMap()->IsHeroic() ? SPELL_FREEZING_CLOUD_H : SPELL_FREEZING_CLOUD_N, true); + target->CastSpell(target, SPELL_FREEZING_CLOUD, true); } void SpawnFlameTriggers(uint8 point) @@ -340,13 +336,13 @@ public: { Creature* cr; if ((cr = me->SummonCreature(NPC_BREATH_TRIGGER, 483, -484.9f, 105, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000))) - cr->CastSpell(cr, cr->GetMap()->IsHeroic() ? SPELL_FREEZING_CLOUD_H : SPELL_FREEZING_CLOUD_N, true); + cr->CastSpell(cr, SPELL_FREEZING_CLOUD, true); if ((cr = me->SummonCreature(NPC_BREATH_TRIGGER, 471.0f, -484.7f, 105, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000))) - cr->CastSpell(cr, cr->GetMap()->IsHeroic() ? SPELL_FREEZING_CLOUD_H : SPELL_FREEZING_CLOUD_N, true); + cr->CastSpell(cr, SPELL_FREEZING_CLOUD, true); for (uint8 j = 0; j < 7; j++) if ((cr = me->SummonCreature(NPC_BREATH_TRIGGER, 477.0f, -507.0f + (j * 3), 105.0f, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000))) - cr->CastSpell(cr, cr->GetMap()->IsHeroic() ? SPELL_FREEZING_CLOUD_H : SPELL_FREEZING_CLOUD_N, true); + cr->CastSpell(cr, SPELL_FREEZING_CLOUD, true); } } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp index 32054ef60..485030dba 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp @@ -47,8 +47,7 @@ enum Misc SPELL_BALL_OF_FLAME = 48246, SPELL_RITUAL_OF_THE_SWORD = 48276, SPELL_RITUAL_STRIKE = 48331, - SPELL_SINSTER_STRIKE_N = 15667, - SPELL_SINSTER_STRIKE_H = 59409, + SPELL_SINISTER_STRIKE = 15667, EQUIP_SWORD = 40343, // CHANNELERS @@ -303,7 +302,7 @@ public: switch (events.ExecuteEvent()) { case EVENT_SORROWGRAVE_SS: - me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_SINSTER_STRIKE_H : SPELL_SINSTER_STRIKE_N, false); + me->CastSpell(me->GetVictim(), SPELL_SINISTER_STRIKE, false); events.ScheduleEvent(EVENT_SORROWGRAVE_SS, 3s, 5s); break; case EVENT_SORROWGRAVE_FLAMES: diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp index 363188614..6c445644f 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp @@ -32,16 +32,12 @@ enum Misc SAY_SUMMON_TORGYN = 6, // SPELLS - SPELL_BANE_N = 48294, - SPELL_BANE_H = 59301, + SPELL_BANE = 48294, SPELL_DARK_SLASH = 48292, - SPELL_FETID_ROT_N = 48291, - SPELL_FETID_ROT_H = 59300, + SPELL_FETID_ROT = 48291, SPELL_SCREAMS_OF_THE_DEAD = 51750, - SPELL_SPIRIT_BURST_N = 48529, // when Ranulf - SPELL_SPIRIT_BURST_H = 59305, // when Ranulf - SPELL_SPIRIT_STRIKE_N = 48423, // when Haldor - SPELL_SPIRIT_STRIKE_H = 59304, // when Haldor + SPELL_SPIRIT_BURST = 48529, // when Ranulf + SPELL_SPIRIT_STRIKE = 48423, // when Haldor SPELL_SUMMON_AVENGING_SPIRIT = 48592, SPELL_SUMMON_SPIRIT_FOUNT = 48386, @@ -49,8 +45,7 @@ enum Misc SPELL_CHANNEL_SPIRIT_TO_YMIRON = 48316, SPELL_CHANNEL_YMIRON_TO_SPIRIT = 48307, - SPELL_SPIRIT_FOUNT_N = 48380, - SPELL_SPIRIT_FOUNT_H = 59320, + SPELL_SPIRIT_FOUNT = 48380, SPELL_FLAMES = 39199, @@ -242,13 +237,13 @@ public: } case EVENT_YMIRON_BANE: { - me->CastSpell(me, IsHeroic() ? SPELL_BANE_H : SPELL_BANE_N, false); + me->CastSpell(me, SPELL_BANE, false); events.Repeat(20s, 25s); break; } case EVENT_YMIRON_FETID_ROT: { - me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_FETID_ROT_H : SPELL_FETID_ROT_N, false); + me->CastSpell(me->GetVictim(), SPELL_FETID_ROT, false); events.Repeat(10s, 13s); break; } @@ -297,7 +292,7 @@ public: { summons.Summon(sf); sf->SetSpeed(MOVE_RUN, 0.4f); - sf->AddAura(IsHeroic() ? SPELL_SPIRIT_FOUNT_H : SPELL_SPIRIT_FOUNT_N, sf); + sf->AddAura(SPELL_SPIRIT_FOUNT, sf); sf->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); sf->GetMotionMaster()->MoveFollow(me->GetVictim(), 0, rand_norm()*M_PI * 2, MOTION_SLOT_ACTIVE, false, false); } @@ -305,13 +300,13 @@ public: } case EVENT_YMIRON_HALDOR_ABILITY: { - me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_SPIRIT_STRIKE_H : SPELL_SPIRIT_STRIKE_N, false); + me->CastSpell(me->GetVictim(), SPELL_SPIRIT_STRIKE, false); events.Repeat(5s); break; } case EVENT_YMIRON_RANULF_ABILITY: { - me->CastSpell(me, IsHeroic() ? SPELL_SPIRIT_BURST_H : SPELL_SPIRIT_BURST_N, false); + me->CastSpell(me, SPELL_SPIRIT_BURST, false); events.Repeat(10s); break; } diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp index 8e3d5372e..333cb1f94 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp @@ -27,14 +27,10 @@ enum Archavon SPELL_ROCK_SHARDS = 58678, SPELL_ROCK_SHARDS_LEFT_HAND_VISUAL = 58689, SPELL_ROCK_SHARDS_RIGHT_HAND_VISUAL = 58692, - SPELL_ROCK_SHARDS_DAMAGE_10 = 58695, - SPELL_ROCK_SHARDS_DAMAGE_25 = 60883, - SPELL_CRUSHING_LEAP_10 = 58960, - SPELL_CRUSHING_LEAP_25 = 60894, // Instant (10-80yr range) -- Leaps at an enemy, inflicting 8000 Physical damage, knocking all nearby enemies away, and creating a cloud of choking debris. - SPELL_STOMP_10 = 58663, - SPELL_STOMP_25 = 60880, - SPELL_IMPALE_10 = 58666, - SPELL_IMPALE_25 = 60882, // Lifts an enemy off the ground with a spiked fist, inflicting 47125 to 52875 Physical damage and 9425 to 10575 additional damage each second for 8 sec. + SPELL_ROCK_SHARDS_DAMAGE = 58695, + SPELL_CRUSHING_LEAP = 58960, + SPELL_STOMP = 58663, + SPELL_IMPALE = 58666, SPELL_BERSERK = 47008 }; @@ -145,7 +141,7 @@ class boss_archavon : public CreatureScript case EVENT_CHOKING_CLOUD: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, false, false)) { - DoCast(target, RAID_MODE(SPELL_CRUSHING_LEAP_10, SPELL_CRUSHING_LEAP_25), true); //10y ~ 80y, ignore range + DoCast(target, SPELL_CRUSHING_LEAP, true); //10y ~ 80y, ignore range } events.Repeat(30s); @@ -156,14 +152,14 @@ class boss_archavon : public CreatureScript snprintf(buffer, sizeof(buffer), "Archavon the Stone Watcher lunges for %s!", me->GetVictim()->GetName().c_str()); me->TextEmote(buffer); - DoCastVictim(RAID_MODE(SPELL_STOMP_10, SPELL_STOMP_25)); + DoCastVictim(SPELL_STOMP); events.Repeat(45s); events.ScheduleEvent(EVENT_IMPALE, 3s); break; } case EVENT_IMPALE: - DoCastVictim(RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25)); + DoCastVictim(SPELL_IMPALE); break; case EVENT_BERSERK: DoCast(me, SPELL_BERSERK, true); @@ -205,17 +201,10 @@ class spell_archavon_rock_shards : public SpellScript return; } - Map* map = caster->GetMap(); - if (!map) - { - return; - } - caster->CastSpell(target, SPELL_ROCK_SHARDS_LEFT_HAND_VISUAL, true); caster->CastSpell(target, SPELL_ROCK_SHARDS_RIGHT_HAND_VISUAL, true); - uint32 spellId = map->Is25ManRaid() ? SPELL_ROCK_SHARDS_DAMAGE_25 : SPELL_ROCK_SHARDS_DAMAGE_10; - caster->CastSpell(target, spellId, true); + caster->CastSpell(target, SPELL_ROCK_SHARDS_DAMAGE, true); } void Register() override diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp index bf8da40c8..f9cb29369 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp @@ -29,10 +29,8 @@ enum Spells SPELL_OVERCHARGE = 64218, SPELL_BERSERK = 26662, - SPELL_CHAIN_LIGHTNING_10 = 64213, - SPELL_CHAIN_LIGHTNING_25 = 64215, - SPELL_LIGHTNING_NOVA_10 = 64216, - SPELL_LIGHTNING_NOVA_25 = 65279, + SPELL_CHAIN_LIGHTNING = 64213, + SPELL_LIGHTNING_NOVA = 64216, }; enum Events @@ -171,11 +169,11 @@ public: { case EVENT_CHAIN_LIGHTNING: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(target, RAID_MODE(SPELL_CHAIN_LIGHTNING_10, SPELL_CHAIN_LIGHTNING_25), false); + me->CastSpell(target, SPELL_CHAIN_LIGHTNING, false); events.Repeat(25s); break; case EVENT_LIGHTNING_NOVA: - me->CastSpell(me, RAID_MODE(SPELL_LIGHTNING_NOVA_10, SPELL_LIGHTNING_NOVA_25), false); + me->CastSpell(me, SPELL_LIGHTNING_NOVA, false); events.Repeat(40s); break; case EVENT_OVERCHARGE: diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index 6ab9a4f93..97fa245be 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -422,73 +422,55 @@ struct violet_hold_trashAI : public npc_escortAI enum AzureInvaderSpells { - SPELL_CLEAVE = 15496, - SPELL_IMPALE_N = 58459, - SPELL_IMPALE_H = 59256, + SPELL_CLEAVE = 15496, + SPELL_IMPALE = 58459, SPELL_BRUTAL_STRIKE = 58460, - SPELL_SUNDER_ARMOR = 58461, + SPELL_SUNDER_ARMOR = 58461, }; -#define SPELL_IMPALE DUNGEON_MODE(SPELL_IMPALE_N, SPELL_IMPALE_H) enum AzureSpellbreakerSpells { - SPELL_ARCANE_BLAST_N = 58462, - SPELL_ARCANE_BLAST_H = 59257, - SPELL_SLOW = 25603, + SPELL_ARCANE_BLAST = 58462, + SPELL_SLOW = 25603, SPELL_CHAINS_OF_ICE = 58464, - SPELL_CONE_OF_COLD_N = 58463, - SPELL_CONE_OF_COLD_H = 59258 + SPELL_CONE_OF_COLD = 58463, }; -#define SPELL_ARCANE_BLAST DUNGEON_MODE(SPELL_ARCANE_BLAST_N, SPELL_ARCANE_BLAST_H) -#define SPELL_CONE_OF_COLD DUNGEON_MODE(SPELL_CONE_OF_COLD_N, SPELL_CONE_OF_COLD_H) enum AzureBinderSpells { - SPELL_ARCANE_BARRAGE_N = 58456, - SPELL_ARCANE_BARRAGE_H = 59248, - SPELL_ARCANE_EXPLOSION_N = 58455, - SPELL_ARCANE_EXPLOSION_H = 59245, - SPELL_FROST_NOVA_N = 58458, - SPELL_FROST_NOVA_H = 59253, - SPELL_FROSTBOLT_N = 58457, - SPELL_FROSTBOLT_H = 59251, + SPELL_ARCANE_BARRAGE = 58456, + SPELL_ARCANE_EXPLOSION = 58455, + SPELL_FROST_NOVA = 58458, + SPELL_FROSTBOLT = 58457, }; -#define SPELL_ARCANE_BARRAGE DUNGEON_MODE(SPELL_ARCANE_BARRAGE_N, SPELL_ARCANE_BARRAGE_H) -#define SPELL_ARCANE_EXPLOSION DUNGEON_MODE(SPELL_ARCANE_EXPLOSION_N, SPELL_ARCANE_EXPLOSION_H) -#define SPELL_FROST_NOVA DUNGEON_MODE(SPELL_FROST_NOVA_N, SPELL_FROST_NOVA_H) -#define SPELL_FROSTBOLT DUNGEON_MODE(SPELL_FROSTBOLT_N, SPELL_FROSTBOLT_H) enum AzureMageSlayerSpells { SPELL_ARCANE_EMPOWERMENT = 58469, - SPELL_SPELL_LOCK = 30849 + SPELL_SPELL_LOCK = 30849 }; enum AzureCaptainSpells { - SPELL_MORTAL_STRIKE = 32736, + SPELL_MORTAL_STRIKE = 32736, SPELL_WHIRLWIND_OF_STEEL = 41056 }; enum AzureSorcerorSpells { - SPELL_ARCANE_STREAM_N = 60181, - SPELL_ARCANE_STREAM_H = 60204, - SPELL_MANA_DETONATION_N = 60182, - SPELL_MANA_DETONATION_H = 60205 + SPELL_ARCANE_STREAM = 60181, + SPELL_MANA_DETONATION = 60182, }; -#define SPELL_ARCANE_STREAM DUNGEON_MODE(SPELL_ARCANE_STREAM_N, SPELL_ARCANE_STREAM_H) -#define SPELL_MANA_DETONATION DUNGEON_MODE(SPELL_MANA_DETONATION_N, SPELL_MANA_DETONATION_H) enum AzureRaiderSpells { - SPELL_CONCUSSION_BLOW = 52719, + SPELL_CONCUSSION_BLOW = 52719, SPELL_MAGIC_REFLECTION = 60158 }; enum AzureStalkerSpells { - SPELL_BACKSTAB = 58471, + SPELL_BACKSTAB = 58471, SPELL_TACTICAL_BLINK = 58470 }; diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 805c4afab..3ee7f2272 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -1652,7 +1652,7 @@ public: void MovementInform(uint32 type, uint32 param) override { - if (type == WAYPOINT_MOTION_TYPE && param == 2) + if (type == WAYPOINT_MOTION_TYPE && param == 3) { me->SetWalk(false); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H); @@ -2024,7 +2024,7 @@ public: void MovementInform(uint32 type, uint32 param) override { - if (type == WAYPOINT_MOTION_TYPE && param == 2) + if (type == WAYPOINT_MOTION_TYPE && param == 3) { if (me->IsSummon()) { diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index b4aa561b9..f7b1252a6 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -622,7 +622,7 @@ public: if (type != WAYPOINT_MOTION_TYPE) return; - if (point == 8) // max-1 + if (point == 9) { Talk(0); me->RemoveAllAuras(); diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp index cc4286910..276683cd6 100644 --- a/src/server/scripts/Northrend/zone_wintergrasp.cpp +++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp @@ -184,7 +184,7 @@ public: data << spellId; data << uint8(SPELL_FAILED_CUSTOM_ERROR); data << uint32(SPELL_CUSTOM_ERROR_CANT_BUILD_MORE_VEHICLES); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } return true; } diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index aefe2451c..c1c972305 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -904,7 +904,7 @@ struct npc_akama_illidan : public ScriptedAI else if (type == WAYPOINT_MOTION_TYPE) { if (me->GetCurrentWaypointID() == PATH_AKAMA_MINIONS) - if (id == 2) + if (id == 3) DoCastSelf(SPELL_AKAMA_TELEPORT); } } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp index 9d277accd..93d497d6e 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp @@ -81,8 +81,8 @@ enum Misc enum WaterElementalPathIds { - PATH_CENTER = 5, - PATH_END = 12 + PATH_CENTER = 6, + PATH_END = 13 }; struct boss_hydross_the_unstable : public BossAI diff --git a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_rokmar_the_crackler.cpp b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_rokmar_the_crackler.cpp index 1486bf0bd..f9dca0c40 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_rokmar_the_crackler.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_rokmar_the_crackler.cpp @@ -23,8 +23,7 @@ enum Spells { SPELL_ENSNARING_MOSS = 31948, SPELL_FRENZY = 34970, - SPELL_GRIEVOUS_WOUND_N = 31956, - SPELL_GRIEVOUS_WOUND_H = 38801, + SPELL_GRIEVOUS_WOUND = 31956, SPELL_WATER_SPIT = 35008 }; @@ -53,7 +52,7 @@ struct boss_rokmar_the_crackler : public BossAI scheduler.Schedule(8s, [this] (TaskContext context) { - DoCastVictim(DUNGEON_MODE(SPELL_GRIEVOUS_WOUND_N, SPELL_GRIEVOUS_WOUND_H)); + DoCastVictim(SPELL_GRIEVOUS_WOUND); context.Repeat(20700ms); }).Schedule(15300ms, [this](TaskContext context) { diff --git a/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_ghazan.cpp b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_ghazan.cpp index de200f256..5a9fe60fd 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_ghazan.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_ghazan.cpp @@ -92,7 +92,7 @@ struct boss_ghazan : public BossAI void MovementInform(uint32 type, uint32 pointId) override { - if (!_movedToPlatform || type != WAYPOINT_MOTION_TYPE || pointId != 19) + if (!_movedToPlatform || type != WAYPOINT_MOTION_TYPE || pointId != 20) { return; } diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_porung.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_porung.cpp index 7af27eba7..457dc69e7 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_porung.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_porung.cpp @@ -43,7 +43,7 @@ enum Says enum Misc { - POINT_SCOUT_WP_END = 3, + POINT_SCOUT_WP_END = 4, SET_DATA_ARBITRARY_VALUE = 1, SET_DATA_ENCOUNTER_DONE = 2 diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp index 5b8fc12e1..8af8b89ab 100644 --- a/src/server/scripts/Pet/pet_generic.cpp +++ b/src/server/scripts/Pet/pet_generic.cpp @@ -567,9 +567,9 @@ struct npc_pet_gen_imp_in_a_bottle : public NullCreatureAI for (GroupReference* itr = player->GetGroup()->GetFirstMember(); itr != nullptr && limit < 4; itr = itr->next(), ++limit) if (Player* groupPlayer = itr->GetSource()) if (groupPlayer != player) - groupPlayer->GetSession()->SendPacket(&_data); + groupPlayer->SendDirectMessage(&_data); - player->GetSession()->SendPacket(&_data); + player->SendDirectMessage(&_data); } } } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index a3a62ae7e..1d888d3e8 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -1970,7 +1970,7 @@ class spell_pvp_trinket_wotf_shared_cd : public SpellScript { WorldPacket data; player->BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_INCLUDE_GCD, 7744, GetSpellInfo()->CategoryRecoveryTime); // Will of the forsaken - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); } else { @@ -1983,11 +1983,11 @@ class spell_pvp_trinket_wotf_shared_cd : public SpellScript data << uint16(GetSpellInfo()->GetCategory()); // spell category data << uint32(0); data << uint32(GetSpellInfo()->CategoryRecoveryTime); - player->GetSession()->SendPacket(&data); + player->SendDirectMessage(&data); WorldPacket data2; player->BuildCooldownPacket(data2, SPELL_COOLDOWN_FLAG_INCLUDE_GCD, SPELL_PVP_TRINKET, GetSpellInfo()->CategoryRecoveryTime); // PvP Trinket spell - player->GetSession()->SendPacket(&data2); + player->SendDirectMessage(&data2); } } } @@ -2650,7 +2650,7 @@ class spell_gen_spirit_healer_res : public SpellScript { WorldPacket data(SMSG_SPIRIT_HEALER_CONFIRM, 8); data << target->GetGUID(); - originalCaster->GetSession()->SendPacket(&data); + originalCaster->SendDirectMessage(&data); } }