Merge remote-tracking branch 'upstream/master' into update/core_4_11_2025

# Conflicts:
#	src/server/game/Guilds/Guild.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
This commit is contained in:
bash
2025-11-04 20:07:10 +01:00
168 changed files with 2111 additions and 1581 deletions
@@ -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)');
@@ -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');
@@ -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)');
@@ -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);
+152
View File
@@ -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");
@@ -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)');
@@ -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);
+208
View File
@@ -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");
@@ -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;
@@ -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;
@@ -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\'');
@@ -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);
@@ -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';
@@ -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);
+106
View File
@@ -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
@@ -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));
+1 -1
View File
@@ -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);
}
}
+1 -1
View File
@@ -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))
@@ -566,7 +566,7 @@ Player* ScriptedAI::SelectTargetFromPlayerList(float maxdist, uint32 excludeAura
std::vector<Player*> 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;
@@ -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;
}
@@ -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;
}
}
@@ -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);
}
/**
@@ -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<>
@@ -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;
}
@@ -203,6 +203,6 @@ void AutobroadcastMgr::SendNotificationAnnouncement(uint8 textId)
data << localizedMessage;
// Send packet to the player
player->GetSession()->SendPacket(&data);
player->SendDirectMessage(&data);
});
}
+4 -4
View File
@@ -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);
}
// ----------------------
+2 -2
View File
@@ -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)
+10 -10
View File
@@ -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
@@ -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)
@@ -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);
}
}
@@ -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);
}
}
+4 -4
View File
@@ -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
+1 -1
View File
@@ -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;
+3 -3
View File
@@ -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
}
@@ -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))
@@ -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();
@@ -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();
+2 -2
View File
@@ -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)
+15 -11
View File
@@ -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
}
+3 -3
View File
@@ -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<float> collisionHeight = { }, Optional<float> combatReach = { }) const;
[[nodiscard]] Position GetHitSpherePointFor(Position const& dest, Optional<float> collisionHeight = { }, Optional<float> 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; }
+1 -1
View File
@@ -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);
}
}
}
+76 -73
View File
@@ -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<uint32>(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<uint32>(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
+12 -4
View File
@@ -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<Item*>& 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);
+11 -11
View File
@@ -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);
}
/*********************************************************/
+11 -11
View File
@@ -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)
@@ -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<uint32>(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);
}
}
}
@@ -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;
@@ -172,7 +172,7 @@ void PlayerSocial::SendSocialList(Player* player, uint32 flags)
}
data.put<uint32>(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);
}
}
}
+27 -15
View File
@@ -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*>(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;
}
+1 -1
View File
@@ -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)
{
@@ -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<Unit*>::const_iterator it = i_visibleNow.begin(); it != i_visibleNow.end(); ++it)
i_player.GetInitialVisiblePackets(*it);
@@ -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))
+14 -14
View File
@@ -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);
}
}
+5 -5
View File
@@ -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)
{
@@ -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");
}
@@ -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());
+1 -1
View File
@@ -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)
+3 -3
View File
@@ -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)
+1 -1
View File
@@ -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
+7
View File
@@ -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())
@@ -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;
@@ -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)
+1 -1
View File
@@ -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();
}
}
@@ -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)
+1 -1
View File
@@ -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)
+6 -6
View File
@@ -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);
}
+1 -1
View File
@@ -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;
}
@@ -113,7 +113,7 @@ bool ChaseMovementGenerator<T>::DispatchSplineToPosition(T* owner, float x, floa
}
owner->StopMoving();
return true;
return false;
}
if (cutPath)
@@ -134,7 +134,7 @@ bool ChaseMovementGenerator<T>::DispatchSplineToPosition(T* owner, float x, floa
init.SetWalk(walk);
init.Launch();
return false;
return true;
}
template<class T>
@@ -219,18 +219,21 @@ bool ChaseMovementGenerator<T>::DoUpdate(T* owner, uint32 time_diff)
{
i_recheckDistance.Reset(400); // Sniffed value
if (i_recalculateTravel && PositionOkay(owner, target, _movingTowards ? maxTarget : Optional<float>(), 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<float>(), 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<T>::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))
{
+1 -1
View File
@@ -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)
+5 -5
View File
@@ -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 );
@@ -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);
}
}
+3 -3
View File
@@ -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()
+4 -4
View File
@@ -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);
}
+1 -1
View File
@@ -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;
+5 -5
View File
@@ -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:
+1 -1
View File
@@ -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;
}
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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;
}
+2 -2
View File
@@ -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;
@@ -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<uint32> catSpells = { SPELL_SHRED, SPELL_RAKE, SPELL_FEROCIOUS_BITE };
std::vector<uint32> humanSpells = { SPELL_HURRICANE, SPELL_MOONFIRE, SPELL_SHOCK, SPELL_HEALING_TOUCH, SPELL_REJUVENATION };
std::vector<uint32> bearSpells = { SPELL_DEMORALIZING_ROAR, SPELL_MAUL, SPELL_SWIPE };
std::vector<uint32> faerieSpells = { SPELL_ARCANE_EXPLOSION, SPELL_REFLECTION, SPELL_CHAIN_LIGHTING, SPELL_SLEEP };
std::vector<uint32> faerieSpells = { SPELL_ARCANE_EXPLOSION, SPELL_REFLECTION, SPELL_CHAIN_LIGHTNING, SPELL_SLEEP };
struct boss_mor_grayhoof : public BossAI
{
@@ -234,7 +234,7 @@ public:
{
switch (id)
{
case 5:
case 6:
events.ScheduleEvent(EVENT_TELEPORT_1, 2s);
break;
}
@@ -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;
}
@@ -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);
@@ -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
@@ -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
@@ -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);
});
}
}
@@ -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:
@@ -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
};
@@ -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)
{
+2 -2
View File
@@ -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();
@@ -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;
@@ -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:
@@ -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;
}
@@ -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:
@@ -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;
@@ -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;
@@ -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,
@@ -70,7 +70,7 @@ enum Emotes
enum Points
{
POINT_AIR = 0,
POINT_GROUND = 2,
POINT_GROUND = 3,
POINT_PARALYZE = 2
};
@@ -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<AI>(obj, AzjolNerubScriptName);
}
#define RegisterAzjolNerubCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetAzjolNerubAI)
#endif
@@ -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<boss_anub_arakAI>(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<TempSummon*> 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);
}

Some files were not shown because too many files have changed in this diff Show More