diff --git a/data/sql/updates/pending_db_world/rev_1719659662833833500.sql b/data/sql/updates/db_world/2024_06_29_08.sql similarity index 82% rename from data/sql/updates/pending_db_world/rev_1719659662833833500.sql rename to data/sql/updates/db_world/2024_06_29_08.sql index f8217af02..a75871175 100644 --- a/data/sql/updates/pending_db_world/rev_1719659662833833500.sql +++ b/data/sql/updates/db_world/2024_06_29_08.sql @@ -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)); diff --git a/data/sql/updates/db_world/2024_06_29_09.sql b/data/sql/updates/db_world/2024_06_29_09.sql new file mode 100644 index 000000000..5c4c7a853 --- /dev/null +++ b/data/sql/updates/db_world/2024_06_29_09.sql @@ -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) +); diff --git a/data/sql/updates/db_world/2024_06_29_10.sql b/data/sql/updates/db_world/2024_06_29_10.sql new file mode 100644 index 000000000..f9d86e841 --- /dev/null +++ b/data/sql/updates/db_world/2024_06_29_10.sql @@ -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\''); diff --git a/data/sql/updates/db_world/2024_06_29_11.sql b/data/sql/updates/db_world/2024_06_29_11.sql new file mode 100644 index 000000000..9bfefec09 --- /dev/null +++ b/data/sql/updates/db_world/2024_06_29_11.sql @@ -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'); diff --git a/data/sql/updates/db_world/2024_07_01_00.sql b/data/sql/updates/db_world/2024_07_01_00.sql new file mode 100644 index 000000000..52aad89c3 --- /dev/null +++ b/data/sql/updates/db_world/2024_07_01_00.sql @@ -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]'); diff --git a/data/sql/updates/db_world/2024_07_01_01.sql b/data/sql/updates/db_world/2024_07_01_01.sql new file mode 100644 index 000000000..035a6c715 --- /dev/null +++ b/data/sql/updates/db_world/2024_07_01_01.sql @@ -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.'); diff --git a/data/sql/updates/db_world/2024_07_02_00.sql b/data/sql/updates/db_world/2024_07_02_00.sql new file mode 100644 index 000000000..dc6bdbcd5 --- /dev/null +++ b/data/sql/updates/db_world/2024_07_02_00.sql @@ -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; diff --git a/data/sql/updates/pending_db_character/rev_1719945200692175000.sql b/data/sql/updates/pending_db_character/rev_1719945200692175000.sql new file mode 100644 index 000000000..93b01738b --- /dev/null +++ b/data/sql/updates/pending_db_character/rev_1719945200692175000.sql @@ -0,0 +1,4 @@ +-- + +ALTER TABLE `character_homebind` + DROP COLUMN `posO`; diff --git a/src/server/apps/authserver/Server/AuthSocketMgr.h b/src/server/apps/authserver/Server/AuthSocketMgr.h index c6cb27f4f..5ceaeeacb 100644 --- a/src/server/apps/authserver/Server/AuthSocketMgr.h +++ b/src/server/apps/authserver/Server/AuthSocketMgr.h @@ -19,8 +19,8 @@ #define AuthSocketMgr_h__ #include "AuthSession.h" -#include "SocketMgr.h" #include "Config.h" +#include "SocketMgr.h" class AuthSocketMgr : public SocketMgr { diff --git a/src/server/apps/worldserver/worldserver.conf.dist b/src/server/apps/worldserver/worldserver.conf.dist index c63669e70..2a8a16ee4 100644 --- a/src/server/apps/worldserver/worldserver.conf.dist +++ b/src/server/apps/worldserver/worldserver.conf.dist @@ -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 diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index eaa1ffc10..f21af3aa9 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -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); diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp index 03986cb19..9f5ca8fa5 100644 --- a/src/server/game/Battlegrounds/ArenaTeam.cpp +++ b/src/server/game/Battlegrounds/ArenaTeam.cpp @@ -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; diff --git a/src/server/game/DungeonFinding/LFGScripts.cpp b/src/server/game/DungeonFinding/LFGScripts.cpp index 36fd9bfb3..27081db22 100644 --- a/src/server/game/DungeonFinding/LFGScripts.cpp +++ b/src/server/game/DungeonFinding/LFGScripts.cpp @@ -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; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 81e8bc978..24a8faa95 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -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) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 12863bb89..3f3eb95c9 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2349,7 +2349,6 @@ public: float m_homebindX; float m_homebindY; float m_homebindZ; - float m_homebindO; [[nodiscard]] WorldLocation GetStartPosition() const; diff --git a/src/server/game/Entities/Player/PlayerStorage.cpp b/src/server/game/Entities/Player/PlayerStorage.cpp index 553cc2506..7a3e35fcf 100644 --- a/src/server/game/Entities/Player/PlayerStorage.cpp +++ b/src/server/game/Entities/Player/PlayerStorage.cpp @@ -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(); // 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(); - 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(); m_homebindY = fields[3].Get(); m_homebindZ = fields[4].Get(); - m_homebindO = fields[5].Get(); 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; } diff --git a/src/server/game/Entities/Player/PlayerUpdates.cpp b/src/server/game/Entities/Player/PlayerUpdates.cpp index 91e62941c..04f04e0d7 100644 --- a/src/server/game/Entities/Player/PlayerUpdates.cpp +++ b/src/server/game/Entities/Player/PlayerUpdates.cpp @@ -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)) { diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 162833c16..cd00e46b3 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -36,7 +36,6 @@ #include "LFGMgr.h" #include "Log.h" #include "MapMgr.h" -#include #include "Pet.h" #include "PoolMgr.h" #include "ReputationMgr.h" @@ -53,6 +52,7 @@ #include "Vehicle.h" #include "World.h" #include +#include 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; } diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 385ceb966..6d16f25b5 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -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 ProfanityNamesContainer; - ReservedNamesContainer _profanityNamesStore; + ProfanityNamesContainer _profanityNamesStore; GameTeleContainer _gameTeleStore; diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 9e4e81470..25e57d410 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -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; } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 6be1668da..53c476b90 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -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_ptrSetData(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); diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index df7272d68..c93b0c1b6 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -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) diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 5ca058eb6..babfb01fc 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -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; } diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index bf0ab70fa..9c0b4d4a6 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -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(); diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp index ac3699bc1..41d553ed0 100644 --- a/src/server/game/Handlers/PetitionsHandler.cpp +++ b/src/server/game/Handlers/PetitionsHandler.cpp @@ -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; diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 1f93e2093..d78da716b 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -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()); } } } diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 88dfbeb11..f2ccc2724 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -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, diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 3e1a543a8..22738ea99 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -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" diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index a2e8e5dcd..523c36913 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -30,8 +30,8 @@ #include "ScriptMgr.h" #include "World.h" #include "WorldSession.h" -#include #include "zlib.h" +#include using boost::asio::ip::tcp; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index fdbc50c71..06301226b 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -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) diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp index 4fceae1bc..f75316ef2 100644 --- a/src/server/game/Spells/SpellInfoCorrections.cpp +++ b/src/server/game/Spells/SpellInfoCorrections.cpp @@ -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 diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 2b3e35fee..353369583 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -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(); diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index 9122c06f4..e04c96904 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -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; } diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp index 254ff7df4..8b1e6182c 100644 --- a/src/server/scripts/Commands/cs_guild.cpp +++ b/src/server/scripts/Commands/cs_guild.cpp @@ -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; diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp index ac66d0dba..0ad9752bb 100644 --- a/src/server/scripts/Commands/cs_lookup.cpp +++ b/src/server/scripts/Commands/cs_lookup.cpp @@ -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; diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index a414f8a66..c5dabb940 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -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; } diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 76aeaebea..2f7b800db 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -687,10 +687,11 @@ public: ObjectGuid::LowType guid = fields[0].Get(); uint32 entry = fields[1].Get(); //uint32 entry2 = fields[2].Get(); - float x = fields[3].Get(); - float y = fields[4].Get(); - float z = fields[5].Get(); - uint16 mapId = fields[6].Get(); + //uint32 entry3 = fields[3].Get(); + float x = fields[4].Get(); + float y = fields[5].Get(); + float z = fields[6].Get(); + uint16 mapId = fields[7].Get(); CreatureTemplate const* creatureTemplate = sObjectMgr->GetCreatureTemplate(entry); if (!creatureTemplate) diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index d73ef896b..1cd1e0a23 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -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; } diff --git a/src/server/scripts/Commands/cs_tele.cpp b/src/server/scripts/Commands/cs_tele.cpp index 2acf9c7b0..01cfd6f75 100644 --- a/src/server/scripts/Commands/cs_tele.cpp +++ b/src/server/scripts/Commands/cs_tele.cpp @@ -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); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.cpp index 8f94b53ad..cd7cde58b 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.cpp @@ -15,12 +15,12 @@ * with this program. If not, see . */ +#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 { diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp index c0dbd8fdc..8b30cb139 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp @@ -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 diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index 410e262d1..35c480498 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -15,6 +15,7 @@ * with this program. If not, see . */ +#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 diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_apothecary_hummel.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_apothecary_hummel.cpp index 976383abd..9d9df6d45 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_apothecary_hummel.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_apothecary_hummel.cpp @@ -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 { diff --git a/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp b/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp index 9ab3451f5..8a5608901 100644 --- a/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp @@ -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); } diff --git a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp index 54d31091a..d6bd6de41 100644 --- a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp +++ b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp @@ -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: diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp index 8a67b19fc..41e93d9cc 100644 --- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp +++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp @@ -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); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp index a5c7c4e0b..b527b96b7 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp @@ -15,13 +15,13 @@ * with this program. If not, see . */ +#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 { diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp index 031f98efb..1228665c7 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp @@ -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(); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index 62eb71097..34d43737f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -15,12 +15,12 @@ * with this program. If not, see . */ +#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 { diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.cpp index 80d7390a3..6a3acc6b8 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.cpp @@ -15,11 +15,11 @@ * with this program. If not, see . */ +#include "ruins_of_ahnqiraj.h" #include "CreatureScript.h" #include "ScriptedCreature.h" #include "SpellScript.h" #include "SpellScriptLoader.h" -#include "ruins_of_ahnqiraj.h" enum Spells { diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp index b44ed7876..4c8a68ded 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp @@ -15,6 +15,7 @@ * with this program. If not, see . */ +#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 { diff --git a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp index f2de81202..c15a77ba2 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp +++ b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp @@ -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 { diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp index 8834b21f8..521552dc2 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp @@ -15,13 +15,13 @@ * with this program. If not, see . */ +#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 { diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index 7ab37b5be..f68f9fe1c 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -15,11 +15,11 @@ * with this program. If not, see . */ +#include "halls_of_reflection.h" #include "AreaTriggerScript.h" #include "CreatureScript.h" #include "MotionMaster.h" #include "SpellScriptLoader.h" -#include "halls_of_reflection.h" enum Events { diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp index eb11f3bcd..35901db4d 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp @@ -15,6 +15,7 @@ * with this program. If not, see . */ +#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 { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index 2ec36b0f9..51bf4d127 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -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("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); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 901d3af98..71beac42d 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -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 { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index a8e4c3ce8..08d1b77de 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -15,12 +15,14 @@ * with this program. If not, see . */ +#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 { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index 3b429b6eb..6fc6e5d46 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -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, diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 165fde334..43df1ceaa 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -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 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index 033e2e871..6e0d2dd98 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -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); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.h b/src/server/scripts/Northrend/Naxxramas/boss_gothik.h index af0d7e28a..4b7cefb02 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.h +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.h @@ -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 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 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::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); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp index a7ccb4c90..73444bdc0 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp @@ -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" diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index ed4686ba5..2f45192b7 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -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: diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h index dcbeb811f..256ca8633 100644 --- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h +++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h @@ -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 diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp index 860a92fd9..f869afa23 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp @@ -15,6 +15,7 @@ * with this program. If not, see . */ +#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 enum Drakes diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp index 51c37e94e..b6ce8bbe3 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp @@ -15,20 +15,20 @@ * with this program. If not, see . */ +#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 { diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp index 6d755edd0..2b1ca9868 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp @@ -15,12 +15,12 @@ * with this program. If not, see . */ +#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 { diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.cpp index 64d4e6cb0..17473fcbb 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.cpp @@ -15,11 +15,11 @@ * with this program. If not, see . */ +#include "utgarde_pinnacle.h" #include "SpellInfo.h" #include "SpellScript.h" #include "SpellScriptLoader.h" #include "Unit.h" -#include "utgarde_pinnacle.h" enum UtgardeSpells { diff --git a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp index 3cbb74cf2..25bb5ba51 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp @@ -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()); } } } diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index 976ad2be5..ba2e92fd9 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -15,6 +15,7 @@ * with this program. If not, see . */ +#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. diff --git a/src/server/scripts/Northrend/zone_dalaran.cpp b/src/server/scripts/Northrend/zone_dalaran.cpp index b1740c85d..9085eeeb3 100644 --- a/src/server/scripts/Northrend/zone_dalaran.cpp +++ b/src/server/scripts/Northrend/zone_dalaran.cpp @@ -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" diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index 5bf65ef68..0fcc2a8ed 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -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 /******** diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp index 19fa233fe..dfa807ce7 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp @@ -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" diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp index aa8f213af..54ee662b5 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp @@ -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[] = { diff --git a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp index ab80dc84f..940f36955 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp @@ -15,13 +15,12 @@ * with this program. If not, see . */ -#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" diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp index cb1747c1e..7e17bbf66 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -15,13 +15,13 @@ * with this program. If not, see . */ -#include #include "CreatureScript.h" #include "MoveSplineInit.h" #include "ScriptedCreature.h" #include "SpellScriptLoader.h" #include "WaypointMgr.h" #include "the_eye.h" +#include enum Spells { diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp index fbe462b86..1fabae440 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp @@ -15,10 +15,10 @@ * with this program. If not, see . */ +#include "arcatraz.h" #include "CreatureScript.h" #include "ScriptedCreature.h" #include "SpellScriptLoader.h" -#include "arcatraz.h" enum MillhouseSays { diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index d8910295c..654d14a63 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -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()) diff --git a/src/server/shared/Network/NetworkThread.h b/src/server/shared/Network/NetworkThread.h index 25be6790e..d71cee51f 100644 --- a/src/server/shared/Network/NetworkThread.h +++ b/src/server/shared/Network/NetworkThread.h @@ -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 #include diff --git a/src/server/shared/Network/Socket.h b/src/server/shared/Network/Socket.h index af948618e..51513ba97 100644 --- a/src/server/shared/Network/Socket.h +++ b/src/server/shared/Network/Socket.h @@ -21,8 +21,8 @@ #include "Log.h" #include "MessageBuffer.h" #include -#include #include +#include #include #include #include