Merge branch 'master' into Playerbot

This commit is contained in:
Yunfan Li
2024-07-03 16:03:45 +08:00
81 changed files with 889 additions and 415 deletions
@@ -1,3 +1,4 @@
-- DB update 2024_06_29_07 -> 2024_06_29_08
-- remove duplicate 25962 'Fire Eater' spawns
DELETE FROM `creature` WHERE (`id1` = 25962) AND (`guid` IN (25954, 25957));
DELETE FROM `game_event_creature` WHERE (`eventEntry` = 1) AND (`guid` IN (25954, 25957));
+298
View File
@@ -0,0 +1,298 @@
-- DB update 2024_06_29_08 -> 2024_06_29_09
--
UPDATE `creature_template` SET `flags_extra` = `flags_extra` | 524288 WHERE `entry` IN
(10184, -- Onyxia
15928, -- Thaddius
15931, -- Grobbulus
15932, -- Gluth
15936, -- Heigan the Unclean
15952, -- Maexxna
15953, -- Grand Widow Faerlina
15954, -- Noth the Plaguebringer
15956, -- Anub'Rekhan
15989, -- Sapphiron
15990, -- Kel'Thuzad
16011, -- Loatheb
16028, -- Patchwerk
16060, -- Gothik the Harvester
28859, -- Malygos
28860, -- Sartharion
29249, -- Anub'Rekhan (1)
29268, -- Grand Widow Faerlina (1)
29278, -- Maexxna (1)
29324, -- Patchwerk (1)
29373, -- Grobbulus (1)
29417, -- Gluth (1)
29448, -- Thaddius (1)
29615, -- Noth the Plaguebringer (1)
29701, -- Heigan the Unclean (1)
29718, -- Loatheb (1)
29955, -- Gothik the Harvester (1)
29991, -- Sapphiron (1)
30061, -- Kel'Thuzad (1)
30449, -- Vesperon
30451, -- Shadron
30452, -- Tenebron
31125, -- Archavon the Stone Watcher
31311, -- Sartharion (1)
31520, -- Shadron (1)
31534, -- Tenebron (1)
31535, -- Vesperon (1)
31722, -- Archavon the Stone Watcher (1)
31734, -- Malygos
32845, -- Hodir
32846, -- Hodir (1)
32857, -- Stormcaller Brundir
32865, -- Thorim
32867, -- Steelbreaker
32871, -- Algalon the Observer
32906, -- Freya
32927, -- Runemaster Molgeim
32930, -- Kologarn
33070, -- Algalon the Observer (1)
33113, -- Flame Leviathan
33118, -- Ignis the Furnace Master
33147, -- Thorim (1)
33186, -- Razorscale
33190, -- Ignis the Furnace Master (1)
33271, -- General Vezax
33288, -- Yogg-Saron
33293, -- XT-002 Deconstructor
33360, -- Freya (1)
33432, -- Leviathan Mk II
33449, -- General Vezax (1)
33515, -- Auriaya
33651, -- VX-001
33670, -- Aerial Command Unit
33692, -- Runemaster Molgeim (1)
33693, -- Steelbreaker (1)
33694, -- Stormcaller Brundir (1)
33724, -- Razorscale (1)
33885, -- XT-002 Deconstructor (1)
33909, -- Kologarn (1)
33955, -- Yogg-Saron (1)
33993, -- Emalon the Storm Watcher
33994, -- Emalon the Storm Watcher (1)
34003, -- Flame Leviathan (1)
34106, -- Leviathan Mk II (1)
34108, -- VX-001 (1)
34109, -- Aerial Command Unit (1)
34175, -- Auriaya (1)
34441, -- Vivienne Blackwhisper
34442, -- Vivienne Blackwhisper (1)
34443, -- Vivienne Blackwhisper (2)
34444, -- Thrakgar
34445, -- Liandra Suncaller
34447, -- Caiphus the Stern
34448, -- Ruj'kah
34449, -- Ginselle Blightslinger
34450, -- Harkzog
34451, -- Birana Stormhoof
34453, -- Narrhok Steelbreaker
34454, -- Maz'dinah
34455, -- Broln Stouthorn
34456, -- Malithas Brightblade
34458, -- Gorgrim Shadowcleave
34459, -- Erin Misthoof
34460, -- Kavina Grovesong
34461, -- Tyrius Duskblade
34463, -- Shaabad
34465, -- Velanaa
34466, -- Anthar Forgemender
34467, -- Alyssia Moonstalker
34468, -- Noozle Whizzlestick
34469, -- Melador Valestrider
34470, -- Saamul
34471, -- Baelnor Lightbearer
34472, -- Irieth Shadowstep
34474, -- Serissa Grimdabbler
34475, -- Shocuul
34496, -- Eydis Darkbane
34497, -- Fjola Lightbane
34564, -- Anub'arak
34566, -- Anub'arak (1)
34780, -- Lord Jaraxxus
34796, -- Gormok the Impaler
34797, -- Icehowl
34799, -- Dreadscale
35013, -- Koralon the Flame Watcher
35144, -- Acidmaw
35216, -- Lord Jaraxxus (1)
35268, -- Lord Jaraxxus (2)
35269, -- Lord Jaraxxus (3)
35347, -- Eydis Darkbane (1)
35348, -- Eydis Darkbane (2)
35349, -- Eydis Darkbane (3)
35350, -- Fjola Lightbane (1)
35351, -- Fjola Lightbane (2)
35352, -- Fjola Lightbane (3)
35360, -- Koralon the Flame Watcher (1)
35438, -- Gormok the Impaler (1)
35439, -- Gormok the Impaler (2)
35440, -- Gormok the Impaler (3)
35447, -- Icehowl (1)
35448, -- Icehowl (2)
35449, -- Icehowl (3)
35511, -- Acidmaw (1)
35512, -- Acidmaw (2)
35513, -- Acidmaw (3)
35514, -- Dreadscale (1)
35515, -- Dreadscale (2)
35516, -- Dreadscale (3)
35615, -- Anub'arak (2)
35616, -- Anub'arak (3)
35662, -- Alyssia Moonstalker (1)
35663, -- Alyssia Moonstalker (2)
35664, -- Alyssia Moonstalker (3)
35665, -- Anthar Forgemender (1)
35666, -- Anthar Forgemender (2)
35667, -- Anthar Forgemender (3)
35668, -- Baelnor Lightbearer (1)
35669, -- Baelnor Lightbearer (2)
35670, -- Baelnor Lightbearer (3)
35671, -- Birana Stormhoof (1)
35672, -- Birana Stormhoof (2)
35673, -- Birana Stormhoof (3)
35680, -- Broln Stouthorn (1)
35681, -- Broln Stouthorn (2)
35682, -- Broln Stouthorn (3)
35683, -- Caiphus the Stern (1)
35684, -- Caiphus the Stern (2)
35685, -- Caiphus the Stern (3)
35686, -- Erin Misthoof (1)
35687, -- Erin Misthoof (2)
35688, -- Erin Misthoof (3)
35689, -- Ginselle Blightslinger (1)
35690, -- Ginselle Blightslinger (2)
35691, -- Ginselle Blightslinger (3)
35692, -- Gorgrim Shadowcleave (1)
35693, -- Gorgrim Shadowcleave (2)
35694, -- Gorgrim Shadowcleave (3)
35695, -- Harkzog (1)
35696, -- Harkzog (2)
35697, -- Harkzog (3)
35699, -- Irieth Shadowstep (1)
35700, -- Irieth Shadowstep (2)
35701, -- Irieth Shadowstep (3)
35702, -- Kavina Grovesong (1)
35703, -- Kavina Grovesong (2)
35704, -- Kavina Grovesong (3)
35705, -- Liandra Suncaller (1)
35706, -- Liandra Suncaller (2)
35707, -- Liandra Suncaller (3)
35708, -- Malithas Brightblade (1)
35709, -- Malithas Brightblade (2)
35710, -- Malithas Brightblade (3)
35711, -- Maz'dinah (1)
35712, -- Maz'dinah (2)
35713, -- Maz'dinah (3)
35714, -- Melador Valestrider (1)
35715, -- Melador Valestrider (2)
35716, -- Melador Valestrider (3)
35718, -- Narrhok Steelbreaker (1)
35719, -- Narrhok Steelbreaker (2)
35720, -- Narrhok Steelbreaker (3)
35721, -- Noozle Whizzlestick (1)
35722, -- Noozle Whizzlestick (2)
35723, -- Noozle Whizzlestick (3)
35724, -- Ruj'kah (1)
35725, -- Ruj'kah (2)
35726, -- Ruj'kah (3)
35728, -- Saamul (1)
35729, -- Saamul (2)
35730, -- Saamul (3)
35731, -- Serissa Grimdabbler (1)
35732, -- Serissa Grimdabbler (2)
35733, -- Serissa Grimdabbler (3)
35734, -- Shaabad (1)
35735, -- Shaabad (2)
35736, -- Shaabad (3)
35737, -- Shocuul (1)
35738, -- Shocuul (2)
35739, -- Shocuul (3)
35740, -- Thrakgar (1)
35741, -- Thrakgar (2)
35742, -- Thrakgar (3)
35743, -- Tyrius Duskblade (1)
35744, -- Tyrius Duskblade (2)
35745, -- Tyrius Duskblade (3)
35746, -- Velanaa (1)
35747, -- Velanaa (2)
35748, -- Velanaa (3)
35749, -- Vivienne Blackwhisper (3)
36538, -- Onyxia (1)
36597, -- The Lich King
36612, -- Lord Marrowgar
36626, -- Festergut
36627, -- Rotface
36678, -- Professor Putricide
36855, -- Lady Deathwhisper
36899, -- Big Ooze
36939, -- High Overlord Saurfang
36948, -- Muradin Bronzebeard
37504, -- Festergut (1)
37505, -- Festergut (2)
37506, -- Festergut (3)
37562, -- Gas Cloud
37813, -- Deathbringer Saurfang
37955, -- Blood-Queen Lana'thel
37957, -- Lord Marrowgar (1)
37958, -- Lord Marrowgar (2)
37959, -- Lord Marrowgar (3)
37970, -- Prince Valanar
37972, -- Prince Keleseth
37973, -- Prince Taldaram
38106, -- Lady Deathwhisper (1)
38123, -- Big Ooze (1)
38156, -- High Overlord Saurfang (1)
38157, -- Muradin Bronzebeard (1)
38216, -- Mutated Professor Putricide
38296, -- Lady Deathwhisper (2)
38297, -- Lady Deathwhisper (3)
38390, -- Rotface (1)
38399, -- Prince Keleseth (1)
38400, -- Prince Taldaram (1)
38401, -- Prince Valanar (1)
38402, -- Deathbringer Saurfang (1)
38431, -- Professor Putricide (1)
38433, -- Toravon the Ice Watcher
38434, -- Blood-Queen Lana'thel (1)
38435, -- Blood-Queen Lana'thel (2)
38436, -- Blood-Queen Lana'thel (3)
38462, -- Toravon the Ice Watcher (1)
38549, -- Rotface (2)
38550, -- Rotface (3)
38582, -- Deathbringer Saurfang (2)
38583, -- Deathbringer Saurfang (3)
38585, -- Professor Putricide (2)
38586, -- Professor Putricide (3)
38602, -- Gas Cloud (1)
38637, -- High Overlord Saurfang (2)
38638, -- High Overlord Saurfang (3)
38639, -- Muradin Bronzebeard (2)
38640, -- Muradin Bronzebeard (3)
38760, -- Gas Cloud (2)
38761, -- Gas Cloud (3)
38769, -- Prince Keleseth (2)
38770, -- Prince Keleseth (3)
38771, -- Prince Taldaram (2)
38772, -- Prince Taldaram (3)
38784, -- Prince Valanar (2)
38785, -- Prince Valanar (3)
38883, -- ScottG Test
39166, -- The Lich King (1)
39167, -- The Lich King (2)
39168, -- The Lich King (3)
39231, -- The Lich King (Temp)
39232, -- The Lich King (Temp) (1)
39233, -- The Lich King (Temp) (2)
39234, -- The Lich King (Temp) (3)
39863, -- Halion
39864, -- Halion (1)
39944, -- Halion (2)
39945, -- Halion (3)
40142, -- Halion
40143, -- Halion (1)
40144, -- Halion (2)
40145 -- Halion (3)
);
@@ -0,0 +1,27 @@
-- DB update 2024_06_29_09 -> 2024_06_29_10
-- Finding the Keymaster.
DELETE FROM `event_scripts` WHERE `id`=12857;
INSERT INTO `event_scripts` (`id`, `delay`, `command`, `datalong`, `datalong2`, `dataint`, `x`, `y`, `z`, `o`) VALUES
(12857, 0, 10, 19938, 10000, 0, 2248.43, 2227.97, 138.56, 2.48121),
(12857, 0, 9, 30029, 10, 0, 0, 0, 0, 0);
DELETE FROM `gameobject` WHERE (`id` = 184119 AND `guid` = 30029);
INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES
(30029, 184119, 530, 0, 0, 1, 1, 2248.23, 2228.12, 137.002, -2.14675, 0, 0, -0.878817, 0.47716, -1, 255, 1, '', 0, NULL);
DELETE FROM `creature_text` WHERE (`CreatureID` = 19938);
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
(19938, 0, 0, 'A flickering image of a female blood elf commander appears. From the surroundings, you can tell she must be inside Tempest Keep.', 16, 0, 100, 1, 0, 0, 17529, 0, 'Image of Commander Sarannis'),
(19938, 1, 0, 'The blood elf doesn\'t appear to be a magister, but perhaps she holds something that is the key to the tower\'s curse.', 16, 0, 100, 25, 0, 0, 17530, 0, 'Image of Commander Sarannis');
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 19938;
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 19938 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
(19938, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 80, 1993800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Image of Commander Sarannis - On Just Summoned - Run Script');
DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 1993800);
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
(1993800, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Image of Commander Sarannis - Actionlist - Say Line 0'),
(1993800, 9, 1, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Image of Commander Sarannis - Actionlist - Say Line 1'),
(1993800, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 33, 19938, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Image of Commander Sarannis - Actionlist - Quest Credit \'Finding the Keymaster\'');
@@ -0,0 +1,43 @@
-- DB update 2024_06_29_10 -> 2024_06_29_11
--
-- trigger AI
UPDATE `creature_template` SET `ScriptName` = 'npc_gothik_trigger' WHERE `entry` = 16137;
-- re-do spawn locations for triggers
SET @CGUID = 127514;
DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+14 AND `id1`=16137;
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
(@CGUID+0, 16137, 0, 0, 533, 3456, 3456, 3, 1, 0, 2643.73095703125, -3399.680908203125, 284.18292236328125, 6.091198921203613281, 7200, 0, 0, 17010, 0, 0, 0, 0, 0, '', 46248, 0, 'living side soul trigger (south)'),
(@CGUID+1, 16137, 0, 0, 533, 3456, 3456, 3, 1, 0, 2739.994873046875, -3399.779296875, 284.294647216796875, 6.108652114868164062, 7200, 0, 0, 17010, 0, 0, 0, 0, 0, '', 46248, 0, 'living side soul trigger (north)'),
(@CGUID+2, 16137, 0, 0, 533, 3456, 3456, 3, 1, 0, 2643.73095703125, -3321.72705078125, 284.23272705078125, 6.195918560028076171, 7200, 0, 0, 17010, 0, 0, 0, 0, 0, '', 46248, 0, 'spectral side soul trigger (south)'),
(@CGUID+3, 16137, 0, 0, 533, 3456, 3456, 3, 1, 0, 2739.994873046875, -3321.72705078125, 284.23162841796875, 2.827433347702026367, 7200, 0, 0, 17010, 0, 0, 0, 0, 0, '', 46248, 0, 'spectral side soul trigger (north)'),
(@CGUID+4, 16137, 0, 0, 533, 3456, 3456, 3, 1, 0, 2692.16064453125, -3430.745849609375, 268.64617919921875, 1.605702877044677734, 7200, 0, 0, 17010, 0, 0, 0, 0, 0, '', 46248, 0, 'living side spawn trigger (center back)'),
(@CGUID+5, 16137, 0, 0, 533, 3456, 3456, 3, 1, 0, 2714.561767578125, -3430.6103515625, 268.646240234375, 1.413716673851013183, 7200, 0, 0, 17010, 0, 0, 0, 0, 0, '', 46248, 0, 'living side spawn trigger (north back)'),
(@CGUID+6, 16137, 0, 0, 533, 3456, 3456, 3, 1, 0, 2669.581298828125, -3428.858642578125, 268.64617919921875, 1.378810048103332519, 7200, 0, 0, 17010, 0, 0, 0, 0, 0, '', 46248, 0, 'living side spawn trigger (south front)'),
(@CGUID+7, 16137, 0, 0, 533, 3456, 3456, 3, 1, 0, 2669.59033203125, -3431.460205078125, 268.64617919921875, 1.343903541564941406, 7200, 0, 0, 17010, 0, 0, 0, 0, 0, '', 46248, 0, 'living side spawn trigger (south back)'),
(@CGUID+8, 16137, 0, 0, 533, 3456, 3456, 3, 1, 0, 2692.212646484375, -3428.78271484375, 268.64617919921875, 1.48352980613708496, 7200, 0, 0, 17010, 0, 0, 0, 0, 0, '', 46248, 0, 'living side spawn trigger (center front)'),
(@CGUID+9, 16137, 0, 0, 533, 3456, 3456, 3, 1, 0, 2733.456787109375, -3349.387939453125, 267.7677001953125, 1.780235767364501953, 7200, 0, 0, 17010, 0, 0, 0, 0, 0, '', 46248, 0, 'living side spawn trigger (north front)'),
(@CGUID+10, 16137, 0, 0, 533, 3456, 3456, 3, 1, 0, 2714.4619140625, -3428.727783203125, 268.64617919921875, 1.65806281566619873, 7200, 0, 0, 17010, 0, 0, 0, 0, 0, '', 46248, 0, 'spectral side spawn trigger (northwest)'),
(@CGUID+11, 16137, 0, 0, 533, 3456, 3456, 3, 1, 0, 2725.818603515625, -3309.567626953125, 267.89178466796875, 2.827433347702026367, 7200, 0, 0, 17010, 0, 0, 0, 0, 0, '', 46248, 0, 'spectral side spawn trigger (northeast)'),
(@CGUID+12, 16137, 0, 0, 533, 3456, 3456, 3, 1, 0, 2700.268798828125, -3322.3544921875, 267.767791748046875, 3.525565147399902343, 7200, 0, 0, 17010, 0, 0, 0, 0, 0, '', 46248, 0, 'spectral side spawn trigger (center)'),
(@CGUID+13, 16137, 0, 0, 533, 3456, 3456, 3, 1, 0, 2683.885986328125, -3304.212890625, 267.76800537109375, 2.49582076072692871, 7200, 0, 0, 17010, 0, 0, 0, 0, 0, '', 46248, 0, 'spectral side spawn trigger (southwest)'),
(@CGUID+14, 16137, 0, 0, 533, 3456, 3456, 3, 1, 0, 2664.871826171875, -3340.7490234375, 267.767364501953125, 5.934119224548339843, 7200, 0, 0, 17010, 0, 0, 0, 0, 0, '', 46248, 0, 'spectral side spawn trigger (southeast)');
-- make visuals target proper triggers
-- to anchor 1: 27892 (Trainee), 27928 (DK), 27935 (Rider)
-- to anchor 2: 27893 (Trainee), 27929 (DK), 27936 (Rider)
-- anchor -> skull: 27915 (Trainee), 27931 (DK), 27937 (Rider)
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (27892,27928,27935,27893,27929,27936,27915,27931,27937);
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(13,1,27892,0,0,31,0,3,16137,@CGUID+0,0,0,0,'','To Anchor 1 - Target Anchor Living South'),
(13,1,27892,0,1,31,0,3,16137,@CGUID+1,0,0,0,'','To Anchor 1 - Target Anchor Living North'),
(13,1,27928,0,0,31,0,3,16137,@CGUID+0,0,0,0,'','To Anchor 1 - Target Anchor Living South'),
(13,1,27928,0,1,31,0,3,16137,@CGUID+1,0,0,0,'','To Anchor 1 - Target Anchor Living North'),
(13,1,27935,0,0,31,0,3,16137,@CGUID+0,0,0,0,'','To Anchor 1 - Target Anchor Living South'),
(13,1,27935,0,1,31,0,3,16137,@CGUID+1,0,0,0,'','To Anchor 1 - Target Anchor Living North'),
(13,1,27893,0,0,31,0,3,16137,@CGUID+2,0,0,0,'','To Anchor 2 - Target Anchor Spectral South'),
(13,1,27893,0,1,31,0,3,16137,@CGUID+3,0,0,0,'','To Anchor 2 - Target Anchor Spectral North'),
(13,1,27929,0,0,31,0,3,16137,@CGUID+2,0,0,0,'','To Anchor 2 - Target Anchor Spectral South'),
(13,1,27929,0,1,31,0,3,16137,@CGUID+3,0,0,0,'','To Anchor 2 - Target Anchor Spectral North'),
(13,1,27936,0,0,31,0,3,16137,@CGUID+2,0,0,0,'','To Anchor 2 - Target Anchor Spectral South'),
(13,1,27936,0,1,31,0,3,16137,@CGUID+3,0,0,0,'','To Anchor 2 - Target Anchor Spectral North');
@@ -0,0 +1,5 @@
-- DB update 2024_06_29_11 -> 2024_07_01_00
--
DELETE FROM `acore_string` WHERE `entry` = 602;
INSERT INTO `acore_string` (`entry`, `content_default`) VALUES
(602, ' [rewarded]');
@@ -0,0 +1,18 @@
-- DB update 2024_07_01_00 -> 2024_07_01_01
--
DELETE FROM `creature_text` WHERE (`CreatureID` = 21894);
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
(21894, 0, 0, 'Who disturbs my slumber? That spear... I still carry the scar!', 14, 0, 100, 0, 0, 0, 19599, 0, 'Xeleth - Yell on summon');
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 21894;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 21894);
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
(21894, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Xeleth - On Just Summoned - Say Line 0'),
(21894, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Xeleth - On Just Summoned - Start Attacking'),
(21894, 0, 2, 0, 0, 0, 100, 0, 0, 0, 14000, 16000, 0, 0, 11, 36414, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Xeleth - In Combat - Cast \'Focused Bursts\''),
(21894, 0, 3, 0, 0, 0, 75, 0, 8000, 14000, 8000, 14000, 0, 0, 11, 36398, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Xeleth - In Combat - Cast \'Tongue Lash\' (75%)');
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 17) AND (`SourceGroup` = 0) AND (`SourceEntry` = 37904);
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(17, 0, 37904, 0, 0, 29, 0, 21894, 80, 0, 1, 0, 0, '', 'Allow using \'Imbued Silver Spear\' if no alive \'Xeleth\' is within 80y.');
@@ -0,0 +1,11 @@
-- DB update 2024_07_01_01 -> 2024_07_02_00
-- Anetheron
UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.714285714285714 WHERE `entry` = 17808;
-- Archimonde
UPDATE `creature_template` SET `speed_walk` = 3.2, `speed_run` = 2.285714285714286 WHERE `entry` = 17968;
-- Azgalor
UPDATE `creature_template` SET `speed_walk` = 2.4, `speed_run` = 2.142857142857143 WHERE `entry` = 17842;
-- Kaz'rogal
UPDATE `creature_template` SET `speed_walk` = 2.4, `speed_run` = 1.714285714285714 WHERE `entry` = 17888;
-- Rage Winterchill
UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 2.285714285714286 WHERE `entry` = 17767;
@@ -0,0 +1,4 @@
--
ALTER TABLE `character_homebind`
DROP COLUMN `posO`;
@@ -19,8 +19,8 @@
#define AuthSocketMgr_h__
#include "AuthSession.h"
#include "SocketMgr.h"
#include "Config.h"
#include "SocketMgr.h"
class AuthSocketMgr : public SocketMgr<AuthSession>
{
@@ -4335,6 +4335,13 @@ PlayerDump.DisallowOverwrite = 1
ICC.Buff.Horde = 73822
ICC.Buff.Alliance = 73828
#
# WipeGunshipBlizzlike.Enable
# Description: Wipe the gunship fight if no player is on the deck.
# Default: 1 - (Blizzlike)
WipeGunshipBlizzlike.Enable = 1
#
# Minigob.Manabonk.Enable
# Description: Enable/ Disable Minigob Manabonk
@@ -95,7 +95,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_SEL_MAIL_SERVER_CHARACTER, "SELECT mailId from mail_server_character WHERE guid = ? and mailId = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_REP_MAIL_SERVER_CHARACTER, "REPLACE INTO mail_server_character (guid, mailId) values (?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER_SOCIALLIST, "SELECT friend, flags, note FROM character_social JOIN characters ON characters.guid = character_social.friend WHERE character_social.guid = ? AND deleteinfos_name IS NULL LIMIT 255", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER_HOMEBIND, "SELECT mapId, zoneId, posX, posY, posZ, posO FROM character_homebind WHERE guid = ?", CONNECTION_BOTH);
PrepareStatement(CHAR_SEL_CHARACTER_HOMEBIND, "SELECT mapId, zoneId, posX, posY, posZ FROM character_homebind WHERE guid = ?", CONNECTION_BOTH);
PrepareStatement(CHAR_SEL_CHARACTER_SPELLCOOLDOWNS, "SELECT spell, category, item, time, needSend FROM character_spell_cooldown WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER_DECLINEDNAMES, "SELECT genitive, dative, accusative, instrumental, prepositional FROM character_declinedname WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER_ACHIEVEMENTS, "SELECT achievement, date FROM character_achievement WHERE guid = ?", CONNECTION_ASYNC);
@@ -290,8 +290,8 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_DEL_PLAYER_ENTRY_POINT, "DELETE FROM character_entry_point WHERE guid = ?", CONNECTION_ASYNC);
// Character homebind
PrepareStatement(CHAR_INS_PLAYER_HOMEBIND, "INSERT INTO character_homebind (guid, mapId, zoneId, posX, posY, posZ, posO) VALUES (?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_PLAYER_HOMEBIND, "UPDATE character_homebind SET mapId = ?, zoneId = ?, posX = ?, posY = ?, posZ = ?, posO = ? WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_PLAYER_HOMEBIND, "INSERT INTO character_homebind (guid, mapId, zoneId, posX, posY, posZ) VALUES (?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_PLAYER_HOMEBIND, "UPDATE character_homebind SET mapId = ?, zoneId = ?, posX = ?, posY = ?, posZ = ? WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_PLAYER_HOMEBIND, "DELETE FROM character_homebind WHERE guid = ?", CONNECTION_ASYNC);
// Corpse
@@ -407,7 +407,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_SEL_PINFO_BANS, "SELECT unbandate, bandate = unbandate, bannedby, banreason FROM character_banned WHERE guid = ? AND active ORDER BY bandate ASC LIMIT 1", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_PINFO_MAILS, "SELECT SUM(CASE WHEN (checked & 1) THEN 1 ELSE 0 END) AS 'readmail', COUNT(*) AS 'totalmail' FROM mail WHERE `receiver` = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_PINFO_XP, "SELECT a.xp, b.guid FROM characters a LEFT JOIN guild_member b ON a.guid = b.guid WHERE a.guid = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_CHAR_HOMEBIND, "SELECT mapId, zoneId, posX, posY, posZ, posO FROM character_homebind WHERE guid = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_CHAR_HOMEBIND, "SELECT mapId, zoneId, posX, posY, posZ FROM character_homebind WHERE guid = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_CHAR_GUID_NAME_BY_ACC, "SELECT guid, name FROM characters WHERE account = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_POOL_QUEST_SAVE, "SELECT quest_id FROM pool_quest_save WHERE pool_id = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_CHARACTER_AT_LOGIN, "SELECT at_login FROM characters WHERE guid = ?", CONNECTION_SYNCH);
+1 -1
View File
@@ -281,7 +281,7 @@ bool ArenaTeam::LoadMembersFromDB(QueryResult result)
bool ArenaTeam::SetName(std::string const& name)
{
if (TeamName == name || name.empty() || name.length() > 24 || sObjectMgr->IsReservedName(name) || sObjectMgr->IsProfanityName(name) || !ObjectMgr::IsValidCharterName(name))
if (TeamName == name || name.empty() || name.length() > 24 || !ObjectMgr::IsValidCharterName(name))
return false;
TeamName = name;
@@ -116,7 +116,7 @@ namespace lfg
sLFGMgr->LeaveLfg(player->GetGUID());
sLFGMgr->LeaveAllLfgQueues(player->GetGUID(), true);
player->RemoveAurasDueToSpell(LFG_SPELL_LUCK_OF_THE_DRAW);
player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, player->m_homebindO);
player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, 0.0f);
LOG_DEBUG("lfg", "LFGPlayerScript::OnMapChanged, Player {} ({}) is in LFG dungeon map but does not have a valid group! Teleporting to homebind.",
player->GetName(), player->GetGUID().ToString());
return;
+3 -4
View File
@@ -345,7 +345,6 @@ Player::Player(WorldSession* session): Unit(true), m_mover(this)
m_homebindX = 0;
m_homebindY = 0;
m_homebindZ = 0;
m_homebindO = 0;
m_contestedPvPTimer = 0;
@@ -1606,7 +1605,7 @@ bool Player::TeleportToEntryPoint()
if (loc.m_mapId == MAPID_INVALID)
{
return TeleportTo(m_homebindMapId, m_homebindX, m_homebindY, m_homebindZ, m_homebindO);
return TeleportTo(m_homebindMapId, m_homebindX, m_homebindY, m_homebindZ, GetOrientation());
}
return TeleportTo(loc);
@@ -4913,7 +4912,7 @@ void Player::RepopAtGraveyard()
}
}
else if (GetPositionZ() < GetMap()->GetMinHeight(GetPositionX(), GetPositionY()))
TeleportTo(m_homebindMapId, m_homebindX, m_homebindY, m_homebindZ, m_homebindO);
TeleportTo(m_homebindMapId, m_homebindX, m_homebindY, m_homebindZ, GetOrientation());
RemovePlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS);
}
@@ -11264,7 +11263,7 @@ void Player::SetEntryPoint()
}
if (m_entryPointData.joinPos.m_mapId == MAPID_INVALID)
m_entryPointData.joinPos = WorldLocation(m_homebindMapId, m_homebindX, m_homebindY, m_homebindZ, m_homebindO);
m_entryPointData.joinPos = WorldLocation(m_homebindMapId, m_homebindX, m_homebindY, m_homebindZ, 0.0f);
}
void Player::LeaveBattleground(Battleground* bg)
-1
View File
@@ -2349,7 +2349,6 @@ public:
float m_homebindX;
float m_homebindY;
float m_homebindZ;
float m_homebindO;
[[nodiscard]] WorldLocation GetStartPosition() const;
@@ -4913,7 +4913,7 @@ bool Player::LoadPositionFromDB(uint32& mapid, float& x, float& y, float& z, flo
void Player::SetHomebind(WorldLocation const& loc, uint32 areaId)
{
loc.GetPosition(m_homebindX, m_homebindY, m_homebindZ, m_homebindO);
loc.GetPosition(m_homebindX, m_homebindY, m_homebindZ);
m_homebindMapId = loc.GetMapId();
m_homebindAreaId = areaId;
@@ -4921,11 +4921,10 @@ void Player::SetHomebind(WorldLocation const& loc, uint32 areaId)
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_PLAYER_HOMEBIND);
stmt->SetData(0, m_homebindMapId);
stmt->SetData(1, m_homebindAreaId);
stmt->SetData(2, m_homebindX);
stmt->SetData(3, m_homebindY);
stmt->SetData(4, m_homebindZ);
stmt->SetData(5, m_homebindO);
stmt->SetData(6, GetGUID().GetCounter());
stmt->SetData (2, m_homebindX);
stmt->SetData (3, m_homebindY);
stmt->SetData (4, m_homebindZ);
stmt->SetData(5, GetGUID().GetCounter());
CharacterDatabase.Execute(stmt);
}
@@ -4981,8 +4980,7 @@ bool Player::LoadFromDB(ObjectGuid playerGuid, CharacterDatabaseQueryHolder cons
m_name = fields[2].Get<std::string>();
// check name limitations
if (ObjectMgr::CheckPlayerName(m_name) != CHAR_NAME_SUCCESS ||
(AccountMgr::IsPlayerAccount(GetSession()->GetSecurity()) && (sObjectMgr->IsReservedName(m_name) || sObjectMgr->IsProfanityName(m_name))))
if (ObjectMgr::CheckPlayerName(m_name) != CHAR_NAME_SUCCESS || AccountMgr::IsPlayerAccount(GetSession()->GetSecurity()))
{
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
stmt->SetData(0, uint16(AT_LOGIN_RENAME));
@@ -5099,7 +5097,7 @@ bool Player::LoadFromDB(ObjectGuid playerGuid, CharacterDatabaseQueryHolder cons
std::string taxi_nodes = fields[42].Get<std::string>();
auto RelocateToHomebind = [this, &mapId, &instanceId]() { mapId = m_homebindMapId; instanceId = 0; Relocate(m_homebindX, m_homebindY, m_homebindZ, m_homebindO); };
auto RelocateToHomebind = [this, &mapId, &instanceId]() { mapId = m_homebindMapId; instanceId = 0; Relocate(m_homebindX, m_homebindY, m_homebindZ); };
_LoadGroup();
@@ -7014,7 +7012,7 @@ bool Player::_LoadHomeBind(PreparedQueryResult result)
}
bool ok = false;
// SELECT mapId, zoneId, posX, posY, posZ, pozO FROM character_homebind WHERE guid = ?
// SELECT mapId, zoneId, posX, posY, posZ FROM character_homebind WHERE guid = ?
if (result)
{
Field* fields = result->Fetch();
@@ -7024,12 +7022,11 @@ bool Player::_LoadHomeBind(PreparedQueryResult result)
m_homebindX = fields[2].Get<float>();
m_homebindY = fields[3].Get<float>();
m_homebindZ = fields[4].Get<float>();
m_homebindO = fields[5].Get<float>();
MapEntry const* bindMapEntry = sMapStore.LookupEntry(m_homebindMapId);
// accept saved data only for valid position (and non instanceable), and accessable
if (MapMgr::IsValidMapCoord(m_homebindMapId, m_homebindX, m_homebindY, m_homebindZ, m_homebindO) &&
if (MapMgr::IsValidMapCoord(m_homebindMapId, m_homebindX, m_homebindY, m_homebindZ) &&
!bindMapEntry->Instanceable() && GetSession()->Expansion() >= bindMapEntry->Expansion())
ok = true;
else
@@ -7047,20 +7044,19 @@ bool Player::_LoadHomeBind(PreparedQueryResult result)
m_homebindX = info->positionX;
m_homebindY = info->positionY;
m_homebindZ = info->positionZ;
m_homebindO = info->orientation;
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PLAYER_HOMEBIND);
stmt->SetData(0, GetGUID().GetCounter());
stmt->SetData(1, m_homebindMapId);
stmt->SetData(2, m_homebindAreaId);
stmt->SetData(3, m_homebindX);
stmt->SetData(4, m_homebindY);
stmt->SetData(5, m_homebindZ);
stmt->SetData(6, m_homebindO);
stmt->SetData (3, m_homebindX);
stmt->SetData (4, m_homebindY);
stmt->SetData (5, m_homebindZ);
CharacterDatabase.Execute(stmt);
}
LOG_DEBUG("entities.player", "Setting player home position - mapid: {}, areaid: {}, X: {}, Y: {}, Z: {}, O: {}",
m_homebindMapId, m_homebindAreaId, m_homebindX, m_homebindY, m_homebindZ, m_homebindO);
LOG_DEBUG("entities.player", "Setting player home position - mapid: {}, areaid: {}, X: {}, Y: {}, Z: {}",
m_homebindMapId, m_homebindAreaId, m_homebindX, m_homebindY, m_homebindZ);
return true;
}
@@ -1017,7 +1017,7 @@ void Player::UpdateCombatSkills(Unit* victim, WeaponAttackType attType, bool def
chance = chance < 1.0f ? 1.0f : chance; // minimum chance to increase skill is 1%
LOG_DEBUG("entities.player", "Player::UpdateCombatSkills(defence:{}, playerLevel:{}, moblevel:{}) -> ({}/{}) chance to increase skill is {}%", defence, playerLevel, moblevel, currentSkillValue, currentSkillMax, chance);
LOG_DEBUG("entities.player", "Player::UpdateCombatSkills(defence:{}, playerLevel:{}, moblevel:{}) -> ({}/{}) chance to increase skill is {}\%", defence, playerLevel, moblevel, currentSkillValue, currentSkillMax, chance);
if (roll_chance_f(chance))
{
+79 -120
View File
@@ -36,7 +36,6 @@
#include "LFGMgr.h"
#include "Log.h"
#include "MapMgr.h"
#include <numeric>
#include "Pet.h"
#include "PoolMgr.h"
#include "ReputationMgr.h"
@@ -53,6 +52,7 @@
#include "Vehicle.h"
#include "World.h"
#include <boost/algorithm/string.hpp>
#include <numeric>
ScriptMapMap sSpellScripts;
ScriptMapMap sEventScripts;
@@ -203,62 +203,6 @@ std::string ScriptInfo::GetDebugInfo() const
return std::string(sz);
}
/**
* @name ReservedNames
* @brief Checks NamesReserved.dbc for reserved names
*
* @param name Name to check for match in NamesReserved.dbc
* @return true/false
*/
bool ReservedNames(std::wstring& name)
{
for (NamesReservedEntry const* reservedStore : sNamesReservedStore)
{
std::wstring PatternString;
Utf8toWStr(reservedStore->Pattern, PatternString);
boost::algorithm::replace_all(PatternString, "\\<", "");
boost::algorithm::replace_all(PatternString, "\\>", "");
int stringCompare = name.compare(PatternString);
if (stringCompare == 0)
{
return true;
}
}
return false;
};
/**
* @name ProfanityNames
* @brief Checks NamesProfanity.dbc for reserved names
*
* @param name Name to check for match in NamesProfanity.dbc
* @return true/false
*/
bool ProfanityNames(std::wstring& name)
{
for (NamesProfanityEntry const* profanityStore : sNamesProfanityStore)
{
std::wstring PatternString;
Utf8toWStr(profanityStore->Pattern, PatternString);
boost::algorithm::replace_all(PatternString, "\\<", "");
boost::algorithm::replace_all(PatternString, "\\>", "");
int stringCompare = name.compare(PatternString);
if (stringCompare == 0)
{
return true;
}
}
return false;
}
bool normalizePlayerName(std::string& name)
{
if (name.empty())
@@ -8141,7 +8085,7 @@ void ObjectMgr::LoadCreatureQuestEnders()
}
}
void ObjectMgr::LoadReservedPlayersNames()
void ObjectMgr::LoadReservedPlayerNamesDB()
{
uint32 oldMSTime = getMSTime();
@@ -8151,8 +8095,7 @@ void ObjectMgr::LoadReservedPlayersNames()
if (!result)
{
LOG_WARN("server.loading", ">> Loaded 0 reserved player names. DB table `reserved_name` is empty!");
LOG_INFO("server.loading", " ");
LOG_WARN("server.loading", ">> Loaded 0 reserved names. DB table `reserved_name` is empty!");
return;
}
@@ -8177,7 +8120,36 @@ void ObjectMgr::LoadReservedPlayersNames()
++count;
} while (result->NextRow());
LOG_INFO("server.loading", ">> Loaded {} reserved player names in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
LOG_INFO("server.loading", ">> Loaded {} reserved names from DB in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
}
void ObjectMgr::LoadReservedPlayerNamesDBC()
{
if (!sWorld->getBoolConfig(CONFIG_STRICT_NAMES_RESERVED))
{
LOG_WARN("server.loading", ">> Loaded 0 reserved names from DBC. Config option disabled.");
return;
}
uint32 oldMSTime = getMSTime();
uint32 count = 0;
for (NamesReservedEntry const* reservedStore : sNamesReservedStore)
{
std::wstring wstr;
Utf8toWStr(reservedStore->Pattern, wstr);
// DBC does not have clean entries, remove the junk.
boost::algorithm::replace_all(wstr, "\\<", "");
boost::algorithm::replace_all(wstr, "\\>", "");
_reservedNamesStore.insert(wstr);
count++;
}
LOG_INFO("server.loading", ">> Loaded {} reserved names from DBC in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
LOG_INFO("server.loading", " ");
}
@@ -8216,7 +8188,7 @@ void ObjectMgr::AddReservedPlayerName(std::string const& name)
}
}
void ObjectMgr::LoadProfanityPlayersNames()
void ObjectMgr::LoadProfanityNamesFromDB()
{
uint32 oldMSTime = getMSTime();
@@ -8226,8 +8198,7 @@ void ObjectMgr::LoadProfanityPlayersNames()
if (!result)
{
LOG_WARN("server.loading", ">> Loaded 0 profanity player names. DB table `profanity_name` is empty!");
LOG_INFO("server.loading", " ");
LOG_WARN("server.loading", ">> Loaded 0 profanity names. DB table `profanity_name` is empty!");
return;
}
@@ -8252,7 +8223,36 @@ void ObjectMgr::LoadProfanityPlayersNames()
++count;
} while (result->NextRow());
LOG_INFO("server.loading", ">> Loaded {} profanity player names in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
LOG_INFO("server.loading", ">> Loaded {} profanity names from DB in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
}
void ObjectMgr::LoadProfanityNamesFromDBC()
{
if (!sWorld->getBoolConfig(CONFIG_STRICT_NAMES_PROFANITY))
{
LOG_WARN("server.loading", ">> Loaded 0 profanity names from DBC. Config option disabled.");
return;
}
uint32 oldMSTime = getMSTime();
uint32 count = 0;
for (NamesProfanityEntry const* profanityStore : sNamesProfanityStore)
{
std::wstring wstr;
Utf8toWStr(profanityStore->Pattern, wstr);
// DBC does not have clean entries, remove the junk.
boost::algorithm::replace_all(wstr, "\\<", "");
boost::algorithm::replace_all(wstr, "\\>", "");
_profanityNamesStore.insert(wstr);
count++;
}
LOG_INFO("server.loading", ">> Loaded {} profanity names from DBC in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
LOG_INFO("server.loading", " ");
}
@@ -8392,34 +8392,13 @@ uint8 ObjectMgr::CheckPlayerName(std::string_view name, bool create)
if (wname[i] == wname[i - 1] && wname[i] == wname[i - 2])
return CHAR_NAME_THREE_CONSECUTIVE;
// Check Reserved Name from Database
// Check Reserved Name
if (sObjectMgr->IsReservedName(name))
{
return CHAR_NAME_RESERVED;
}
// Check Profanity Name
if (sObjectMgr->IsProfanityName(name))
{
return CHAR_NAME_PROFANE;
}
// Check for Reserved Name from DBC
if (sWorld->getBoolConfig(CONFIG_STRICT_NAMES_RESERVED))
{
if (ReservedNames(wname))
{
return CHAR_NAME_RESERVED;
}
}
// Check for Profanity
if (sWorld->getBoolConfig(CONFIG_STRICT_NAMES_PROFANITY))
{
if (ProfanityNames(wname))
{
return CHAR_NAME_PROFANE;
}
}
return CHAR_NAME_SUCCESS;
}
@@ -8437,23 +8416,13 @@ bool ObjectMgr::IsValidCharterName(std::string_view name)
if (wname.size() < minName)
return false;
// Check for Reserved Name from DBC
if (sWorld->getBoolConfig(CONFIG_STRICT_NAMES_RESERVED))
{
if (ReservedNames(wname))
{
return false;
}
}
// Check Reserved Name
if (sObjectMgr->IsReservedName(name))
return false;
// Check for Profanity
if (sWorld->getBoolConfig(CONFIG_STRICT_NAMES_PROFANITY))
{
if (ProfanityNames(wname))
{
return false;
}
}
// Check Profanity Name
if (sObjectMgr->IsProfanityName(name))
return false;
uint32 strictMask = sWorld->getIntConfig(CONFIG_STRICT_CHARTER_NAMES);
@@ -8491,23 +8460,13 @@ PetNameInvalidReason ObjectMgr::CheckPetName(std::string_view name)
if (!isValidString(wname, strictMask, false))
return PET_NAME_MIXED_LANGUAGES;
// Check for Reserved Name from DBC
if (sWorld->getBoolConfig(CONFIG_STRICT_NAMES_RESERVED))
{
if (ReservedNames(wname))
{
return PET_NAME_RESERVED;
}
}
// Check Reserved Name
if (sObjectMgr->IsReservedName(name))
return PET_NAME_RESERVED;
// Check for Profanity
if (sWorld->getBoolConfig(CONFIG_STRICT_NAMES_PROFANITY))
{
if (ProfanityNames(wname))
{
return PET_NAME_PROFANE;
}
}
// Check Profanity Name
if (sObjectMgr->IsProfanityName(name))
return PET_NAME_PROFANE;
return PET_NAME_SUCCESS;
}
+5 -5
View File
@@ -691,8 +691,6 @@ SkillRangeType GetSkillRangeType(SkillRaceClassInfoEntry const* rcEntry);
#define MAX_CHARTER_NAME 24 // max allowed by client name length
#define MAX_CHANNEL_NAME 50 // pussywizard
bool ReservedNames(std::wstring& name);
bool ProfanityNames(std::wstring& name);
bool normalizePlayerName(std::string& name);
struct LanguageDesc
@@ -1335,12 +1333,14 @@ public:
uint32 AddCreData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0);
// reserved names
void LoadReservedPlayersNames();
void LoadReservedPlayerNamesDB();
void LoadReservedPlayerNamesDBC();
[[nodiscard]] bool IsReservedName(std::string_view name) const;
void AddReservedPlayerName(std::string const& name);
// profanity names
void LoadProfanityPlayersNames();
void LoadProfanityNamesFromDB();
void LoadProfanityNamesFromDBC();
[[nodiscard]] bool IsProfanityName(std::string_view name) const;
void AddProfanityPlayerName(std::string const& name);
@@ -1509,7 +1509,7 @@ private:
//character profanity names
typedef std::set<std::wstring> ProfanityNamesContainer;
ReservedNamesContainer _profanityNamesStore;
ProfanityNamesContainer _profanityNamesStore;
GameTeleContainer _gameTeleStore;
+1 -1
View File
@@ -1187,7 +1187,7 @@ void Guild::OnPlayerStatusChange(Player* player, uint32 flag, bool state)
bool Guild::SetName(std::string_view const& name)
{
if (m_name == name || name.empty() || name.length() > 24 || sObjectMgr->IsReservedName(name) || sObjectMgr->IsProfanityName(name) || !ObjectMgr::IsValidCharterName(name))
if (m_name == name || name.empty() || name.length() > 24 || !ObjectMgr::IsValidCharterName(name))
{
return false;
}
@@ -888,7 +888,7 @@ void WorldSession::HandlePlayerLoginFromDB(LoginQueryHolder const& holder)
if (at)
pCurrChar->TeleportTo(at->target_mapId, at->target_X, at->target_Y, at->target_Z, pCurrChar->GetOrientation());
else
pCurrChar->TeleportTo(pCurrChar->m_homebindMapId, pCurrChar->m_homebindX, pCurrChar->m_homebindY, pCurrChar->m_homebindZ, pCurrChar->m_homebindO);
pCurrChar->TeleportTo(pCurrChar->m_homebindMapId, pCurrChar->m_homebindX, pCurrChar->m_homebindY, pCurrChar->m_homebindZ, pCurrChar->GetOrientation());
}
pCurrChar->SendInitialPacketsAfterAddToMap();
@@ -2322,7 +2322,6 @@ void WorldSession::HandleCharFactionOrRaceChangeCallback(std::shared_ptr<Charact
stmt->SetData(3, loc.GetPositionX());
stmt->SetData(4, loc.GetPositionY());
stmt->SetData(5, loc.GetPositionZ());
stmt->SetData(6, loc.GetOrientation());
trans->Append(stmt);
Player::SavePositionInDB(loc, zoneId, factionChangeInfo->Guid, trans);
+1 -1
View File
@@ -1720,7 +1720,7 @@ void WorldSession::HandleHearthAndResurrect(WorldPacket& /*recv_data*/)
_player->BuildPlayerRepop();
_player->ResurrectPlayer(1.0f);
_player->SpawnCorpseBones();
_player->TeleportTo(_player->m_homebindMapId, _player->m_homebindX, _player->m_homebindY, _player->m_homebindZ, _player->m_homebindO);
_player->TeleportTo(_player->m_homebindMapId, _player->m_homebindX, _player->m_homebindY, _player->m_homebindZ, _player->GetOrientation());
}
void WorldSession::HandleInstanceLockResponse(WorldPacket& recvPacket)
+2 -2
View File
@@ -92,7 +92,7 @@ void WorldSession::HandleMoveWorldportAck()
if (!newMap || newMap->CannotEnter(GetPlayer(), false))
{
LOG_ERROR("network.opcode", "Map {} could not be created for player {}, porting player to homebind", loc.GetMapId(), GetPlayer()->GetGUID().ToString());
GetPlayer()->TeleportTo(GetPlayer()->m_homebindMapId, GetPlayer()->m_homebindX, GetPlayer()->m_homebindY, GetPlayer()->m_homebindZ, GetPlayer()->m_homebindO);
GetPlayer()->TeleportTo(GetPlayer()->m_homebindMapId, GetPlayer()->m_homebindX, GetPlayer()->m_homebindY, GetPlayer()->m_homebindZ, GetPlayer()->GetOrientation());
return;
}
@@ -111,7 +111,7 @@ void WorldSession::HandleMoveWorldportAck()
GetPlayer()->GetName(), GetPlayer()->GetGUID().ToString(), loc.GetMapId());
GetPlayer()->ResetMap();
GetPlayer()->SetMap(oldMap);
GetPlayer()->TeleportTo(GetPlayer()->m_homebindMapId, GetPlayer()->m_homebindX, GetPlayer()->m_homebindY, GetPlayer()->m_homebindZ, GetPlayer()->m_homebindO);
GetPlayer()->TeleportTo(GetPlayer()->m_homebindMapId, GetPlayer()->m_homebindX, GetPlayer()->m_homebindY, GetPlayer()->m_homebindZ, GetPlayer()->GetOrientation());
return;
}
-12
View File
@@ -856,18 +856,6 @@ void WorldSession::HandlePetRename(WorldPacket& recvData)
return;
}
if (sObjectMgr->IsReservedName(name))
{
SendPetNameInvalid(PET_NAME_RESERVED, name, nullptr);
return;
}
if (sObjectMgr->IsProfanityName(name))
{
SendPetNameInvalid(PET_NAME_PROFANE, name, nullptr);
return;
}
pet->SetName(name);
Unit* owner = pet->GetOwner();
@@ -136,7 +136,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData)
return;
}
if (sObjectMgr->IsReservedName(name) || sObjectMgr->IsProfanityName(name) || !ObjectMgr::IsValidCharterName(name))
if (!ObjectMgr::IsValidCharterName(name))
{
Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_INVALID, name);
return;
@@ -149,7 +149,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData)
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ARENA_TEAM_NAME_EXISTS_S);
return;
}
if (sObjectMgr->IsReservedName(name) || sObjectMgr->IsProfanityName(name) || !ObjectMgr::IsValidCharterName(name))
if (!ObjectMgr::IsValidCharterName(name))
{
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ARENA_TEAM_NAME_INVALID);
return;
@@ -350,7 +350,7 @@ void WorldSession::HandlePetitionRenameOpcode(WorldPacket& recvData)
Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_EXISTS_S, newName);
return;
}
if (sObjectMgr->IsReservedName(newName) || sObjectMgr->IsProfanityName(newName) || !ObjectMgr::IsValidCharterName(newName))
if (!ObjectMgr::IsValidCharterName(newName))
{
Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_INVALID, newName);
return;
@@ -363,7 +363,7 @@ void WorldSession::HandlePetitionRenameOpcode(WorldPacket& recvData)
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newName, "", ERR_ARENA_TEAM_NAME_EXISTS_S);
return;
}
if (sObjectMgr->IsReservedName(newName) || sObjectMgr->IsProfanityName(newName) || !ObjectMgr::IsValidCharterName(newName))
if (!ObjectMgr::IsValidCharterName(newName))
{
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newName, "", ERR_ARENA_TEAM_NAME_INVALID);
return;
+1 -1
View File
@@ -1266,7 +1266,7 @@ void Map::RemoveAllPlayers()
{
// this is happening for bg
LOG_ERROR("maps", "Map::UnloadAll: player {} is still in map {} during unload, this should not happen!", player->GetName(), GetId());
player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, player->m_homebindO);
player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, player->GetOrientation());
}
}
}
+4 -3
View File
@@ -655,12 +655,12 @@ enum AcoreStrings
LANG_GMLIST_HEADER = 598,
LANG_GMLIST_EMPTY = 599,
// End Level 3 list, continued at 1100
LANG_EVENT_STARTED = 600,
LANG_EVENT_STOPPED = 601,
// 602-704 - free
LANG_REWARDED = 602,
// 603-704 - free
LANG_WAIT_BEFORE_SPEAKING = 705,
LANG_NOT_EQUIPPED_ITEM = 706,
@@ -844,6 +844,7 @@ enum AcoreStrings
LANG_ACCESS_REQUIREMENT_LEADER_COMPLETE_QUESTS = 889,
LANG_ACCESS_REQUIREMENT_LEADER_COMPLETE_ACHIEVEMENTS = 890,
LANG_ACCESS_REQUIREMENT_LEADER_OBTAIN_ITEMS = 891,
// End Level 3 list, continued at 1100
// Level 4 (CLI only commands)
LANG_COMMAND_EXIT = 1000,
+1 -1
View File
@@ -17,8 +17,8 @@
#include "ScriptMgr.h"
#include "AllScriptsObjects.h"
#include "LFGScripts.h"
#include "InstanceScript.h"
#include "LFGScripts.h"
#include "ScriptObject.h"
#include "ScriptSystem.h"
#include "SmartAI.h"
+1 -1
View File
@@ -30,8 +30,8 @@
#include "ScriptMgr.h"
#include "World.h"
#include "WorldSession.h"
#include <memory>
#include "zlib.h"
#include <memory>
using boost::asio::ip::tcp;
+3 -1
View File
@@ -1349,7 +1349,7 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici
break;
case TARGET_DEST_HOME:
if (Player* playerCaster = m_caster->ToPlayer())
dest = SpellDestination(playerCaster->m_homebindX, playerCaster->m_homebindY, playerCaster->m_homebindZ, playerCaster->m_homebindO, playerCaster->m_homebindMapId);
dest = SpellDestination(playerCaster->m_homebindX, playerCaster->m_homebindY, playerCaster->m_homebindZ, playerCaster->GetOrientation(), playerCaster->m_homebindMapId);
break;
case TARGET_DEST_DB:
if (SpellTargetPosition const* st = sSpellMgr->GetSpellTargetPosition(m_spellInfo->Id, effIndex))
@@ -3181,6 +3181,8 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
if (diminishMod == 0.0f)
{
m_spellAura->Remove();
if (m_diminishGroup == DIMINISHING_TAUNT)
return SPELL_MISS_IMMUNE;
bool found = false;
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
if (effectMask & (1 << i) && m_spellInfo->Effects[i].Effect != SPELL_EFFECT_APPLY_AURA)
@@ -384,12 +384,9 @@ void SpellMgr::LoadSpellInfoCorrections()
27892, // To Anchor 1
27928, // To Anchor 1
27935, // To Anchor 1
27915, // Anchor to Skulls
27931, // Anchor to Skulls
27937 // Anchor to Skulls
}, [](SpellInfo* spellInfo)
}, [](SpellInfo* spellInfo)
{
spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13);
spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS);
});
// Wrath of the Plaguebringer
+4 -2
View File
@@ -1917,10 +1917,12 @@ void World::SetInitialWorldSettings()
sGroupMgr->LoadGroups();
LOG_INFO("server.loading", "Loading Reserved Names...");
sObjectMgr->LoadReservedPlayersNames();
sObjectMgr->LoadReservedPlayerNamesDB();
sObjectMgr->LoadReservedPlayerNamesDBC(); // Needs to be after LoadReservedPlayerNamesDB()
LOG_INFO("server.loading", "Loading Profanity Names...");
sObjectMgr->LoadProfanityPlayersNames();
sObjectMgr->LoadProfanityNamesFromDB();
sObjectMgr->LoadProfanityNamesFromDBC(); // Needs to be after LoadProfanityNamesFromDB()
LOG_INFO("server.loading", "Loading GameObjects for Quests...");
sObjectMgr->LoadGameObjectForQuests();
+14 -13
View File
@@ -347,21 +347,22 @@ public:
return false;
}
if (ObjectMgr::CheckPlayerName(newName, true) != CHAR_NAME_SUCCESS)
ResponseCodes res = ResponseCodes(ObjectMgr::CheckPlayerName(newName, true));
if (res != CHAR_NAME_SUCCESS)
{
handler->SendErrorMessage(LANG_BAD_VALUE);
return false;
}
switch (res)
{
case CHAR_NAME_RESERVED:
handler->SendErrorMessage(LANG_RESERVED_NAME);
break;
case CHAR_NAME_PROFANE:
handler->SendErrorMessage(LANG_PROFANITY_NAME);
break;
default:
handler->SendErrorMessage(LANG_BAD_VALUE);
break;
}
if (sObjectMgr->IsReservedName(newName))
{
handler->SendErrorMessage(LANG_RESERVED_NAME);
return false;
}
if (sObjectMgr->IsProfanityName(newName))
{
handler->SendErrorMessage(LANG_PROFANITY_NAME);
return false;
}
+1 -1
View File
@@ -85,7 +85,7 @@ public:
return false;
}
if (sObjectMgr->IsReservedName(guildName) || sObjectMgr->IsProfanityName(guildName) || !sObjectMgr->IsValidCharterName(guildName))
if (!sObjectMgr->IsValidCharterName(guildName))
{
handler->SendErrorMessage(LANG_BAD_VALUE);
return false;
+7 -7
View File
@@ -31,9 +31,9 @@ EndScriptData */
#include "ObjectMgr.h"
#include "Player.h"
#include "ReputationMgr.h"
#include "SharedDefines.h"
#include "SpellInfo.h"
#include "SpellMgr.h"
#include "SharedDefines.h"
using namespace Acore::ChatCommands;
@@ -812,13 +812,13 @@ public:
switch (status)
{
case QUEST_STATUS_COMPLETE:
statusStr = handler->GetAcoreString(LANG_COMMAND_QUEST_COMPLETE);
statusStr = handler->GetAcoreString(LANG_COMPLETE);
break;
case QUEST_STATUS_INCOMPLETE:
statusStr = handler->GetAcoreString(LANG_COMMAND_QUEST_ACTIVE);
statusStr = handler->GetAcoreString(LANG_ACTIVE);
break;
case QUEST_STATUS_REWARDED:
statusStr = handler->GetAcoreString(LANG_COMMAND_QUEST_REWARDED);
statusStr = handler->GetAcoreString(LANG_REWARDED);
break;
default:
break;
@@ -868,13 +868,13 @@ public:
switch (status)
{
case QUEST_STATUS_COMPLETE:
statusStr = handler->GetAcoreString(LANG_COMMAND_QUEST_COMPLETE);
statusStr = handler->GetAcoreString(LANG_COMPLETE);
break;
case QUEST_STATUS_INCOMPLETE:
statusStr = handler->GetAcoreString(LANG_COMMAND_QUEST_ACTIVE);
statusStr = handler->GetAcoreString(LANG_ACTIVE);
break;
case QUEST_STATUS_REWARDED:
statusStr = handler->GetAcoreString(LANG_COMMAND_QUEST_REWARDED);
statusStr = handler->GetAcoreString(LANG_REWARDED);
break;
default:
break;
+1 -1
View File
@@ -1428,7 +1428,7 @@ public:
if (location->empty() || *location == "inn")
{
player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, player->m_homebindO);
player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, player->GetOrientation());
return true;
}
+5 -4
View File
@@ -687,10 +687,11 @@ public:
ObjectGuid::LowType guid = fields[0].Get<uint32>();
uint32 entry = fields[1].Get<uint32>();
//uint32 entry2 = fields[2].Get<uint32>();
float x = fields[3].Get<float>();
float y = fields[4].Get<float>();
float z = fields[5].Get<float>();
uint16 mapId = fields[6].Get<uint16>();
//uint32 entry3 = fields[3].Get<uint32>();
float x = fields[4].Get<float>();
float y = fields[5].Get<float>();
float z = fields[6].Get<float>();
uint16 mapId = fields[7].Get<uint16>();
CreatureTemplate const* creatureTemplate = sObjectMgr->GetCreatureTemplate(entry);
if (!creatureTemplate)
+8 -6
View File
@@ -780,17 +780,19 @@ public:
static bool HandleReloadReservedNameCommand(ChatHandler* handler)
{
LOG_INFO("server.loading", "Re-Loading `reserved_player` Table!");
sObjectMgr->LoadReservedPlayersNames();
handler->SendGlobalGMSysMessage("DB table `reserved_name` reloaded.");
LOG_INFO("server.loading", "Re-Loading Reserved Names!");
sObjectMgr->LoadReservedPlayerNamesDB();
sObjectMgr->LoadReservedPlayerNamesDBC(); // Needed because we clear the store in LoadReservedPlayerNamesDB()
handler->SendGlobalGMSysMessage("Reserved Names reloaded.");
return true;
}
static bool HandleReloadProfanityNameCommand(ChatHandler* handler)
{
LOG_INFO("server.loading", "Re-Loading `profanity_player` Table!");
sObjectMgr->LoadProfanityPlayersNames();
handler->SendGlobalGMSysMessage("DB table `profanity_player` reloaded.");
LOG_INFO("server.loading", "Re-Loading Profanity Names!");
sObjectMgr->LoadProfanityNamesFromDB();
sObjectMgr->LoadProfanityNamesFromDBC(); // Needed because we clear the store in LoadProfanityNamesFromDB()
handler->SendGlobalGMSysMessage("Profanity Names reloaded.");
return true;
}
+1 -1
View File
@@ -176,7 +176,7 @@ public:
if (where.index() == 1) // References target's homebind
{
if (Player* target = player->GetConnectedPlayer())
target->TeleportTo(target->m_homebindMapId, target->m_homebindX, target->m_homebindY, target->m_homebindZ, target->m_homebindO);
target->TeleportTo(target->m_homebindMapId, target->m_homebindX, target->m_homebindY, target->m_homebindZ, target->GetOrientation());
else
{
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_HOMEBIND);
@@ -15,12 +15,12 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "molten_core.h"
#include "CreatureScript.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "TaskScheduler.h"
#include "molten_core.h"
enum Texts
{
@@ -17,10 +17,10 @@
#include "CreatureScript.h"
#include "GameObjectScript.h"
#include "PassiveAI.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "TaskScheduler.h"
#include "PassiveAI.h"
#include "karazhan.h"
enum Spells
@@ -15,6 +15,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "karazhan.h"
#include "AreaTriggerScript.h"
#include "CreatureScript.h"
#include "Player.h"
@@ -25,7 +26,6 @@
#include "SpellAuras.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "karazhan.h"
/* ScriptData
SDName: Karazhan
SD%Complete: 100
@@ -16,6 +16,7 @@
*/
#include "CreatureScript.h"
#include "GridNotifiersImpl.h"
#include "Group.h"
#include "LFGMgr.h"
#include "Player.h"
@@ -26,7 +27,6 @@
#include "SpellScriptLoader.h"
#include "TaskScheduler.h"
#include "shadowfang_keep.h"
#include "GridNotifiersImpl.h"
enum ApothecarySpells
{
@@ -37,49 +37,38 @@ enum DeathlyUsher
SPELL_TELEPORT_GROUP = 27686
};
class spell_razelikh_teleport_group : public SpellScriptLoader
class spell_razelikh_teleport_group : public SpellScript
{
public:
spell_razelikh_teleport_group() : SpellScriptLoader("spell_razelikh_teleport_group") { }
PrepareSpellScript(spell_razelikh_teleport_group);
class spell_razelikh_teleport_group_SpellScript : public SpellScript
bool Validate(SpellInfo const* /*spell*/) override
{
PrepareSpellScript(spell_razelikh_teleport_group_SpellScript);
return ValidateSpellInfo({ SPELL_TELEPORT_SINGLE, SPELL_TELEPORT_SINGLE_IN_GROUP });
}
bool Validate(SpellInfo const* /*spell*/) override
void HandleScriptEffect(SpellEffIndex /* effIndex */)
{
if (Player* player = GetHitPlayer())
{
return ValidateSpellInfo({ SPELL_TELEPORT_SINGLE, SPELL_TELEPORT_SINGLE_IN_GROUP });
}
void HandleScriptEffect(SpellEffIndex /* effIndex */)
{
if (Player* player = GetHitPlayer())
if (Group* group = player->GetGroup())
{
if (Group* group = player->GetGroup())
{
for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
if (Player* member = itr->GetSource())
if (member->IsWithinDistInMap(player, 20.0f) && !member->isDead())
member->CastSpell(member, SPELL_TELEPORT_SINGLE_IN_GROUP, true);
}
else
player->CastSpell(player, SPELL_TELEPORT_SINGLE, true);
for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
if (Player* member = itr->GetSource())
if (member->IsWithinDistInMap(player, 20.0f) && !member->isDead())
member->CastSpell(member, SPELL_TELEPORT_SINGLE_IN_GROUP, true);
}
else
player->CastSpell(player, SPELL_TELEPORT_SINGLE, true);
}
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_razelikh_teleport_group_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const override
void Register() override
{
return new spell_razelikh_teleport_group_SpellScript();
OnEffectHitTarget += SpellEffectFn(spell_razelikh_teleport_group::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
void AddSC_blasted_lands()
{
new spell_razelikh_teleport_group();
RegisterSpellScript(spell_razelikh_teleport_group);
}
@@ -457,31 +457,20 @@ enum PurificationIds
NPC_AURIC = 37765,
};
class spell_bh_cleanse_quel_delar : public SpellScriptLoader
class spell_bh_cleanse_quel_delar : public SpellScript
{
public:
spell_bh_cleanse_quel_delar() : SpellScriptLoader("spell_bh_cleanse_quel_delar") { }
PrepareSpellScript(spell_bh_cleanse_quel_delar);
class spell_bh_cleanse_quel_delar_SpellScript : public SpellScript
void OnEffect(SpellEffIndex /*effIndex*/)
{
PrepareSpellScript(spell_bh_cleanse_quel_delar_SpellScript);
if (Unit* caster = GetCaster())
if (Creature* c = caster->FindNearestCreature(NPC_ROMMATH, 50.0f, true))
c->AI()->DoAction(-1);
}
void OnEffect(SpellEffIndex /*effIndex*/)
{
if (Unit* caster = GetCaster())
if (Creature* c = caster->FindNearestCreature(NPC_ROMMATH, 50.0f, true))
c->AI()->DoAction(-1);
}
void Register() override
{
OnEffectLaunch += SpellEffectFn(spell_bh_cleanse_quel_delar_SpellScript::OnEffect, EFFECT_0, SPELL_EFFECT_SEND_EVENT);
}
};
SpellScript* GetSpellScript() const override
void Register() override
{
return new spell_bh_cleanse_quel_delar_SpellScript();
OnEffectLaunch += SpellEffectFn(spell_bh_cleanse_quel_delar::OnEffect, EFFECT_0, SPELL_EFFECT_SEND_EVENT);
}
};
@@ -692,7 +681,7 @@ void AddSC_isle_of_queldanas()
{
// OUR:
new npc_bh_thalorien_dawnseeker();
new spell_bh_cleanse_quel_delar();
RegisterSpellScript(spell_bh_cleanse_quel_delar);
new npc_grand_magister_rommath();
// THEIR:
@@ -2223,36 +2223,25 @@ public:
######*/
// - 61123 - Ingest
class spell_blight_worm_ingest : public SpellScriptLoader
class spell_blight_worm_ingest : public SpellScript
{
public:
spell_blight_worm_ingest() : SpellScriptLoader("spell_blight_worm_ingest") { }
PrepareSpellScript(spell_blight_worm_ingest);
class spell_blight_worm_ingest_SpellScript : public SpellScript
bool Validate(SpellInfo const* /*spellInfo*/) override
{
PrepareSpellScript(spell_blight_worm_ingest_SpellScript);
return ValidateSpellInfo({ SPELL_INGEST });
}
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_INGEST });
}
void HandleScript(SpellEffIndex /*effIndex*/)
{
if (Unit* target = GetHitUnit())
if (Unit* caster = GetCaster())
target->CastSpell(caster, SPELL_INGEST_TRIGGER, true);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_blight_worm_ingest_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const override
void HandleScript(SpellEffIndex /*effIndex*/)
{
return new spell_blight_worm_ingest_SpellScript();
if (Unit* target = GetHitUnit())
if (Unit* caster = GetCaster())
target->CastSpell(caster, SPELL_INGEST_TRIGGER, true);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_blight_worm_ingest::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
@@ -4082,5 +4071,5 @@ void AddSC_undercity()
new npc_jaina_proudmoore_bfu();
new npc_lady_sylvanas_windrunner_bfu();
new boss_blight_worm();
new spell_blight_worm_ingest();
RegisterSpellScript(spell_blight_worm_ingest);
}
@@ -15,13 +15,13 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "hyjal.h"
#include "CreatureScript.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "hyjal.h"
enum Spells
{
@@ -405,7 +405,22 @@ public:
}
if (_bossWave != TO_BE_DECIDED)
{
DoUpdateWorldState(WORLD_STATE_WAVES, 0);
scheduler.Schedule(30s, [this](TaskContext context)
{
if (IsEncounterInProgress())
{
// Reset the instance if its empty.
// This is necessary because bosses get stuck fighting unreachable mobs.
// Remove this when we are sure pathing no longer causes this.
if (!instance->GetPlayersCountExceptGMs())
SetData(DATA_RESET_ALLIANCE, 0);
else
context.Repeat();
}
});
}
break;
case DATA_SPAWN_INFERNALS:
@@ -479,8 +494,6 @@ public:
break;
}
// LOG_DEBUG("scripts", "Instance Hyjal: Instance data updated for event {} (Data={})", type, data);
if (data == DONE)
{
SaveToDB();
@@ -15,12 +15,12 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "the_black_morass.h"
#include "CreatureScript.h"
#include "MoveSplineInit.h"
#include "ScriptedCreature.h"
#include "SmartAI.h"
#include "SpellScriptLoader.h"
#include "the_black_morass.h"
enum medivhMisc
{
@@ -15,11 +15,11 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ruins_of_ahnqiraj.h"
#include "CreatureScript.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "ruins_of_ahnqiraj.h"
enum Spells
{
@@ -15,6 +15,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "temple_of_ahnqiraj.h"
#include "AreaTriggerScript.h"
#include "CreatureScript.h"
#include "MapReference.h"
@@ -22,7 +23,6 @@
#include "ScriptedCreature.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "temple_of_ahnqiraj.h"
enum Spells
{
@@ -17,12 +17,12 @@
#include "CreatureScript.h"
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
#include "InstanceMapScript.h"
#include "InstanceScript.h"
#include "SpellScriptLoader.h"
#include "TemporarySummon.h"
#include "zulfarrak.h"
#include "GridNotifiersImpl.h"
enum Misc
{
@@ -15,13 +15,13 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "forge_of_souls.h"
#include "CreatureScript.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "forge_of_souls.h"
enum Yells
{
@@ -15,11 +15,11 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "halls_of_reflection.h"
#include "AreaTriggerScript.h"
#include "CreatureScript.h"
#include "MotionMaster.h"
#include "SpellScriptLoader.h"
#include "halls_of_reflection.h"
enum Events
{
@@ -15,6 +15,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "pit_of_saron.h"
#include "AreaTriggerScript.h"
#include "CreatureGroups.h"
#include "CreatureScript.h"
@@ -26,7 +27,6 @@
#include "SpellAuraEffects.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "pit_of_saron.h"
class npc_pos_leader : public CreatureScript
{
@@ -16,6 +16,7 @@
*/
#include "AchievementCriteriaScript.h"
#include "Config.h"
#include "CreatureScript.h"
#include "CreatureTextMgr.h"
#include "GameTime.h"
@@ -585,7 +586,7 @@ public:
_instance->SetBossState(DATA_ICECROWN_GUNSHIP_BATTLE, isVictory ? DONE : FAIL);
me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, 0);
if (Creature* creature = me->FindNearestCreature(me->GetEntry() == NPC_ORGRIMS_HAMMER ? NPC_THE_SKYBREAKER : NPC_ORGRIMS_HAMMER, 200.0f))
if (Creature* creature = _instance->GetCreature(me->GetEntry() == NPC_ORGRIMS_HAMMER ? DATA_THE_SKYBREAKER : DATA_ORGRIMS_HAMMER))
{
_instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, creature);
if (Aura* a = creature->GetAura(SPELL_CHECK_FOR_PLAYERS))
@@ -646,7 +647,7 @@ public:
me->GetTransport()->ToMotionTransport()->EnableMovement(true);
if (Creature* ship = me->FindNearestCreature(_teamIdInInstance == TEAM_HORDE ? NPC_ORGRIMS_HAMMER : NPC_THE_SKYBREAKER, 200.0f))
if (Creature* ship = _instance->GetCreature(_teamIdInInstance == TEAM_HORDE ? DATA_ORGRIMS_HAMMER : DATA_THE_SKYBREAKER))
{
ship->CastSpell(ship, SPELL_TELEPORT_PLAYERS_ON_VICTORY, true);
ship->CastSpell(ship, SPELL_ACHIEVEMENT, true);
@@ -675,6 +676,30 @@ public:
}
}
void UpdateAI(uint32 /*diff*/) override
{
if (!sConfigMgr->GetOption<int32>("WipeGunshipBlizzlike.Enable", 1))
return;
if (_instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != IN_PROGRESS)
return;
bool playerOnDeck = false;
me->GetMap()->DoForAllPlayers([&](Player* player)
{
if (!player->GetVehicle() && player->IsAlive())
playerOnDeck = true;
});
// Wipe if no player is on the deck
if (!playerOnDeck)
{
// Script runs on enemy ship. We want to kill our ship.
if (Creature* ship = _instance->GetCreature(_teamIdInInstance == TEAM_HORDE ? DATA_ORGRIMS_HAMMER : DATA_THE_SKYBREAKER))
Creature::Kill(me, ship);
}
}
void SetGUID(ObjectGuid guid, int32 id/* = 0*/) override
{
if (id != ACTION_SHIP_VISITS_ENEMY && id != ACTION_SHIP_VISITS_SELF)
@@ -807,9 +832,9 @@ public:
_events.ScheduleEvent(EVENT_INTRO_H_6, 11s);
_events.ScheduleEvent(EVENT_KEEP_PLAYER_IN_COMBAT, 1ms);
if (Creature* skybreaker = me->FindNearestCreature(NPC_THE_SKYBREAKER, 200.0f))
if (Creature* skybreaker = _instance->GetCreature(DATA_THE_SKYBREAKER))
_instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, skybreaker, 1);
if (Creature* orgrimsHammer = me->FindNearestCreature(NPC_ORGRIMS_HAMMER, 200.0f))
if (Creature* orgrimsHammer = _instance->GetCreature(DATA_ORGRIMS_HAMMER))
{
_instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, orgrimsHammer, 2);
orgrimsHammer->CastSpell(orgrimsHammer, SPELL_CHECK_FOR_PLAYERS, true);
@@ -1143,9 +1168,9 @@ public:
_events.ScheduleEvent(EVENT_INTRO_A_7, 11s);
_events.ScheduleEvent(EVENT_KEEP_PLAYER_IN_COMBAT, 1ms);
if (Creature* orgrimsHammer = me->FindNearestCreature(NPC_ORGRIMS_HAMMER, 200.0f))
if (Creature* orgrimsHammer = _instance->GetCreature(DATA_ORGRIMS_HAMMER))
_instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, orgrimsHammer, 1);
if (Creature* skybreaker = me->FindNearestCreature(NPC_THE_SKYBREAKER, 200.0f))
if (Creature* skybreaker = _instance->GetCreature(DATA_THE_SKYBREAKER))
{
_instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, skybreaker, 2);
skybreaker->CastSpell(skybreaker, SPELL_CHECK_FOR_PLAYERS, true);
@@ -20,12 +20,12 @@
#include "CellImpl.h"
#include "CreatureScript.h"
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
#include "ObjectMgr.h"
#include "ScriptedCreature.h"
#include "SpellAuraEffects.h"
#include "SpellScriptLoader.h"
#include "icecrown_citadel.h"
#include "GridNotifiersImpl.h"
enum Texts
{
@@ -15,12 +15,14 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "icecrown_citadel.h"
#include "AccountMgr.h"
#include "AreaTriggerScript.h"
#include "Cell.h"
#include "CellImpl.h"
#include "CreatureScript.h"
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
#include "Group.h"
#include "ObjectMgr.h"
#include "PassiveAI.h"
@@ -29,8 +31,6 @@
#include "SmartAI.h"
#include "SpellAuraEffects.h"
#include "SpellScriptLoader.h"
#include "icecrown_citadel.h"
#include "GridNotifiersImpl.h"
enum Texts
{
@@ -137,6 +137,8 @@ enum DataTypes
DATA_ARTHAS_PLATFORM = 38,
DATA_TERENAS_MENETHIL = 39,
DATA_ENEMY_GUNSHIP = 40,
DATA_THE_SKYBREAKER = 41,
DATA_ORGRIMS_HAMMER = 42,
// pussywizard:
DATA_BUFF_AVAILABLE = 251,
@@ -123,8 +123,10 @@ DoorData const doorData[] =
ObjectData const creatureData[] =
{
{ NPC_SINDRAGOSA, DATA_SINDRAGOSA },
{ 0, 0 }
{ NPC_SINDRAGOSA, DATA_SINDRAGOSA },
{ NPC_THE_SKYBREAKER, DATA_THE_SKYBREAKER },
{ NPC_ORGRIMS_HAMMER, DATA_ORGRIMS_HAMMER },
{ 0, 0 }
};
// this doesnt have to only store questgivers, also can be used for related quest spawns
@@ -30,6 +30,7 @@ void AddSC_boss_gothik()
{
new boss_gothik();
new npc_boss_gothik_minion();
new npc_gothik_trigger();
RegisterSpellScript(spell_gothik_shadow_bolt_volley);
}
@@ -34,15 +34,15 @@ enum Spells
SPELL_TELEPORT_DEAD = 28025,
SPELL_TELEPORT_LIVE = 28026,
// Visual spells
SPELL_INFORM_LIVING_TRAINEE = 27892,
SPELL_INFORM_LIVING_KNIGHT = 27928,
SPELL_INFORM_LIVING_RIDER = 27935,
SPELL_INFORM_DEAD_TRAINEE = 27915,
SPELL_INFORM_DEAD_KNIGHT = 27931,
SPELL_INFORM_DEAD_RIDER = 27937,
/*SPELL_ANCHOR_2_TRAINEE = 27893,
SPELL_ANCHOR_1_TRAINEE = 27892,
SPELL_ANCHOR_1_DK = 27928,
SPELL_ANCHOR_1_RIDER = 27935,
SPELL_ANCHOR_2_TRAINEE = 27893,
SPELL_ANCHOR_2_DK = 27929,
SPELL_ANCHOR_2_RIDER = 27936, fix me */
SPELL_ANCHOR_2_RIDER = 27936,
SPELL_SKULLS_TRAINEE = 27915,
SPELL_SKULLS_DK = 27931,
SPELL_SKULLS_RIDER = 27937,
// Living trainee
SPELL_DEATH_PLAGUE = 55604,
// Dead trainee
@@ -69,7 +69,7 @@ enum Misc
NPC_DEAD_KNIGHT = 16148,
NPC_DEAD_HORSE = 16149,
NPC_DEAD_RIDER = 16150,
//NPC_TRIGGER = 16137, fix me
NPC_TRIGGER = 16137
};
enum Events
@@ -264,31 +264,41 @@ public:
void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, 200.0f))
// If central gate is open, attack any one
if (gateOpened)
{
if (gateOpened)
if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, 200.0f))
{
summon->AI()->AttackStart(target);
summon->CallForHelp(40.0f);
summon->SetInCombatWithZone();
summon->SetReactState(REACT_AGGRESSIVE);
summon->CallForHelp(150.0f);
}
else
}
// Else look for a random target on the side the summoned NPC is
else
{
Map::PlayerList const& pList = me->GetMap()->GetPlayers();
std::vector<Player*> tList;
for(Map::PlayerList::const_iterator itr = pList.begin(); itr != pList.end(); ++itr)
{
if (summon->GetEntry() == NPC_LIVING_TRAINEE ||
summon->GetEntry() == NPC_LIVING_KNIGHT ||
summon->GetEntry() == NPC_LIVING_RIDER )
if (!me->IsWithinDistInMap(itr->GetSource(), 200.0f, true, false) || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster())
{
if (IN_LIVE_SIDE(target))
{
summon->AI()->AttackStart(target);
}
continue;
}
else
if (IN_LIVE_SIDE(itr->GetSource()) != IN_LIVE_SIDE(summon))
{
if (!IN_LIVE_SIDE(target))
{
summon->AI()->AttackStart(target);
}
continue;
}
tList.push_back(itr->GetSource());
}
if (!tList.empty())
{
Player* target = tList[urand(0, tList.size() - 1)];
summon->AI()->AttackStart(target);
summon->SetInCombatWithZone();
summon->SetReactState(REACT_AGGRESSIVE);
summon->CallForHelp(150.0f);
}
}
}
@@ -391,25 +401,6 @@ public:
return false;
}
void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override
{
uint8 pos = urand(0, 4);
switch (spellInfo->Id)
{
case SPELL_INFORM_LIVING_TRAINEE:
me->SummonCreature(NPC_DEAD_TRAINEE, PosSummonDead[pos].GetPositionX(), PosSummonDead[pos].GetPositionY(), PosSummonDead[pos].GetPositionZ(), PosSummonDead[pos].GetOrientation());
break;
case SPELL_INFORM_LIVING_KNIGHT:
me->SummonCreature(NPC_DEAD_KNIGHT, PosSummonDead[pos].GetPositionX(), PosSummonDead[pos].GetPositionY(), PosSummonDead[pos].GetPositionZ(), PosSummonDead[pos].GetOrientation());
break;
case SPELL_INFORM_LIVING_RIDER:
me->SummonCreature(NPC_DEAD_RIDER, PosSummonDead[pos].GetPositionX(), PosSummonDead[pos].GetPositionY(), PosSummonDead[pos].GetPositionZ(), PosSummonDead[pos].GetOrientation());
me->SummonCreature(NPC_DEAD_HORSE, PosSummonDead[pos].GetPositionX(), PosSummonDead[pos].GetPositionY(), PosSummonDead[pos].GetPositionZ(), PosSummonDead[pos].GetOrientation());
break;
}
me->HandleEmoteCommand(EMOTE_ONESHOT_SPELL_CAST);
}
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
{
if (!secondPhase)
@@ -580,13 +571,13 @@ public:
switch (me->GetEntry())
{
case NPC_LIVING_TRAINEE:
me->CastSpell(me, SPELL_INFORM_LIVING_TRAINEE, true);
DoCastAOE(SPELL_ANCHOR_1_TRAINEE, true);
break;
case NPC_LIVING_KNIGHT:
me->CastSpell(me, SPELL_INFORM_LIVING_KNIGHT, true);
DoCastAOE(SPELL_ANCHOR_1_DK, true);
break;
case NPC_LIVING_RIDER:
me->CastSpell(me, SPELL_INFORM_LIVING_RIDER, true);
DoCastAOE(SPELL_ANCHOR_1_RIDER, true);
break;
}
}
@@ -675,6 +666,109 @@ public:
};
};
class npc_gothik_trigger : public CreatureScript
{
public:
npc_gothik_trigger() : CreatureScript("npc_gothik_trigger") { }
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_gothik_triggerAI(creature);
}
struct npc_gothik_triggerAI : public ScriptedAI
{
npc_gothik_triggerAI(Creature* creature) : ScriptedAI(creature) { creature->SetDisableGravity(true); }
void EnterEvadeMode(EvadeReason /*why*/) override {}
void UpdateAI(uint32 /*diff*/) override {}
void JustEngagedWith(Unit* /*who*/) override {}
void DamageTaken(Unit* /*who*/, uint32& damage, DamageEffectType /*damagetype*/, SpellSchoolMask /*damageSchoolMask*/) override { damage = 0; }
Creature* SelectRandomSkullPile()
{
std::list<Creature*> triggers;
me->GetCreatureListWithEntryInGrid(triggers, NPC_TRIGGER, 150.0f);
// Remove triggers that are on live side or soul triggers on the platform
triggers.remove_if([](Creature* trigger){
return ((trigger->GetPositionY() < POS_Y_GATE) || (trigger->GetPositionZ() > 280.0f));
});
if (!triggers.empty())
{
std::list<Creature*>::iterator itr = triggers.begin();
std::advance(itr, urand(0, triggers.size() - 1));
return *itr;
}
return nullptr;
}
void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (!spell)
{
return;
}
switch (spell->Id)
{
case SPELL_ANCHOR_1_TRAINEE:
DoCastAOE(SPELL_ANCHOR_2_TRAINEE, true);
break;
case SPELL_ANCHOR_1_DK:
DoCastAOE(SPELL_ANCHOR_2_DK, true);
break;
case SPELL_ANCHOR_1_RIDER:
DoCastAOE(SPELL_ANCHOR_2_RIDER, true);
break;
case SPELL_ANCHOR_2_TRAINEE:
if (Creature* target = SelectRandomSkullPile())
{
DoCast(target, SPELL_SKULLS_TRAINEE, true);
}
break;
case SPELL_ANCHOR_2_DK:
if (Creature* target = SelectRandomSkullPile())
{
DoCast(target, SPELL_SKULLS_DK, true);
}
break;
case SPELL_ANCHOR_2_RIDER:
if (Creature* target = SelectRandomSkullPile())
{
DoCast(target, SPELL_SKULLS_RIDER, true);
}
break;
case SPELL_SKULLS_TRAINEE:
DoSummon(NPC_DEAD_TRAINEE, me, 0.0f, 15 * IN_MILLISECONDS, TEMPSUMMON_CORPSE_TIMED_DESPAWN);
break;
case SPELL_SKULLS_DK:
DoSummon(NPC_DEAD_KNIGHT, me, 0.0f, 15 * IN_MILLISECONDS, TEMPSUMMON_CORPSE_TIMED_DESPAWN);
break;
case SPELL_SKULLS_RIDER:
DoSummon(NPC_DEAD_RIDER, me, 0.0f, 15 * IN_MILLISECONDS, TEMPSUMMON_CORPSE_TIMED_DESPAWN);
DoSummon(NPC_DEAD_HORSE, me, 0.0f, 15 * IN_MILLISECONDS, TEMPSUMMON_CORPSE_TIMED_DESPAWN);
break;
}
}
// dead side summons are "owned" by gothik
void JustSummoned(Creature* summon) override
{
if (Creature* gothik = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(DATA_GOTHIK_BOSS)))
{
gothik->AI()->JustSummoned(summon);
}
}
void SummonedCreatureDespawn(Creature* summon) override
{
if (Creature* gothik = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(DATA_GOTHIK_BOSS)))
{
gothik->AI()->SummonedCreatureDespawn(summon);
}
}
};
};
class spell_gothik_shadow_bolt_volley : public SpellScript
{
PrepareSpellScript(spell_gothik_shadow_bolt_volley);
@@ -17,8 +17,8 @@
#include "boss_maexxna.h"
#include "CreatureScript.h"
#include "Player.h"
#include "PassiveAI.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "SpellAuraEffects.h"
#include "SpellScript.h"
@@ -137,6 +137,7 @@ public:
GuidList PatchwerkRoomTrash;
ObjectGuid _patchwerkGUID;
ObjectGuid _thaddiusGUID;
ObjectGuid _gothikGUID;
ObjectGuid _stalaggGUID;
ObjectGuid _feugenGUID;
ObjectGuid _zeliekGUID;
@@ -227,6 +228,9 @@ public:
case NPC_FEUGEN:
_feugenGUID = creature->GetGUID();
return;
case NPC_GOTHIK:
_gothikGUID = creature->GetGUID();
return;
case NPC_LADY_BLAUMEUX:
_blaumeuxGUID = creature->GetGUID();
return;
@@ -1092,6 +1096,8 @@ public:
return _stalaggGUID;
case DATA_FEUGEN_BOSS:
return _feugenGUID;
case DATA_GOTHIK_BOSS:
return _gothikGUID;
case DATA_LICH_KING_BOSS:
return _lichkingGUID;
default:
@@ -58,25 +58,26 @@ enum NXData
DATA_STALAGG_BOSS = 108,
DATA_FEUGEN_BOSS = 109,
DATA_THADDIUS_GATE = 110,
DATA_GOTHIK_ENTER_GATE = 111,
DATA_GOTHIK_INNER_GATE = 112,
DATA_GOTHIK_EXIT_GATE = 113,
DATA_HORSEMEN_GATE = 114,
DATA_LICH_KING_BOSS = 115,
DATA_KELTHUZAD_FLOOR = 116,
DATA_ABOMINATION_KILLED = 117,
DATA_FRENZY_REMOVED = 118,
DATA_CHARGES_CROSSED = 119,
DATA_SPORE_KILLED = 120,
DATA_HUNDRED_CLUB = 121,
DATA_DANCE_FAIL = 122,
DATA_IMMORTAL_FAIL = 123,
DATA_KELTHUZAD_GATE = 124,
DATA_HAD_THADDIUS_GREET = 125,
DATA_KELTHUZAD_PORTAL_1 = 126,
DATA_KELTHUZAD_PORTAL_2 = 127,
DATA_KELTHUZAD_PORTAL_3 = 128,
DATA_KELTHUZAD_PORTAL_4 = 129
DATA_GOTHIK_BOSS = 111,
DATA_GOTHIK_ENTER_GATE = 112,
DATA_GOTHIK_INNER_GATE = 113,
DATA_GOTHIK_EXIT_GATE = 114,
DATA_HORSEMEN_GATE = 115,
DATA_LICH_KING_BOSS = 116,
DATA_KELTHUZAD_FLOOR = 117,
DATA_ABOMINATION_KILLED = 118,
DATA_FRENZY_REMOVED = 119,
DATA_CHARGES_CROSSED = 120,
DATA_SPORE_KILLED = 121,
DATA_HUNDRED_CLUB = 122,
DATA_DANCE_FAIL = 123,
DATA_IMMORTAL_FAIL = 124,
DATA_KELTHUZAD_GATE = 125,
DATA_HAD_THADDIUS_GREET = 126,
DATA_KELTHUZAD_PORTAL_1 = 127,
DATA_KELTHUZAD_PORTAL_2 = 128,
DATA_KELTHUZAD_PORTAL_3 = 129,
DATA_KELTHUZAD_PORTAL_4 = 130
};
enum NXGOs
@@ -162,6 +163,9 @@ enum NXNPCs
NPC_LIVING_MONSTROSITY = 16021,
NPC_SURGICAL_ASSIST = 16022,
NPC_SLUDGE_BELCHER = 16029,
// Gothik
NPC_GOTHIK = 16060
};
enum NXMisc
@@ -15,6 +15,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "oculus.h"
#include "CombatAI.h"
#include "CreatureScript.h"
#include "InstanceScript.h"
@@ -27,7 +28,6 @@
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "Vehicle.h"
#include "oculus.h"
#include <unordered_map>
enum Drakes
@@ -15,20 +15,20 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ulduar.h"
#include "AreaTriggerScript.h"
#include "CombatAI.h"
#include "CreatureScript.h"
#include "GameObjectScript.h"
#include "PassiveAI.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "PassiveAI.h"
#include "ScriptedGossip.h"
#include "SpellAuraEffects.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "TaskScheduler.h"
#include "Vehicle.h"
#include "ulduar.h"
enum Texts
{
@@ -15,12 +15,12 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "utgarde_keep.h"
#include "CreatureScript.h"
#include "GameObjectAI.h"
#include "ScriptedCreature.h"
#include "SpellScriptLoader.h"
#include "Vehicle.h"
#include "utgarde_keep.h"
class npc_dragonflayer_forge_master : public CreatureScript
{
@@ -15,11 +15,11 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "utgarde_pinnacle.h"
#include "SpellInfo.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "Unit.h"
#include "utgarde_pinnacle.h"
enum UtgardeSpells
{
@@ -121,7 +121,7 @@ public:
if (!PlayerList.IsEmpty())
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
if (Player* player = i->GetSource())
player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, player->m_homebindO);
player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, player->GetOrientation());
}
}
}
@@ -15,6 +15,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "violet_hold.h"
#include "CreatureScript.h"
#include "GameObjectScript.h"
#include "PassiveAI.h"
@@ -24,7 +25,6 @@
#include "ScriptedGossip.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "violet_hold.h"
/// @todo: Missing Sinclari Trigger announcements (32204) Look at its creature_text for more info.
/// @todo: Activation Crystals (go_vh_activation_crystal) (193611) are spammable, should be a 1 time use per crystal.
@@ -16,8 +16,8 @@
*/
#include "CreatureScript.h"
#include "Player.h"
#include "MoveSplineInit.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "World.h"
@@ -22,6 +22,7 @@
#include "CreatureScript.h"
#include "CreatureTextMgr.h"
#include "GameObjectScript.h"
#include "GridNotifiersImpl.h"
#include "PassiveAI.h"
#include "Player.h"
#include "ScriptedCreature.h"
@@ -30,7 +31,6 @@
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "Vehicle.h"
#include "GridNotifiersImpl.h"
// Ours
/********
@@ -17,15 +17,15 @@
#include "OutdoorPvPNA.h"
#include "CreatureScript.h"
#include "GridNotifiers.h"
#include "ScriptedCreature.h"
#include "GameGraveyard.h"
#include "GridNotifiers.h"
#include "Language.h"
#include "MapMgr.h"
#include "ObjectMgr.h"
#include "OutdoorPvPMgr.h"
#include "OutdoorPvPScript.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "World.h"
#include "WorldPacket.h"
@@ -19,10 +19,10 @@
#include "InstanceMapScript.h"
#include "InstanceScript.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "SpellScriptLoader.h"
#include "TemporarySummon.h"
#include "serpent_shrine.h"
#include "ScriptedCreature.h"
DoorData const doorData[] =
{
@@ -15,13 +15,12 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "CreatureScript.h"
#include "GameObjectScript.h"
#include "ScriptMgr.h"
#include "Containers.h"
#include "CreatureScript.h"
#include "CreatureTextMgr.h"
#include "GameObject.h"
#include "GameObjectAI.h"
#include "GameObjectScript.h"
#include "Group.h"
#include "InstanceScript.h"
#include "LFGMgr.h"
@@ -30,6 +29,7 @@
#include "ObjectAccessor.h"
#include "PassiveAI.h"
#include "Player.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "SpellAuraEffects.h"
@@ -15,13 +15,13 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <cmath>
#include "CreatureScript.h"
#include "MoveSplineInit.h"
#include "ScriptedCreature.h"
#include "SpellScriptLoader.h"
#include "WaypointMgr.h"
#include "the_eye.h"
#include <cmath>
enum Spells
{
@@ -15,10 +15,10 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "arcatraz.h"
#include "CreatureScript.h"
#include "ScriptedCreature.h"
#include "SpellScriptLoader.h"
#include "arcatraz.h"
enum MillhouseSays
{
+1 -1
View File
@@ -3973,7 +3973,7 @@ class spell_item_eye_of_grillok_aura : public AuraScript
return ValidateSpellInfo({ SPELL_EYE_OF_GRILLOK });
}
void OnPeriodic(AuraEffect const* aurEff)
void OnPeriodic(AuraEffect const* /*aurEff*/)
{
Unit* caster = GetCaster();
if (!caster || !GetTarget())
+1 -1
View File
@@ -20,10 +20,10 @@
#include "DeadlineTimer.h"
#include "Define.h"
#include "Socket.h"
#include "Errors.h"
#include "IoContext.h"
#include "Log.h"
#include "Socket.h"
#include "Timer.h"
#include <atomic>
#include <boost/asio/ip/tcp.hpp>
+1 -1
View File
@@ -21,8 +21,8 @@
#include "Log.h"
#include "MessageBuffer.h"
#include <atomic>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <functional>
#include <memory>
#include <queue>